Understand how you can use Number Intelligence API to validate and enrich SMS destination numbers before routing messages.
API Endpoint
Number Intelligence is supported via
API endpoint for it is: https ://{YourRegion}.webexconnect.io/v1/number-intelligence/lookup.
Please modify YourRegion in the URL to reflect your tenant’s region. See Know Your Endpoint Page.
API Access
This API is currently in beta and only available to select regions and clients. Please reach out to your account manager for access.
Introduction
Number Intelligence Lookup API helps you validate and enrich SMS destination numbers before sending messages. Use this API to normalize phone numbers, confirm whether a number is valid and text-enabled, and retrieve carrier details. This information can be used to decide whether to send a communication via SMS or use a different channel such as voice. The API supports both single-number and bulk lookups, returning one result for each submitted destination.
Prerequisites
This API supports Cisco Webex Common Identity (CI) authentication and requires creation of a Service App in Webex Developer Portal (https://developer.webex.com/). For Webex Connect tenants that do not have a Webex Org ID assigned yet, there is an additional pre-requisite step of getting it generated by logging a request with your account manager.
Doing a Number Intelligence lookup via API
Use Number Intelligence API to validate and enrich SMS destination numbers before sending messages.
Request Body
{
"destinations": [
{
"number": "+447911123456", // Mandatory. E.164 format is accepted as-is.
},
{
"number": "14155552671",
"countryISO": "US" // Optional. Required when number is in local or national format.
}
]
}
Number Intelligence Lookup API Body Parameters
The following are the parameters of the request body:
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
| destinations | JSONArray | yes | An array of destination JSON objects to be looked up. The array must contain at least one item and must not exceed the configured maximum size. The default maximum is 100 destinations. |
| number | string | yes | Phone number to be looked up. Submit the number in E.164 format where possible, for example +447911123456. Local or national format is accepted only when country_iso is provided for the same destination object. |
| countryISO | string | no | Two-letter ISO country code used to normalize local or national format numbers, for example GB or US. If number is already in E.164 format, this field is ignored. |
Note:
The request payload must not exceed 1MB.
Destination numbers in local or national format require countryISO. If countryISO is missing, that destination is returned as an item-level error and other destinations in the same request continue to be processed.
The order of results always matches the order of submitted destinations.
Sample Response Body
{
"response": [
{
"transId": "7f3af32c-8d6a-4b1e-b1c8-4805135ada71",
"timestamp": "2026-04-15T13:53:13.749+01:00",
"status": "success",
"number": "+447911123456",
"valid": true,
"textEnabled": true,
"carrierId": "GBXXX",
"carrierName": "Example Carrier",
"mcc": "234",
"mnc": "001",
"countryISO": "GB"
},
{
"transId": "7f3af32c-8d6a-4b1e-b1c8-4805135ada71_1",
"timestamp": "2026-04-15T13:53:13.749+01:00",
"status": "success",
"number": "+14155552671",
"valid": true,
"textEnabled": true,
"carrierId": "USXXX",
"carrierName": "Example Mobile",
"mcc": "310",
"mnc": "410",
"countryISO": "US"
}
]
}
{
"response": [
{
"transId": "7f3af32c-8d6a-4b1e-b1c8-4805135ada71",
"timestamp": "2026-04-15T13:53:13.749+01:00",
"status": "success",
"number": "+447911123456",
"valid": true,
"textEnabled": true,
"carrierId": "GBXXX",
"carrierName": "Example Carrier",
"mcc": "234",
"mnc": "001",
"countryISO": "GB"
},
{
"transId": "7f3af32c-8d6a-4b1e-b1c8-4805135ada71_1",
"timestamp": "2026-04-15T13:53:13.749+01:00",
"status": "error",
"number": "07911123456",
"error": "destinations[1].number is in local/national format but destinations[1].country_iso is missing. Provide a valid ISO country code to normalize this number."
}
]
}
{
"error": {
"code": "INVALID_REQUEST_BODY",
"message": "Invalid request: request body is missing or contains malformed JSON."
}
}
{
"error": {
"code": "INVALID_TOKEN",
"message": "Unauthorized: Bearer token is missing or invalid."
}
}
{
"error": {
"code": "MISSING_SCOPE",
"message": "Forbidden: Token does not include the required scope 'cpaas:number_intelligence'."
}
}
{
"error": {
"code": "ORG_RATE_LIMIT_EXCEEDED",
"message": "Too Many Requests: You have exceeded the number intelligence API rate limit for your organization. Please try again later."
}
}
{
"error": {
"code": "NIS_UNAVAILABLE",
"message": "Service Unavailable: The number intelligence provider is currently unavailable. Please try again later."
}
}
API Response and Error Codes
The Number Intelligence Lookup API is a synchronous API. For a valid request, the API returns HTTP 200 with a response array. Each item in the array represents the lookup result for the corresponding item in the request. If one destination fails but at least one destination can still be processed, the API returns HTTP 200. Check response [i]. status for each destination. For more information, see Channel Specific Status Codes.
Number Intelligence Lookup API Response Parameters
The following are the parameters returned in a successful HTTP 200 response:
| Parameter | Type | Description |
|---|---|---|
| response | JSONArray | Array of lookup result objects. The array contains one item per submitted destination and preserves request order. |
| transId | string | Transaction identifier for the lookup item. The first item contains the base UUID. Subsequent items contain the same UUID with a numeric suffix, for example _1, _2. |
| timestamp | string | Server timestamp in ISO-8601 format with timezone offset. |
| status | string | Lookup status for the item. Possible values are success and error. |
| number | string | Normalized E.164 phone number for successful items. For item-level validation errors, this may contain the submitted value. |
| valid | boolean | Indicates whether the number was recognized as a valid, reachable destination. |
| textEnabled | boolean | Indicates whether the destination number is enabled for text messaging. |
| carrierId | string | Carrier identifier returned for the destination number. |
| carrierName | string | Carrier name returned for the destination number. |
| mcc | string | Mobile country code. |
| mnc | string | Mobile Network code. |
| countryISO | string | Two-letter ISO country code derived for the destination number. |
| error | string | Error message for an item-level failure. This field is omitted for successful items. |
Note:
If a destination number is not found, the API returns the item with status as success, valid as false, and textEnabled as false.
Error Codes
| HTTP Status | Error Code | Message |
|---|---|---|
| 400 | INVALID_REQUEST_BODY | Invalid request: request body is missing or contains malformed JSON. |
| 400 | MISSING_DESTINATIONS | Invalid request: destinations field is required and must be an array. |
| 400 | EMPTY_DESTINATIONS | Invalid request: destinations array must contain at least one item. |
| 400 | DESTINATIONS_LIMIT_EXCEEDED | Invalid request: destinations array exceeds the maximum allowed size of {limit} items. |
| 401 | MISSING_AUTH_HEADER | Unauthorized: Authorization header is missing. |
| 401 | INVALID_TOKEN | Unauthorized: Bearer token is missing or invalid. |
| 401 | UNRESOLVABLE_ORG | Unauthorized: Unable to resolve organization identifier from the provided token. |
| 401 | UNKNOWN_TENANT | Unauthorized: Organization is not recognized as an authorized tenant. |
| 403 | FEATURE_DISABLED | Forbidden: The Number Intelligence API is not enabled for your organization. Please contact your administrator. |
| 413 | PAYLOAD_TOO_LARGE | Request payload exceeds the maximum allowed size of 1MB. |
| 429 | RATE_LIMIT_EXCEEDED | Too Many Requests: Rate limit exceeded. Please reduce your request rate and try again. |
| 429 | ORG_RATE_LIMIT_EXCEEDED | Too Many Requests: You have exceeded the number intelligence API rate limit for your organization. Please try again later. |
| 500 | INTERNAL_ERROR | Internal Server Error: An unexpected error occurred. Please contact support if the problem persists. |
| 503 | NIS_UNAVAILABLE | Service Unavailable: The number intelligence provider is currently unavailable. Please try again later. |
Item-Level Error Messages
Item-level failures are returned inside the HTTP 200 response body. These errors affect only the corresponding destination object.
| Error Scenario | Status | Message |
|---|---|---|
| Missing number field | error | destinations[{i}]. number is required and must not be null or empty. |
| Local or national number without country_iso | error | destinations[{i}]. number is in local/national format but destinations[{i}].country_iso is missing. Provide a valid ISO country code to normalize this number. |
| Number cannot be normalized | error | Phone number at index {i} could not be normalized to E.164 format. Provide a valid 'country_iso' or submit the number in E.164 format. |
| Lookup provider error for one destination | error | Number lookup failed: The number intelligence provider returned an error for this destination. |
Rate Limits
Number Intelligence Lookup API requests are subject to your organization's configured transactions-per-second limit. If the limit is exceeded, the API returns HTTP 429.
Limits
| Limit | Default |
|---|---|
| Maximum request payload size | 1MB |
| Default maximum destinations per request | 100 |
What’s Next
Tell your users what they should do after they've finished this page
