REST · JSON · HTTPS
API System X для WhatsApp
Отправка и приём сообщений WhatsApp из вашей CRM, сайта или 1С. Статусы, вебхуки с подписью, ключи с правами.
English · https://app.system-x.asia/api/v1
Авторизация
Создайте ключ в кабинете: Настройки → API для разработчиков. Ключ показывается один раз. Права: «только отправка» или «полный» (с чтением переписки). Передавайте его заголовком:
HTTP
Authorization: Bearer sx_xxxxxxxx_…Отправить сообщение — POST /v1/messages
curl
curl -X POST https://app.system-x.asia/api/v1/messages \
-H "Authorization: Bearer sx_xxxxxxxx_…" \
-H "Content-Type: application/json" \
-d '{"to": "77011234567", "text": "Ваш заказ готов"}'JavaScript
const r = await fetch("https://app.system-x.asia/api/v1/messages", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.SX_KEY}`, "Content-Type": "application/json" },
body: JSON.stringify({ to: "77011234567", text: "Ваш заказ готов" }),
})
const data = await r.json() // { id, to, status }Python
import os, requests
r = requests.post("https://app.system-x.asia/api/v1/messages",
headers={"Authorization": f"Bearer {os.environ['SX_KEY']}"},
json={"to": "77011234567", "text": "Ваш заказ готов"}, timeout=15)
print(r.json()) # {'id': ..., 'to': ..., 'status': 'sent'}Статус сообщения — GET /v1/messages/{id}
curl
curl https://app.system-x.asia/api/v1/messages/wamid.HBgM… -H "Authorization: Bearer sx_…"Входящие (права «полный») — GET /v1/messages?since=2026-09-29T00:00:00+05:00
curl
curl "https://app.system-x.asia/api/v1/messages?since=2026-09-29T00:00:00%2B05:00" -H "Authorization: Bearer sx_…"Ключ и лимит — GET /v1/me
curl
curl https://app.system-x.asia/api/v1/me -H "Authorization: Bearer sx_…"Вебхуки
Укажите https-адрес в кабинете. На каждое событие придёт POST с JSON и заголовком X-SX-Signature: t=метка,v1=HMAC-SHA256(секрет, «метка.тело»). Отвечайте 2xx; при ошибке доставка повторяется до 5 раз с растущей паузой.
JSON
{
"event": "message.incoming",
"data": { "id": "wamid.HBgM…", "from": "77011234567", "text": "Здравствуйте", "at": "2026-09-29T10:15:00+05:00" }
}Проверка подписи
Python
import hashlib, hmac, time
def verify(secret: str, body: bytes, header: str) -> bool:
parts = dict(p.split("=", 1) for p in header.split(","))
ts = int(parts["t"])
if abs(time.time() - ts) > 300:
return False
mac = hmac.new(secret.encode(), f"{ts}.".encode() + body, hashlib.sha256).hexdigest()
return hmac.compare_digest(mac, parts["v1"])JavaScript
import crypto from "node:crypto"
export function verify(secret, rawBody, header) {
const parts = Object.fromEntries(header.split(",").map((p) => p.split("=")))
if (Math.abs(Date.now() / 1000 - Number(parts.t)) > 300) return false
const mac = crypto.createHmac("sha256", secret).update(`${parts.t}.`).update(rawBody).digest("hex")
return crypto.timingSafeEqual(Buffer.from(mac), Buffer.from(parts.v1))
}Ошибки
401 | нет ключа, ключ неверный или отозван |
402 | тариф API не подключён |
403 | ключу не хватает прав |
409 | нет подключённой линии WhatsApp |
422 | неверный номер или текст |
429 | лимит запросов или тарифа исчерпан |
Лимиты и тарифы
120 запросов в минуту на ключ. Исходящие сообщения считаются по тарифу API: 1 000 — 2 900 ₸, 10 000 — 5 900 ₸, 50 000 — 8 900 ₸ в месяц; оплата с баланса организации. Сверх лимита — ответ 429.
