Sending abroad

Most countries need nothing beyond having the destination enabled. Six run a registration scheme, and unregistered traffic there is filtered by the carriers without anybody being told — which looks exactly like a fault at our end.

So we block it instead. Sending to a country that requires registration is refused with SENDER_NOT_REGISTERED until yours is approved. A visible refusal costs you a day; silent filtering costs you a week of debugging something that was never broken.

What each country needs

GET /v1/registration/requirements
GET /v1/registration/requirements?country=US
CountrySchemeTypicallySending from a name
US10DLC~7 daysBanned — number required
CA10DLC~7 daysBanned — number required
INDLT~14 daysAllowed once registered
SASender ID~10 daysAllowed once registered
AESender ID~10 daysAllowed once registered
SGSender ID~10 daysAllowed once registered

Answerable before you have created anything. The first question is always "what will this take?", and making somebody submit a brand to find out is a poor way to answer it.

The US and Canada ban alphanumeric senders outright

Not "they might get filtered" — they are not permitted at all. This catches out most UK businesses, who have only ever sent from their own company name. Registering one there is refused with alphanumeric_not_allowedrather than accepted and then rejected by the registry a week later.

Your brand

PUT /v1/registration/brand

{
  "legal_name": "Acme Salons Ltd",
  "company_number": "09876543",
  "country": "GB",
  "website": "https://acmesalons.co.uk",
  "contact_email": "sam@acmesalons.co.uk"
}

The legal entity behind your traffic. Needed for those six countries andnowhere else, so skip it unless you are going to one of them.

Your website has to mention that you send texts. It is the single most common reason a 10DLC registration comes back rejected, and it is the cheapest thing to fix before you start rather than after.

One brand per account, replaced in place. While it is being vetted it cannot be edited — editing here would not un-submit it at the registry, so the record would stop matching what is actually being reviewed.

Registering a sender

POST /v1/registration/senders

{ "sender_id": "01j8xk…", "country": "US" }
{
  "object": "sender_registration",
  "country": "US",
  "scheme": "10dlc",
  "status": "submitted",
  "expect": "About 7 days. Sending to US is blocked until it is approved…"
}

Statuses run unregistered → submitted → vetted →approved, or rejected with a reason from the registry. A rejected registration can be resubmitted once you have fixed what it named; one already in progress is returned unchanged, because resubmitting does not make it faster.

Check before you send, not after

GET /v1/registration/check?sender_id=01j8xk…&country=US

{
  "can_send": false,
  "reason": "Sending to US requires 10DLC registration, which has not been started. It takes about 7 days."
}

The same check the send path runs, offered up front — so you find out here rather than from a column of failures.

Renting a number

GET  /v1/numbers/available?country=GB
POST /v1/numbers
GET  /v1/numbers
DELETE /v1/numbers/{id}
POST /v1/numbers

{
  "phone_number": "+447700900100",
  "country": "GB",
  "confirm_monthly_cost": 1.50
}

A number is a recurring monthly charge, and the price has to be sent back.confirm_monthly_cost is required, and a mismatch is refused withprice_changed rather than charged quietly. A recurring charge nobody knowingly agreed to is the one billing complaint that is always justified.

We buy at the carrier first and record it second. A failed purchase has spent nothing; a failed write leaves a number we are paying for, which reconciles against the carrier. The other order would leave a record of a number we never bought.

Releasing

The monthly charge stops. Two things people forget: replies to that number will not reach you any more, and the number may be reissued to somebody else. The sender is deactivated rather than deleted, so messages already sent from it still resolve and a conversation threaded on it keeps its thread.