М
МигКон
Услуги
Проверка по РКЛПроверка патентаПроверка штрафовДля компаний
Стоимость Документация Блог Вопросы Контакты
Личный кабинет Регистрация
REST API

Документация МигКон API

Полная документация REST API для интеграции с сервисом мониторинга иностранных сотрудников. Аутентификация, управление персоналиями, проверки по реестрам, webhooks. Base URL: https://api.migcon.ru

Быстрый старт

Примеры запросов к API на разных языках. Скопируйте код и адаптируйте под свои нужды.

terminal
# Проверка доступности
curl https://api.migcon.ru/_ping

# Добавить персоналию
curl -X POST https://api.migcon.ru/api/v1/persons \
  -H "token: YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '[{
    "first_name": "Рашид",
    "last_name": "Алиев",
    "bday": "1990-05-15",
    "doc_num": "4512 123456",
    "doc_issued": "2015-03-20"
  }]'

# Получить данные персоналии
curl https://api.migcon.ru/api/v1/persons/PERSON_UUID \
  -H "token: YOUR_TOKEN"

# Запустить мониторинг
curl -X POST https://api.migcon.ru/api/v1/checks/start \
  -H "token: YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '["PERSON_UUID"]'

Аутентификация

Все эндпоинты API (кроме системных) требуют B2B-токен в заголовке запроса.

B2B Token Для серверных интеграций

Передайте токен в заголовке запроса:

token: YOUR_API_TOKEN

Токен выдаётся при подключении. Запросите через info@migcon.ru.

Система

/ Без авторизации

Проверка доступности API и состояния компонентов системы.

GET /_ping Public
Health-check
Response
"pong"
200 — API доступен
GET /_health Public
Состояние системы (БД + очередь)
Response
{
  "db": "ok",
  "queue": "ok"
}
200 — Все компоненты работают503 — Один или несколько компонентов недоступны

Персоналии (B2B)

/api/v1 Заголовок token (B2B-токен)

CRUD-операции с персоналиями для B2B-интеграций. Авторизация через заголовок token.

POST /api/v1/persons B2B Token
Добавить персоналии (до 50 шт.)

Автоматически ставятся в очередь на первичную проверку по реестрам.

Request
[
  {
    "first_name": "Рашид",
    "last_name": "Алиев",
    "middle_name": "Маратович",
    "bday": "1990-05-15",
    "doc_num": "4512 123456",
    "doc_issued": "2015-03-20",
    "patent_series": "77",
    "patent_number": "1234567"
  }
]
Response
[
  {
    "person_id": "550e8400-...",
    "first_name": "Рашид",
    "last_name": "Алиев",
    "bday": "1990-05-15",
    "doc_num": "4512 123456",
    ...
  }
]
200 — Персоналии добавлены400 — Превышен лимит или невалидные данные
GET /api/v1/persons/{person_id} B2B Token
Получить персоналию
Response
{
  "person_id": "550e8400-...",
  "first_name": "Рашид",
  "last_name": "Алиев",
  "bday": "1990-05-15",
  "monitoring_enabled": true,
  "never_checked": false,
  "registries": {
    "rkl":    { "present": false, "checked_at": "2025-02-20T09:41Z" },
    "patent": { "present": true,  "comment": "Истекает 2025-08-12" },
    "fines":  { "present": false, "checked_at": "2025-02-20T09:41Z" }
  }
}
200 — Данные персоналии404 — Персоналия не найдена
PUT /api/v1/persons/{person_id} B2B Token
Обновить персоналию

Автоматически ставится в очередь на повторную проверку.

Request
{
  "first_name": "Рашид",
  "last_name": "Алиев",
  "bday": "1990-05-15",
  "doc_num": "4512 123456",
  "doc_issued": "2015-03-20",
  "patent_number": "7654321"
}
Response
{
  "person_id": "550e8400-...",
  "first_name": "Рашид",
  ...
}
200 — Обновлено
DELETE /api/v1/persons/{person_id} B2B Token
Удалить персоналию
Response
{
  "status": "deleted",
  "person_id": "550e8400-..."
}
200 — Удалено404 — Не найдена

Мониторинг (B2B)

/api/v1 Заголовок token (B2B-токен)

Управление регулярным мониторингом персоналий по реестрам.

POST /api/v1/checks/start B2B Token
Запустить мониторинг

Передаётся массив UUID персоналий. Система будет периодически проверять их по реестрам.

Request
[
  "550e8400-e29b-41d4-a716-446655440000",
  "660e8400-e29b-41d4-a716-446655440001"
]
Response
{ "status": "started" }
200 — Мониторинг запущен
POST /api/v1/checks/stop B2B Token
Остановить мониторинг
Request
[
  "550e8400-e29b-41d4-a716-446655440000"
]
Response
{ "status": "stopped" }
200 — Мониторинг остановлен

Webhooks

Получайте уведомления о событиях в реальном времени на свой сервер. Вебхуки настраиваются в личном кабинете в разделе «Интеграции». URL должен использовать HTTPS.

POST https://ваш-сервер.com/webhook Входящий
МигКон отправляет POST-запрос на указанный URL при наступлении событий. Сервер должен ответить HTTP 2xx в течение 10 секунд.

Доступные события

СобытиеОписание
status.rklРезультат проверки по реестру контролируемых лиц
status.patentРезультат проверки патента
status.finesРезультат проверки штрафов
balance.topupПополнение баланса организации
balance.withdrawalСписание с баланса организации
test.pingТестовое событие для проверки связи

HTTP-заголовки запроса

ЗаголовокОписание
X-Webhook-SignatureHMAC-SHA256 подпись тела запроса: sha256=<hex>
X-Webhook-EventТип события (например, status.rkl)
X-Webhook-DeliveryUUID уникальной доставки
X-Webhook-TimestampUnix timestamp момента создания события
Content-Typeapplication/json

Проверка подписи (HMAC-SHA256)

Каждый запрос подписывается секретным ключом вашего вебхука. Подпись передаётся в заголовке X-Webhook-Signature. Рекомендуем проверять подпись для защиты от подделки.

verify_signature.py
import hmac
import hashlib

def verify_signature(payload: bytes, signature_header: str, secret: str) -> bool:
    """Проверка подписи вебхука."""
    expected = hmac.new(
        secret.encode("utf-8"),
        payload,
        hashlib.sha256,
    ).hexdigest()
    received = signature_header.removeprefix("sha256=")
    return hmac.compare_digest(expected, received)

# Использование (Flask):
@app.route("/webhook", methods=["POST"])
def handle_webhook():
    signature = request.headers.get("X-Webhook-Signature", "")
    if not verify_signature(request.data, signature, WEBHOOK_SECRET):
        abort(401)
    data = request.get_json()
    print(f"Событие: {data['event']}, данные: {data['data']}")
    return "", 200

Повторные попытки

ПопыткаЗадержкаОписание
1СразуПервая доставка
230 секПервый повтор
32 минПоследний повтор

После 3 неудачных попыток доставка прекращается. История доставок доступна в личном кабинете.

Коды ошибок

Все ошибки возвращаются в формате JSON с полем detail.

{
  "detail": "Описание ошибки"
}
КодОписание
400Невалидные данные запроса
401Не авторизован (невалидный или просроченный токен)
403Доступ запрещён
404Ресурс не найден
409Конфликт (дублирование email и т.д.)
429Превышен лимит
503Сервис недоступен

Нужна помощь с интеграцией?

Напишите нам — обсудим вашу задачу и подскажем как подключиться быстрее.