You can use the Available Number API to search for available numbers or activate an available number.
Numbers | Sinch (1.0.3)
The Numbers API enables you to search for, view, and activate numbers. It's considered a precursor to other APIs in the Sinch product family. The numbers API can be used in tandem with any of our APIs that perform messaging or calling. Once you have activated your numbers, you can then use the various other APIs, such as SMS or Voice, to assign and use those numbers.
Let's take a brief look at some of the formats used in the REST API.
JSON (application/json) is the content type of both requests and responses if not otherwise specified.
Requests with invalid JSON will be rejected.
Null values can be omitted in requests and will be omitted in responses. In some cases, explicitly setting null will overwrite a previously set value with null.
Only phone numbers in E.164 standard format are accepted by the API.
A summary of status codes can be found on the HTTP status codes page.
To successfully use callbacks with Numbers, add the following IP addresses to your allowlist:
- 54.76.19.159
- 54.78.194.39
- 54.155.83.128
New features might result in additional request and response parameters. New request parameters will either have a default value or be considered optional to retain backwards compatibility. It's highly recommended to ignore any unexpected parameters when reading JSON in API responses and in callback handlers.
You can use the Number Order API to search for available numbers or activate an available number after providing KYC info.
Steps for buying a number via an order and providing the required KYC information:
- "Lookup number requirements" endpoint: look up country KYC requirements to establish which fields / information needs to be provided as part of buying the phone number. Also reveals if any attachment files need to be provided.
- "Search for available phone numbers" endpoint: search numbers you may want to buy.
- "Create a number order" endpoint: create the Number Order for a specific phone number or for a set of criteria (max 1 number per order supported now), which reserved the number for 48h, giving plenty of time to call the other endpoint to submit the fields required as revealed by the API at 1. and also to hit the final Submit endpoint.
- "Update number order registration" endpoint: update the order Registration (container for the actual KYC required fields / information revealed at step #1). This is validated on the spot for required / optional fields, fields lengths etc. (also revealed at step #1).
- "Upload an attachment for a number order" endpoint: upload file attachments - only if mandatory as per requirements revealed by step #1. AttachmentId necessary for the URL will be returned at step #1.
- "Submit number order" endpoint: submit the order - final step after creating the order and providing registration info and (if required) attachments
You can follow a detailed tutorial outlining the entire ordering process here.
Request
Returns required KYC fields info based on number type & country legislation.
You can follow a detailed tutorial outlining the entire ordering process here.
Found on your Sinch Customer Dashboard. Settings > Projects.
ISO 3166-1 alpha-2 country code of the phone number. Example: US, GB or SE.
- Global APIhttps://numbers.api.sinch.com/v1/projects/{projectId}/numberOrders:lookupNumberRequirements
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X POST \
-u <username>:<password> \
https://numbers.api.sinch.com/v1/projects/YOUR_projectId/numberOrders:lookupNumberRequirements \
-H 'Content-Type: application/json' \
-d '{
"regionCode": "AU",
"numberType": "MOBILE"
}'{ "fields": { "schema": "/schema/policySchema-v1.json", "rules": [ … ], "attachments": [] } }
Request
Create a number order for a specific number or a set of criteria (quantity, pattern etc.) - reserves the provider numbers for 48h and creates entities for collecting KYC info.
You can follow a detailed tutorial outlining the entire ordering process here.
Found on your Sinch Customer Dashboard. Settings > Projects.
Create a number order
ISO 3166-1 alpha-2 country code of the phone number. Example: US, GB or SE.
The number type.
| Enum Value | Description |
|---|---|
| MOBILE | Numbers that belong to a specific range. |
| LOCAL | Numbers that are assigned to a specific geographic region. |
| TOLL_FREE | Numbers that are free of charge for the calling party but billed for all arriving calls. |
SMS Configuration for KYC numbers, containing the servicePlanId and campaignId.
- Global APIhttps://numbers.api.sinch.com/v1/projects/{projectId}/numberOrders:createNumberOrder
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
- CreateAustralianNumberOrderRequest
- CreateUsQuantityOrderRequest
curl -i -X POST \
-u <username>:<password> \
https://numbers.api.sinch.com/v1/projects/YOUR_projectId/numberOrders:createNumberOrder \
-H 'Content-Type: application/json' \
-d '{
"regionCode": "AU",
"numberType": "MOBILE",
"smsConfiguration": {
"servicePlanId": "1dez6a8300774283a4256aa756a11111"
},
"callbackUrl": "https://www.your-callback-server.com/callback",
"numberOrderOption": {
"phoneNumbers": [
"+61411111112"
]
}
}'OK
ISO 3166-1 alpha-2 country code of the phone number. Example: US, GB or SE.
The state of the number order
| Enum Value | Description |
|---|---|
| NUMBER_ORDER_STATE_UNSPECIFIED | State not specified. |
| CREATED | Created state. |
| EXPIRED | Expired state. |
| IN_REVIEW | Order in review. |
| BLOCKED | Order blocked. |
| REJECTED | Order rejected. |
| COMPLETED | Order completed. |
The number type.
| Enum Value | Description |
|---|---|
| MOBILE | Numbers that belong to a specific range. |
| LOCAL | Numbers that are assigned to a specific geographic region. |
| TOLL_FREE | Numbers that are free of charge for the calling party but billed for all arriving calls. |
SMS Configuration for KYC numbers, containing the servicePlanId and campaignId.
{ "projectId": "10d64985-0bfb-43d3-a2b9-bc5fa6a4752c", "idNumberOrder": "03kjzencnckxrn216rr1zzzzzz", "regionCode": "AU", "state": "CREATED", "numberType": "MOBILE", "orderNumbers": [ { … } ], "smsConfiguration": { "servicePlanId": "1dez6a8300774283a4256aa756a11111" }, "expireTime": "2026-03-07T16:53:00.204187Z", "createTime": "2026-03-05T16:53:00Z", "updateTime": "2026-03-05T16:53:00Z" }
Request
Returns the number order alongside all reserved numbers.
You can follow a detailed tutorial outlining the entire ordering process here.
Found on your Sinch Customer Dashboard. Settings > Projects.
- Global APIhttps://numbers.api.sinch.com/v1/projects/{projectId}/numberOrders/{numberOrderId}
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
-u <username>:<password> \
'https://numbers.api.sinch.com/v1/projects/YOUR_projectId/numberOrders/{numberOrderId}'OK
ISO 3166-1 alpha-2 country code of the phone number. Example: US, GB or SE.
The state of the number order
| Enum Value | Description |
|---|---|
| NUMBER_ORDER_STATE_UNSPECIFIED | State not specified. |
| CREATED | Created state. |
| EXPIRED | Expired state. |
| IN_REVIEW | Order in review. |
| BLOCKED | Order blocked. |
| REJECTED | Order rejected. |
| COMPLETED | Order completed. |
The number type.
| Enum Value | Description |
|---|---|
| MOBILE | Numbers that belong to a specific range. |
| LOCAL | Numbers that are assigned to a specific geographic region. |
| TOLL_FREE | Numbers that are free of charge for the calling party but billed for all arriving calls. |
SMS Configuration for KYC numbers, containing the servicePlanId and campaignId.
{ "projectId": "10d64985-0bfb-43d3-a2b9-bc5fa6a4752c", "idNumberOrder": "03kjzencnckxrn216rr1zzzzzz", "regionCode": "AU", "state": "CREATED", "numberType": "MOBILE", "orderNumbers": [ { … } ], "smsConfiguration": { "servicePlanId": "1dez6a8300774283a4256aa756a11111" }, "expireTime": "2026-03-07T16:53:00.204187Z", "createTime": "2026-03-05T16:53:00Z", "updateTime": "2026-03-05T16:53:00Z" }
Request
Updates the registration (vehicle for KYC info) for a specific number order. Validated against the country requirements revealed by the "Lookup number requirements" endpoints.
You can follow a detailed tutorial outlining the entire ordering process here.
Found on your Sinch Customer Dashboard. Settings > Projects.
- Global APIhttps://numbers.api.sinch.com/v1/projects/{projectId}/numberOrders/{numberOrderId}/registration
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X PUT \
-u <username>:<password> \
'https://numbers.api.sinch.com/v1/projects/YOUR_projectId/numberOrders/{numberOrderId}/registration' \
-H 'Content-Type: application/json' \
-d '{
"requestDetails": {
"data": [
[
{
"senderId": "+61XXXXXXXXX",
"purposeOfTheTraffic": "One Time Password",
"intendedUseOfMobileNumbers": "Transactional",
"iConfirmThatMyBusinessHasAValidUseCaseForThisLn": true
}
],
{
"endBusinessName": "ExampleExample",
"endBusinessAddress": "ExampleExample",
"endBusinessAddress2": "ExampleExample",
"city": "Victoria",
"state": "VIC",
"country": "AU",
"postalCode": "3000"
},
{
"firstName": "Example",
"lastName": "Example",
"phoneNumber": "+61XXXXXXXXX"
}
]
}
}'{ "requestDetails": { "data": [ … ] } }
Request
Retrieves the Registration submitted for a number order via the "Update number order registration" endpoint.
You can follow a detailed tutorial outlining the entire ordering process here.
Found on your Sinch Customer Dashboard. Settings > Projects.
- Global APIhttps://numbers.api.sinch.com/v1/projects/{projectId}/numberOrders/{numberOrderId}/registration
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
-u <username>:<password> \
'https://numbers.api.sinch.com/v1/projects/YOUR_projectId/numberOrders/{numberOrderId}/registration'{ "requestDetails": { "data": [ … ] } }
Request
Upload file attachments to a number order registration. Mandatory only if revealed in the requirements returned by the "Lookup number requirements" endpoint.
The "attachmentId" URL parameter is the one returned by the "Lookup number requirements" endpoint.
You can follow a detailed tutorial outlining the entire ordering process here.
Found on your Sinch Customer Dashboard. Settings > Projects.
File attachment upload request body with Content-Type = multipart/form-data
- Global APIhttps://numbers.api.sinch.com/v1/projects/{projectId}/numberOrders/{numberOrderId}/attachments/{attachmentId}
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X POST \
-u <username>:<password> \
'https://numbers.api.sinch.com/v1/projects/YOUR_projectId/numberOrders/{numberOrderId}/attachments/d1c7ccbf-919d-462f-8587-dec95a1b11zz' \
-H 'Content-Type: multipart/form-data' \
-F file=string \
-F documentType=stringRequest
Submits the order for review, assuming the KYC info and attachments were submitted using their dedicated endpoints.
You can follow a detailed tutorial outlining the entire ordering process here.
Found on your Sinch Customer Dashboard. Settings > Projects.
- Global APIhttps://numbers.api.sinch.com/v1/projects/{projectId}/numberOrders/{numberOrderId}/submit
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X POST \
-u <username>:<password> \
'https://numbers.api.sinch.com/v1/projects/YOUR_projectId/numberOrders/{numberOrderId}/submit'OK
ISO 3166-1 alpha-2 country code of the phone number. Example: US, GB or SE.
The state of the number order
| Enum Value | Description |
|---|---|
| NUMBER_ORDER_STATE_UNSPECIFIED | State not specified. |
| CREATED | Created state. |
| EXPIRED | Expired state. |
| IN_REVIEW | Order in review. |
| BLOCKED | Order blocked. |
| REJECTED | Order rejected. |
| COMPLETED | Order completed. |
The number type.
| Enum Value | Description |
|---|---|
| MOBILE | Numbers that belong to a specific range. |
| LOCAL | Numbers that are assigned to a specific geographic region. |
| TOLL_FREE | Numbers that are free of charge for the calling party but billed for all arriving calls. |
SMS Configuration for KYC numbers, containing the servicePlanId and campaignId.
{ "projectId": "10d64985-0bfb-43d3-a2b9-bc5fa6a4752c", "idNumberOrder": "03kjzencnckxrn216rr1zzzzzz", "regionCode": "AU", "state": "CREATED", "numberType": "MOBILE", "orderNumbers": [ { … } ], "smsConfiguration": { "servicePlanId": "1dez6a8300774283a4256aa756a11111" }, "expireTime": "2026-03-07T16:53:00.204187Z", "createTime": "2026-03-05T16:53:00Z", "updateTime": "2026-03-05T16:53:00Z" }
You can set up callback URLs to receive event notifications when your numbers are updated.
When delivering events the order is not guaranteed (for example, a failed event scheduled for retry will not block other events that were queued).
The client's callback handler must implement the state machine that can decide what to do with unexpected events, for example, "old" events or invalid state transitions. In these cases the handler could use the API to GET the latest state for the resource.
The callback handler is expected to "ingest" the event and respond with 200 OK. The domain-specific business logic and processes should be executed outside of the callback request, as internal asynchronous jobs.
To use callbacks, add the following IP addresses to your allowlist:
- 54.76.19.159
- 54.78.194.39
- 54.155.83.128