Документация

Документация

Авторизация через мессенджеры вместо SMS — без расходов на каждое сообщение. Каждый авторизованный пользователь доступен для уведомлений по номеру телефона через тех же ботов. Система сама выбирает мессенджер, а вы задаёте приоритет.

Message API

Отправка уведомлений пользователям, вошедшим через ваше приложение. Токен message_api_token — в настройках приложения (заголовок X-Authorization: token …).

Базовый URL

https://id.antirius.com

Отправка сообщения

POST
/api/v1/message/send
Запрос
POST /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"
}

Сессии авторизации (виджет / hosted login)

POST
/api/v1/auth/session

Создание сессии авторизации

Запрос
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"
}

Параметр type в query

GET /api/v1/auth/session/{session_id} и GET /api/v1/widget/session/status принимают type=status или type=full (по умолчанию full). issue_token=0 — устаревший алиас для type=status.

FieldDescription
type=statusТолько status, messenger_opened, метки времени. Без token, сессия не деактивируется. Опросов можно много.
type=fullПри confirmed: token, user, app_id. Первый успешный full помечает сессию использованной (повторный full → token_consumed).
GET
/api/v1/auth/session/:session_id?type=status

Только статус (без JWT)

Запрос
GET /api/v1/auth/session/SESSION_ID?type=status

GET /api/v1/auth/session/SESSION_ID?type=status&poll=true
Ответ
HTTP/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"
}

Поля ответа (type=status)

FieldDescription
status«pending», «confirmed», «expired» или «cancelled»
poll_type«status»
messenger_openedtrue после открытия deeplink в мессенджере
messenger_opened_atISO 8601, если есть
token_consumedtrue, если full уже был — только информация
GET
/api/v1/auth/session/:session_id?type=full

Проверка статуса (full — выдача JWT)

Запрос
GET /api/v1/auth/session/SESSION_ID?type=full

GET /api/v1/auth/session/SESSION_ID?type=status&poll=true
Ответ
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"
}

Поля ответа (confirmed)

FieldDescription
status"confirmed"
tokenПодписанный JWT (RS256) — описание и проверка в разделе JWT-токен ниже
userОбъект пользователя (поля ниже)
app_idID приложения
confirmed_atВремя подтверждения (ISO 8601)
expires_atВремя истечения токена (ISO 8601)

Поля объекта user

FieldDescription
_idID пользователя (24 hex-символа)
user_idID в мессенджере
type"telegram", "max" или "whatsapp"
first_nameИмя (из профиля мессенджера в момент авторизации, не хранится)
last_nameФамилия (из профиля мессенджера, может быть null)
usernameUsername (из профиля мессенджера, может быть null)
phoneНомер телефона (например "+79001234567")
Long polling

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"
}

Примечания

  • Сервис не хранит персональные данные (имя, фамилия, username). Он работает как прокси: данные профиля берутся из мессенджера в момент авторизации и включаются в ответ и JWT.
  • Все ID — строки из 24 hex-символов.
  • Время истечения сессии — в ответе создания (поле «expires_at», ISO 8601).
  • poll=true — long polling (до 10 с). Для частых проверок — type=status; JWT — один раз type=full.
  • Возможные статусы сессии: «pending», «confirmed», «expired», «cancelled».