Документация AIRA API
Программный запуск аудитов AI-готовности сайтов и получение отчётов. Базовый адрес: https://engine.aisearchtune.com/api/v1
Аутентификация
Каждый запрос несёт выданный вам ключ в заголовке:
Authorization: Bearer aira_live_<43 символа>
Формат ключа — aira_live_ и 43 случайных символа (латиница и цифры, 256 бит энтропии).
Ключ показывается один раз при выдаче и хранится у нас только в виде хэша — восстановить его нельзя, только выпустить новый.
У организации может быть несколько ключей (ротация: выпустите новый, переключитесь, попросите отозвать старый).
Неверный, отозванный или отсутствующий ключ — всегда один и тот же ответ 401 {"code":"invalid_api_key"}, без уточнений.
Приостановленный клиент — 403 {"code":"client_suspended"}.
API рассчитан на вызовы сервер-сервер. CORS не открыт: из браузера обращаться к нему не получится, и не надо — ключ не должен попадать на клиентскую сторону.
Кредиты
Учёт предоплаченный: 1 кредит = 1 аудит. Кредиты начисляет ваш менеджер AIRA.
- Кредит списывается атомарно в момент постановки аудита в очередь (
POST /audits→ 202). - Баланс 0 →
402 {"code":"insufficient_credits"}, ничего не создаётся. - Если аудит завершился ошибкой (
failed) — кредит возвращается автоматически, ровно один раз. За наш сбой вы не платите. - Повторный запуск того же адреса, пока предыдущий аудит ещё не завершён, —
409 {"code":"audit_already_running","auditId":"…"}, без списания. - Остаток виден в каждом ответе на создание (
creditsRemaining) и вGET /account.
Статусная модель аудита
queued → running → completed либо failed.
Аудит обычно идёт 1–5 минут. При внутренней повторной попытке статус может временно вернуться из running в queued — это нормально, дождитесь терминального состояния. Отчёт существует только у completed; у failed запрос отчёта отвечает 410 с кодом причины, а кредит уже возвращён.
Рекомендуемый опрос: GET /audits/{auditId} не чаще, чем раз в 15 секунд.
Лимиты
- Общий лимит: 60 запросов в минуту на ключ.
- Создание аудитов: 10 запросов в минуту на ключ (отдельный, более жёсткий лимит на
POST /audits). - Превышение —
429 {"code":"rate_limited"}с заголовкомRetry-After(секунды).
POST /audits — создать аудит
Тело: websiteUrl (обязателен), reportLevel — "basic" или "full", не выше уровня вашего договора; без него берётся уровень договора.
curl -X POST https://engine.aisearchtune.com/api/v1/audits \
-H "Authorization: Bearer aira_live_ВАШ_КЛЮЧ" \
-H "Content-Type: application/json" \
-d '{"websiteUrl": "https://example.com", "reportLevel": "basic"}'
Ответ 202 Accepted:
{"auditId":"aud_4f1c2b7a9d8e4f0a8c6b5d4e3f2a1b0c","status":"queued","creditsCharged":1,"creditsRemaining":41}
Адрес нормализуется (одна и та же страница в разных написаниях — один сайт); некорректный адрес — 400 {"code":"invalid_url","reason":"…"}. Проверки URL и защита от обращений во внутренние сети — те же, что у сайта aisearchtune.com.
GET /audits/{auditId} — статус
curl https://engine.aisearchtune.com/api/v1/audits/aud_4f1c2b7a9d8e4f0a8c6b5d4e3f2a1b0c \
-H "Authorization: Bearer aira_live_ВАШ_КЛЮЧ"
Ответ 200 (выполняется; progress присутствует только в running):
{"auditId":"aud_4f1c2b7a9d8e4f0a8c6b5d4e3f2a1b0c","status":"running","progress":45,"createdAt":"2026-08-27T10:15:00+00:00"}
Ответ 200 (завершён):
{"auditId":"aud_4f1c2b7a9d8e4f0a8c6b5d4e3f2a1b0c","status":"completed","createdAt":"2026-08-27T10:15:00+00:00","completedAt":"2026-08-27T10:18:12+00:00"}
Чужой или несуществующий идентификатор — всегда 404 {"code":"not_found"}.
GET /audits/{auditId}/report — отчёт
curl https://engine.aisearchtune.com/api/v1/audits/aud_4f1c2b7a9d8e4f0a8c6b5d4e3f2a1b0c/report \
-H "Authorization: Bearer aira_live_ВАШ_КЛЮЧ"
Ответ 200 — конверт с полным JSON отчёта того уровня, с которым аудит был создан:
{"auditId":"aud_4f1c2b7a9d8e4f0a8c6b5d4e3f2a1b0c","websiteUrl":"https://example.com/","reportLevel":"basic","completedAt":"2026-08-27T10:18:12+00:00","report":{ …отчёт… }}
Аудит ещё не завершён — 409 {"code":"audit_not_completed"}. Аудит провалился — 410 {"code":"audit_failed","failureCode":"…"} (кредит уже возвращён).
GET /audits — список своих аудитов
Параметры: limit (1–100, по умолчанию 20), offset (по умолчанию 0). Сортировка — новые первыми.
curl "https://engine.aisearchtune.com/api/v1/audits?limit=20&offset=0" \
-H "Authorization: Bearer aira_live_ВАШ_КЛЮЧ"
Ответ 200 (score присутствует только у завершённых):
{"items":[{"auditId":"aud_4f1c2b7a9d8e4f0a8c6b5d4e3f2a1b0c","websiteUrl":"https://example.com/","status":"completed","score":62,"createdAt":"2026-08-27T10:15:00+00:00"}],"total":1,"limit":20,"offset":0}GET /account — сведения о доступе
curl https://engine.aisearchtune.com/api/v1/account \
-H "Authorization: Bearer aira_live_ВАШ_КЛЮЧ"
Ответ 200:
{"organization":"ООО «Пример»","reportLevel":"full","creditsRemaining":41,"keysActive":2}Коды ошибок
| HTTP | code | Когда |
|---|---|---|
| 400 | invalid_url | Адрес сайта пуст или не является корректным http(s)-адресом; поле reason уточняет причину. |
| 400 | invalid_report_level | reportLevel не "basic" и не "full"; поле allowed перечисляет допустимые. |
| 401 | invalid_api_key | Ключ отсутствует, не распознан или отозван — без уточнения, что именно. |
| 402 | insufficient_credits | Баланс кредитов равен нулю; аудит не создан. |
| 403 | client_suspended | Доступ организации приостановлен. |
| 403 | report_level_not_allowed | Запрошен уровень отчёта выше уровня договора. |
| 404 | not_found | Аудит не существует или принадлежит не вам. |
| 409 | audit_already_running | Этот же адрес уже в работе у вас; поле auditId — идущий аудит. Без списания. |
| 409 | audit_not_completed | Отчёт запрошен до завершения аудита. |
| 410 | audit_failed | Аудит завершился ошибкой; поле failureCode — причина. Кредит возвращён. |
| 429 | rate_limited | Превышен лимит запросов; заголовок Retry-After — через сколько секунд повторить. |