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étodo | Cómo funciona | Úselo para |
|---|---|---|
| Sesión del navegador | El token de sesión de Supabase de su cuenta con la sesión iniciada, enviado como cookie o como token Bearer | El propio panel y experimentos rápidos desde un contexto de navegador autenticado |
| Clave de API | Una clave con el prefijo ayr_live_, creada en /dashboard/settings y enviada como token Bearer | Scripts, servidores, CI, y cualquier cosa que no deba depender de un inicio de sesión en el navegador |
| MCP | El servidor MCP alojado en https://www.ay-robots.com/api/mcp (Streamable HTTP) | Agentes de LLM y herramientas que hablan el Model Context Protocol |
curl https://www.ay-robots.com/api/sessions \
-H 'Authorization: Bearer ayr_live_your_key_here'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.
/api/auth/profileToken de sesión Bearer o clave de APIDevuelve el perfil del usuario autenticado.
/api/auth/profileToken de sesión Bearer o clave de APIActualiza campos del perfil como el nombre visible y las preferencias de notificación.
/api/auth/syncToken de sesión BearerSincroniza el usuario de autenticación de Supabase con el registro de usuario de la plataforma.
/api/auth/check-onboardingToken de sesión BearerInforma si el usuario autenticado ha completado el onboarding.
/api/auth/avatarToken de sesión BearerSube 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.
/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.
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/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.
/api/client/profileToken de sesión Bearer o clave de API (rol de cliente)Devuelve el perfil de cliente del usuario autenticado.
/api/client/profileToken de sesión Bearer o clave de API (rol de cliente)Actualiza los campos del perfil de cliente.
/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.
/api/client/invoicesToken de sesión Bearer o clave de API (rol de cliente)Lista las facturas mensuales del cliente.
/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.
/api/operator/profileToken de sesión Bearer o clave de API (rol de operador)Devuelve el perfil de operador del usuario autenticado.
/api/operator/profileToken de sesión Bearer o clave de API (rol de operador)Crea o actualiza el perfil de operador.
/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.
/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.
/api/operator/certificationsToken de sesión Bearer o clave de API (rol de operador)Solicita la certificación para un tipo de robot.
/api/operator/scheduleToken de sesión Bearer o clave de API (rol de operador)Devuelve el horario de disponibilidad semanal del operador.
/api/operator/scheduleToken de sesión Bearer o clave de API (rol de operador)Actualiza el horario de disponibilidad semanal.
/api/operator/availabilityToken de sesión Bearer o clave de API (rol de operador)Devuelve la disponibilidad actual del operador.
/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.
/api/sessionsToken de sesión Bearer o clave de APILista 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.
| Name | In | Type | Description |
|---|---|---|---|
| status | query | string | Opcional. Filtra por estado de sesión, por ejemplo ACTIVE o COMPLETED. Omítalo para listarlas todas. |
| limit | query | number | Opcional. Tamaño de página, por defecto 50, máximo 100. |
| offset | query | number | Opcional. Desplazamiento de paginación, por defecto 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/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.
| Name | In | Type | Description |
|---|---|---|---|
| robotId | body | string | Obligatorio. Id del robot a operar. El robot debe estar AVAILABLE. |
| operatorId | body | string | Opcional. Id explícito de operador; por defecto es el operador autenticado. |
| scheduledFor | body | string (ISO 8601) | Opcional. Programa la sesión para un momento futuro en lugar de iniciarla de inmediato. |
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]Token de sesión Bearer o clave de APIDevuelve una única sesión con sus detalles.
/api/sessions/[id]Token de sesión Bearer o clave de APIActualiza el ciclo de vida de la sesión: pausar, reanudar, terminar y acciones relacionadas.
/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.
| Name | In | Type | Description |
|---|---|---|---|
| id | path | string | El id de la sesión. |
| additionalMinutes | body | number | Duración de extensión solicitada en minutos. |
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]/messagesToken de sesión Bearer o clave de APILista los mensajes de chat de una sesión.
/api/sessions/[id]/messagesToken de sesión Bearer o clave de APIEnvía un mensaje de chat en una sesión.
/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.
/api/sessions/exportToken de sesión Bearer o clave de APIExporta 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.
/api/stripe/customerToken de sesión Bearer (rol de cliente)Crea o devuelve el cliente de Stripe usado para la facturación del cliente.
/api/stripe/connectToken de sesión Bearer (rol de operador)Devuelve el estado de la cuenta de Stripe Connect del operador.
/api/stripe/connectToken de sesión Bearer (rol de operador)Inicia el onboarding de Stripe Connect para los pagos al operador.
/api/stripe/setup-intentToken de sesión Bearer (rol de cliente)Crea un SetupIntent de Stripe para guardar un método de pago.
/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.
/api/stripe/payoutToken de sesión Bearer (rol de operador)Devuelve información de pagos para el operador autenticado.
/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.
/api/stripe/webhookFirma de webhook de StripeRecibe 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.
/api/healthComprobació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.
curl https://www.ay-robots.com/api/health{
"status": "ok",
"db": "ok",
"timestamp": "2026-08-09T10:12:00.000Z"
}/api/robots/[id]Devuelve información pública sobre un modelo de robot compatible.
/api/public/pricingDevuelve los planes de precios públicos actuales.
/api/contactEnví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.
| Name | In | Type | Description |
|---|---|---|---|
| name | body | string | Obligatorio. Su nombre. |
| body | string | Obligatorio. Una dirección de correo electrónico válida para la respuesta. | |
| category | body | string | Obligatorio. Una de: General Inquiry, Bug Report, Feature Request, Sales & Pricing, Partnership, Career/Jobs, Technical Support, Billing & Payments, Press & Media, Other. |
| subject | body | string | Obligatorio. Línea de asunto breve. |
| message | body | string | Obligatorio. El cuerpo del mensaje. |
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-requestSolicita compatibilidad para un tipo de robot que todavía no está en la plataforma.
/api/statsDevuelve estadísticas públicas de la plataforma.
Cómo protege AY-Robots las cuentas y el control en vivo de robots: autenticación con Supabase, modelo de roles, claves de API, salvaguardas de sesión y cifrado.
Cómo funcionan las sesiones en AY-Robots: ciclo de vida de PENDING a COMPLETED, eventos de actividad, chat de sesión, valoraciones y extensiones.