AnonymSMS is now asms.ai:Read
asms.ai
anonymsms API

Your anonymsms integration keeps working.

AnonymSMS is now asms.ai. The anonymsms.com API runs on asms.ai with the same base URL, keys, endpoints and responses, so there is nothing to change. It now also sells the whole asms.ai catalogue: about 1,900 services instead of 234.

Base URL and authentication

Send your existing key as a Bearer token. Keys from anonymsms.com work unchanged, and you can create new ones in your asms.ai dashboard (log in with your anonymsms.com email and password).

Base URL:  https://api.anonymsms.com/api
Header:    Authorization: Bearer YOUR_KEY
order a Telegram number in the UK, then read the code
curl -X POST https://api.anonymsms.com/api/service-activation/order \
  -H "Authorization: Bearer YOUR_KEY" -H "Content-Type: application/json" \
  -d '{"service_id":80328,"country_id":25,"quantity":1}'

curl https://api.anonymsms.com/api/service-activation/ORDER_ID/message \
  -H "Authorization: Bearer YOUR_KEY"

OTP numbers (service activation)

GET/service-activation/countries

Countries for OTP numbers. Numbers are sold in the United States (7), United Kingdom (25) and Australia (573).

Parameters: service_id (optional): only the countries that service is sold in, with its price there.

{ "success": true, "data": [
  { "country_id": 25, "country_name": "United Kingdom", "available_phone_numbers": 1240 } ] }
GET/service-activation/services

Every service. The services anonymsms.com listed keep their ids; the rest of the catalogue follows with ids of 100000000 and up.

Parameters: country_id (optional): only the services sold in that country, with price and stock.

{ "success": true, "data": [
  { "service_id": 80328, "service_title": "Telegram", "price": 0.9,
    "available_phone_numbers": 40, "is_other_services": false } ] }
GET/service-activation/available-quantity

Stock and price for one service in one country. 404 if the service or country id is unknown.

Parameters: country_id, service_id (both required).

{ "success": true, "data": { "country_id": 25, "service_id": 80328,
  "available_quantity": 40, "price": 0.9 } }
POST/service-activation/order

Buy a number for a service. The price is taken from your wallet; if no code arrives the order is refunded automatically.

Parameters: service_id, country_id, quantity (required, must be 1), webhook_url (optional, not called).

{ "success": true, "message": "Order placed successfully.",
  "data": { "order_type": "service_activation", "service_id": 80328,
    "country_id": 25, "quantity": 1, "order_id": 4100000001,
    "status": "completed", "total": 0.9, "phone_number": "+447700900001" } }
GET/service-activation/{order_id}/message

The order and its code. Poll it until status is received. status: awaiting, received, timeout (refunded) or cancelled.

{ "success": true, "data": { "order_id": 4100000001,
  "phone_number": "+447700900001",
  "country": { "id": 25, "name": "United Kingdom" },
  "service": { "id": 80328, "name": "Telegram" },
  "status": "received", "message": "123456",
  "created_at": "2026-10-16T10:00:00+00:00" } }
GET/service-activation/history

Your OTP orders, newest first, 10 a page (records as above).

Parameters: page (optional).

{ "success": true, "data": [ ... ],
  "links": { "first": "...?page=1", "last": null, "prev": null, "next": "...?page=2" },
  "meta": { "current_page": 1, "from": 1, "per_page": 10, "to": 10, ... } }

Private numbers (rentals)

GET/private-numbers/countries

Countries you can rent a private number in, with prices by period. A price of 0 means that period is not sold there.

{ "success": true, "data": [
  { "country_id": 25, "country_name": "United Kingdom", "country_slug": "united-kingdom",
    "count": 10, "prices": {
      "1_d_price": { "price": 2.5, "duration": 1 }, "2_d_price": { "price": 0, "duration": 2 },
      "7_d_price": { "price": 6, "duration": 7 }, "30_d_price": { "price": 15, "duration": 30 } } } ] }
GET/private-numbers/available-numbers

Numbers you can rent, 20 a page. Each id is good for one order; the number itself is chosen when you order.

Parameters: country_id (optional), page (optional).

{ "success": true, "data": [
  { "id": 25123456789, "number": "+44*******", "country_id": 25, "prices": { ... } } ],
  "links": { ... }, "meta": { ... } }
POST/private-numbers/order

Rent the number. Keep the phone_number_id: messages, history and renew use it.

Parameters: phone_number_id (an id from available-numbers), rental_period (1, 7 or 30), webhook_url (optional, not called).

{ "success": true, "message": "Order placed successfully.",
  "data": { "order_type": "private_number", "product_id": 25123456789,
    "rental_period": 7, "order_id": 25123456789, "status": "completed",
    "total": 6, "phone_number": "+447500100001" } }
GET/private-numbers/{phone_number_id}/messages

SMS received by an active rental, newest first, 10 a page.

Parameters: page (optional).

{ "success": true, "data": [
  { "sender": "Telegram", "message": "Telegram code 55555",
    "created_at": "2026-10-16T10:00:00+00:00" } ], "links": { ... }, "meta": { ... } }
GET/private-numbers/history

Your rentals, newest first, 10 a page. status: active, expired or removed.

Parameters: page (optional).

{ "success": true, "data": [
  { "order_id": 25123456789, "phone_number_id": 25123456789,
    "phone_number": "+447500100001", "rental_period": 7, "price": 6,
    "status": "active", "started_at": "...", "expired_at": "...", "created_at": "..." } ] }
POST/private-numbers/renew

Renewals are not available at the moment: the call answers 400. Rent a new number instead.

Parameters: phone_number_id, rental_period.

{ "success": false, "error": "Renewal is not available for this number. Order a new number instead." }

Balance

GET/balance

Your wallet balance in USD. It is the same wallet you see on asms.ai.

{ "success": true, "data": { "email": "[email protected]", "balance": 12.5 } }

What is different on asms.ai

  • One number per OTP order: send quantity 1 and place one order per number you need.
  • webhook_url is accepted but nothing is sent to it. Poll the message endpoints instead (every few seconds is fine).
  • Rentals are sold for 1, 7 or 30 days, where the country offers them. The 2-day period is no longer sold.
  • Renewals are not available at the moment. Rent a new number when one expires.
  • Up to 60 requests a minute per key. Above that the API answers 429; wait and retry.
  • Errors keep their old form: { "success": false, "error": "..." }, and 422 with { "message", "errors" } for invalid fields.

Last updated October 16, 2026