Get one SMS market (country and sender type)
Reads one market you send in — its sender, where that sender stands, and everything its compliance holds.
What compliance carries
A market that registers with a compliance regime reports brand — the identity the registration is filed against — and campaign, the programme filed against it. Each carries inherit, saying whether it is yours or your organization's.
A market that registers with nobody has neither, so both keys are absent rather than null: absent says this market does not ask, where null would say it asks and you supplied nothing. It reports documents instead.
GET /v3/compliance/requirements says what a market demands of any new customer; this says what you gave it.
Writing it back
PATCH this same path, with the compliance object from this response:
{ "compliance": { "brand": { "tax_id": "12-3456789" } } }
Nothing else to learn — what comes back can be sent back, an omitted key is left alone. There is no sub-resource for either half: both are singletons of the market, so both are written here.
GET /v3/compliance/requirements says what a market demands of anybody; this says what you gave it.
Send x-profile-id with an organization key to read one of your profiles' markets.
Response Body
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v3/channels/sms/US/ten_dlc"{
"success": true,
"data": {
"country": "US",
"number_type": "TEN_DLC",
"sender_value": "+12125550100",
"status": "ACTIVE",
"note": "This market's sender is live and can carry traffic.",
"compliance": {
"brand": {
"inherit": false,
"legal_name": "Example Retail Inc",
"entity_type": "PRIVATE_PROFIT",
"country": "US",
"website": "https://example.com"
},
"campaign": {
"inherit": false,
"description": "Order and delivery updates for customers who opted in at checkout."
},
"documents": []
}
},
"meta": {
"request_id": "req_6C4eQo0rTv",
"timestamp": "2025-06-01T12:00:00+00:00",
"version": "v3"
}
}{
"success": false,
"data": null,
"error": {
"code": "VALIDATION_001",
"message": "type must be one of: LOCAL, MOBILE, TEN_DLC, TOLL_FREE, SHORT_CODE, ALPHANUMERIC",
"details": null,
"doc_url": "https://docs.sent.dm/reference/api/error-catalog"
},
"meta": {
"request_id": "req_6C4eQo0rTv",
"timestamp": "2025-06-01T12:00:00+00:00",
"version": "v3"
}
}{
"success": false,
"data": null,
"error": {
"code": "RESOURCE_013",
"message": "This customer does not send in US as TEN_DLC",
"details": null,
"doc_url": "https://docs.sent.dm/reference/api/error-catalog"
},
"meta": {
"request_id": "req_6C4eQo0rTv",
"timestamp": "2025-06-01T12:00:00+00:00",
"version": "v3"
}
}{
"success": true,
"error": {
"code": "string",
"message": "string",
"details": {
"property1": [
"string"
],
"property2": [
"string"
]
},
"doc_url": "string"
},
"meta": {
"request_id": "string",
"timestamp": "2019-08-24T14:15:22Z",
"version": "string"
}
}List your SMS markets GET
Every market you send SMS in, each with its sender, where that sender stands, and what its compliance holds. The same entries `GET /v3/channels` reports under `sms`, and the same shape `GET /v3/channels/sms/{country}/{type}` returns for one of them — so a list, a member read and the all-channels read cannot describe a market differently. Send `x-profile-id` with an organization key to list one of your profiles' markets.
Add an SMS market — a country and sender type POST
Gives the customer a sender in one country — the first market it sends in, and the fifth. ## What to have in place first **Call `GET /v3/compliance/requirements?country=US&type=TEN_DLC` first.** It returns this request's body ready to fill in, plus the brand and campaign calls to make before it, in order. You never have to track forty countries' rules yourself. **A market that registers with a compliance regime needs an identity, and this call takes one.** US `TEN_DLC` registers with The Campaign Registry and files that registration against a business identity. Send it in `compliance.brand` and it is recorded here, before the registration that attaches to it — so a customer with no identity reaches a first 10DLC market in one call. `{ "inherit": true }` runs on your organization's instead. A market with neither — none stored, none sent — is `400`, because accepting it would write a channel that could never register and leave it provisioning for ever with nothing saying why. **Everything the regime wants arrives in this request's `compliance`**, as two declared objects: `brand` — the identity the registration is filed against — and `campaign`, with the use case, the consent narrative, the volume, the sample messages and the keywords. There is nothing to set up first. Nothing is submitted here either: the rows are what a submission is later assembled from, and filing is externally rejectable so it happens on its own path. A market that registers with nobody — an alphanumeric sender in most countries — needs neither, and may need documents instead. ## Sending it Takes the same fields `channels.sms` takes on `POST /v3/sender-profiles`, because it is the same work, and both run one provisioning path. `compliance` is top-level and answers for the market in this request, carrying `brand` and `campaign` where the market registers. **Accepts multipart as well as JSON**, with each file named after the compliance key it satisfies — a market that pre-registers its sender needs its documents at the same moment it needs the sender. A market the customer already holds is `409`: adding what is already there is a mistake worth reporting rather than a silent no-op. A market is a `(country, sender_type)` pair, so a **second sender type in a country you already send in is fine** — `US TOLL_FREE` alongside `US TEN_DLC` is the ordinary case. Two of the same type is not. One exception: while a market's sender type is still unassigned, adding any type to that country is `409`, because the market you have may be about to become the one you asked for. Returns **the market**, in the shape `GET` and `PATCH` on `/v3/channels/sms/{country}/{type}` use — so what this answers can be read back and written back without reshaping. Not every channel you have: adding a market cannot change an RCS agent or a WhatsApp account, and `GET /v3/channels` is the whole picture. `201` when the market is ready; `202` while a sender or a registration is still outstanding. Send `x-profile-id` with an organization key to add a market to one of your profiles.