Описание OpenAPI
Весь API описан в OpenAPI 3.1. Передайте файл генератору, чтобы получить типизированный клиент с проверкой запросов, или импортируйте его в выбранный инструмент API.
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-javaPostman и Insomnia
Оба инструмента импортируют OpenAPI напрямую: выберите Import, Link и вставьте URL выше. Создайте окружение, задайте тестовый ключ в key, и каждый запрос можно будет выполнить без реальной отправки.
Примеры
Каждый пример отправляет одно сообщение с ключом идемпотентности и выводит идентификатор, статус и цену. Замените ключ, но сохраните заголовок.
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, автоматически остаются актуальными. Если вы опубликуете обёртку, сообщите нам — мы добавим здесь ссылку с вашим именем.