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 |
curl https://www.ay-robots.com/api/sessions \
-H 'Authorization: Bearer ayr_live_your_key_here'API-ключи создаются и отзываются в /dashboard/settings. Обращайтесь с ними как с паролями: храните на стороне сервера и ротируйте, создавая ключ на замену прежде, чем отзывать старый. Если вы используете CLI, он также умеет предоставлять платформу как локальный MCP-сервер командой: ay-robots mcp.
Ответы приходят в формате JSON. Ошибки имеют единообразную форму: JSON-объект с единственным полем error, содержащим сообщение для человека, доставляется с подходящим статус-кодом 4xx или 5xx. Успешные ответы возвращают ресурс напрямую; несколько эндпоинтов оборачивают списки в именованное поле, что примеры ниже показывают там, где это важно.
Эндпоинты аутентификации
Обвязка аккаунта и профиля. Эти эндпоинты в первую очередь использует сам дашборд, но они работают с любыми валидными учётными данными.
/api/auth/profileBearer-токен сессии или API-ключВозвращает профиль аутентифицированного пользователя.
/api/auth/profileBearer-токен сессии или API-ключОбновляет поля профиля, такие как отображаемое имя и настройки уведомлений.
/api/auth/syncBearer-токен сессииСинхронизирует пользователя аутентификации Supabase с записью пользователя платформы.
/api/auth/check-onboardingBearer-токен сессииСообщает, завершил ли аутентифицированный пользователь онбординг.
/api/auth/avatarBearer-токен сессииЗагружает новое изображение аватара для аутентифицированного пользователя.
Клиентские эндпоинты
Всё, чем управляет владелец робота: зарегистрированные роботы, профиль клиента, датасеты, счета и статистика дашборда.
/api/client/robotsBearer-токен сессии или API-ключ (роль клиента)Перечисляет роботов, зарегистрированных аутентифицированным клиентом, сначала новые, до 50 записей. Временные метки в формате ISO 8601; last_online и last_heartbeat равны null, пока робот ни разу не подключился.
curl https://www.ay-robots.com/api/client/robots \
-H 'Authorization: Bearer ayr_live_your_key_here'[
{
"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"
}
]/api/client/robotsBearer-токен сессии или API-ключ (роль клиента)Регистрирует нового робота и возвращает его id. Hardware id платы мотора может принадлежать только одному роботу; коллизия отклоняется со статусом 409.
/api/client/profileBearer-токен сессии или API-ключ (роль клиента)Возвращает профиль клиента аутентифицированного пользователя.
/api/client/profileBearer-токен сессии или API-ключ (роль клиента)Обновляет поля профиля клиента.
/api/client/datasetsBearer-токен сессии или API-ключ (роль клиента)Перечисляет облачные датасеты клиента с количеством эпизодов и размерами.
/api/client/invoicesBearer-токен сессии или API-ключ (роль клиента)Перечисляет месячные счета клиента.
/api/client/statsBearer-токен сессии или API-ключ (роль клиента)Возвращает статистику использования для дашборда клиента.
Операторские эндпоинты
Сторона оператора: профиль и доступность, сертификации, расписание и статистика заработка.
/api/operator/profileBearer-токен сессии или API-ключ (роль оператора)Возвращает профиль оператора аутентифицированного пользователя.
/api/operator/profileBearer-токен сессии или API-ключ (роль оператора)Создаёт или обновляет профиль оператора.
/api/operator/available-robotsBearer-токен сессии или API-ключ (роль оператора)Перечисляет роботов, которые сейчас доступны и соответствуют сертификациям оператора.
/api/operator/certificationsBearer-токен сессии или API-ключ (роль оператора)Перечисляет запросы на сертификацию оператора и их статус.
/api/operator/certificationsBearer-токен сессии или API-ключ (роль оператора)Запрашивает сертификацию на тип робота.
/api/operator/scheduleBearer-токен сессии или API-ключ (роль оператора)Возвращает недельное расписание доступности оператора.
/api/operator/scheduleBearer-токен сессии или API-ключ (роль оператора)Обновляет недельное расписание доступности.
/api/operator/availabilityBearer-токен сессии или API-ключ (роль оператора)Возвращает текущую доступность оператора.
/api/operator/statsBearer-токен сессии или API-ключ (роль оператора)Возвращает статистику заработка и сессий для дашборда оператора.
Сессии
Сессии являются основным ресурсом платформы: одна сессия представляет собой одно непрерывное взаимодействие телеоперации между оператором и роботом. Статус сессии проходит через PENDING, ACTIVE, PAUSED, COMPLETED и CANCELLED.
/api/sessionsBearer-токен сессии или API-ключПеречисляет сессии аутентифицированного пользователя. Операторы видят сессии, которыми они управляли; клиенты видят сессии на своих роботах. Набор полей немного различается между двумя видами: клиентский вид включает episodes_collected и data_collected_mb, операторский вид включает operator_earnings_cents.
| Name | In | Type | Description |
|---|---|---|---|
| status | query | string | Опционально. Фильтр по статусу сессии, например ACTIVE или COMPLETED. Опустите, чтобы перечислить все. |
| limit | query | number | Опционально. Размер страницы, по умолчанию 50, максимум 100. |
| offset | query | number | Опционально. Смещение пагинации, по умолчанию 0. |
curl 'https://www.ay-robots.com/api/sessions?status=COMPLETED&limit=10' \
-H 'Authorization: Bearer ayr_live_your_key_here'{
"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."
}
]
}/api/sessionsBearer-токен сессии или API-ключ (роль оператора)Запускает сессию телеоперации на доступном роботе. Требует роль оператора: клиенты не могут запускать сессии. Оператор может держать не более одной сессии ACTIVE или PAUSED одновременно, а робот в этот момент должен иметь статус AVAILABLE. При немедленном запуске робот переходит в IN_SESSION, и клиент получает уведомление.
| Name | In | Type | Description |
|---|---|---|---|
| robotId | body | string | Обязательно. Id робота для управления. Робот должен иметь статус AVAILABLE. |
| operatorId | body | string | Опционально. Явный id оператора; по умолчанию используется аутентифицированный оператор. |
| scheduledFor | body | string (ISO 8601) | Опционально. Планирует сессию на будущее время вместо немедленного запуска. |
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"}'{
"sessionId": "6b0d2c9a-53f1-4f6e-8f1a-2c9d4e7b5a30",
"status": "ACTIVE"
}/api/sessions/[id]Bearer-токен сессии или API-ключВозвращает одну сессию с её деталями.
/api/sessions/[id]Bearer-токен сессии или API-ключОбновляет жизненный цикл сессии: пауза, возобновление, завершение и связанные действия.
/api/sessions/[id]/extendBearer-токен сессии или API-ключ (клиент, владелец сессии)Запрашивает продление сессии. Вызывать может только клиент, которому принадлежит сессия, и сессия должна быть ACTIVE. Запрос логируется как событие сессии, а оператор получает уведомление; само продление происходит, когда оператор реагирует на него.
| Name | In | Type | Description |
|---|---|---|---|
| id | path | string | Id сессии. |
| additionalMinutes | body | number | Запрошенная длина продления в минутах. |
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}'{
"message": "Extension request sent to operator"
}/api/sessions/[id]/messagesBearer-токен сессии или API-ключПеречисляет сообщения чата сессии.
/api/sessions/[id]/messagesBearer-токен сессии или API-ключОтправляет сообщение в чате сессии.
/api/sessions/[id]/rateBearer-токен сессии или API-ключ (клиент)Оценивает завершённую сессию по шкале от 1 до 5 звёзд с опциональным комментарием.
/api/sessions/exportBearer-токен сессии или API-ключЭкспортирует данные сессии.
Платежи
Всё движение денег идёт через Stripe. Биллинг клиента использует клиента Stripe с сохранённым способом оплаты; выплаты операторам используют Stripe Connect. Сама платформа никогда не хранит данные карты или банковского счёта.
/api/stripe/customerBearer-токен сессии (роль клиента)Создаёт или возвращает клиента Stripe, используемого для биллинга клиента.
/api/stripe/connectBearer-токен сессии (роль оператора)Возвращает статус аккаунта Stripe Connect оператора.
/api/stripe/connectBearer-токен сессии (роль оператора)Запускает онбординг Stripe Connect для выплат оператору.
/api/stripe/setup-intentBearer-токен сессии (роль клиента)Создаёт Stripe SetupIntent для сохранения способа оплаты.
/api/stripe/portalBearer-токен сессии (роль клиента)Создаёт сессию биллингового портала Stripe для управления способами оплаты и счетами.
/api/stripe/payoutBearer-токен сессии (роль оператора)Возвращает информацию о выплатах для аутентифицированного оператора.
/api/stripe/payoutBearer-токен сессии (роль оператора)Запрашивает выплату накопленного заработка. Минимальная выплата составляет 10,00 EUR.
/api/stripe/webhookПодпись webhook StripeПринимает webhook-события Stripe. Вызывается Stripe, а не клиентами API.
Публичные эндпоинты
Эти эндпоинты не требуют аутентификации. Их безопасно вызывать из систем мониторинга, маркетинговых страниц или проб статуса.
/api/healthПроверка здоровья API и его подключения к базе данных. Возвращает 200, когда всё в порядке; если проверка базы данных не проходит, возвращается та же форма с status и db, установленными в error, и HTTP-статусом 503.
curl https://www.ay-robots.com/api/health{
"status": "ok",
"db": "ok",
"timestamp": "2026-08-09T10:12:00.000Z"
}/api/robots/[id]Возвращает публичную информацию о поддерживаемой модели робота.
/api/public/pricingВозвращает текущие публичные тарифные планы.
/api/contactОтправляет сообщение из контактной формы. Сообщение сначала сохраняется, а затем доставляется по email, поэтому временный сбой почты не приводит к его потере: в этом случае ответ сообщает stored true и delivered false, а доставка повторяется в фоновом режиме.
| Name | In | Type | Description |
|---|---|---|---|
| name | body | string | Обязательно. Ваше имя. |
| body | string | Обязательно. Действительный email-адрес для ответа. | |
| category | body | string | Обязательно. Одно из: General Inquiry, Bug Report, Feature Request, Sales & Pricing, Partnership, Career/Jobs, Technical Support, Billing & Payments, Press & Media, Other. |
| subject | body | string | Обязательно. Короткая тема. |
| message | body | string | Обязательно. Текст сообщения. |
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."
}'{
"success": true,
"message": "Message sent successfully",
"id": "b1f2c3d4-0000-0000-0000-000000000000",
"stored": true,
"delivered": true
}/api/robot-requestЗапрашивает поддержку типа робота, которого ещё нет на платформе.
/api/statsВозвращает публичную статистику платформы.
Как AY-Robots защищает аккаунты и живое управление роботами: аутентификация Supabase, модель ролей, API-ключи, защита сессий, аудит и шифрование.
Как устроены сессии AY-Robots: жизненный цикл от PENDING до COMPLETED, все события активности, чат сессии, оценки, продления и обучающие данные.