• 228 destinations
  • No KYC, ever
  • Bitcoin, Monero, USDT and 4 more

Documentation

Build on the API.
First message in five minutes.

One base URL, bearer keys, predictable JSON, idempotent writes, signed webhooks. Search below or pick a task; every page has copy-paste samples.

/
  • https://api.smsmeteor.com/v1
  • 50 requests per second per key
  • 1,000 messages per API request

01Start

Three moves to a delivered message.

  1. 1
    Create a keyPanel, Developers, Create key. A test key exists on every account and never bills.
  2. 2
    POST one messageDestination in E.164, a sender, the text, an idempotency key. The response carries the price.
  3. 3
    Know it landedPoll the message, or register a webhook and receive message.delivered within seconds.
POST /v1/messages
import os, requests

r = requests.post(
    "https://api.smsmeteor.com/v1/messages",
    headers={"Authorization": f"Bearer {os.environ['SMSMETEOR_KEY']}",
             "Idempotency-Key": "order-4821"},
    json={"to": "+14155550142", "from": "METEOR",
          "text": "Your order #4821 has shipped."},
)
print(r.json()["id"], r.json()["price"])
const r = await fetch("https://api.smsmeteor.com/v1/messages", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.SMSMETEOR_KEY}`,
    "Idempotency-Key": "order-4821",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ to: "+14155550142", from: "METEOR",
    text: "Your order #4821 has shipped." }),
});
const { id, price } = await r.json();
$ch = curl_init('https://api.smsmeteor.com/v1/messages');
curl_setopt_array($ch, [
  CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true,
  CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('SMSMETEOR_KEY'),
    'Idempotency-Key: order-4821', 'Content-Type: application/json'],
  CURLOPT_POSTFIELDS => json_encode(['to' => '+14155550142',
    'from' => 'METEOR', 'text' => 'Your order #4821 has shipped.']),
]);
$msg = json_decode(curl_exec($ch), true);
curl https://api.smsmeteor.com/v1/messages \
  -H "Authorization: Bearer $SMSMETEOR_KEY" \
  -H "Idempotency-Key: order-4821" \
  -d to="+14155550142" \
  -d from="METEOR" \
  -d text="Your order #4821 has shipped."

02By task

What do you want to do?

03Surface

Six endpoints, one base URL.

MethodPathPurpose
POST/v1/messagesSend one messageReference
POST/v1/messages/batchSend up to 1,000 messagesReference
GET/v1/messages/{id}Status, timestamps, price, carrier codeReference
GET/v1/messagesList and filter, cursor paginationReference
GET/v1/ratesPublic rate card, all or one countryReference
GET/v1/balanceBalance, pending deposits, low thresholdReference

04Concepts

Six ideas cover the whole API.

Authentication

Bearer keys, scoped to send, read or both, optionally IP-restricted. Test keys validate and price without sending.

Authorization: Bearer sk_live_…Details

Idempotency

Same key and payload within 24 hours returns the original response. A retry never sends twice.

Idempotency-Key: order-4821Details

Statuses

Forward only. Billing happens at sent; rejected is never charged; validity is 48 hours.

queuedsentdeliveredfailed

Details

Rate limits

50 requests per second per key. Over it: 429 with Retry-After. For volume, use batch rather than more keys.

X-RateLimit-Remaining: 47Details

Errors

One JSON shape, a stable code, a human message, the offending field. Retry 429 and 5xx; fix 4xx.

{ "error": { "code": "invalid_number" } }Details

Prices

Every response carries the message price from the public rate card. No plan, no tier, same as the panel.

"price": "0.0084", "currency": "USD"Rate card

05Resources

Files, status, humans.