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Надсилає повідомлення з контактної форми. Повідомлення спершу зберігається, а потім доставляється поштою, тож тимчасовий збій пошти не призводить до його втрати: у цьому разі відповідь повідомляє 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Повертає публічну статистику платформи.