Skip to contentSkip to navigationSkip to topbar
Page toolsOn this page
Looking for more inspiration?Visit the

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.

(new)

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(link takes you to an external page).


Trust Hub API resources for Branded Calling

trust-hub-api-resources-for-branded-calling page anchor
  • 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:

  1. Complete the prerequisites.
  2. 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.
  3. Create a Compliance Registration: Create a Compliance Registration and set up the brand's registration profile. Include all required information for review and approval.
  4. Upload a signed LOA: Upload the LOA signed by your customer for compliance verification.
  5. Link the LOA to the Compliance Registration: Link the uploaded LOA with the Compliance Registration you created.
  6. Assign a phone number to the Compliance Registration: Assign a phone number that will display the brand information once the Compliance Registration is approved.
  7. Submit the Compliance Registration for review: Submit the Compliance Registration for review. Twilio and carrier partners will verify the information provided.
  8. (Optional) Retrieve the submission status: Track the status of your submission (approved, rejected, in review).

Review process after submission

review-process-after-submission page anchor

When you submit your Compliance Registration, the review process follows these steps:

  1. 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.
  2. After Twilio vets and approves your information, Twilio submits it to the carrier partner for secondary review and provisioning.
  3. 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.



Retrieve the Compliance Regulation for Branded Calling

retrieve-the-compliance-regulation-for-branded-calling page anchor
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 typeCountryRegulation IDLatest version
US BasicUS (United States)RNca63d1066fbd5e44eac02d0b3cf6d01913
US EnhancedUS (United States)RNa0b74679be7511921f4d2e3094fa6d239
Non-USGB (United Kingdom)RN304faa2408f673b68867fe5cb65b7f504
Non-USDE (Germany)RN5db7f1c57f6157280b28428ede4db7084
Non-USCA (Canada)RNa5150dedb5f110adba478ce9dde61d564
US Basic Branded CallingUS Enhanced Branded CallingNon-US Branded Calling
US Basic Branded Calling: Retrieve the Compliance RegulationLink to code sample: US Basic Branded Calling: Retrieve the Compliance Regulation
1
curl -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": 13
69
}

Create a Compliance Registration

create-a-compliance-registration page anchor
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.

US Basic Branded CallingUS Enhanced Branded CallingNon-US Branded Calling
US Basic Branded Calling: Create a Compliance RegistrationLink to code sample: US Basic Branded Calling: Create a Compliance Registration
1
curl -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.

Create a Compliance Document: Upload a signed LOALink to code sample: Create a Compliance Document: Upload a signed LOA
1
curl -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
}

Assign a phone number to your Compliance Registration

assign-a-phone-number-to-your-compliance-registration page anchor
POST https://trusthub.twilio.com/v1/Compliance/Registrations/{registration_id}/ResourceAssignments
(information)

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.

Create a ResourceAssignment: Assign a phone number to your Compliance RegistrationLink to code sample: Create a ResourceAssignment: Assign a phone number to your Compliance Registration
1
curl -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
}

Submit the Compliance Registration

submit-the-compliance-registration page anchor
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.

1
curl -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
}

(Optional) Retrieve the submission status

optional-retrieve-the-submission-status page anchor
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.

1
curl -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.