One API in front of every provider.
Order, poll, release — that is the whole surface for most integrations. Plain HTTPS and JSON, bearer auth, no client library required and no proprietary protocol to learn.
The whole flow, in two calls
# Order a US number for WhatsApp
curl -s https://smsmetro.com/api/v1/activations \
-H "Authorization: Bearer $SMSMETRO_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"service":"whatsapp","country":"US"}'
# Poll until the code lands
curl -s https://smsmetro.com/api/v1/activations/ACT_ID \
-H "Authorization: Bearer $SMSMETRO_KEY"
Or skip polling entirely and take a signed webhook the moment the message arrives.
What the API gives you
Let routing pick the source — balanced, cheapest, fastest or best quality per request — or list every offer for a country and service and buy a specific one.
Deliveries carry an HMAC-SHA256 signature over a timestamp and the raw body, so you can verify authenticity and reject replays.
Every purchase takes an Idempotency-Key, claimed in the database before the request runs. A retry after a timeout cannot buy twice.
Keys carry only the scopes they need — catalogue, read, write, wallet, stats — so a leaked read key cannot spend money.
Prices are held, then captured or released. Balances derive from a double-entry ledger the database itself refuses to let drift.
Availability is a band, prices are integers in micro-units, and success rates are suppressed until the sample is large enough to mean anything.
Endpoints
| Endpoint | Purpose |
|---|---|
| GET /v1/countries | Countries with routable inventory |
| GET /v1/services | The service catalogue |
| GET /v1/prices | Cheapest price per service |
| GET /v1/offers | Every purchasable source for a country and service |
| POST /v1/activations | Buy a number — smart or manual |
| GET /v1/activations/{id} | State, number, price, expiry |
| GET /v1/activations/{id}/sms | Messages received, code extracted |
| POST /v1/activations/{id}/cancel | Release a number early |
| GET /v1/balance | Wallet balance |
Full parameters, response shapes and every error code are in the API documentation.
Where we are honest with you
Get an API key in two minutes.
Create an account, generate a scoped key, and make your first call against real inventory.