Create an SMS purchase quote
POST/api/v1/sms/quotes
curl -X POST 'https://www.unitpost.com/api/v1/sms/quotes' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'User-Agent: my-app/1.0' \
-H 'Content-Type: application/json' \
-d '{ }'{
"object": "sms_quote",
"id": "id_123",
"product": "ten_dlc_brand_registration",
"status": "open",
"label": "string",
"brand_id": "brand_123",
"registration_id": "registration_123",
"messaging_program_id": "messaging_program_123",
"country": "string",
"due_now_cents": 0,
"monthly_cents": 0,
"currency": "usd",
"line_items": [
{
"fee_code": "string",
"label": "string",
"amount_cents": 0,
"cadence": "one_time",
"starts_when": "on_confirmation"
}
],
"covered_by_unitpost": false,
"expires_at": "2026-01-01T00:00:00.000Z",
"created_at": "2026-01-01T00:00:00.000Z",
"confirmed_at": "2026-01-01T00:00:00.000Z",
"order": {
"registration_id": "registration_123",
"number_id": "number_123",
"status": "queued"
},
"confirm_token": "string"
}Price a carrier purchase and bind exactly what it buys: a 10DLC brand registration (or the paid resubmission of one carriers sent back), brand vetting, a 10DLC campaign registered from a messaging program with its local number, the number of an approved campaign that has none, or a local number that needs no registration (Canada). Nothing is charged or submitted. The answer names the product, due_now_cents (charged at the confirm), monthly_cents (from when the number leases or carriers approve the campaign, then monthly), the line items and expires_at (10 minutes), and carries a single-use confirm_token, shown once. Show the person the price, then Confirm an SMS purchase quote. A toll-free number needs an opt-in evidence file a person provides: 409 dashboard_required, with error.dashboard_url. Something already registered or under review, a number the plan can't hold, a failing card or a fee the plan can't fit are refused here, before a price is shown. Requires the sms:manage capability.
Request body7 fields
| Field | Type | Description |
|---|---|---|
productrequired | enumten_dlc_brand_registration | ten_dlc_brand_vetting | ten_dlc_campaign | ten_dlc_number | long_code_number | toll_free_number | What to buy. `ten_dlc_brand_registration` registers a brand with US carriers (or resubmits one they sent back; the fee is the resubmission's). `ten_dlc_brand_vetting` vets an approved brand for higher throughput. `ten_dlc_campaign` registers a 10DLC campaign from a messaging program, with its local number, which leases once carriers approve it. `ten_dlc_number` orders the number of an approved campaign that has none. `long_code_number` orders a local number that needs no registration (`country: "CA"`). `toll_free_number` answers `409 dashboard_required`: it needs an opt-in evidence file a person provides. |
brand_id | string | The SMS brand (`sbrand_…`). |
registration_id | string | `ten_dlc_number`: the approved 10DLC campaign registration (`sreg_…`). |
messaging_program_id | string | `ten_dlc_campaign`: the messaging program (`prog_…`) the campaign is registered from. |
country | string | `long_code_number`: the two-letter country (`CA`). |
display_name | string | `long_code_number`: the number's name in the dashboard. |
brand_verification_email | string | `ten_dlc_brand_registration`: who at the company follows the registry's email link, on the brand website's domain. Required for a public company, or when carriers ask for it; else the brand's saved one. |
Response · 201 fields19 fields
| Field | Type | Description |
|---|---|---|
objectrequired | string | — |
idrequired | string | The quote (`squote_…`). |
productrequired | enumten_dlc_brand_registration | ten_dlc_brand_vetting | ten_dlc_campaign | ten_dlc_number | long_code_number | toll_free_number | — |
statusrequired | enumopen | expired | confirming | ordered | pending | failed | `open` until confirmed or `expires_at`; `ordered` once placed; `pending` while the outcome is unknown (the carrier didn't answer: a fee due now is held, monthly fees are committed, and it settles to `ordered` or `failed` from the billing ledger, so read it again; don't buy the same thing meanwhile); `failed` when the confirm bought nothing (nothing was charged; quote again). |
labelrequired | string | What is bought, as the dashboard names it. |
brand_idrequired | string | null | — |
registration_idrequired | string | null | The registration the order is for (a brand registration, or the campaign whose number it is). |
messaging_program_idrequired | string | null | — |
countryrequired | string | null | — |
due_now_centsrequired | integer | Charged at the confirm, from the plan's allowance (one-time fees). |
monthly_centsrequired | integer | Charged when the number leases or carriers approve the campaign, then every month. |
currencyrequired | string | — |
line_itemsrequired | object[] | — |
covered_by_unitpostrequired | boolean | This workspace's carrier fees are covered by Unitpost: nothing is charged. |
expires_atrequired | string | Confirm before this (quotes last 10 minutes). |
created_atrequired | string | — |
confirmed_atrequired | string | null | — |
orderrequired | object | null | What the confirmed order made; null until then. |
confirm_token | string | Only in the create response, once: pass it to the confirm. Stored only as a hash; a lost token means a new quote. |