API-справочник

REST API AY-Robots живёт по адресу https://www.ay-robots.com/api и говорит JSON в обе стороны. Эта страница документирует аутентификацию, соглашения об ответах и каждый эндпоинт с полным описанием параметров для маршрутов, которые вы, вероятнее всего, будете вызывать программно.

Обновлено 2026-08-09

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

Каждый эндпоинт требует аутентификации, если он не перечислен в разделе Публичные эндпоинты. API принимает два вида учётных данных, и оба приходят одинаково: либо как cookie сессии, который дашборд отправляет в любом случае, либо как заголовок Authorization с Bearer-токеном.

МетодКак работаетДля чего использовать
Сессия браузераТокен сессии Supabase вашего вошедшего аккаунта, отправляется как cookie или как Bearer-токенСам дашборд и быстрые эксперименты из аутентифицированного контекста браузера
API-ключКлюч с префиксом ayr_live_, создан в /dashboard/settings и отправляется как Bearer-токенСкрипты, серверы, CI и всё, что не должно зависеть от входа через браузер
MCPХостируемый MCP-сервер по адресу https://www.ay-robots.com/api/mcp (Streamable HTTP)LLM-агенты и инструменты, говорящие по Model Context Protocol
bash
curl https://www.ay-robots.com/api/sessions \
  -H 'Authorization: Bearer ayr_live_your_key_here'
Аутентификация с помощью API-ключа

API-ключи создаются и отзываются в /dashboard/settings. Обращайтесь с ними как с паролями: храните на стороне сервера и ротируйте, создавая ключ на замену прежде, чем отзывать старый. Если вы используете CLI, он также умеет предоставлять платформу как локальный MCP-сервер командой: ay-robots mcp.

Ответы приходят в формате JSON. Ошибки имеют единообразную форму: JSON-объект с единственным полем error, содержащим сообщение для человека, доставляется с подходящим статус-кодом 4xx или 5xx. Успешные ответы возвращают ресурс напрямую; несколько эндпоинтов оборачивают списки в именованное поле, что примеры ниже показывают там, где это важно.

Эндпоинты аутентификации

Обвязка аккаунта и профиля. Эти эндпоинты в первую очередь использует сам дашборд, но они работают с любыми валидными учётными данными.

GET/api/auth/profileBearer-токен сессии или API-ключ

Возвращает профиль аутентифицированного пользователя.

POST/api/auth/profileBearer-токен сессии или API-ключ

Обновляет поля профиля, такие как отображаемое имя и настройки уведомлений.

POST/api/auth/syncBearer-токен сессии

Синхронизирует пользователя аутентификации Supabase с записью пользователя платформы.

GET/api/auth/check-onboardingBearer-токен сессии

Сообщает, завершил ли аутентифицированный пользователь онбординг.

POST/api/auth/avatarBearer-токен сессии

Загружает новое изображение аватара для аутентифицированного пользователя.

Клиентские эндпоинты

Всё, чем управляет владелец робота: зарегистрированные роботы, профиль клиента, датасеты, счета и статистика дашборда.

GET/api/client/robotsBearer-токен сессии или API-ключ (роль клиента)

Перечисляет роботов, зарегистрированных аутентифицированным клиентом, сначала новые, до 50 записей. Временные метки в формате ISO 8601; last_online и last_heartbeat равны null, пока робот ни разу не подключился.

Request
curl https://www.ay-robots.com/api/client/robots \
  -H 'Authorization: Bearer ayr_live_your_key_here'
Response
[
  {
    "id": "1f9f4c1e-7f2a-4b7e-9a45-0f4d2b6c8a11",
    "name": "Lab SO-100",
    "robot_type": "SO-100",
    "status": "AVAILABLE",
    "control_url": "wss://robots.example.com/so100/control",
    "stream_url": "https://robots.example.com/so100/stream",
    "hardware_id": "board:local:usb-1",
    "last_online": "2026-08-09T10:12:00.000Z",
    "last_heartbeat": "2026-08-09T10:12:00.000Z",
    "total_hours": 12.5,
    "tags": ["lab"],
    "notes": null,
    "created_at": "2026-07-01T09:00:00.000Z"
  }
]
POST/api/client/robotsBearer-токен сессии или API-ключ (роль клиента)

Регистрирует нового робота и возвращает его id. Hardware id платы мотора может принадлежать только одному роботу; коллизия отклоняется со статусом 409.

GET/api/client/profileBearer-токен сессии или API-ключ (роль клиента)

Возвращает профиль клиента аутентифицированного пользователя.

PATCH/api/client/profileBearer-токен сессии или API-ключ (роль клиента)

Обновляет поля профиля клиента.

GET/api/client/datasetsBearer-токен сессии или API-ключ (роль клиента)

Перечисляет облачные датасеты клиента с количеством эпизодов и размерами.

GET/api/client/invoicesBearer-токен сессии или API-ключ (роль клиента)

Перечисляет месячные счета клиента.

GET/api/client/statsBearer-токен сессии или API-ключ (роль клиента)

Возвращает статистику использования для дашборда клиента.

Операторские эндпоинты

Сторона оператора: профиль и доступность, сертификации, расписание и статистика заработка.

GET/api/operator/profileBearer-токен сессии или API-ключ (роль оператора)

Возвращает профиль оператора аутентифицированного пользователя.

POST/api/operator/profileBearer-токен сессии или API-ключ (роль оператора)

Создаёт или обновляет профиль оператора.

GET/api/operator/available-robotsBearer-токен сессии или API-ключ (роль оператора)

Перечисляет роботов, которые сейчас доступны и соответствуют сертификациям оператора.

GET/api/operator/certificationsBearer-токен сессии или API-ключ (роль оператора)

Перечисляет запросы на сертификацию оператора и их статус.

POST/api/operator/certificationsBearer-токен сессии или API-ключ (роль оператора)

Запрашивает сертификацию на тип робота.

GET/api/operator/scheduleBearer-токен сессии или API-ключ (роль оператора)

Возвращает недельное расписание доступности оператора.

POST/api/operator/scheduleBearer-токен сессии или API-ключ (роль оператора)

Обновляет недельное расписание доступности.

GET/api/operator/availabilityBearer-токен сессии или API-ключ (роль оператора)

Возвращает текущую доступность оператора.

GET/api/operator/statsBearer-токен сессии или API-ключ (роль оператора)

Возвращает статистику заработка и сессий для дашборда оператора.

Сессии

Сессии являются основным ресурсом платформы: одна сессия представляет собой одно непрерывное взаимодействие телеоперации между оператором и роботом. Статус сессии проходит через PENDING, ACTIVE, PAUSED, COMPLETED и CANCELLED.

GET/api/sessionsBearer-токен сессии или API-ключ

Перечисляет сессии аутентифицированного пользователя. Операторы видят сессии, которыми они управляли; клиенты видят сессии на своих роботах. Набор полей немного различается между двумя видами: клиентский вид включает episodes_collected и data_collected_mb, операторский вид включает operator_earnings_cents.

NameInTypeDescription
statusquerystringОпционально. Фильтр по статусу сессии, например ACTIVE или COMPLETED. Опустите, чтобы перечислить все.
limitquerynumberОпционально. Размер страницы, по умолчанию 50, максимум 100.
offsetquerynumberОпционально. Смещение пагинации, по умолчанию 0.
Request
curl 'https://www.ay-robots.com/api/sessions?status=COMPLETED&limit=10' \
  -H 'Authorization: Bearer ayr_live_your_key_here'
Response
{
  "sessions": [
    {
      "id": "6b0d2c9a-53f1-4f6e-8f1a-2c9d4e7b5a30",
      "status": "COMPLETED",
      "started_at": "2026-08-08T14:00:12.000Z",
      "ended_at": "2026-08-08T14:47:31.000Z",
      "duration_minutes": 47,
      "client_charge_cents": 1175,
      "episodes_collected": 23,
      "data_collected_mb": 210.4,
      "rating": 5,
      "created_at": "2026-08-08T13:59:58.000Z",
      "robot_id": "1f9f4c1e-7f2a-4b7e-9a45-0f4d2b6c8a11",
      "robot_name": "Lab SO-100",
      "robot_type": "SO-100",
      "operator_name": "Jane D."
    }
  ]
}
POST/api/sessionsBearer-токен сессии или API-ключ (роль оператора)

Запускает сессию телеоперации на доступном роботе. Требует роль оператора: клиенты не могут запускать сессии. Оператор может держать не более одной сессии ACTIVE или PAUSED одновременно, а робот в этот момент должен иметь статус AVAILABLE. При немедленном запуске робот переходит в IN_SESSION, и клиент получает уведомление.

NameInTypeDescription
robotIdbodystringОбязательно. Id робота для управления. Робот должен иметь статус AVAILABLE.
operatorIdbodystringОпционально. Явный id оператора; по умолчанию используется аутентифицированный оператор.
scheduledForbodystring (ISO 8601)Опционально. Планирует сессию на будущее время вместо немедленного запуска.
Request
curl -X POST https://www.ay-robots.com/api/sessions \
  -H 'Authorization: Bearer ayr_live_your_key_here' \
  -H 'Content-Type: application/json' \
  -d '{"robotId": "1f9f4c1e-7f2a-4b7e-9a45-0f4d2b6c8a11"}'
Response
{
  "sessionId": "6b0d2c9a-53f1-4f6e-8f1a-2c9d4e7b5a30",
  "status": "ACTIVE"
}
GET/api/sessions/[id]Bearer-токен сессии или API-ключ

Возвращает одну сессию с её деталями.

PATCH/api/sessions/[id]Bearer-токен сессии или API-ключ

Обновляет жизненный цикл сессии: пауза, возобновление, завершение и связанные действия.

POST/api/sessions/[id]/extendBearer-токен сессии или API-ключ (клиент, владелец сессии)

Запрашивает продление сессии. Вызывать может только клиент, которому принадлежит сессия, и сессия должна быть ACTIVE. Запрос логируется как событие сессии, а оператор получает уведомление; само продление происходит, когда оператор реагирует на него.

NameInTypeDescription
idpathstringId сессии.
additionalMinutesbodynumberЗапрошенная длина продления в минутах.
Request
curl -X POST https://www.ay-robots.com/api/sessions/6b0d2c9a-53f1-4f6e-8f1a-2c9d4e7b5a30/extend \
  -H 'Authorization: Bearer ayr_live_your_key_here' \
  -H 'Content-Type: application/json' \
  -d '{"additionalMinutes": 30}'
Response
{
  "message": "Extension request sent to operator"
}
GET/api/sessions/[id]/messagesBearer-токен сессии или API-ключ

Перечисляет сообщения чата сессии.

POST/api/sessions/[id]/messagesBearer-токен сессии или API-ключ

Отправляет сообщение в чате сессии.

POST/api/sessions/[id]/rateBearer-токен сессии или API-ключ (клиент)

Оценивает завершённую сессию по шкале от 1 до 5 звёзд с опциональным комментарием.

POST/api/sessions/exportBearer-токен сессии или API-ключ

Экспортирует данные сессии.

Платежи

Всё движение денег идёт через Stripe. Биллинг клиента использует клиента Stripe с сохранённым способом оплаты; выплаты операторам используют Stripe Connect. Сама платформа никогда не хранит данные карты или банковского счёта.

POST/api/stripe/customerBearer-токен сессии (роль клиента)

Создаёт или возвращает клиента Stripe, используемого для биллинга клиента.

GET/api/stripe/connectBearer-токен сессии (роль оператора)

Возвращает статус аккаунта Stripe Connect оператора.

POST/api/stripe/connectBearer-токен сессии (роль оператора)

Запускает онбординг Stripe Connect для выплат оператору.

POST/api/stripe/setup-intentBearer-токен сессии (роль клиента)

Создаёт Stripe SetupIntent для сохранения способа оплаты.

POST/api/stripe/portalBearer-токен сессии (роль клиента)

Создаёт сессию биллингового портала Stripe для управления способами оплаты и счетами.

GET/api/stripe/payoutBearer-токен сессии (роль оператора)

Возвращает информацию о выплатах для аутентифицированного оператора.

POST/api/stripe/payoutBearer-токен сессии (роль оператора)

Запрашивает выплату накопленного заработка. Минимальная выплата составляет 10,00 EUR.

POST/api/stripe/webhookПодпись webhook Stripe

Принимает webhook-события Stripe. Вызывается Stripe, а не клиентами API.

Публичные эндпоинты

Эти эндпоинты не требуют аутентификации. Их безопасно вызывать из систем мониторинга, маркетинговых страниц или проб статуса.

GET/api/health

Проверка здоровья API и его подключения к базе данных. Возвращает 200, когда всё в порядке; если проверка базы данных не проходит, возвращается та же форма с status и db, установленными в error, и HTTP-статусом 503.

Request
curl https://www.ay-robots.com/api/health
Response
{
  "status": "ok",
  "db": "ok",
  "timestamp": "2026-08-09T10:12:00.000Z"
}
GET/api/robots/[id]

Возвращает публичную информацию о поддерживаемой модели робота.

GET/api/public/pricing

Возвращает текущие публичные тарифные планы.

POST/api/contact

Отправляет сообщение из контактной формы. Сообщение сначала сохраняется, а затем доставляется по email, поэтому временный сбой почты не приводит к его потере: в этом случае ответ сообщает stored true и delivered false, а доставка повторяется в фоновом режиме.

NameInTypeDescription
namebodystringОбязательно. Ваше имя.
emailbodystringОбязательно. Действительный email-адрес для ответа.
categorybodystringОбязательно. Одно из: General Inquiry, Bug Report, Feature Request, Sales & Pricing, Partnership, Career/Jobs, Technical Support, Billing & Payments, Press & Media, Other.
subjectbodystringОбязательно. Короткая тема.
messagebodystringОбязательно. Текст сообщения.
Request
curl -X POST https://www.ay-robots.com/api/contact \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "Jane Doe",
    "email": "jane@example.com",
    "category": "Technical Support",
    "subject": "SO-100 pairing question",
    "message": "My arm shows as offline after pairing."
  }'
Response
{
  "success": true,
  "message": "Message sent successfully",
  "id": "b1f2c3d4-0000-0000-0000-000000000000",
  "stored": true,
  "delivered": true
}
POST/api/robot-request

Запрашивает поддержку типа робота, которого ещё нет на платформе.

GET/api/stats

Возвращает публичную статистику платформы.