Sinch Compliance API - Brands
Manage brand records in the Sinch Compliance Center.
Manage brand records in the Sinch Compliance Center.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/sinch:sinch-compliance-brands-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
externalDocs:
description: All endpoints available under this API require Bearer token authentication. Please check oauth api documentation if you need more details.
url: https://developers.sinch.com/docs/numbers/api-reference/authentication/oauth/
info:
x-sinch-standards-version: standards-2026-03-31
description: 'This API describes the set of endpoints available to create customer brands.
The list of endpoints allows to create, update and delete a customer brand and also get the current state.'
title: Sinch Compliance API - Brands
version: 1.0.0
contact:
name: Support
url: https://www.sinch.com
email: Support@sinch.com
license:
name: MIT
url: https://www.sinch.com/legal
webhooks:
BrandOrderStatusUpdated:
post:
x-sinch-stability: preview
tags:
- brand-webhooks-delivery
summary: Callback for brand order status update
description: The endpoint receives a callback when the brand order status is updated. To receive callback notifications, the customer must provide a callback URL in the create Order (/us/brands/{brandId}/orders) request body or when importing (/us/brands/import) a brand. The callback URL must be a valid URL and must be reachable from Sinch. Read brands callback configuration documentation for more details.
operationId: brandOrderStatusCallback
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CallbackBrandOrderStatusUpdatedBody'
responses:
'200':
description: OK
security:
- hmacAuth: []
paths:
/v1/projects/{projectId}/us/brands:
post:
x-sinch-stability: preview
description: 'Creates a new Draft Brand in US with the request data.
Note: The `Idempotency-Key` header is not supported in this version. Submitting the same request twice may create duplicate resources. Callers are responsible for deduplicating on their end. Idempotency-Key support will be added when this operation reaches Stable stability.'
operationId: createBrand
parameters:
- in: path
description: Customer's project id
name: projectId
required: true
schema:
type: string
requestBody:
required: true
description: Brand object to be created. The request body must include all the required fields for the brand creation, as well as the optional field contentProvider that indicates whether the brand is a Content Provider or a standard Brand. Depending on the value of this field, the brand will follow different registration processes and will have access to different types of orders and products.
content:
application/json:
schema:
$ref: '#/components/schemas/CreateBrandRequest'
responses:
'201':
description: Brand created successfully.
content:
application/json:
schema:
$ref: '#/components/schemas/Brand'
example:
brandId: b1c7ccbf-919d-462f-8587-dec95a1b11ee
displayName: Alpha Adventures Corp.
status: DRAFT
legalCompanyName: Alpha Adventures Corp.
entityType: CORPORATION
verticalType: RETAIL
country: US
street: 129 MacDougal Street, Manhattan
city: New York
state: New York
zip: '10012'
taxCountry: US
federalTaxId: '123456789'
website: https://www.alphaadventures.com
companyEmail: contact@alphaadventures.com
contactEmail: contact@alphaadventures.com
contentProvider: false
channels: []
attachments: []
logs: []
createTime: '2024-01-15T10:00:00Z'
updateTime: '2024-01-15T10:00:00Z'
'400':
content:
application/problem+json:
schema:
$ref: '#/components/schemas/RestError'
description: 'BAD_REQUEST: Any validation error'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
content:
application/problem+json:
schema:
$ref: '#/components/schemas/RestError'
description: 'NOT_FOUND: The project id introduced does not exist.'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
content:
application/problem+json:
schema:
$ref: '#/components/schemas/RestError'
description: 'INTERNAL: Internal server error. Typically, a server bug.'
security:
- OAuth2:
- write
summary: Creates a new Draft Brand in US with the request data.
tags:
- brands
get:
x-sinch-stability: preview
description: List existing brands according to the specified filters.
operationId: listBrands
parameters:
- in: path
description: Customer's project id
name: projectId
required: true
schema:
type: string
- in: query
description: The brand status to filter the brands.
name: status
required: false
schema:
type: array
items:
$ref: '#/components/schemas/BrandStatus'
- in: query
name: displayName
description: Filter brands by brand name.
schema:
type: string
- in: query
description: Filter by specific channel available.
name: channelName
required: false
schema:
$ref: '#/components/schemas/Channel'
- in: query
name: contentProvider
description: Optional boolean flag to filter by content provider. If true, it returns content providers. If false, it returns standard brands. Default is false.
schema:
type: boolean
default: false
- in: query
name: thirdPartyMetadataId
description: Filter brands by an external system's identifier, such as a 10DLC or US Short Code Registry brand ID. Matches against the `value` of any `thirdPartyMetadata` entry (see the `ThirdPartyElement` schema) on any of the brand's registration processes, regardless of which `name` (e.g. `TCR_BRAND_ID`, `gch_brand_id`) it was stored under.
schema:
type: string
- in: query
name: sort
description: 'Sorting of the results using SQL-like syntax: comma-separated field names with an optional '':desc'' or '':asc'' suffix. Fields that support sorting are ''displayName'', ''status'', ''createTime'', ''updateTime''. Defaults to ascending order when no suffix is provided.'
schema:
type: string
example: displayName,status:desc
- in: query
name: pageSize
description: Size of the page to be returned. Default is 20. Maximum is 100.
schema:
format: int32
type: integer
minimum: 1
maximum: 100
default: 20
example: 20
- in: query
name: pageToken
description: Page token to request subsequent pages when using pagination. This should be the value generated by the system in a previous list request.
schema:
type: string
responses:
'200':
description: OK
headers:
Link:
description: Pagination links per RFC 8288. A `rel="next"` link is present when there are more results. Absence of a `next` link indicates the last page.
schema:
type: string
example: <https://compliance.api.sinch.com/v1/projects/{projectId}/us/brands?pageToken=abc123>; rel="next"
content:
application/json:
schema:
$ref: '#/components/schemas/ListBrandResponse'
example:
brands:
- brandId: b1c7ccbf-919d-462f-8587-dec95a1b11ee
displayName: Alpha Adventures Corp.
status: DRAFT
channels: []
createTime: '2024-01-15T10:00:00Z'
updateTime: '2024-01-15T10:00:00Z'
links:
next: https://compliance.api.sinch.com/v1/projects/proj-123/us/brands?pageToken=eyJsYXN0SWQiOiJiMWM3Y2NiZiJ9
meta:
totalCount: 42
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
content:
application/problem+json:
schema:
$ref: '#/components/schemas/RestError'
description: 'NOT_FOUND: The project id introduced does not exist.'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
content:
application/problem+json:
schema:
$ref: '#/components/schemas/RestError'
description: 'INTERNAL: Internal server error. Typically, a server bug.'
security:
- OAuth2:
- read
summary: List brands for a project
tags:
- brands
/v1/projects/{projectId}/us/brands/import:
post:
x-sinch-stability: preview
description: 'This endpoint allows you to import a brand that has already been registered through another reseller or directly by the end-customer, enabling you to manage it through your account. To initiate the transfer, you must specify one of the available import options (IMPORT_TCR_BRAND or IMPORT_GCH_BRAND) and provide the brand''s unique ID from its original registry.
Upon receiving the request, the system will copy the brand''s information from the source and create an import order that includes all existing third-party metadata from the original registration. Depending on the brand''s original registry, an email will be sent to the brand''s registered contact address to approve or deny the import request.
Please note that an imported brand cannot be directly modified or updated through our system. For example, a brand imported via IMPORT_GCH_BRAND cannot have its Short Code registration details changed, although it can be extended for other services like 10DLC if required. All maintenance and update operations for the brand remain the responsibility of the original register.'
operationId: importBrand
parameters:
- in: path
description: Customer's project id
name: projectId
required: true
schema:
type: string
requestBody:
required: true
description: Import Brand request body. It includes the import option to be used and the unique identifier of the brand in its original registry. Depending on the import option selected, the required identifier will differ, for IMPORT_TCR_BRAND, the required identifier is the 10DLC Brand ID; for IMPORT_GCH_BRAND, the required identifier is the US Short Code Registry Account ID.
content:
application/json:
schema:
$ref: '#/components/schemas/ImportBrandRequest'
responses:
'201':
description: Brand import initiated successfully.
content:
application/json:
schema:
$ref: '#/components/schemas/ImportBrandResponse'
example:
brandId: b1c7ccbf-919d-462f-8587-dec95a1b11ee
brandOrderId: '212421442412'
brandOwnerContactEmail: jo***@alphaadventures.com
'400':
content:
application/problem+json:
schema:
$ref: '#/components/schemas/RestError'
description: 'BAD_REQUEST: Any validation error'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
content:
application/problem+json:
schema:
$ref: '#/components/schemas/RestError'
description: 'NOT_FOUND: The project id introduced does not exist.'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
content:
application/problem+json:
schema:
$ref: '#/components/schemas/RestError'
description: 'INTERNAL: Internal server error. Typically, a server bug.'
security:
- OAuth2:
- write
summary: Imports an existing Brand in US.
tags:
- brands
/v1/projects/{projectId}/us/brands/{brandId}:
get:
x-sinch-stability: preview
description: The endpoint receives as path param project id and brand id. If the project and brand exist, the details of the brand are returned.
operationId: getBrand
parameters:
- in: path
description: Customer's project id
name: projectId
required: true
schema:
type: string
- in: path
description: Customer's brand id
name: brandId
required: true
schema:
type: string
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/Brand'
example:
brandId: b1c7ccbf-919d-462f-8587-dec95a1b11ee
displayName: Alpha Adventures Corp.
status: DRAFT
legalCompanyName: Alpha Adventures Corp.
entityType: CORPORATION
verticalType: RETAIL
country: US
street: 129 MacDougal Street, Manhattan
city: New York
state: New York
zip: '10012'
taxCountry: US
federalTaxId: '123456789'
website: https://www.alphaadventures.com
companyEmail: contact@alphaadventures.com
contactEmail: contact@alphaadventures.com
contentProvider: false
channels: []
attachments: []
logs: []
createTime: '2024-01-15T10:00:00Z'
updateTime: '2024-01-15T10:00:00Z'
description: OK
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
content:
application/problem+json:
schema:
$ref: '#/components/schemas/RestError'
description: 'NOT_FOUND: The project or brand id introduced does not exist.'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
content:
application/problem+json:
schema:
$ref: '#/components/schemas/RestError'
description: 'INTERNAL: Internal server error. Typically, a server bug.'
security:
- OAuth2:
- read
summary: Get a brand by project and brand id.
tags:
- brands
delete:
x-sinch-stability: preview
description: The endpoint receives as path param project id and brand id. If the project and brand exist, the brand is deleted.
operationId: deleteBrand
parameters:
- in: path
description: Customer's project id
name: projectId
required: true
schema:
type: string
- in: path
description: Customer's brand id
name: brandId
required: true
schema:
type: string
responses:
'204':
description: Brand deleted successfully. No content is returned.
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
content:
application/problem+json:
schema:
$ref: '#/components/schemas/RestError'
description: 'NOT_FOUND: The project or brand id introduced does not exist.'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
content:
application/problem+json:
schema:
$ref: '#/components/schemas/RestError'
description: 'INTERNAL: Internal server error. Typically, a server bug.'
security:
- OAuth2:
- write
summary: Delete a brand by project and brand id.
tags:
- brands
patch:
x-sinch-stability: preview
description: Patches an existing brand. Fields omitted from the request body are unchanged. Fields set to `null` are treated as an explicit request to clear the field; if a field does not support clearing, the request will fail with 400.
operationId: patchBrand
parameters:
- in: path
description: Customer's project id
name: projectId
required: true
schema:
type: string
- in: path
description: Brand Id
name: brandId
required: true
schema:
type: string
requestBody:
required: true
description: Brand object to be updated. The request body can include any subset of the fields required for the brand creation. Only the fields included in the request body with a non-null value will be updated, while the rest of the fields will remain unchanged. This method allows partial updates to the brand properties without the need to provide all the details as in the case of a full update. About attachments, the patch endpoint will not delete any existing attachments, and will include the new ones.
content:
application/json:
schema:
$ref: '#/components/schemas/PatchBrandRequest'
responses:
'200':
description: Brand Content OK
content:
application/json:
schema:
$ref: '#/components/schemas/Brand'
example:
brandId: b1c7ccbf-919d-462f-8587-dec95a1b11ee
displayName: Alpha Adventures Corp.
status: DRAFT
legalCompanyName: Alpha Adventures Corp.
entityType: CORPORATION
verticalType: RETAIL
country: US
street: 129 MacDougal Street, Manhattan
city: New York
state: New York
zip: '10012'
taxCountry: US
federalTaxId: '123456789'
website: https://www.alphaadventures.com
companyEmail: contact@alphaadventures.com
contactEmail: contact@alphaadventures.com
contentProvider: false
channels: []
attachments: []
logs: []
createTime: '2024-01-15T10:00:00Z'
updateTime: '2024-01-15T10:00:00Z'
'400':
content:
application/problem+json:
schema:
$ref: '#/components/schemas/RestError'
description: 'BAD_REQUEST: Any validation error'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
content:
application/problem+json:
schema:
$ref: '#/components/schemas/RestError'
description: 'NOT_FOUND: The project id introduced does not exist.'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
content:
application/problem+json:
schema:
$ref: '#/components/schemas/RestError'
description: 'INTERNAL: Internal server error. Typically, a server bug.'
security:
- OAuth2:
- write
summary: Patches an existing Brand in US with the request data.
tags:
- brands
/v1/projects/{projectId}/us/brands/{brandId}/attachments:
post:
x-sinch-stability: preview
description: Upload an attachment to be linked to a brand.
operationId: uploadBrandAttachment
parameters:
- description: Customer's project id
in: path
name: projectId
required: true
schema:
examples:
- eeew32344324edewe2e3
type: string
- in: path
description: Customer's brand id
name: brandId
required: true
schema:
type: string
requestBody:
required: true
content:
multipart/form-data:
schema:
type: object
required:
- file
- attachmentType
properties:
file:
type: string
format: binary
examples:
- file.txt
description: File content body
attachmentType:
$ref: '#/components/schemas/AttachmentType'
description: File content body
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/Attachment'
example:
attachmentId: d1c7ccbf-919d-462f-8587-dec95a1b11ee
fileName: company_logo.png
attachmentType: COMPANY_LOGO
mimeType: image/png
uploadStatus: COMPLETED
createTime: '2024-01-15T10:00:00Z'
updateTime: '2024-01-15T10:00:00Z'
description: Attachment uploaded successfully.
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
content:
application/problem+json:
schema:
$ref: '#/components/schemas/RestError'
description: 'NOT_FOUND: Brand ID not found'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
content:
application/problem+json:
schema:
$ref: '#/components/schemas/RestError'
description: 'INTERNAL: Internal server error. Typically, a server bug.'
security:
- OAuth2:
- write
summary: Uploads an attachment to be linked to a brand. The attachment will be automatically assigned to the new Brand Orders when needed.
tags:
- brands
/v1/projects/{projectId}/us/brands/{brandId}/attachments/{attachmentId}:
get:
x-sinch-stability: preview
description: Download Brand Attachment.
operationId: downloadBrandAttachment
parameters:
- in: path
description: Customer's project id
name: projectId
required: true
schema:
type: string
- in: path
description: Customer's brand id
name: brandId
required: true
schema:
type: string
- in: path
description: Attachment ID
name: attachmentId
required: true
schema:
type: string
responses:
'200':
content:
application/octet-stream:
schema:
format: binary
type: string
description: Request Successful with binary file returned in octet stream
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
content:
application/problem+json:
schema:
$ref: '#/components/schemas/RestError'
description: 'NOT_FOUND: Brand ID/Attachment ID not found'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
content:
application/problem+json:
schema:
$ref: '#/components/schemas/RestError'
description: 'INTERNAL: Internal server error. Typically, a server bug.'
security:
- OAuth2:
- read
summary: Download brand attachment
tags:
- brands
delete:
x-sinch-stability: preview
description: Delete a Brand attachment.
operationId: deleteBrandAttachment
parameters:
- in: path
description: Customer's project id
name: projectId
required: true
schema:
type: string
- in: path
description: Brand ID
name: brandId
required: true
schema:
type: string
- in: path
description: Attachment ID
name: attachmentId
required: true
schema:
type: string
responses:
'204':
description: Resource successfully deleted. No content is returned.
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
content:
application/problem+json:
schema:
$ref: '#/components/schemas/RestError'
description: 'NOT_FOUND: Brand ID/Attachment ID not found'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
content:
application/problem+json:
schema:
$ref: '#/components/schemas/RestError'
description: 'INTERNAL: Internal server error. Typically, a server bug.'
security:
- OAuth2:
- write
summary: Delete Brand Attachment
tags:
- brands
/v1/projects/{projectId}/us/orders:
get:
x-sinch-stability: preview
description: List Brand Orders, according to the filters applied. This endpoint allows filtering over all brands.
operationId: listBrandOrders
parameters:
- in: path
description: Customer's project id
name: projectId
required: true
schema:
type: string
- in: query
description: The brand Order status to filter the brand orders.
name: status
required: false
schema:
type: array
items:
$ref: '#/components/schemas/BrandOrderStatus'
- in: query
name: metadataName
description: Filter brand orders by brand registration process metadata name.
schema:
$ref: '#/components/schemas/BrandOrderMetadata'
- in: query
name: sort
description: 'Sorting of the results using SQL-like syntax: comma-separated field names with an optional '':desc'' or '':asc'' suffix. Fields that support sorting are ''metadataName'', ''status'', ''createTime'', ''updateTime''. Defaults to ascending order when no suffix is provided.'
schema:
type: string
example: metadataName,status:desc
- in: query
name: pageSize
description: Size of the page to be returned. Default is 20. Maximum is 100.
schema:
format: int32
type: integer
minimum: 1
maximum: 100
default: 20
example: 20
- in: query
name: pageToken
description: Page token to request subsequent pages when using pagination. This should be the value generated by the system in a previous list request.
schema:
type: string
responses:
'200':
description: OK
headers:
Link:
description: Pagination links per RFC 8288. A `rel="next"` link is present when there are more results. Absence of a `next` link indicates the last page.
schema:
type: string
example: <https://compliance.api.sinch.com/v1/projects/{projectId}/us/orders?pageToken=abc123>; rel="next"
content:
application/json:
schema:
$ref: '#/components/schemas/ListBrandOrderResponse'
example:
orders:
- brandOrderId: '212421442412'
brandId: b1c7ccbf-919d-462f-8587-dec95a1b11ee
status: NEW
metadataName: US_10DLC_TCR_PRIVATE_BRAND_REGISTRATION
createTime: '2024-01-15T10:00:00Z'
updateTime: '2024-01-15T10:00:00Z'
links:
next: https://compliance.api.sinch.com/v1/projects/proj-123/us/orders?pageToken=eyJsYXN0SWQiOiIyMTI0MjEifQ
meta:
totalCount: 15
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
content:
application/problem+json:
schema:
$ref: '#/components/schemas/RestError'
description: 'NOT_FOUND: The project id introduced does not exist.'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
content:
application/problem+json:
schema:
$ref: '#/components/schemas/RestError'
description: 'INTERNAL: Internal server error. Typically, a server bug.'
security:
- OAuth2:
- read
summary: List Brand Orders according to the filters applied.
tags:
- orders
/v1/projects/{projectId}/us/brands/{brandId}/orders:
post:
x-sinch-stability: preview
description: 'Creates a new Brand Order for the specified brand ID and process selected.
Note: The `Idempotency-Key` header is not supported in this version. Submitting the same request twice may create duplicate orders. Callers are responsible for deduplicating on their end. Idempotency-Key support will be added when this operation reaches Stable stability.'
operationId: createBrandOrder
parameters:
- in: path
description: Customer's project id
name: projectId
required: true
schema:
type: string
- in: path
description: Brand ID reference
name: brandId
required: true
schema:
type: string
requestBody:
required: true
description: Brand Order object to be created. The request body must include all the required fields for the brand order creation, as well as the optional field callbackUrl that indicates the URL that will receive callbacks with updates on the brand order status. Depending on the process selected for the brand order, different fields will be required and different validations will be applied. Please check the Brand Order object definition for more details on the required fields depending on the process.
content:
application/json:
schema:
$ref: '#/components/schemas/BrandOrderRequest'
responses:
'201':
description: Brand Order Created
content:
application/json:
schema:
$ref: '#/components/schemas/BrandOrder'
example:
brandOrderId: '212421442412'
brandId: b1c7ccbf-919d-462f-8587-dec95a1b11ee
status: NEW
metadataName: US_10DLC_TCR_PRIVATE_BRAND_REGISTRATION
logs: []
channels: []
thirdPartyMetadata: []
pricing:
amount: '5.00'
currencyCode: USD
callbackUrl: https://example.com/callback
createTime: '2024-01-15T10:00:00Z'
updateTime: '2024-01-15T10:00:00Z'
'400':
content:
application/problem+json:
schema:
$ref: '#/components/schemas/RestError'
description: 'BAD_REQUEST: Any validation error'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
content:
application/problem+json:
schema:
$ref: '#/components/schemas/RestError'
description: 'NOT_FOUND: The project id introduced does not exist.'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
content:
application/problem+json:
schema:
$ref: '#/components/schemas/RestError'
description
# --- truncated at 32 KB (126 KB total) ---
# Full source: https://artifacts.apis.io/sinch/openapi/sinch-compliance-brands-api-openapi.yml