Справочник на API

REST API на AY-Robots се намира под https://www.ay-robots.com/api и говори JSON в двете посоки. Тази страница документира автентикацията, конвенциите за отговори и всеки endpoint, с пълна документация на параметрите за маршрутите, които най-вероятно ще извиквате програмно.

Последна актуализация 2026-08-09

Автентикация

Всеки endpoint изисква автентикация, освен ако не е изброен в раздела Публични endpoints. API-то приема две форми на данни за достъп и двете пристигат по един и същ начин: или като бисквитката на сесията, която таблото и без друго изпраща, или като заглавие Authorization с Bearer токен.

МетодКак работиИзползвайте го за
Сесия в браузъраТокенът на Supabase сесията на влезлия ви акаунт, изпратен като бисквитка или като 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. Успешните отговори връщат ресурса директно; малко на брой endpoints опаковат списъци в наименувано поле, което примерите по-долу показват там, където има значение.

Endpoints за автентикация

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

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

Връща профила на автентикирания потребител.

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

Актуализира полета на профила, като показваното име и предпочитанията за известия.

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

Синхронизира потребителя от Supabase auth с потребителския запис на платформата.

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

Съобщава дали автентикираният потребител е завършил onboarding.

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

Качва ново изображение за аватар на автентикирания потребител.

Endpoints за клиенти

Всичко, което управлява собственик на робот: регистрирани роботи, клиентският профил, дейтасети, фактури и статистики за таблото.

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. Хардуерен идентификатор на двигателна платка може да принадлежи само на един робот; сблъсък се отхвърля със статус 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 ключ (роля клиент)

Връща статистики за използване за таблото на клиента.

Endpoints за оператори

Страната на оператора: профил и наличност, сертификации, планиране и статистики за приходи.

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 токен на сесия (роля оператор)

Стартира onboarding в 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.

Публични endpoints

Тези endpoints не изискват автентикация. Безопасно е да се извикват от мониторинг, маркетингови страници или сонда за статус.

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Задължително. Валиден имейл адрес за отговор.
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

Връща публични статистики на платформата.