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.

GET
/v3/channels/sms/{country}/{type}

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"
  }
}
Empty
Empty
{
  "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.