Referencia de la API

La API REST de AY-Robots vive bajo https://www.ay-robots.com/api y habla JSON en ambas direcciones. Esta página documenta la autenticación, las convenciones de respuesta y cada endpoint, con documentación completa de parámetros para las rutas que con más probabilidad llamará mediante programación.

Última actualización 2026-08-09

Autenticación

Todos los endpoints requieren autenticación salvo que estén listados en la sección Endpoints públicos. La API acepta dos formas de credenciales, y ambas llegan de la misma manera: como la cookie de sesión que el panel ya envía, o como un encabezado Authorization con un token Bearer.

MétodoCómo funcionaÚselo para
Sesión del navegadorEl token de sesión de Supabase de su cuenta con la sesión iniciada, enviado como cookie o como token BearerEl propio panel y experimentos rápidos desde un contexto de navegador autenticado
Clave de APIUna clave con el prefijo ayr_live_, creada en /dashboard/settings y enviada como token BearerScripts, servidores, CI, y cualquier cosa que no deba depender de un inicio de sesión en el navegador
MCPEl servidor MCP alojado en https://www.ay-robots.com/api/mcp (Streamable HTTP)Agentes de LLM y herramientas que hablan el Model Context Protocol
bash
curl https://www.ay-robots.com/api/sessions \
  -H 'Authorization: Bearer ayr_live_your_key_here'
Autenticación con una clave de API

Las claves de API se crean y se revocan en /dashboard/settings. Trátelas como contraseñas: manténgalas del lado del servidor, y rótelas creando una clave de reemplazo antes de revocar la antigua. Si usa la CLI de escritorio, también puede exponer la plataforma como un servidor MCP local con el comando: ay-robots mcp.

Las respuestas son JSON. Los errores usan una estructura consistente: un objeto JSON con un único campo error que contiene un mensaje legible para humanos, entregado con un código de estado 4xx o 5xx apropiado. Las respuestas de éxito devuelven el recurso directamente; unos pocos endpoints envuelven las listas en un campo con nombre, lo cual muestran los ejemplos siguientes donde importa.

Endpoints de autenticación

Infraestructura de cuenta y perfil. Estos endpoints los usa principalmente el propio panel, pero funcionan con cualquier credencial válida.

GET/api/auth/profileToken de sesión Bearer o clave de API

Devuelve el perfil del usuario autenticado.

POST/api/auth/profileToken de sesión Bearer o clave de API

Actualiza campos del perfil como el nombre visible y las preferencias de notificación.

POST/api/auth/syncToken de sesión Bearer

Sincroniza el usuario de autenticación de Supabase con el registro de usuario de la plataforma.

GET/api/auth/check-onboardingToken de sesión Bearer

Informa si el usuario autenticado ha completado el onboarding.

POST/api/auth/avatarToken de sesión Bearer

Sube una nueva imagen de avatar para el usuario autenticado.

Endpoints de cliente

Todo lo que gestiona un propietario de robots: robots registrados, el perfil de cliente, conjuntos de datos, facturas y estadísticas del panel.

GET/api/client/robotsToken de sesión Bearer o clave de API (rol de cliente)

Lista los robots registrados por el cliente autenticado, los más nuevos primero, hasta 50 entradas. Las marcas de tiempo son ISO 8601; last_online y last_heartbeat son null hasta que el robot se ha conectado alguna vez.

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/robotsToken de sesión Bearer o clave de API (rol de cliente)

Registra un robot nuevo y devuelve su id. El id de hardware de una placa de motor solo puede pertenecer a un robot; una colisión se rechaza con el estado 409.

GET/api/client/profileToken de sesión Bearer o clave de API (rol de cliente)

Devuelve el perfil de cliente del usuario autenticado.

PATCH/api/client/profileToken de sesión Bearer o clave de API (rol de cliente)

Actualiza los campos del perfil de cliente.

GET/api/client/datasetsToken de sesión Bearer o clave de API (rol de cliente)

Lista los conjuntos de datos en la nube del cliente con recuentos de episodios y tamaños.

GET/api/client/invoicesToken de sesión Bearer o clave de API (rol de cliente)

Lista las facturas mensuales del cliente.

GET/api/client/statsToken de sesión Bearer o clave de API (rol de cliente)

Devuelve estadísticas de uso para el panel del cliente.

Endpoints de operador

El lado del operador: perfil y disponibilidad, certificaciones, programación y estadísticas de ganancias.

GET/api/operator/profileToken de sesión Bearer o clave de API (rol de operador)

Devuelve el perfil de operador del usuario autenticado.

POST/api/operator/profileToken de sesión Bearer o clave de API (rol de operador)

Crea o actualiza el perfil de operador.

GET/api/operator/available-robotsToken de sesión Bearer o clave de API (rol de operador)

Lista los robots que están actualmente disponibles y coinciden con las certificaciones del operador.

GET/api/operator/certificationsToken de sesión Bearer o clave de API (rol de operador)

Lista las solicitudes de certificación del operador y su estado.

POST/api/operator/certificationsToken de sesión Bearer o clave de API (rol de operador)

Solicita la certificación para un tipo de robot.

GET/api/operator/scheduleToken de sesión Bearer o clave de API (rol de operador)

Devuelve el horario de disponibilidad semanal del operador.

POST/api/operator/scheduleToken de sesión Bearer o clave de API (rol de operador)

Actualiza el horario de disponibilidad semanal.

GET/api/operator/availabilityToken de sesión Bearer o clave de API (rol de operador)

Devuelve la disponibilidad actual del operador.

GET/api/operator/statsToken de sesión Bearer o clave de API (rol de operador)

Devuelve estadísticas de ganancias y sesiones para el panel del operador.

Sesiones

Las sesiones son el recurso central de la plataforma: una sesión es un compromiso de teleoperación continuo entre un operador y un robot. El estado de la sesión pasa por PENDING, ACTIVE, PAUSED, COMPLETED y CANCELLED.

GET/api/sessionsToken de sesión Bearer o clave de API

Lista las sesiones del usuario autenticado. Los operadores ven las sesiones que operaron; los clientes ven las sesiones en sus robots. El conjunto de campos difiere ligeramente entre ambas vistas: la vista del cliente incluye episodes_collected y data_collected_mb, la vista del operador incluye operator_earnings_cents.

NameInTypeDescription
statusquerystringOpcional. Filtra por estado de sesión, por ejemplo ACTIVE o COMPLETED. Omítalo para listarlas todas.
limitquerynumberOpcional. Tamaño de página, por defecto 50, máximo 100.
offsetquerynumberOpcional. Desplazamiento de paginación, por defecto 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/sessionsToken de sesión Bearer o clave de API (rol de operador)

Inicia una sesión de teleoperación en un robot disponible. Requiere el rol de operador: los clientes no pueden iniciar sesiones. Un operador puede mantener como máximo una sesión ACTIVE o PAUSED a la vez, y el robot debe tener actualmente el estado AVAILABLE. En un inicio inmediato, el robot cambia a IN_SESSION y se notifica al cliente.

NameInTypeDescription
robotIdbodystringObligatorio. Id del robot a operar. El robot debe estar AVAILABLE.
operatorIdbodystringOpcional. Id explícito de operador; por defecto es el operador autenticado.
scheduledForbodystring (ISO 8601)Opcional. Programa la sesión para un momento futuro en lugar de iniciarla de inmediato.
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]Token de sesión Bearer o clave de API

Devuelve una única sesión con sus detalles.

PATCH/api/sessions/[id]Token de sesión Bearer o clave de API

Actualiza el ciclo de vida de la sesión: pausar, reanudar, terminar y acciones relacionadas.

POST/api/sessions/[id]/extendToken de sesión Bearer o clave de API (cliente, propietario de la sesión)

Solicita una extensión de sesión. Solo el cliente propietario de la sesión puede llamar a este endpoint, y la sesión debe estar ACTIVE. La solicitud se registra como un evento de sesión y el operador recibe una notificación; la extensión en sí ocurre cuando el operador actúa sobre ella.

NameInTypeDescription
idpathstringEl id de la sesión.
additionalMinutesbodynumberDuración de extensión solicitada en minutos.
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]/messagesToken de sesión Bearer o clave de API

Lista los mensajes de chat de una sesión.

POST/api/sessions/[id]/messagesToken de sesión Bearer o clave de API

Envía un mensaje de chat en una sesión.

POST/api/sessions/[id]/rateToken de sesión Bearer o clave de API (cliente)

Valora una sesión completada en una escala de 1 a 5 estrellas, con un comentario opcional.

POST/api/sessions/exportToken de sesión Bearer o clave de API

Exporta datos de sesión.

Pagos

Todo movimiento de dinero pasa por Stripe. La facturación de clientes usa un cliente de Stripe con un método de pago guardado; los pagos a operadores usan Stripe Connect. La plataforma en sí nunca almacena datos de tarjetas o bancarios.

POST/api/stripe/customerToken de sesión Bearer (rol de cliente)

Crea o devuelve el cliente de Stripe usado para la facturación del cliente.

GET/api/stripe/connectToken de sesión Bearer (rol de operador)

Devuelve el estado de la cuenta de Stripe Connect del operador.

POST/api/stripe/connectToken de sesión Bearer (rol de operador)

Inicia el onboarding de Stripe Connect para los pagos al operador.

POST/api/stripe/setup-intentToken de sesión Bearer (rol de cliente)

Crea un SetupIntent de Stripe para guardar un método de pago.

POST/api/stripe/portalToken de sesión Bearer (rol de cliente)

Crea una sesión del portal de facturación de Stripe para gestionar métodos de pago y facturas.

GET/api/stripe/payoutToken de sesión Bearer (rol de operador)

Devuelve información de pagos para el operador autenticado.

POST/api/stripe/payoutToken de sesión Bearer (rol de operador)

Solicita un pago de las ganancias acumuladas. El pago mínimo es 10,00 EUR.

POST/api/stripe/webhookFirma de webhook de Stripe

Recibe eventos de webhook de Stripe. Es llamado por Stripe, no por clientes de la API.

Endpoints públicos

Estos endpoints no requieren autenticación. Es seguro llamarlos desde monitorización, páginas de marketing o una sonda de estado.

GET/api/health

Comprobación de salud para la API y su conexión a la base de datos. Devuelve 200 cuando ambas están bien; si la comprobación de base de datos falla, se devuelve la misma estructura con status y db en error y el estado 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]

Devuelve información pública sobre un modelo de robot compatible.

GET/api/public/pricing

Devuelve los planes de precios públicos actuales.

POST/api/contact

Envía un mensaje del formulario de contacto. El mensaje se almacena primero y luego se entrega por correo electrónico, así que una interrupción temporal del correo no lo pierde: en ese caso la respuesta reporta stored true y delivered false, y la entrega se reintenta de forma operativa.

NameInTypeDescription
namebodystringObligatorio. Su nombre.
emailbodystringObligatorio. Una dirección de correo electrónico válida para la respuesta.
categorybodystringObligatorio. Una de: General Inquiry, Bug Report, Feature Request, Sales & Pricing, Partnership, Career/Jobs, Technical Support, Billing & Payments, Press & Media, Other.
subjectbodystringObligatorio. Línea de asunto breve.
messagebodystringObligatorio. El cuerpo del mensaje.
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

Solicita compatibilidad para un tipo de robot que todavía no está en la plataforma.

GET/api/stats

Devuelve estadísticas públicas de la plataforma.