Skip to content

Listing numbers

List all the numbers in your account (the main number and the extra numbers) to see the id, alias, phone number and status of each one in a single call.

List numbers

turbo-notify.sh
curl -X GET \
https://api.turbonotify.com/v1/numbers \
-H "Authorization: Bearer YOUR_KEY"
HTTP status: 200
{
  "data": [
    {
      "id": "num_0a1b2c3d4e5f60718293a4b5c6d7e8f9",
      "contact_id": "ct_a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4",
      "name": "Turbo Notify",
      "type": "main",
      "alias": "main",
      "number": "5511973117056",
      "description": null,
      "status": {
        "status": "connected",
        "at": "2025-07-16T09:00:00Z",
        "reason": null
      },
      "scheduled_deletion_at": null
    },
    {
      "id": "num_1b2c3d4e5f60718293a4b5c6d7e8f90a",
      "contact_id": "ct_c7abb1f5ee9640bf86a0a20290810ae9",
      "name": "Condomínio Alpha",
      "type": "extra",
      "alias": "condominio_1",
      "number": "5511988887777",
      "description": "Building 1 notices",
      "status": {
        "status": "connected",
        "at": "2025-07-16T10:01:00Z",
        "reason": null
      },
      "scheduled_deletion_at": "2025-08-16T10:00:00Z"
    },
    {
      "id": "num_2c3d4e5f60718293a4b5c6d7e8f90a1b",
      "contact_id": null,
      "name": null,
      "type": "extra",
      "alias": "condominio_2",
      "number": "5511977776666",
      "description": null,
      "status": {
        "status": "connecting",
        "at": "2025-07-16T10:05:00Z",
        "reason": null
      },
      "scheduled_deletion_at": null
    },
    {
      "id": "num_3d4e5f60718293a4b5c6d7e8f90a1b2c",
      "contact_id": null,
      "name": null,
      "type": "extra",
      "alias": "condominio_3",
      "number": "5511966665555",
      "description": null,
      "status": {
        "status": "pending",
        "at": "2025-07-16T10:10:00Z",
        "reason": null
      },
      "scheduled_deletion_at": null
    }
  ],
  "cursor": null,
  "has_more": false
}

Without filters, GET /v1/numbers returns all the numbers registered in the organization: the main number first, followed by the extra numbers in creation order.

Required scope: numbers:read

Filter

One optional query string filter narrows the list:

ParameterDescription
statusOnly the numbers in this status. Accepts one of the values in the Status table, for example ?status=failed. A value outside the table answers 422 validation_error.

The main number is listed only when it matches the filter.

turbo-notify.sh
# Numbers in the account whose pairing failed
curl -X GET \
"https://api.turbonotify.com/v1/numbers?status=failed" \
-H "Authorization: Bearer YOUR_KEY"
# The number of your customer 4821, by alias or by id
curl -X GET \
"https://api.turbonotify.com/v1/numbers/customer_4821" \
-H "Authorization: Bearer YOUR_KEY"

To find one specific number, fetch it directly: GET /v1/numbers/{ref}, with the alias or the id (see Status).

Response fields

FieldTypeDescription
dataarrayList of the account’s numbers (main + extra)
cursorstring|nullAlways null: this route does not paginate
has_morebooleanAlways false: this route returns all numbers in a single page
data[].idstringIdentifier of the number (num_ and 32 characters). Generated by Turbo Notify, it never changes and stays the same if the alias is renamed. It can be used in place of the alias on any /v1/numbers/{ref}/... route
data[].contact_idstring|nullPublic identifier (ct_…) of the number’s own contact; null until resolved
data[].namestring|nullName of the number’s WhatsApp account (captured on connection); null until a connection has been established
data[].typestring"main" for the main number (always the first item) or "extra" for extra numbers
data[].aliasstringUnique identifier of the number in the account ("main" for the main number)
data[].numberstringPhone number in E.164 digits (no +)
data[].descriptionstring|nullFree-form description you set
data[].statusobject{status, at, reason?}: current state of the number
data[].status.statusstringpending, pairing, inactive, connecting, connected, disconnected, reconnecting, failed or revoked, see Status table
data[].status.atstringISO 8601 timestamp of the moment the number entered its current status (data[].status.status): updates on every transition.
data[].status.reasonstring|nullFailure reason when status.status is "failed" (same values as Failure reasons); null in any other status.
data[].scheduled_deletion_atstring|nullISO 8601 timestamp of the scheduled removal (see Remove); null on the main number and on any extra number with no removal scheduled. The number keeps working, with its usual status, until that date

Possible errors

GET /v1/numbers does not depend on the plan: the main number can always be listed, and the list returns any extra number that already exists in the account regardless of the current plan.

Listing is the only extra number operation available on every plan. All the others (add, check status, connect/disconnect and remove) require a plan that supports extra numbers and return 402 feature_not_available otherwise. In an account that moved to a plan without extra numbers, you can still see the existing extra numbers, but you cannot manage them.

StatusError codeDescription
401not_authenticatedThe API key is invalid or missing.
403insufficient_scopeThe API key does not have the numbers:read scope (the response includes required_scope).
422validation_errorThe status filter has a value that is not in the Status table.
500internal_errorUnexpected internal server error.