Attach a number to a registration

POST /v1/numbers/{id}/registration

Ties a live US local number to one of your registrations. Needed only when you have more than one approved registration, or to retry a link that failed; otherwise numbers follow your registration on their own. If the registration is approved the number is linked with the carriers (sender.state pending, then active); a registration holds at most 49 numbers. Emits number.sender_updated.

Send your API key as a bearer token: Authorization: Bearer ssms_sk_.... Test keys run this endpoint against the sandbox; see Authentication for key modes and scopes.

Path parameters

NameTypeRequiredDescription
idstringYesThe E.164 number

Request body

JSON (Content-Type: application/json).

FieldTypeRequiredDescription
registration_idstringYesExample: reg_a1B2c3D4e5F6.

Responses

StatusMeaningBody
200The number with its new senderNumber
400Unknown registration, or a number that is not registered (sandbox, toll-free)Error
401Missing, malformed, or revoked API keyError
402Billable live calls only: the prepaid credit balance cannot cover the call (insufficient_credits); nothing was done or chargedError
404Not foundError
409The registration already has 49 numbers, or the number is active elsewhere and this registration is not approved yetError
429Rate limit or quota exceededError

200: Number fields

FieldTypeDescription
idstringExample: +15005550132.
objectnumber
phone_numberstring
statusactive, released
modetest, live
created_atstring (date-time)
customer_idstringThe customer this number is assigned to Nullable.
labelstringNullable.
tagsarray of string
poolsarray of stringPool ids
senderobjectHow the number stands with the carriers. null on sandbox numbers and on numbers that need no registration (toll-free, Canadian). Only an active number can text anyone; in every other state it can text only your verified numbers. Nullable.
sender.statetest_only, pending, active, action_neededtest_only: no registration submitted. pending: a registration is in review, or approved and being linked. active: linked to an approved registration. action_needed: see reason.
sender.registration_idstringThe registration it is (being) linked to Nullable.
sender.reasonstringWhat to do, in plain words, when state is action_needed Nullable.
sender.updated_atstring (date-time)

Errors

StatusWhen
400Unknown registration, or a number that is not registered (sandbox, toll-free)
401Missing, malformed, or revoked API key
402Billable live calls only: the prepaid credit balance cannot cover the call (insufficient_credits); nothing was done or charged
404Not found
409The registration already has 49 numbers, or the number is active elsewhere and this registration is not approved yet
429Rate limit or quota exceeded

Every error has the same JSON shape, and request_id matches the X-Request-Id response header. Errors lists every code and what to do about it.

json
{
  "error": {
    "code": "invalid_request",
    "message": "What went wrong, in plain words.",
    "param": "the_field",
    "request_id": "req_a1B2c3D4e5F6g7H8"
  }
}

Examples

curl

bash
curl -X POST "https://api.joinsimplesms.com/v1/numbers/+15005550132/registration" \
  -H "Authorization: Bearer $SIMPLESMS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "registration_id": "reg_a1B2c3D4e5F6"
}'

Node.js

The Node.js SDK does not wrap this endpoint yet; call it with fetch.

javascript
const res = await fetch('https://api.joinsimplesms.com/v1/numbers/+15005550132/registration', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.SIMPLESMS_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "registration_id": "reg_a1B2c3D4e5F6"
  }),
});

if (!res.ok) throw new Error((await res.json()).error.message);
const data = await res.json();

Python

The Python SDK does not wrap this endpoint yet; call it over HTTP.

python
import json, os, urllib.request

req = urllib.request.Request(
    "https://api.joinsimplesms.com/v1/numbers/+15005550132/registration",
    method="POST",
    headers={
        "Authorization": f"Bearer {os.environ['SIMPLESMS_API_KEY']}",
        "Content-Type": "application/json",
    },
    data=json.dumps({
        "registration_id": "reg_a1B2c3D4e5F6"
    }).encode(),
)
with urllib.request.urlopen(req) as res:
    data = json.load(res)