Every parameter, the live response, and every documented success/error is on one screen.
getNumber
V1
GET / POST
Purchase a phone number for a service/country.
Accepts comma-separated values — a Tiger SMS exclusive.
Accepted but currently ignored (no validation rule, silently dropped, no error): operator, phoneException, minPrice.
Automatic country detection (e.g. `country=any`) is not supported: `country` must be a numeric country code — a non-numeric or unknown country returns BAD_COUNTRY.
Comma-separated lists on this method are supported for providerIds/exceptProviderIds only. Top-level `service`/`country` do not accept comma lists here — that capability is coming soon on the price-lookup methods (getPrices/getFreePrices/getPricesV2/getPricesV3) only.
getNumberTest behaves exactly like getNumber, but is the documented way to explicitly pass activationType/testParams.
This is a real request — a successful call can charge your balance or change a live activation.
Sign in to execute this request with your own API key.
Log InSign Up
All documented responses
setStatus
V1
GET / POST
Change the status of an activation (ready/retry/cancel/complete).
The response is always a plain status token, never a JSON envelope — use setStatusV2 if you need JSON.
Sign in to execute this request with your own API key.
Log InSign Up
All documented responses
getStatus
V1
GET / POST
Poll the status/code of an activation.
Sign in to execute this request with your own API key.
Log InSign Up
All documented responses
getPrices
V1
GET / POST
Flat price/count map by country and service.
Accepts comma-separated values — a Tiger SMS exclusive.
An unknown or removed service/country code returns BAD_SERVICE/BAD_COUNTRY. A valid code that simply has no offered variation for the pair still yields an empty result (the key is omitted).
Comma-separated lists (when enabled): each token is validated the same way as a single value; if none of the listed codes exist, BAD_SERVICE/BAD_COUNTRY is returned.
The recommended maxPrice for getNumber is NOT cost but saleAveragePrice (see getFreePrices/getPricesV2, getOffers prices.default/avg, getPricesV3): purchases are captured at the actual (usually lower) price while avoiding NO_NUMBERS/WRONG_MAX_PRICE when the cheapest bucket dries up. Your personal contract price, when set, still overrides cost.
Sign in to execute this request with your own API key.
Log InSign Up
All documented responses
getFreePrices
V2
GET / POST
Price-bucket detail map (price => count, multi-SMS flag) by country/service.
Accepts comma-separated values — a Tiger SMS exclusive.
Sign in to execute this request with your own API key.
Log InSign Up
All documented responses
getPricesV2
V2
GET / POST
Alias of getFreePrices.
Accepts comma-separated values — a Tiger SMS exclusive.
Sign in to execute this request with your own API key.
Log InSign Up
All documented responses
getBalance
V1
GET / POST
Current account balance.
BAD_KEY (HTTP 401) is returned before this method runs at all, whenever the API key is missing or invalid — this applies to every method, not just this one.
Sign in to execute this request with your own API key.
Log InSign Up
All documented responses
getServiceNumbersCount
V1
GET / POST
Available numbers count for a service/country.
Sign in to execute this request with your own API key.
Log InSign Up
All documented responses
getProviders
V1
GET / POST
Public provider list (id/name/numbers_count/delivery_percent/number_lifetime, no price).
With both service and country set, the list is filtered to providers that actually serve that pair's price buckets — coherent with getPricesV3 and getNumber providerIds.
Sign in to execute this request with your own API key.
Log InSign Up
All documented responses
getNumberV2
V2New
GET / POSTapi_get_number_v2_enabled
Purchase a phone number, full typed JSON success/error envelope.
Accepts comma-separated values — a Tiger SMS exclusive.
This is a real request — a successful call can charge your balance or change a live activation.
Sign in to execute this request with your own API key.
Log InSign Up
All documented responses
getStatusV2
V2New
GET / POSTapi_get_status_v2_enabled
Activation status as JSON (verificationType + sms block).
Sign in to execute this request with your own API key.
Log InSign Up
Sign in to execute this request with your own API key.
Log InSign Up
All documented responses
getPricesV3
V3New
GET / POSTapi_prices_v3_enabled
Price/count map with a per-provider price breakdown.
Accepts comma-separated values — a Tiger SMS exclusive.
Unlike every other JSON method in this family, an unexpected internal error here returns the plain-text BAD_ACTION response instead of a JSON body — this is intentional, so a JSON-parsing client never receives a half-formed JSON body.
Comma-separated lists (coming soon): will trigger when either service or country contains a comma; each token is validated the same way as a single value, and each list is capped at 50 items with 100 total country×service combinations.
Sign in to execute this request with your own API key.
Log InSign Up
All documented responses
getOffers
V3New
GET / POSTapi_offers_enabled
Combined price+stock showcase: default/avg/retail/min price, counts and the full price-bucket map, by service and country.
Requires the same price-bucket data as getFreePrices/getPricesV3 — when that data isn't available for this account, this method returns an empty `data: {}` rather than falling back to catalog prices.
There is no `counts.physical` field: our provider module does not currently expose a physical stock figure separate from `counts.total`, and this method does not invent one. It may be added later if that data becomes available.
Never exposes providers, cost, or purchase price — none of those exist in this response by design.
Sign in to execute this request with your own API key.
Log InSign Up
All documented responses
getServicesList
V1New
GET / POSTapi_catalog_enabled
Catalog of services (code + name), optionally localized.
The only failure mode of this method is a 200 success response with an empty services list — there is no dedicated error response.
Sign in to execute this request with your own API key.
Log InSign Up
All documented responses
getCountries
V1New
GET / POSTapi_catalog_enabled
Catalog of countries (id + localized names).
Degrades to an empty JSON array `[]` on unexpected failure rather than an error response.
Sign in to execute this request with your own API key.
Log InSign Up
All documented responses
getActiveActivations
V1New
GET / POSTapi_active_activations_enabled
List of currently active activations for the key owner.
Never errors on unexpected failure (same philosophy as getServicesList/getCountries) — degrades to an empty `data: []` list with status still "success".
activationStatus values: 1=WAIT_CODE, 2=WAIT_ACCEPTING, 3=WAIT_NEXT_SMS, 6=OK, 7=REFUND, 8=CANCEL — this numbering is specific to us and may differ from other SMS APIs you have used.
Sign in to execute this request with your own API key.
Log InSign Up
All documented responses
Incoming SMS Webhook
Get incoming SMS pushed to your own HTTPS endpoint as soon as it arrives, instead of polling getStatus/getStatusV2.
Payload example
POSTapplication/json
One POST per SMS segment received, sent to the URL you registered. Only an HTTP 200 response counts as accepted; redirects are not followed.
activationId Activation id, same value as the `id` parameter used by getStatus/getStatusV2.
service sms_activate-style service code the number was purchased for.
code The code segment extracted from the SMS, same value getStatus returns after the colon.
text Full SMS text when the provider supplied one, otherwise identical to `code`.
country Numeric country code (sms_activate_code), or null if the activation's country has none set.
receivedAt ISO 8601 timestamp (UTC) of when the SMS was received.
Signature verification
X-SignatureHMAC-SHA256
Hex HMAC-SHA256 of the raw JSON request body, keyed with your webhook secret. Recompute it the same way on your side and compare before trusting the payload.
Retry policy
Up to 3 attempts total: 5s, then 30s, then 120s between attempts. Each attempt times out after 10s. If every attempt fails the event is dropped silently — there is no dead-letter queue or alerting.
Your endpoint must be a public HTTPS URL; private, loopback, link-local and other internal addresses are rejected both when you save the URL and again on every delivery attempt (DNS is re-resolved and pinned per request to prevent rebinding).
The signing secret is generated once automatically and stored per account; it is the same secret for every delivery until support changes it.