• 228 направлений
  • Без KYC — всегда
  • Bitcoin, Monero, USDT и ещё 4 валюты

SDK и примеры

SDK устанавливать не нужно.
Достаточно HTTP-клиента.

API состоит из шести конечных точек с обычным JSON. Мы предоставляем описание OpenAPI для генерации типизированного клиента и готовые примеры на популярных языках.

  • OpenAPI 3.1, YAML
  • Шесть языков
  • Синхронизируется со справочником

Описание OpenAPI

Весь API описан в OpenAPI 3.1. Передайте файл генератору, чтобы получить типизированный клиент с проверкой запросов, или импортируйте его в выбранный инструмент API.

Скачать openapi.yaml Также доступен по адресу https://smsmeteor.com/docs/openapi.yaml. Версия синхронизирована с API; поле info.version содержит эталонную версию.
npx openapi-typescript https://smsmeteor.com/docs/openapi.yaml -o smsmeteor.d.ts
# затем используйте с openapi-fetch
import createClient from "openapi-fetch";
import type { paths } from "./smsmeteor";
const api = createClient<paths>({ baseUrl: "https://api.smsmeteor.com/v1",
  headers: { Authorization: `Bearer ${process.env.SMSMETEOR_KEY}` } });
const { data } = await api.POST("/messages", { body: { to: "+14155550142", text: "Привет" } });
# openapi-python-client
pipx run openapi-python-client generate --url https://smsmeteor.com/docs/openapi.yaml

from smsmeteor_client import Client
from smsmeteor_client.api.messages import create_message
client = Client(base_url="https://api.smsmeteor.com/v1", headers={"Authorization": f"Bearer {KEY}"})
msg = create_message.sync(client=client, body={"to": "+14155550142", "text": "Привет"})
# openapi-generator
openapi-generator-cli generate \
  -i https://smsmeteor.com/docs/openapi.yaml \
  -g java --library okhttp-gson \
  -o smsmeteor-java

Postman и Insomnia

Оба инструмента импортируют OpenAPI напрямую: выберите Import, Link и вставьте URL выше. Создайте окружение, задайте тестовый ключ в key, и каждый запрос можно будет выполнить без реальной отправки.

Примеры

Каждый пример отправляет одно сообщение с ключом идемпотентности и выводит идентификатор, статус и цену. Замените ключ, но сохраните заголовок.

POST /v1/messages
curl https://api.smsmeteor.com/v1/messages \
  -H "Authorization: Bearer $SMSMETEOR_KEY" \
  -H "Idempotency-Key: demo-001" \
  -d to="+14155550142" -d from="METEOR" \
  -d text="Ваш код: 493 201"
import os, requests

def send(to: str, text: str, key: str) -> dict:
    r = requests.post(
        "https://api.smsmeteor.com/v1/messages",
        headers={"Authorization": f"Bearer {os.environ['SMSMETEOR_KEY']}", "Idempotency-Key": key},
        json={"to": to, "from": "METEOR", "text": text},
        timeout=10,
    )
    r.raise_for_status()
    return r.json()

msg = send("+14155550142", "Ваш код: 493 201", "demo-001")
print(msg["id"], msg["status"], msg["price"])
export async function send(to, text, key) {
  const r = await fetch("https://api.smsmeteor.com/v1/messages", {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.SMSMETEOR_KEY}`,
      "Idempotency-Key": key,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({ to, from: "METEOR", text }),
  });
  if (!r.ok) throw new Error((await r.json()).error.code);
  return r.json();
}

const msg = await send("+14155550142", "Ваш код: 493 201", "demo-001");
console.log(msg.id, msg.status, msg.price);
function send(string $to, string $text, string $key): array {
    $ch = curl_init('https://api.smsmeteor.com/v1/messages');
    curl_setopt_array($ch, [
        CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 10,
        CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('SMSMETEOR_KEY'),
            'Idempotency-Key: ' . $key, 'Content-Type: application/json'],
        CURLOPT_POSTFIELDS => json_encode(['to' => $to, 'from' => 'METEOR', 'text' => $text]),
    ]);
    $res = json_decode((string) curl_exec($ch), true);
    if (curl_getinfo($ch, CURLINFO_RESPONSE_CODE) >= 400) throw new RuntimeException($res['error']['code']);
    return $res;
}

$msg = send('+14155550142', 'Ваш код: 493 201', 'demo-001');
echo $msg['id'], ' ', $msg['status'], ' ', $msg['price'];
func send(to, text, key string) (map[string]any, error) {
    body, _ := json.Marshal(map[string]string{"to": to, "from": "METEOR", "text": text})
    req, _ := http.NewRequest("POST", "https://api.smsmeteor.com/v1/messages", bytes.NewReader(body))
    req.Header.Set("Authorization", "Bearer "+os.Getenv("SMSMETEOR_KEY"))
    req.Header.Set("Idempotency-Key", key)
    req.Header.Set("Content-Type", "application/json")
    res, err := http.DefaultClient.Do(req)
    if err != nil { return nil, err }
    defer res.Body.Close()
    var out map[string]any
    return out, json.NewDecoder(res.Body).Decode(&out)
}
require "net/http"; require "json"

def send_sms(to, text, key)
  uri = URI("https://api.smsmeteor.com/v1/messages")
  req = Net::HTTP::Post.new(uri, "Authorization" => "Bearer #{ENV['SMSMETEOR_KEY']}",
    "Idempotency-Key" => key, "Content-Type" => "application/json")
  req.body = { to: to, from: "METEOR", text: text }.to_json
  res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |h| h.request(req) }
  JSON.parse(res.body)
end

msg = send_sms("+14155550142", "Ваш код: 493 201", "demo-001")
puts [msg["id"], msg["status"], msg["price"]].join(" ")

Проверка вебхуков

Подпись HMAC-SHA256 вычисляется для timestamp.body. Код проверки на Node, Python и PHP приведён на странице вебхуков; те же двенадцать строк легко перенести на любой язык с поддержкой HMAC.

Рекомендуемые правила повторных запросов

Сторонние библиотеки

Мы не выпускаем официальные SDK; клиенты, созданные по описанию OpenAPI, автоматически остаются актуальными. Если вы опубликуете обёртку, сообщите нам — мы добавим здесь ссылку с вашим именем.