All requests except /api/login, /api/register, /api/restore_password and /api/public/* require a Bearer token. The same methods are also available under /api/v1/....
Authorization: Bearer <api_token>
Base URL: https://sms-numbers.co/api
For POST with a body send Content-Type: application/json. Responses return Content-Type: application/json; charset=UTF-8.
Numbers API
GET
List numbers
Returns numbers on your account (with country and status). Disposable numbers are hidden by default.
GET https://sms-numbers.co/api/numbers
Header: Authorization: Bearer <api_token>
filter (string) — optional status filter by filter_slug, e.g. active.
include_disposable (boolean) — include temporary/OTP numbers.
GET
Number details
Returns details for a specific number that belongs to you.
GET https://sms-numbers.co/api/number/{id}
Path: id (integer) — number ID from the list. 404 if missing.
GET
Search (legacy)
Kept for compatibility. Prefer public price endpoints to get tariffs, then buy with POST /api/number/buy.
GET https://sms-numbers.co/api/numbers/search/{iso}
Path: iso — country ISO code, e.g. ru, us.
Tariffs: GET https://sms-numbers.co/api/public/countries and GET https://sms-numbers.co/api/public/prices/{country_id}.
POST
Connect a number
Places an order for a long-term number. Charges the balance; if funds are insufficient returns 402 with payment links. Profile email must be valid (used for SMS forwarding).
POST https://sms-numbers.co/api/number/buy
JSON body:
agree_terms (required) — must be accepted (true / 1).
number_price_id (integer) — tariff ID from /api/public/prices/{id} (required unless country is set).
country (integer) — same as tariff ID (alias of number_price_id).
period (integer, 1–36, default 1) — months of subscription.
payment_method (optional, default balance) — use balance; other values create a pending payment.
Catalog, purchase and installation data for the mobile app. The same paths exist under /api/v1. A Bearer token is required. Prices are the sell price in EUR; wholesale prices are not returned.
GET
Countries
Countries that currently have eSIM packages. Optional query q filters by name or ISO code.
GET https://sms-numbers.co/api/esim/countries
GET
Packages
Data plans for a country. iso is a two-letter code, for example de. Each package includes package_id, data volume, validity_days and price_eur.
GET https://sms-numbers.co/api/esim/packages/{iso}
POST
Buy an eSIM
Charges the account balance and returns the order with QR and installation fields. If the balance is too low, the response is 402 with payment links.
POST https://sms-numbers.co/api/esim/purchase
package_id (required) — package id from the packages list.
{"package_id":"change-7days-1gb"}
GET
My orders
Completed eSIM orders, newest first. Query page for the next page (20 per page).
GET https://sms-numbers.co/api/esim/orders
GET
Order details
One order: sims with qrcode, qrcode_url, iccid and direct_apple_installation_url when Airalo provides them, plus installation HTML.
GET https://sms-numbers.co/api/esim/orders/{id}
Messages API
GET
List messages
All SMS for the account.
GET https://sms-numbers.co/api/messages
GET
Conversations
Latest message per conversation partner (chat list).
GET https://sms-numbers.co/api/app/messages
GET
Messages by number
Full history with {number}. Marks those messages as viewed.
GET https://sms-numbers.co/api/app/messages/{number}
POST
Send SMS
Sends one or more outbound SMS. Requires positive balance.
POST https://sms-numbers.co/api/message/send
from (string) — your virtual number; if omitted/unknown, the system sender is used.
to (required) — destination; digits and + ( ) -; several numbers separated by commas.