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

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

Повертає публічну статистику платформи.