OpenAPI Specification
openapi: 3.1.0
info:
contact:
email: support@telnyx.com
description: Telnyx provides global communications and connectivity APIs for developers — including SIP trunking, programmable voice, SMS, MMS, WhatsApp Business Messaging, Call Control, Fax, Wireless (IoT & eSIM), Phone Numbers (DID provisioning & porting), Emergency Services, and Network APIs for private interconnects and edge connectivity. Build, scale, and manage voice, messaging, and data networks with Telnyx's carrier-grade global infrastructure and API-first platform.
title: Telnyx Access Tokens Brands API
version: 2.0.0
x-endpoint-cost: light
servers:
- description: Version 2.0.0 of the Telnyx API
url: https://api.telnyx.com/v2
security:
- bearerAuth: []
tags:
- description: Brand operations
name: Brands
paths:
/10dlc/brand:
get:
description: This endpoint is used to list all brands associated with your organization.
operationId: GetBrands
parameters:
- in: query
name: page
required: false
schema:
default: 1
minimum: 1
title: Page
type: integer
- description: number of records per page. maximum of 500
in: query
name: recordsPerPage
required: false
schema:
default: 10
description: number of records per page. maximum of 500
title: Recordsperpage
type: integer
- description: Specifies the sort order for results. If not given, results are sorted by createdAt in descending order.
example: -identityStatus
in: query
name: sort
required: false
schema:
default: -createdAt
description: Specifies the sort order for results. If not given, results are sorted by created_at in descending order.
enum:
- assignedCampaignsCount
- -assignedCampaignsCount
- brandId
- -brandId
- createdAt
- -createdAt
- displayName
- -displayName
- identityStatus
- -identityStatus
- status
- -status
- tcrBrandId
- -tcrBrandId
title: Sort
type: string
- in: query
name: displayName
required: false
schema:
title: Displayname
type: string
- in: query
name: entityType
required: false
schema:
title: Entitytype
type: string
- in: query
name: state
required: false
schema:
title: State
type: string
- in: query
name: country
required: false
schema:
title: Country
type: string
- description: Filter results by the Telnyx Brand id
in: query
name: brandId
required: false
schema:
example: 826ef77a-348c-445b-81a5-a9b13c68fbfe
title: BrandId
type: string
- description: Filter results by the TCR Brand id
in: query
name: tcrBrandId
required: false
schema:
example: BBAND1
title: TCRBrandId
type: string
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/BrandRecordSetCSP'
description: Successful Response
4XX:
$ref: '#/components/responses/10dlc_GenericErrorResponse'
summary: List Brands
tags:
- Brands
x-latency-category: responsive
post:
description: This endpoint is used to create a new brand. A brand is an entity created by The Campaign Registry (TCR) that represents an organization or a company. It is this entity that TCR created campaigns will be associated with. Each brand creation will entail an upfront, non-refundable $4 expense.
operationId: CreateBrandPost
parameters: []
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CreateBrand'
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/TelnyxBrand'
description: Successful Response
'422':
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
description: Validation Error
4XX:
$ref: '#/components/responses/10dlc_GenericErrorResponse'
summary: Create Brand
tags:
- Brands
x-latency-category: responsive
/10dlc/brand/feedback/{brandId}:
get:
description: "Get feedback about a brand by ID. This endpoint can be used after creating or revetting\na brand.\n\nPossible values for `.category[].id`:\n\n* `TAX_ID` - Data mismatch related to tax id and its associated properties.\n* `STOCK_SYMBOL` - Non public entity registered as a public for profit entity or\n the stock information mismatch.\n* `GOVERNMENT_ENTITY` - Non government entity registered as a government entity.\n Must be a U.S. government entity.\n* `NONPROFIT` - Not a recognized non-profit entity. No IRS tax-exempt status\n found.\n* `OTHERS` - Details of the data misrepresentation if any."
operationId: GetBrandFeedbackById
parameters:
- in: path
name: brandId
required: true
schema:
title: Brandid
type: string
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/BrandFeedback'
description: Successful Response
'422':
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
description: Validation Error
4XX:
$ref: '#/components/responses/10dlc_GenericErrorResponse'
summary: Get Brand Feedback By Id
tags:
- Brands
x-latency-category: responsive
/10dlc/brand/smsOtp/{referenceId}:
get:
description: 'Query the status of an SMS OTP (One-Time Password) for Sole Proprietor brand verification.
This endpoint allows you to check the delivery and verification status of an OTP sent during the Sole Proprietor brand verification process. You can query by either:
* `referenceId` - The reference ID returned when the OTP was initially triggered
* `brandId` - Query parameter for portal users to look up OTP status by Brand ID
The response includes delivery status, verification dates, and detailed delivery information.'
operationId: GetBrandSmsOtpStatus
parameters:
- description: The reference ID returned when the OTP was initially triggered
in: path
name: referenceId
required: true
schema:
example: OTP4B2001
title: Referenceid
type: string
- description: Filter by Brand ID for easier lookup in portal applications
in: query
name: brandId
required: false
schema:
example: B123ABC
title: Brandid
type: string
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/BrandSmsOtpStatus'
description: Successful Response
'404':
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
description: OTP reference not found
'422':
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
description: Validation Error
4XX:
$ref: '#/components/responses/10dlc_GenericErrorResponse'
summary: Get Brand SMS OTP Status
tags:
- Brands
x-latency-category: responsive
/10dlc/brand/{brandId}:
delete:
description: Delete Brand. This endpoint is used to delete a brand. Note the brand cannot be deleted if it contains one or more active campaigns, the campaigns need to be inactive and at least 3 months old due to billing purposes.
operationId: DeleteBrand
parameters:
- in: path
name: brandId
required: true
schema:
title: Brandid
type: string
responses:
'204':
description: Brand removed successfully
'400':
content:
application/json:
schema:
$ref: '#/components/schemas/10dlc_Error'
description: Brand cannot be deleted
'404':
content:
application/json:
schema:
$ref: '#/components/schemas/10dlc_Error'
description: Brand not found
'422':
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
description: Validation Error
4XX:
$ref: '#/components/responses/10dlc_GenericErrorResponse'
summary: Delete Brand
tags:
- Brands
x-latency-category: responsive
get:
description: Retrieve a brand by `brandId`.
operationId: GetBrand
parameters:
- in: path
name: brandId
required: true
schema:
title: Brandid
type: string
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/TelnyxBrandWithCampaignsCount'
description: Successful Response
'422':
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
description: Validation Error
4XX:
$ref: '#/components/responses/10dlc_GenericErrorResponse'
summary: Get Brand
tags:
- Brands
x-latency-category: responsive
put:
description: Update a brand's attributes by `brandId`.
operationId: UpdateBrand
parameters:
- in: path
name: brandId
required: true
schema:
title: Brandid
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateBrand'
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/TelnyxBrand'
description: Successful Response
'422':
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
description: Validation Error
4XX:
$ref: '#/components/responses/10dlc_GenericErrorResponse'
summary: Update Brand
tags:
- Brands
x-latency-category: responsive
/10dlc/brand/{brandId}/2faEmail:
post:
operationId: ResendBrand2faEmail
parameters:
- in: path
name: brandId
required: true
schema:
title: Brandid
type: string
responses:
'200':
description: Successful Response
4XX:
$ref: '#/components/responses/10dlc_GenericErrorResponse'
summary: Resend brand 2FA email
tags:
- Brands
x-latency-category: responsive
/10dlc/brand/{brandId}/externalVetting:
get:
description: Get list of valid external vetting record for a given brand
operationId: ListExternalVettings
parameters:
- in: path
name: brandId
required: true
schema:
title: Brandid
type: string
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/ExternalVettingList'
description: Successful Response
'422':
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
description: Validation Error
4XX:
$ref: '#/components/responses/10dlc_GenericErrorResponse'
summary: List External Vettings
tags:
- Brands
x-latency-category: responsive
post:
description: 'Order new external vetting for a brand.
Duplicate orders for the same `evpId` and `vettingClass` return `400` with code `10012` if a successful vetting exists within the last 180 days, or one is currently being processed. Failed vettings can be retried immediately.'
operationId: PostOrderExternalVetting
parameters:
- in: path
name: brandId
required: true
schema:
title: Brandid
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/OrderExternalVetting'
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/ExternalVetting'
description: Successful Response
'422':
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
description: Validation Error
4XX:
$ref: '#/components/responses/10dlc_GenericErrorResponse'
summary: Order Brand External Vetting
tags:
- Brands
x-latency-category: responsive
put:
description: 'This operation can be used to import an external vetting record from a TCR-approved
vetting provider. If the vetting provider confirms validity of the record, it will be
saved with the brand and will be considered for future campaign qualification.'
operationId: PutExternalVettingRecord
parameters:
- in: path
name: brandId
required: true
schema:
title: Brandid
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ImportExternalVetting'
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/ExternalVetting'
description: Successful Response
'422':
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
description: Validation Error
4XX:
$ref: '#/components/responses/10dlc_GenericErrorResponse'
summary: Import External Vetting Record
tags:
- Brands
x-latency-category: responsive
/10dlc/brand/{brandId}/revet:
put:
description: This operation allows you to revet the brand. However, revetting is allowed once after the successful brand registration and thereafter limited to once every 3 months.
operationId: RevetBrand
parameters:
- in: path
name: brandId
required: true
schema:
title: Brandid
type: string
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/TelnyxBrand'
description: Successful Response
'422':
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
description: Validation Error
4XX:
$ref: '#/components/responses/10dlc_GenericErrorResponse'
summary: Revet Brand
tags:
- Brands
x-latency-category: responsive
/10dlc/brand/{brandId}/smsOtp:
get:
description: 'Query the status of an SMS OTP (One-Time Password) for Sole Proprietor brand verification using the Brand ID.
This endpoint allows you to check the delivery and verification status of an OTP sent during the Sole Proprietor brand verification process by looking it up with the brand ID.
The response includes delivery status, verification dates, and detailed delivery information.
**Note:** This is an alternative to the `/10dlc/brand/smsOtp/{referenceId}` endpoint when you have the Brand ID but not the reference ID.'
operationId: GetBrandSmsOtpStatusByBrandId
parameters:
- description: The Brand ID for which to query OTP status
in: path
name: brandId
required: true
schema:
example: 4b20019b-043a-78f8-0657-b3be3f4b4002
title: Brandid
type: string
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/BrandSmsOtpStatus'
description: Successful Response
'404':
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
description: OTP status not found for this brand
'422':
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
description: Validation Error
4XX:
$ref: '#/components/responses/10dlc_GenericErrorResponse'
summary: Get Brand SMS OTP Status by Brand ID
tags:
- Brands
x-latency-category: responsive
post:
description: 'Trigger or re-trigger an SMS OTP (One-Time Password) for Sole Proprietor brand verification.
**Important Notes:**
* Only allowed for Sole Proprietor (`SOLE_PROPRIETOR`) brands
* Triggers generation of a one-time password sent to the `mobilePhone` number in the brand''s profile
* Campaigns cannot be created until OTP verification is complete
* US/CA numbers only for real OTPs; mock brands can use non-US/CA numbers for testing
* Returns a `referenceId` that can be used to check OTP status via the GET `/10dlc/brand/smsOtp/{referenceId}` endpoint
**Use Cases:**
* Initial OTP trigger after Sole Proprietor brand creation
* Re-triggering OTP if the user didn''t receive or needs a new code'
operationId: TriggerBrandSmsOtp
parameters:
- description: The Brand ID for which to trigger the OTP
in: path
name: brandId
required: true
schema:
example: 4b20019b-043a-78f8-0657-b3be3f4b4002
title: Brandid
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/TriggerBrandSmsOtpRequest'
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/TriggerBrandSmsOtpResponse'
description: Successful Response
'400':
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
description: Bad Request - Brand is not a Sole Proprietor or invalid mobile phone number
'422':
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
description: Validation Error
4XX:
$ref: '#/components/responses/10dlc_GenericErrorResponse'
summary: Trigger Brand SMS OTP
tags:
- Brands
x-latency-category: responsive
put:
description: "Verify the SMS OTP (One-Time Password) for Sole Proprietor brand verification.\n\n**Verification Flow:**\n\n1. User receives OTP via SMS after triggering\n2. User submits the OTP pin through this endpoint\n3. Upon successful verification:\n - A `BRAND_OTP_VERIFIED` webhook event is sent to the CSP\n - The brand's `identityStatus` changes to `VERIFIED`\n - Campaigns can now be created for this brand\n\n**Error Handling:**\n\nProvides proper error responses for:\n* Invalid OTP pins\n* Expired OTPs\n* OTP verification failures"
operationId: VerifyBrandSmsOtp
parameters:
- description: The Brand ID for which to verify the OTP
in: path
name: brandId
required: true
schema:
example: 4b20019b-043a-78f8-0657-b3be3f4b4002
title: Brandid
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/VerifyBrandSmsOtpRequest'
required: true
responses:
'204':
description: OTP verified successfully - No content returned
'400':
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
description: Bad Request - Invalid or expired OTP
'422':
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
description: Validation Error
4XX:
$ref: '#/components/responses/10dlc_GenericErrorResponse'
summary: Verify Brand SMS OTP
tags:
- Brands
x-latency-category: responsive
components:
schemas:
10dlc_Error:
properties:
code:
type: string
detail:
type: string
source:
properties:
parameter:
description: Indicates which query parameter caused the error.
type: string
pointer:
description: JSON pointer (RFC6901) to the offending entity.
type: string
type: object
title:
type: string
required:
- code
- title
type: object
ImportExternalVetting:
properties:
evpId:
description: External vetting provider ID for the brand.
maxLength: 10
title: Evpid
type: string
vettingId:
description: Unique ID that identifies a vetting transaction performed by a vetting provider. This ID is provided by the vetting provider at time of vetting.
title: Vettingid
type: string
vettingToken:
description: Required by some providers for vetting record confirmation.
title: Vettingtoken
type: string
required:
- evpId
- vettingId
title: ImportExternalVetting
type: object
CreateBrand:
properties:
businessContactEmail:
description: 'Business contact email.
Required if `entityType` is `PUBLIC_PROFIT`. Otherwise, it is recommended to either omit this field or set it to `null`.'
example: name@example.com
title: BusinessContactEmail
type: string
city:
description: City name
example: New York
maxLength: 100
title: City
type: string
companyName:
description: (Required for Non-profit/private/public) Legal company name.
example: ABC Inc.
maxLength: 100
title: Companyname
type: string
country:
description: 'ISO2 2 characters country code. Example: US - United States'
example: US
maxLength: 2
title: Country
type: string
displayName:
description: Display name, marketing name, or DBA name of the brand.
example: ABC Mobile
maxLength: 100
title: Displayname
type: string
ein:
description: (Required for Non-profit) Government assigned corporate tax ID. EIN is 9-digits in U.S.
example: '111111111'
maxLength: 20
title: Ein
type: string
email:
description: Valid email address of brand support contact.
maxLength: 100
title: Email
type: string
entityType:
allOf:
- $ref: '#/components/schemas/EntityType'
description: Entity type behind the brand. This is the form of business establishment.
firstName:
description: First name of business contact.
example: John
maxLength: 100
title: Firstname
type: string
ipAddress:
description: IP address of the browser requesting to create brand identity.
maxLength: 50
title: Ipaddress
type: string
isReseller:
default: false
title: Isreseller
type: boolean
lastName:
description: Last name of business contact.
example: Smith
maxLength: 100
title: Lastname
type: string
mobilePhone:
description: Valid mobile phone number in e.164 international format.
example: '+12024567890'
maxLength: 20
title: Mobilephone
type: string
mock:
default: false
description: Mock brand for testing purposes. Defaults to false.
title: Mock
type: boolean
phone:
description: Valid phone number in e.164 international format.
example: '+12024567890'
maxLength: 20
title: Phone
type: string
postalCode:
description: Postal codes. Use 5 digit zipcode for United States
example: '10001'
maxLength: 10
title: Postalcode
type: string
state:
description: State. Must be 2 letters code for United States.
example: NY
maxLength: 20
title: State
type: string
stockExchange:
allOf:
- $ref: '#/components/schemas/StockExchange'
description: (Required for public company) stock exchange.
example: NASDAQ
stockSymbol:
description: (Required for public company) stock symbol.
example: ABC
maxLength: 10
title: Stocksymbol
type: string
street:
description: Street number and name.
example: '123'
maxLength: 100
title: Street
type: string
vertical:
allOf:
- $ref: '#/components/schemas/Vertical'
description: Vertical or industry segment of the brand.
webhookFailoverURL:
description: Webhook failover URL for brand status updates.
example: https://webhook.com/9010a453-4df8-4be6-a551-1070892888d6
title: WebhookFailoverURL
type: string
webhookURL:
description: Webhook URL for brand status updates.
example: https://webhook.com/67ea78a8-9f32-4d04-b62d-f9502e8e5f93
title: WebhookURL
type: string
website:
description: Brand website URL.
example: http://www.abcmobile.com
maxLength: 100
title: Website
type: string
required:
- entityType
- displayName
- country
- email
- vertical
title: CreateBrand
type: object
TelnyxBrandWithCampaignsCount:
allOf:
- $ref: '#/components/schemas/TelnyxBrand'
- properties:
assignedCampaignsCount:
description: Number of campaigns associated with the brand
example: 3
title: AssignedCampaignsCount
type: number
title: TelnyxBrandWithCampaignsCount
type: object
ValidationError:
properties:
loc:
items:
anyOf:
- type: string
- type: integer
title: Location
type: array
msg:
title: Message
type: string
type:
title: Error Type
type: string
required:
- loc
- msg
- type
title: ValidationError
type: object
BrandIdentityStatus:
description: The verification status of an active brand
enum:
- VERIFIED
- UNVERIFIED
- SELF_DECLARED
- VETTED_VERIFIED
title: BrandIdentityStatus
type: string
StockExchange:
description: (Required for public company) stock exchange.
enum:
- NONE
- NASDAQ
- NYSE
- AMEX
- AMX
- ASX
- B3
- BME
- BSE
- FRA
- ICEX
- JPX
- JSE
- KRX
- LON
- NSE
- OMX
- SEHK
- SSE
- STO
- SWX
- SZSE
- TSX
- TWSE
- VSE
example: NASDAQ
title: StockExchange
type: string
HTTPValidationError:
properties:
detail:
items:
$ref: '#/components/schemas/ValidationError'
title: Detail
type: array
title: HTTPValidationError
type: object
EntityType:
description: Entity type behind the brand. This is the form of business establishment.
enum:
- PRIVATE_PROFIT
- PUBLIC_PROFIT
- NON_PROFIT
- GOVERNMENT
- SOLE_PROPRIETOR
example: PRIVATE_PROFIT
title: EntityType
type: string
TriggerBrandSmsOtpRequest:
description: Request body for triggering a Brand SMS OTP
properties:
pinSms:
description: SMS message template to send the OTP. Must include `@OTP_PIN@` placeholder which will be replaced with the actual PIN
example: Your PIN is @OTP_PIN@
title: Pinsms
type: string
successSms:
description: SMS message to send upon successful OTP verification
example: Verification successful!
title: Successsms
type: string
required:
- pinSms
- successSms
title: TriggerBrandSmsOtpRequest
type: object
10dlc_Errors:
properties:
errors:
items:
$ref: '#/components/schemas/10dlc_Error'
type: array
type: object
ExternalVetting:
properties:
createDate:
description: Vetting submission date. This is the date when the vetting request is generated in ISO 8601 format.
title: createDate
type: string
evpId:
description: External vetting provider ID for the brand.
maxLength: 10
title: Evpid
type: string
vettedDate:
description: Vetting effective date. This is the date when vetting was completed, or the starting effective date in ISO 8601 format. If this date is missing, then the vetting was not complete or not valid.
title: vettedDate
type: string
vettingClass:
description: Identifies the vetting classification.
title: Vettingclass
type: string
vettingId:
description: Unique ID that identifies a vetting transaction performed by a vetting provider. This ID is provided by the vetting provider at time of vetting.
title: vettingId
type: string
vettingScore:
description: Vetting score ranging from 0-100.
title: vettingScore
type: integer
vettingToken:
description: Required by some providers for vetting record confirmation.
title: vettingToken
type: string
title: ExternalVetting
type: object
BrandRelationship:
description: Brand relationship to the CSP.
enum:
- BASIC_ACCOUNT
- SMALL_ACCOUNT
- MEDIUM_ACCOUNT
- LARGE_ACCOUNT
- KEY_ACCOUNT
title: BrandRelationship
type: string
BrandFeedback:
properties:
brandId:
description: ID of the brand being queried about
example: d88dd2aa-1bb9-4ef0-9ec8-1752b80316a5
title: Brandid
type: string
category:
description: A list of reasons why brand creation/revetting didn't go as planned
items:
$ref: '#/components/schemas/BrandFeedbackCategory'
title: Category
type: array
required:
- brandId
- category
title: BrandFeedback
type: object
UpdateBrand:
properties:
altBusinessId:
description: Alternate business identifier such as DUNS, LEI, or GIIN
maxLength: 50
title: Altbusiness Id
type: string
altBusinessIdType:
# --- truncated at 32 KB (52 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/telnyx/refs/heads/main/openapi/telnyx-brands-api-openapi.yml