Onboard customers to Branded Calling using the Trust Hub API
Learn how to programmatically onboard your Independent Software Vendor (ISV) customers to Branded Calling by executing GET, POST, and PATCH requests on the Twilio Trust Hub API. You can use this guide to implement branded messaging and calling for voice notifications, outbound call centers, and sales dialers.
See Related reference documentation to learn more about the Trust Hub API resources used in this guide.
Private beta
The Trust Hub API resources for Branded Calling are in private beta, and the information contained in this document is subject to change. This means that some features aren't yet implemented and others may be changed before the product is declared as generally available. Private beta products aren't covered by a Service Level Agreement (SLA).
To request access, complete the request form.
- Compliance Regulations resource: The compliance requirements for Branded Calling in a specific country or type. Each Regulation specifies the required data fields, supporting documents, and validations.
- Compliance Registrations resource: A submission of required compliance data for a specific regulation and brand (Branded Calling bundle). It includes brand assets, tracks review and approval status, and enables associated phone numbers to display the brand information on the called party's mobile phone.
- ResourceAssignments subresource: A Twilio phone number assigned to a verified Compliance Registration. ResourceAssignments is a subresource of the Compliance Registrations resource.
- Compliance Documents resource: A Letter of Authorization (LOA) required for compliance verification. Customers must provide a signed LOA for their brand.
- Compliance DocumentLinks resource: A link that associates a LOA with a Compliance Registration.
To onboard your customer to Branded Calling, you'll do the following:
- Complete the prerequisites.
- Retrieve the Compliance Regulation for Branded Calling: Retrieve the latest country-specific requirements to see what information and documents you need before submitting your Compliance Registration.
- Create a Compliance Registration: Create a Compliance Registration and set up the brand's registration profile. Include all required information for review and approval.
- Upload a signed LOA: Upload the LOA signed by your customer for compliance verification.
- Link the LOA to the Compliance Registration: Link the uploaded LOA with the Compliance Registration you created.
- Assign a phone number to the Compliance Registration: Assign a phone number that will display the brand information once the Compliance Registration is approved.
- Submit the Compliance Registration for review: Submit the Compliance Registration for review. Twilio and carrier partners will verify the information provided.
- (Optional) Retrieve the submission status: Track the status of your submission (approved, rejected, in review).
When you submit your Compliance Registration, the review process follows these steps:
- Twilio reviews your submission and contacts you by email if you need to provide corrections or additional details to complete the approval process. You can track the current status of your submission by making an API request or checking the Twilio Console.
- After Twilio vets and approves your information, Twilio submits it to the carrier partner for secondary review and provisioning.
- After successful secondary review and provisioning, your phone numbers become active for Branded Calling, and recipients begin to see your brand information.
The review process takes about seven business days.
- Create a primary Business Profile and have it approved.
- For Basic Branded Calling, create a Voice Integrity and have it approved. Voice Integrity lets you register your phone numbers with analytic vendors to reduce spam labeling. Learn more about how to onboard Voice Integrity.
- Download the LOA template and obtain a signed LOA from your customer.
- Have an Address SID.
An Address resource represents the physical address of your business. You'll use the Address SID when creating a Compliance Registration (address.id). You can create or retrieve an existing Address SID by using the Addresses resource.
GET https://trusthub.twilio.com/v4/Compliance/Regulations/{id}
To retrieve the latest country-specific requirements, make a GET request to the Compliance Regulation resource with its Regulation ID. You can specify the version query parameter to get a specific version of the Regulation.
| Branded Calling type | Country | Regulation ID | Latest version |
|---|---|---|---|
| US Basic | US (United States) | RNca63d1066fbd5e44eac02d0b3cf6d019 | 13 |
| US Enhanced | US (United States) | RNa0b74679be7511921f4d2e3094fa6d23 | 9 |
| Non-US | GB (United Kingdom) | RN304faa2408f673b68867fe5cb65b7f50 | 4 |
| Non-US | DE (Germany) | RN5db7f1c57f6157280b28428ede4db708 | 4 |
| Non-US | CA (Canada) | RNa5150dedb5f110adba478ce9dde61d56 | 4 |
1curl -X GET 'https://trusthub.twilio.com/v4/Compliance/Regulations/RNca63d1066fbd5e44eac02d0b3cf6d019' \2-u $TWILIO_ACCOUNT_SID:$TWILIO_AUTH_TOKEN
Output
1{2"country": "US",3"endUserType": "BUSINESS",4"friendlyName": "Basic Branded Calling - US",5"id": "RNca63d1066fbd5e44eac02d0b3cf6d019",6"schema": {7"$schema": "http://json-schema.org/draft-07/schema#",8"additionalProperties": false,9"properties": {10"brandedCaller": {11"additionalProperties": false,12"properties": {13"displayLongName": {14"description": "An optional longer display name for supported carriers. This should align with your primary display name. Limit 32 characters (including spaces), should always start with a letter and can only contain letters, numbers, periods, commas and spaces.",15"maxLength": 32,16"minLength": 1,17"pattern": "^[a-zA-Z][A-Za-z0-9,.\\s]{1,31}$",18"title": "Branded Calls Long Display Name",19"type": [20"string",21"null"22]23},24"displayName": {25"description": "The display name to be shown on the terminating handset for outbound calls. The display name can be up to 15 characters (including spaces), should always start with a letter and can only contain letters, numbers, periods, commas and spaces.",26"maxLength": 15,27"minLength": 1,28"pattern": "^[a-zA-Z][A-Za-z0-9,.\\s]{1,14}$",29"title": "Branded Calls Display Name",30"type": "string"31},32"voiceIntegrityRegistrationId": {33"description": "The registration id of the associated voice integrity registration.",34"maxLength": 34,35"minLength": 34,36"pattern": "^BU[0-9a-fA-F]{32}$",37"title": "Voice Integrity Registration Id",38"type": "string"39}40},41"required": [42"displayName"43],44"type": "object"45}46},47"required": [48"brandedCaller"49],50"title": "Basic Branded Calling - US",51"type": "object",52"x-acceptableDocuments": [53{54"description": "The letter to authorize Twilio to run voice traffic on a given set of Phone Numbers.",55"documents": [56{57"description": "Letter of Authorization containing Brand Name, Tax ID, Tax country, Legal Name, Address, Phone #",58"documentType": "letter_of_authorization",59"friendlyName": "Letter of Authorization"60}61],62"friendlyName": "Letter of Authorization"63}64]65},66"subType": "BRANDED_CALLS",67"type": "VOICE_TRUST",68"version": 1369}
POST https://trusthub.twilio.com/v4/Compliance/Registrations
To create a Branded Calling Compliance Registration, make a POST request to the Compliance Registrations resource. The response includes the Compliance Registration ID (data.address.id). Save the ID for later.
1curl -X POST 'https://trusthub.twilio.com/v4/Compliance/Registrations' \2--header 'Content-Type: application/json' \3--data-raw '{4"data": {5"brandedCaller": {6"voiceIntegrityRegistrationId": "BUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab",7"displayName": "Brand Name",8"displayLongName": "Brand long name"9}10},11"regulationId": "RNca63d1066fbd5e44eac02d0b3cf6d019",12"regulationVersion": 13,13"comments": "Sample comment",14"friendlyName": "Registration friendlyName",15"statusNotificationEmail": "notifcation@email.com",16"statusCallbackUrl": "https://statuscallback.example.com"17}'18-u $TWILIO_ACCOUNT_SID:$TWILIO_AUTH_TOKEN
Output
1{2"comments": null,3"data": {4"brandedCaller": {5"displayLongName": "Brand long name",6"displayName": "Brand Name",7"voiceIntegrityRegistrationId": "BUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab"8}9},10"dataErrors": null,11"dateCreated": "2025-10-21T19:01:30Z",12"dateExpires": null,13"dateUpdated": "2025-10-21T19:01:30Z",14"documentLinks": [],15"friendlyName": "Registration friendlyName",16"id": "BUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",17"regulationId": "RNca63d1066fbd5e44eac02d0b3cf6d019",18"regulationVersion": 13,19"status": "DRAFT",20"statusCallbackUrl": "https://statuscallback.example.com",21"statusNotificationEmail": "notifcation@email.com"22}
POST https://trusthub.twilio.com/v4/Compliance/Documents
To upload a signed LOA for compliance verification, make a POST request to the Compliance Documents resource. The response includes the Document ID (documentId). Save the ID for later.
Note: This request uses form parameters (--form). The --form option sends data as multipart/form-data, and each --form line represents a separate form parameter in the request body.
1curl -X POST 'https://trusthub.twilio.com/v4/Compliance/Documents' \2--form 'type="LETTER_OF_AUTHORIZATION"' \3--form 'content=@"/Users/John/Documents/loa.jpg"' \4--form 'friendlyName="letter of auth doc"'5-u $TWILIO_ACCOUNT_SID:$TWILIO_AUTH_TOKEN
Output
1{2"contentType": "image/jpeg",3"contentUrl": "https://trusthub.twilio.com/v4/Compliance/Documents/RDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Content",4"dateCreated": "2025-10-16T10:28:15Z",5"dateUpdated": "2025-10-16T10:28:15Z",6"friendlyName": "letter of auth doc",7"id": "RDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",8"type": "LETTER_OF_AUTHORIZATION"9}
POST https://trusthub.twilio.com/v4/Compliance/DocumentLinks
To link the LOA with your Compliance Registration, make a POST request to the Compliance DocumentLinks resource. Use the Compliance Registration ID and the Document ID returned from the previous steps.
1curl -X POST 'https://trusthub.twilio.com/v4/Compliance/DocumentLinks' \2--header 'Content-Type: application/json' \3--data '{4"documentId": "RDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",5"registrationId": "BUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"6}'7-u $TWILIO_ACCOUNT_SID:$TWILIO_AUTH_TOKEN
Output
1{2"dateCreated": "2025-10-16T10:30:35Z",3"documentId": "RDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",4"id": "BVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",5"registrationId": "BUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",6"status": "DRAFT"7}
POST https://trusthub.twilio.com/v1/Compliance/Registrations/{registration_id}/ResourceAssignments
API version and case formatting
This request uses the API version v1. Query parameters and response fields are snake_case, and request body parameters are PascalCase.
To assign a phone number to your Compliance Registration, make a POST request to the ResourceAssignments subresource. Use the Compliance Registration ID returned from the previous step.
You can make this request only if the Compliance Registration's status is DRAFT, TWILIO_APPROVED, or TWILIO_REJECTED.
Note: This request uses form parameters (--form). The --form option sends data as multipart/form-data, and each --form line represents a separate form parameter in the request body.
1curl -X POST 'https://trusthub.twilio.com/v1/Compliance/Registrations/BUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/ResourceAssignments' \2--form 'Type="phone-number"' \3--form 'ResourceSid="PNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"'4-u $TWILIO_ACCOUNT_SID:$TWILIO_AUTH_TOKEN
Output
1{2"account_sid": "ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",3"date_created": "2025-10-16T10:37:49Z",4"registration_id": "BUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",5"resource_sid": "PNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",6"sid": "RAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",7"type": "phone-number",8"url": "https://trusthub.twilio.com/v1/Compliance/Registrations/BUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/ResourceAssignments/RAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"9}
PATCH https://trusthub.twilio.com/v4/Compliance/Registrations/{id}
To submit the Compliance Registration for review, make a PATCH request to the Compliance Registration resource with its ID. Set the status parameter in the request body to PENDING_REVIEW.
1curl -X PATCH 'https://trusthub.twilio.com/v4/Compliance/Registrations/BUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' \2--header 'Content-Type: application/json' \3--data '{4"status": "PENDING_REVIEW"5}'6-u $TWILIO_ACCOUNT_SID:$TWILIO_AUTH_TOKEN
Output
1{2"comments": null,3"data": {4"address": {5"id": "ADaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"6},7"authorizedContact": {8"firstName": "John",9"lastName": "Doe",10"mobilePhoneE164": "+19318339216",11"verificationEmail": "johndoe@email.com"12},13"authorizedRepresentative1": {14"email": "bsmith@email.com",15"firstName": "Bob",16"jobPosition": "CEO",17"lastName": "Smith",18"phoneE164": "+19832979578"19},20"brandedCaller": {21"displayCallReason": "Call Reason",22"displayLogoUrl": "https://www.logo.example.com",23"displayName": "Brand Display Name"24},25"business": {26"employeeCount": 1000,27"entityType": "Partnership",28"identityType": "direct_customer",29"industry": "RAW_MATERIALS",30"isSubassigned": "NO",31"legalName": "Business Name",32"registrationAuthority": "EIN",33"registrationNumber": "123456789",34"websiteUrl": "https://www.website.example.com"35},36"useCase": {37"callVolumeDaily": 100,38"category": "HIGHER_EDUCATION",39"categoryApple": "Optional category",40"consentDescription": "Consent description",41"description": "UseCase description"42}43},44"dataErrors": null,45"dateCreated": "2025-10-16T10:21:20Z",46"dateExpires": null,47"dateUpdated": "2025-10-16T10:44:28Z",48"documentLinks": [49{50"dateCreated": "2025-10-16T10:30:35Z",51"documentId": "RDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",52"id": "BVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",53"registrationId": "BUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",54"status": "DRAFT"55}56],57"friendlyName": "Registration friendlyName",58"id": "BUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",59"regulationId": "RNa0b74679be7511921f4d2e3094fa6d23",60"regulationVersion": 9,61"status": "PENDING_REVIEW",62"statusCallbackUrl": "https://statuscallback.example.com",63"statusNotificationEmail": "notifcation@email.com"64}
GET https://trusthub.twilio.com/v4/Compliance/Registrations/{registration_id}
To retrieve the submission status, make a GET request to the Compliance Registration resource with its ID. Possible status values are DRAFT, PENDING_REVIEW, IN_REVIEW, TWILIO_APPROVED, and TWILIO_REJECTED.
1curl -X GET 'https://trusthub.twilio.com/v4/Compliance/Registrations/BUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' \2-u $TWILIO_ACCOUNT_SID:$TWILIO_AUTH_TOKEN
Output
1{2"comments": null,3"data": {4"address": {5"id": "ADaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"6},7"authorizedContact": {8"firstName": "John",9"lastName": "Doe",10"mobilePhoneE164": "+19318339216",11"verificationEmail": "johndoe@email.com"12},13"authorizedRepresentative1": {14"email": "bsmith@email.com",15"firstName": "Bob",16"jobPosition": "CEO",17"lastName": "Smith",18"phoneE164": "+19832979578"19},20"brandedCaller": {21"displayCallReason": "Call Reason",22"displayLogoUrl": "https://www.logo.example.com",23"displayName": "Brand Display Name"24},25"business": {26"employeeCount": 1000,27"entityType": "Partnership",28"identityType": "direct_customer",29"industry": "RAW_MATERIALS",30"isSubassigned": "NO",31"legalName": "Business Name",32"registrationAuthority": "EIN",33"registrationNumber": "123456789",34"websiteUrl": "https://www.website.example.com"35},36"useCase": {37"callVolumeDaily": 100,38"category": "HIGHER_EDUCATION",39"categoryApple": "Optional category",40"consentDescription": "Consent description",41"description": "UseCase description"42}43},44"dataErrors": null,45"dateCreated": "2025-10-17T09:59:16Z",46"dateExpires": null,47"dateUpdated": "2025-10-17T09:59:16Z",48"documentLinks": [49{50"dateCreated": "2025-11-12T09:05:31Z",51"documentId": "RDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",52"id": "BVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",53"registrationId": "BUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",54"status": "DRAFT"55}56],57"friendlyName": "Registration friendlyName",58"id": "BUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",59"regulationId": "RNa0b74679be7511921f4d2e3094fa6d23",60"regulationVersion": 9,61"status": "DRAFT",62"statusCallbackUrl": "https://statuscallback.example.com",63"statusNotificationEmail": "notifcation@email.com"64}
After following this guide, you can use the Twilio TrustHub API to completely automate the submission of customer registration profiles, attach supporting Letters of Authorization (LOAs), and verify assignment statuses. You can confirm success by polling the registration state via the API and seeing the status transition out of DRAFT.
Explore the following guides to build on what you've learned in this guide:
- US Basic Branded Calling: Learn how to assign numbers and manage brand configurations via the console or Trust Products API inside the US.
- US Enhanced Branded Calling: Learn how to attach logos and clear call context to call intents via verified branding profiles.
- Non-US Basic Branded Calling: Learn how to establish basic business display metadata for phone numbers in Canada, Germany, and the UK.