Create an SMS purchase quote

Create an SMS purchase quote

POST/api/v1/sms/quotes

POST /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 '{ }'
Response · 201
{
  "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
FieldTypeDescription
productrequiredenumten_dlc_brand_registration | ten_dlc_brand_vetting | ten_dlc_campaign | ten_dlc_number | long_code_number | toll_free_numberWhat 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_idstringThe SMS brand (`sbrand_…`).
registration_idstring`ten_dlc_number`: the approved 10DLC campaign registration (`sreg_…`).
messaging_program_idstring`ten_dlc_campaign`: the messaging program (`prog_…`) the campaign is registered from.
countrystring`long_code_number`: the two-letter country (`CA`).
display_namestring`long_code_number`: the number's name in the dashboard.
brand_verification_emailstring`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
FieldTypeDescription
objectrequiredstring—
idrequiredstringThe quote (`squote_…`).
productrequiredenumten_dlc_brand_registration | ten_dlc_brand_vetting | ten_dlc_campaign | ten_dlc_number | long_code_number | toll_free_number—
statusrequiredenumopen | 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).
labelrequiredstringWhat is bought, as the dashboard names it.
brand_idrequiredstring | null—
registration_idrequiredstring | nullThe registration the order is for (a brand registration, or the campaign whose number it is).
messaging_program_idrequiredstring | null—
countryrequiredstring | null—
due_now_centsrequiredintegerCharged at the confirm, from the plan's allowance (one-time fees).
monthly_centsrequiredintegerCharged when the number leases or carriers approve the campaign, then every month.
currencyrequiredstring—
line_itemsrequiredobject[]—
covered_by_unitpostrequiredbooleanThis workspace's carrier fees are covered by Unitpost: nothing is charged.
expires_atrequiredstringConfirm before this (quotes last 10 minutes).
created_atrequiredstring—
confirmed_atrequiredstring | null—
orderrequiredobject | nullWhat the confirmed order made; null until then.
confirm_tokenstringOnly in the create response, once: pass it to the confirm. Stored only as a hash; a lost token means a new quote.
201400401402403404409422429

Search docs and guides

Search the docs and product guides.