Авторизация через мессенджеры вместо SMS — без расходов на каждое сообщение. Каждый авторизованный пользователь доступен для уведомлений по номеру телефона через тех же ботов. Система сама выбирает мессенджер, а вы задаёте приоритет.
Отправка уведомлений пользователям, вошедшим через ваше приложение. Токен message_api_token — в настройках приложения (заголовок X-Authorization: token …).
Базовый URL
https://id.antirius.comPOST /api/v1/message/send
Content-Type: application/json
X-Authorization: token YOUR_MESSAGE_API_TOKEN
{
"recipient": "+79001234567",
"message": "Hello from API"
}HTTP/1.1 200 OK
Content-Type: application/json
{
"success": true,
"platform": "telegram",
"message_id": "123456",
"sent_at": "2026-04-17T10:00:00.000Z",
"correlation_id": "683f1a2b3c4d5e6f7a8b9c0d"
}Создание сессии авторизации
POST /api/v1/auth/session
Content-Type: application/json
Origin: https://yoursite.com
{
"app_id": "YOUR_APP_ID",
"locale": "ru",
"return_url": "https://yoursite.com/callback"
}HTTP/1.1 200 OK
Content-Type: application/json
{
"success": true,
"session_id": "683f1a2b3c4d5e6f7a8b9c0d",
"expires_at": "2026-05-13T11:00:00.000Z",
"app_id": "YOUR_APP_ID",
"redirect_url": "https://yoursite.com/callback",
"display_order": ["telegram", "max", "whatsapp"],
"links": {
"telegram": "https://t.me/YourBot?start=683f1a2b...",
"max": "https://max.me/YourBot?start=683f1a2b...",
"whatsapp": "https://wa.me/1234567890?text=..."
},
"hosted_login_url": "https://id.antirius.com/login/YOUR_APP_ID"
}GET /api/v1/auth/session/{session_id} и GET /api/v1/widget/session/status принимают type=status или type=full (по умолчанию full). issue_token=0 — устаревший алиас для type=status.
| Field | Description |
|---|---|
| type=status | Только status, messenger_opened, метки времени. Без token, сессия не деактивируется. Опросов можно много. |
| type=full | При confirmed: token, user, app_id. Первый успешный full помечает сессию использованной (повторный full → token_consumed). |
Только статус (без JWT)
GET /api/v1/auth/session/SESSION_ID?type=status
GET /api/v1/auth/session/SESSION_ID?type=status&poll=trueHTTP/1.1 200 OK
Content-Type: application/json
// type=status — ожидание в мессенджере
{
"status": "pending",
"poll_type": "status",
"messenger_opened": false,
"created_at": "2026-05-13T10:55:00.000Z",
"expires_at": "2026-05-13T11:00:00.000Z"
}
// type=status — пользователь открыл deeplink
{
"status": "pending",
"poll_type": "status",
"messenger_opened": true,
"messenger_opened_at": "2026-05-13T10:55:42.000Z"
}
// type=status — подтверждён (без JWT)
{
"status": "confirmed",
"poll_type": "status",
"confirmed_at": "2026-05-13T10:56:30.000Z"
}| Field | Description |
|---|---|
| status | «pending», «confirmed», «expired» или «cancelled» |
| poll_type | «status» |
| messenger_opened | true после открытия deeplink в мессенджере |
| messenger_opened_at | ISO 8601, если есть |
| token_consumed | true, если full уже был — только информация |
Проверка статуса (full — выдача JWT)
GET /api/v1/auth/session/SESSION_ID?type=full
GET /api/v1/auth/session/SESSION_ID?type=status&poll=trueHTTP/1.1 200 OK
Content-Type: application/json
// type=full — первый запрос после confirmed (выдача JWT)
{
"status": "confirmed",
"poll_type": "full",
"confirmed_at": "2026-05-13T10:56:30.000Z",
"token": "eyJhbGciOiJSUzI1NiIs...",
"user": {
"_id": "507f1f77bcf86cd799439011",
"user_id": "123456789",
"type": "telegram",
"first_name": "John",
"last_name": "Doe",
"username": "johndoe",
"phone": "+79001234567"
},
"app_id": "YOUR_APP_ID",
"expires_at": "2026-05-13T11:55:00.000Z"
}| Field | Description |
|---|---|
| status | "confirmed" |
| token | Подписанный JWT (RS256) — описание и проверка в разделе JWT-токен ниже |
| user | Объект пользователя (поля ниже) |
| app_id | ID приложения |
| confirmed_at | Время подтверждения (ISO 8601) |
| expires_at | Время истечения токена (ISO 8601) |
| Field | Description |
|---|---|
| _id | ID пользователя (24 hex-символа) |
| user_id | ID в мессенджере |
| type | "telegram", "max" или "whatsapp" |
| first_name | Имя (из профиля мессенджера в момент авторизации, не хранится) |
| last_name | Фамилия (из профиля мессенджера, может быть null) |
| username | Username (из профиля мессенджера, может быть null) |
| phone | Номер телефона (например "+79001234567") |
poll=true — long polling (до 10 с). Для частых проверок — type=status; JWT — один раз type=full.
async function waitForAuth(sessionId) {
while (true) {
const res = await fetch(
`https://id.antirius.com/api/v1/auth/session/${sessionId}?type=status&poll=true`
);
const peek = await res.json();
if (peek.status === 'confirmed') {
const fullRes = await fetch(
`https://id.antirius.com/api/v1/auth/session/${sessionId}?type=full`
);
return fullRes.json(); // { token, user, app_id }
}
if (peek.status === 'expired' || peek.status === 'cancelled') {
throw new Error('Session ' + peek.status);
}
}
}HTTP/1.1 200 OK
Content-Type: application/json
// type=full — первый запрос после confirmed (выдача JWT)
{
"status": "confirmed",
"poll_type": "full",
"confirmed_at": "2026-05-13T10:56:30.000Z",
"token": "eyJhbGciOiJSUzI1NiIs...",
"user": {
"_id": "507f1f77bcf86cd799439011",
"user_id": "123456789",
"type": "telegram",
"first_name": "John",
"last_name": "Doe",
"username": "johndoe",
"phone": "+79001234567"
},
"app_id": "YOUR_APP_ID",
"expires_at": "2026-05-13T11:55:00.000Z"
}