List your numbers

GET /v1/numbers

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.

Query parameters

NameTypeRequiredDescription
customer_idstringNoOnly this customer's numbers
tagstringNo
poolstringNoPool id
modetest, liveNo
qstringNoMatches digits of the number or its label

Responses

StatusMeaningBody
200Your active numbersPage of Number
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
429Rate limit or quota exceededError

200: each item in data (Number)

The body is a page: data (the array), has_more, and next_cursor (null on the last page).

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
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
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 GET "https://api.joinsimplesms.com/v1/numbers" \
  -H "Authorization: Bearer $SIMPLESMS_API_KEY"

Node.js

javascript
import { SimpleSMS } from 'joinsimplesms'; // npm install joinsimplesms

const sms = new SimpleSMS(process.env.SIMPLESMS_API_KEY);

const numbers = await sms.numbers.list();

console.log(numbers.data.map((n) => n.phone_number));

Python

python
import os
from joinsimplesms import SimpleSMS  # pip install joinsimplesms

client = SimpleSMS(os.environ["SIMPLESMS_API_KEY"])

numbers = client.numbers.list()

print([n["phone_number"] for n in numbers["data"]])