Register a business for caller ID
Registers one business and its numbers with Twilio in one call. It runs the same checks as the dashboard form: the business must be yours, each number must be held by it, and every detail must pass.
No one is signed in to tick “I’m authorised”, so you name the person who confirmed the details in confirmedBy. They are kept with the submission as its consent record. The business’s own representative goes in details and is sent to Twilio.
Leave out numbers to register every number the summary marks supported for this business. Numbers held in two Twilio accounts need one call per account, each naming its numbers.
Sending the same submissionId again returns the registration it created, so a retry after a timeout never registers twice. The answer is 202: the registration is queued, and Twilio reviews it over the following days. Read the summary to follow it.
One EIN is registered once per Twilio account. When another of your businesses with the same EIN is already registered there, such as a second location of one company, the call answers 409 identity_conflict. Send it again with linkExisting: true to add this business’s numbers to that registration. They then use its details and caller name, and linked is true in the answer.
Required API key scope: phone_numbers:write.
curl --request POST \
--url https://api.teamfollowup.ai/api/phone-trust/businesses/{locationId}/registration \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"submissionId": "9b1d2f6e-4c3a-4e8b-a1d0-7c5e2f9a3b14",
"authorized": true,
"termsVersion": "caller-trust-2026-10-10",
"confirmedBy": {
"name": "Pat Partner",
"email": "pat@agency.example",
"title": "Operations lead"
},
"futureNumbers": true,
"details": {
"legalName": "Forge Fitness LLC",
"businessType": "Limited Liability Corporation",
"industry": "CONSUMER",
"identifierType": "EIN",
"identifier": "123456789",
"website": "https://forge.example",
"street": "1 Main St",
"city": "Newtown",
"region": "PA",
"postalCode": "18940",
"country": "US",
"operatingRegion": "USA_AND_CANADA",
"callerName": "FORGE PT",
"firstName": "Jane",
"lastName": "Doe",
"email": "jane@forge.example",
"phone": "+12155550100",
"businessTitle": "Owner",
"jobPosition": "CEO",
"useCase": "Lead Nurturing",
"employeeCount": "8",
"dailyCalls": "40"
}
}'import requests
url = "https://api.teamfollowup.ai/api/phone-trust/businesses/{locationId}/registration"
payload = {
"submissionId": "9b1d2f6e-4c3a-4e8b-a1d0-7c5e2f9a3b14",
"authorized": True,
"termsVersion": "caller-trust-2026-10-10",
"confirmedBy": {
"name": "Pat Partner",
"email": "pat@agency.example",
"title": "Operations lead"
},
"details": {
"legalName": "Forge Fitness LLC",
"businessType": "Limited Liability Corporation",
"industry": "CONSUMER",
"identifierType": "EIN",
"identifier": "123456789",
"website": "https://forge.example",
"street": "1 Main St",
"city": "Newtown",
"region": "PA",
"postalCode": "18940",
"country": "US",
"operatingRegion": "USA_AND_CANADA",
"callerName": "FORGE PT",
"firstName": "Jane",
"lastName": "Doe",
"email": "jane@forge.example",
"phone": "+12155550100",
"businessTitle": "Owner",
"jobPosition": "CEO",
"useCase": "Lead Nurturing",
"employeeCount": "8",
"dailyCalls": "40"
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
submissionId: '9b1d2f6e-4c3a-4e8b-a1d0-7c5e2f9a3b14',
authorized: true,
termsVersion: 'caller-trust-2026-10-10',
confirmedBy: {name: 'Pat Partner', email: 'pat@agency.example', title: 'Operations lead'},
details: {
legalName: 'Forge Fitness LLC',
businessType: 'Limited Liability Corporation',
industry: 'CONSUMER',
identifierType: 'EIN',
identifier: '123456789',
website: 'https://forge.example',
street: '1 Main St',
city: 'Newtown',
region: 'PA',
postalCode: '18940',
country: 'US',
operatingRegion: 'USA_AND_CANADA',
callerName: 'FORGE PT',
firstName: 'Jane',
lastName: 'Doe',
email: 'jane@forge.example',
phone: '+12155550100',
businessTitle: 'Owner',
jobPosition: 'CEO',
useCase: 'Lead Nurturing',
employeeCount: '8',
dailyCalls: '40'
}
})
};
fetch('https://api.teamfollowup.ai/api/phone-trust/businesses/{locationId}/registration', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.teamfollowup.ai/api/phone-trust/businesses/{locationId}/registration",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'submissionId' => '9b1d2f6e-4c3a-4e8b-a1d0-7c5e2f9a3b14',
'authorized' => true,
'termsVersion' => 'caller-trust-2026-10-10',
'confirmedBy' => [
'name' => 'Pat Partner',
'email' => 'pat@agency.example',
'title' => 'Operations lead'
],
'details' => [
'legalName' => 'Forge Fitness LLC',
'businessType' => 'Limited Liability Corporation',
'industry' => 'CONSUMER',
'identifierType' => 'EIN',
'identifier' => '123456789',
'website' => 'https://forge.example',
'street' => '1 Main St',
'city' => 'Newtown',
'region' => 'PA',
'postalCode' => '18940',
'country' => 'US',
'operatingRegion' => 'USA_AND_CANADA',
'callerName' => 'FORGE PT',
'firstName' => 'Jane',
'lastName' => 'Doe',
'email' => 'jane@forge.example',
'phone' => '+12155550100',
'businessTitle' => 'Owner',
'jobPosition' => 'CEO',
'useCase' => 'Lead Nurturing',
'employeeCount' => '8',
'dailyCalls' => '40'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.teamfollowup.ai/api/phone-trust/businesses/{locationId}/registration"
payload := strings.NewReader("{\n \"submissionId\": \"9b1d2f6e-4c3a-4e8b-a1d0-7c5e2f9a3b14\",\n \"authorized\": true,\n \"termsVersion\": \"caller-trust-2026-10-10\",\n \"confirmedBy\": {\n \"name\": \"Pat Partner\",\n \"email\": \"pat@agency.example\",\n \"title\": \"Operations lead\"\n },\n \"details\": {\n \"legalName\": \"Forge Fitness LLC\",\n \"businessType\": \"Limited Liability Corporation\",\n \"industry\": \"CONSUMER\",\n \"identifierType\": \"EIN\",\n \"identifier\": \"123456789\",\n \"website\": \"https://forge.example\",\n \"street\": \"1 Main St\",\n \"city\": \"Newtown\",\n \"region\": \"PA\",\n \"postalCode\": \"18940\",\n \"country\": \"US\",\n \"operatingRegion\": \"USA_AND_CANADA\",\n \"callerName\": \"FORGE PT\",\n \"firstName\": \"Jane\",\n \"lastName\": \"Doe\",\n \"email\": \"jane@forge.example\",\n \"phone\": \"+12155550100\",\n \"businessTitle\": \"Owner\",\n \"jobPosition\": \"CEO\",\n \"useCase\": \"Lead Nurturing\",\n \"employeeCount\": \"8\",\n \"dailyCalls\": \"40\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.teamfollowup.ai/api/phone-trust/businesses/{locationId}/registration")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"submissionId\": \"9b1d2f6e-4c3a-4e8b-a1d0-7c5e2f9a3b14\",\n \"authorized\": true,\n \"termsVersion\": \"caller-trust-2026-10-10\",\n \"confirmedBy\": {\n \"name\": \"Pat Partner\",\n \"email\": \"pat@agency.example\",\n \"title\": \"Operations lead\"\n },\n \"details\": {\n \"legalName\": \"Forge Fitness LLC\",\n \"businessType\": \"Limited Liability Corporation\",\n \"industry\": \"CONSUMER\",\n \"identifierType\": \"EIN\",\n \"identifier\": \"123456789\",\n \"website\": \"https://forge.example\",\n \"street\": \"1 Main St\",\n \"city\": \"Newtown\",\n \"region\": \"PA\",\n \"postalCode\": \"18940\",\n \"country\": \"US\",\n \"operatingRegion\": \"USA_AND_CANADA\",\n \"callerName\": \"FORGE PT\",\n \"firstName\": \"Jane\",\n \"lastName\": \"Doe\",\n \"email\": \"jane@forge.example\",\n \"phone\": \"+12155550100\",\n \"businessTitle\": \"Owner\",\n \"jobPosition\": \"CEO\",\n \"useCase\": \"Lead Nurturing\",\n \"employeeCount\": \"8\",\n \"dailyCalls\": \"40\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.teamfollowup.ai/api/phone-trust/businesses/{locationId}/registration")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"submissionId\": \"9b1d2f6e-4c3a-4e8b-a1d0-7c5e2f9a3b14\",\n \"authorized\": true,\n \"termsVersion\": \"caller-trust-2026-10-10\",\n \"confirmedBy\": {\n \"name\": \"Pat Partner\",\n \"email\": \"pat@agency.example\",\n \"title\": \"Operations lead\"\n },\n \"details\": {\n \"legalName\": \"Forge Fitness LLC\",\n \"businessType\": \"Limited Liability Corporation\",\n \"industry\": \"CONSUMER\",\n \"identifierType\": \"EIN\",\n \"identifier\": \"123456789\",\n \"website\": \"https://forge.example\",\n \"street\": \"1 Main St\",\n \"city\": \"Newtown\",\n \"region\": \"PA\",\n \"postalCode\": \"18940\",\n \"country\": \"US\",\n \"operatingRegion\": \"USA_AND_CANADA\",\n \"callerName\": \"FORGE PT\",\n \"firstName\": \"Jane\",\n \"lastName\": \"Doe\",\n \"email\": \"jane@forge.example\",\n \"phone\": \"+12155550100\",\n \"businessTitle\": \"Owner\",\n \"jobPosition\": \"CEO\",\n \"useCase\": \"Lead Nurturing\",\n \"employeeCount\": \"8\",\n \"dailyCalls\": \"40\"\n }\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"registration": {
"id": "3f2b8c1e-7d4a-4f8e-9b6a-2c1d0e5f7a9b",
"locationId": "Cc6UY6Z5DiCwMgnwF0av",
"ownerType": "business",
"businessName": "Forge Fitness LLC",
"state": "queued",
"version": 4,
"profile": null,
"products": {
"shakenStir": {
"status": "pending",
"checkedAt": null,
"reason": null
},
"cnam": {
"status": "pending",
"checkedAt": null,
"reason": null
},
"voiceIntegrity": {
"status": "pending",
"checkedAt": null,
"reason": null
}
},
"futureNumbersEnabled": true,
"numbers": [
"+16093551813"
],
"submittedAt": "2026-10-30T12:00:00.000Z",
"nextCheckAt": "2026-10-30T12:00:00.000Z",
"problem": null
},
"excluded": []
}Authorizations
Path Parameters
Body
Response
Queued for Twilio, or the registration a repeated submissionId already created.
curl --request POST \
--url https://api.teamfollowup.ai/api/phone-trust/businesses/{locationId}/registration \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"submissionId": "9b1d2f6e-4c3a-4e8b-a1d0-7c5e2f9a3b14",
"authorized": true,
"termsVersion": "caller-trust-2026-10-10",
"confirmedBy": {
"name": "Pat Partner",
"email": "pat@agency.example",
"title": "Operations lead"
},
"futureNumbers": true,
"details": {
"legalName": "Forge Fitness LLC",
"businessType": "Limited Liability Corporation",
"industry": "CONSUMER",
"identifierType": "EIN",
"identifier": "123456789",
"website": "https://forge.example",
"street": "1 Main St",
"city": "Newtown",
"region": "PA",
"postalCode": "18940",
"country": "US",
"operatingRegion": "USA_AND_CANADA",
"callerName": "FORGE PT",
"firstName": "Jane",
"lastName": "Doe",
"email": "jane@forge.example",
"phone": "+12155550100",
"businessTitle": "Owner",
"jobPosition": "CEO",
"useCase": "Lead Nurturing",
"employeeCount": "8",
"dailyCalls": "40"
}
}'import requests
url = "https://api.teamfollowup.ai/api/phone-trust/businesses/{locationId}/registration"
payload = {
"submissionId": "9b1d2f6e-4c3a-4e8b-a1d0-7c5e2f9a3b14",
"authorized": True,
"termsVersion": "caller-trust-2026-10-10",
"confirmedBy": {
"name": "Pat Partner",
"email": "pat@agency.example",
"title": "Operations lead"
},
"details": {
"legalName": "Forge Fitness LLC",
"businessType": "Limited Liability Corporation",
"industry": "CONSUMER",
"identifierType": "EIN",
"identifier": "123456789",
"website": "https://forge.example",
"street": "1 Main St",
"city": "Newtown",
"region": "PA",
"postalCode": "18940",
"country": "US",
"operatingRegion": "USA_AND_CANADA",
"callerName": "FORGE PT",
"firstName": "Jane",
"lastName": "Doe",
"email": "jane@forge.example",
"phone": "+12155550100",
"businessTitle": "Owner",
"jobPosition": "CEO",
"useCase": "Lead Nurturing",
"employeeCount": "8",
"dailyCalls": "40"
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
submissionId: '9b1d2f6e-4c3a-4e8b-a1d0-7c5e2f9a3b14',
authorized: true,
termsVersion: 'caller-trust-2026-10-10',
confirmedBy: {name: 'Pat Partner', email: 'pat@agency.example', title: 'Operations lead'},
details: {
legalName: 'Forge Fitness LLC',
businessType: 'Limited Liability Corporation',
industry: 'CONSUMER',
identifierType: 'EIN',
identifier: '123456789',
website: 'https://forge.example',
street: '1 Main St',
city: 'Newtown',
region: 'PA',
postalCode: '18940',
country: 'US',
operatingRegion: 'USA_AND_CANADA',
callerName: 'FORGE PT',
firstName: 'Jane',
lastName: 'Doe',
email: 'jane@forge.example',
phone: '+12155550100',
businessTitle: 'Owner',
jobPosition: 'CEO',
useCase: 'Lead Nurturing',
employeeCount: '8',
dailyCalls: '40'
}
})
};
fetch('https://api.teamfollowup.ai/api/phone-trust/businesses/{locationId}/registration', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.teamfollowup.ai/api/phone-trust/businesses/{locationId}/registration",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'submissionId' => '9b1d2f6e-4c3a-4e8b-a1d0-7c5e2f9a3b14',
'authorized' => true,
'termsVersion' => 'caller-trust-2026-10-10',
'confirmedBy' => [
'name' => 'Pat Partner',
'email' => 'pat@agency.example',
'title' => 'Operations lead'
],
'details' => [
'legalName' => 'Forge Fitness LLC',
'businessType' => 'Limited Liability Corporation',
'industry' => 'CONSUMER',
'identifierType' => 'EIN',
'identifier' => '123456789',
'website' => 'https://forge.example',
'street' => '1 Main St',
'city' => 'Newtown',
'region' => 'PA',
'postalCode' => '18940',
'country' => 'US',
'operatingRegion' => 'USA_AND_CANADA',
'callerName' => 'FORGE PT',
'firstName' => 'Jane',
'lastName' => 'Doe',
'email' => 'jane@forge.example',
'phone' => '+12155550100',
'businessTitle' => 'Owner',
'jobPosition' => 'CEO',
'useCase' => 'Lead Nurturing',
'employeeCount' => '8',
'dailyCalls' => '40'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.teamfollowup.ai/api/phone-trust/businesses/{locationId}/registration"
payload := strings.NewReader("{\n \"submissionId\": \"9b1d2f6e-4c3a-4e8b-a1d0-7c5e2f9a3b14\",\n \"authorized\": true,\n \"termsVersion\": \"caller-trust-2026-10-10\",\n \"confirmedBy\": {\n \"name\": \"Pat Partner\",\n \"email\": \"pat@agency.example\",\n \"title\": \"Operations lead\"\n },\n \"details\": {\n \"legalName\": \"Forge Fitness LLC\",\n \"businessType\": \"Limited Liability Corporation\",\n \"industry\": \"CONSUMER\",\n \"identifierType\": \"EIN\",\n \"identifier\": \"123456789\",\n \"website\": \"https://forge.example\",\n \"street\": \"1 Main St\",\n \"city\": \"Newtown\",\n \"region\": \"PA\",\n \"postalCode\": \"18940\",\n \"country\": \"US\",\n \"operatingRegion\": \"USA_AND_CANADA\",\n \"callerName\": \"FORGE PT\",\n \"firstName\": \"Jane\",\n \"lastName\": \"Doe\",\n \"email\": \"jane@forge.example\",\n \"phone\": \"+12155550100\",\n \"businessTitle\": \"Owner\",\n \"jobPosition\": \"CEO\",\n \"useCase\": \"Lead Nurturing\",\n \"employeeCount\": \"8\",\n \"dailyCalls\": \"40\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.teamfollowup.ai/api/phone-trust/businesses/{locationId}/registration")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"submissionId\": \"9b1d2f6e-4c3a-4e8b-a1d0-7c5e2f9a3b14\",\n \"authorized\": true,\n \"termsVersion\": \"caller-trust-2026-10-10\",\n \"confirmedBy\": {\n \"name\": \"Pat Partner\",\n \"email\": \"pat@agency.example\",\n \"title\": \"Operations lead\"\n },\n \"details\": {\n \"legalName\": \"Forge Fitness LLC\",\n \"businessType\": \"Limited Liability Corporation\",\n \"industry\": \"CONSUMER\",\n \"identifierType\": \"EIN\",\n \"identifier\": \"123456789\",\n \"website\": \"https://forge.example\",\n \"street\": \"1 Main St\",\n \"city\": \"Newtown\",\n \"region\": \"PA\",\n \"postalCode\": \"18940\",\n \"country\": \"US\",\n \"operatingRegion\": \"USA_AND_CANADA\",\n \"callerName\": \"FORGE PT\",\n \"firstName\": \"Jane\",\n \"lastName\": \"Doe\",\n \"email\": \"jane@forge.example\",\n \"phone\": \"+12155550100\",\n \"businessTitle\": \"Owner\",\n \"jobPosition\": \"CEO\",\n \"useCase\": \"Lead Nurturing\",\n \"employeeCount\": \"8\",\n \"dailyCalls\": \"40\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.teamfollowup.ai/api/phone-trust/businesses/{locationId}/registration")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"submissionId\": \"9b1d2f6e-4c3a-4e8b-a1d0-7c5e2f9a3b14\",\n \"authorized\": true,\n \"termsVersion\": \"caller-trust-2026-10-10\",\n \"confirmedBy\": {\n \"name\": \"Pat Partner\",\n \"email\": \"pat@agency.example\",\n \"title\": \"Operations lead\"\n },\n \"details\": {\n \"legalName\": \"Forge Fitness LLC\",\n \"businessType\": \"Limited Liability Corporation\",\n \"industry\": \"CONSUMER\",\n \"identifierType\": \"EIN\",\n \"identifier\": \"123456789\",\n \"website\": \"https://forge.example\",\n \"street\": \"1 Main St\",\n \"city\": \"Newtown\",\n \"region\": \"PA\",\n \"postalCode\": \"18940\",\n \"country\": \"US\",\n \"operatingRegion\": \"USA_AND_CANADA\",\n \"callerName\": \"FORGE PT\",\n \"firstName\": \"Jane\",\n \"lastName\": \"Doe\",\n \"email\": \"jane@forge.example\",\n \"phone\": \"+12155550100\",\n \"businessTitle\": \"Owner\",\n \"jobPosition\": \"CEO\",\n \"useCase\": \"Lead Nurturing\",\n \"employeeCount\": \"8\",\n \"dailyCalls\": \"40\"\n }\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"registration": {
"id": "3f2b8c1e-7d4a-4f8e-9b6a-2c1d0e5f7a9b",
"locationId": "Cc6UY6Z5DiCwMgnwF0av",
"ownerType": "business",
"businessName": "Forge Fitness LLC",
"state": "queued",
"version": 4,
"profile": null,
"products": {
"shakenStir": {
"status": "pending",
"checkedAt": null,
"reason": null
},
"cnam": {
"status": "pending",
"checkedAt": null,
"reason": null
},
"voiceIntegrity": {
"status": "pending",
"checkedAt": null,
"reason": null
}
},
"futureNumbersEnabled": true,
"numbers": [
"+16093551813"
],
"submittedAt": "2026-10-30T12:00:00.000Z",
"nextCheckAt": "2026-10-30T12:00:00.000Z",
"problem": null
},
"excluded": []
}