Referência da API
A API REST da AY-Robots vive em https://www.ay-robots.com/api e fala JSON nos dois sentidos. Esta página documenta a autenticação, as convenções de resposta e todos os endpoints, com documentação completa de parâmetros para as rotas que mais provavelmente vai chamar de forma programática.
Última atualização 2026-08-09
Autenticação
Todos os endpoints exigem autenticação, exceto os listados na secção Endpoints públicos. A API aceita duas formas de credenciais, e ambas chegam da mesma maneira: como o cookie de sessão que o painel já envia, ou como um cabeçalho Authorization com um token Bearer.
| Método | Como funciona | Use para |
|---|---|---|
| Sessão do browser | O token de sessão Supabase da sua conta com sessão iniciada, enviado como cookie ou como token Bearer | O próprio painel e experiências rápidas a partir de um contexto de browser autenticado |
| Chave de API | Uma chave com o prefixo ayr_live_, criada em /dashboard/settings e enviada como token Bearer | Scripts, servidores, CI e tudo o que não deve depender de um login no browser |
| MCP | O servidor MCP alojado em https://www.ay-robots.com/api/mcp (Streamable HTTP) | Agentes LLM e ferramentas que falam o Model Context Protocol |
curl https://www.ay-robots.com/api/sessions \
-H 'Authorization: Bearer ayr_live_your_key_here'As chaves de API são criadas e revogadas em /dashboard/settings. Trate-as como palavras-passe: mantenha-as do lado do servidor, e rode-as criando uma chave de substituição antes de revogar a antiga. Se usar a CLI de desktop, esta também pode expor a plataforma como um servidor MCP local com o comando: ay-robots mcp.
As respostas são JSON. Os erros seguem uma forma consistente: um objeto JSON com um único campo error contendo uma mensagem legível por humanos, entregue com um código de estado 4xx ou 5xx apropriado. As respostas de sucesso devolvem o recurso diretamente; alguns endpoints envolvem listas num campo nomeado, o que os exemplos abaixo mostram onde é relevante.
Endpoints de autenticação
Gestão de conta e perfil. Estes endpoints são usados principalmente pelo próprio painel, mas funcionam com qualquer credencial válida.
/api/auth/profileToken de sessão Bearer ou chave de APIDevolve o perfil do utilizador autenticado.
/api/auth/profileToken de sessão Bearer ou chave de APIAtualiza campos do perfil, como o nome de exibição e as preferências de notificação.
/api/auth/syncToken de sessão BearerSincroniza o utilizador de autenticação Supabase com o registo de utilizador da plataforma.
/api/auth/check-onboardingToken de sessão BearerIndica se o utilizador autenticado concluiu o onboarding.
/api/auth/avatarToken de sessão BearerCarrega uma nova imagem de avatar para o utilizador autenticado.
Endpoints de cliente
Tudo o que um dono de robô gere: robôs registados, o perfil de cliente, datasets, faturas e estatísticas do painel.
/api/client/robotsToken de sessão Bearer ou chave de API (função de cliente)Lista os robôs registados pelo cliente autenticado, mais recentes primeiro, até 50 entradas. Os timestamps são ISO 8601; last_online e last_heartbeat são null até o robô se ter ligado pela primeira 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 sessão Bearer ou chave de API (função de cliente)Regista um novo robô e devolve o seu id. Um id de hardware de placa de motor só pode pertencer a um robô; uma colisão é rejeitada com o estado 409.
/api/client/profileToken de sessão Bearer ou chave de API (função de cliente)Devolve o perfil de cliente do utilizador autenticado.
/api/client/profileToken de sessão Bearer ou chave de API (função de cliente)Atualiza campos do perfil de cliente.
/api/client/datasetsToken de sessão Bearer ou chave de API (função de cliente)Lista os datasets na cloud do cliente com contagens de episódios e tamanhos.
/api/client/invoicesToken de sessão Bearer ou chave de API (função de cliente)Lista as faturas mensais do cliente.
/api/client/statsToken de sessão Bearer ou chave de API (função de cliente)Devolve estatísticas de utilização para o painel do cliente.
Endpoints de operador
O lado do operador: perfil e disponibilidade, certificações, agendamento e estatísticas de ganhos.
/api/operator/profileToken de sessão Bearer ou chave de API (função de operador)Devolve o perfil de operador do utilizador autenticado.
/api/operator/profileToken de sessão Bearer ou chave de API (função de operador)Cria ou atualiza o perfil de operador.
/api/operator/available-robotsToken de sessão Bearer ou chave de API (função de operador)Lista robôs que estão atualmente disponíveis e correspondem às certificações do operador.
/api/operator/certificationsToken de sessão Bearer ou chave de API (função de operador)Lista os pedidos de certificação do operador e o seu estado.
/api/operator/certificationsToken de sessão Bearer ou chave de API (função de operador)Solicita certificação para um tipo de robô.
/api/operator/scheduleToken de sessão Bearer ou chave de API (função de operador)Devolve o calendário semanal de disponibilidade do operador.
/api/operator/scheduleToken de sessão Bearer ou chave de API (função de operador)Atualiza o calendário semanal de disponibilidade.
/api/operator/availabilityToken de sessão Bearer ou chave de API (função de operador)Devolve a disponibilidade atual do operador.
/api/operator/statsToken de sessão Bearer ou chave de API (função de operador)Devolve estatísticas de ganhos e sessões para o painel do operador.
Sessões
As sessões são o recurso central da plataforma: uma sessão é um envolvimento contínuo de teleoperação entre um operador e um robô. O estado da sessão passa por PENDING, ACTIVE, PAUSED, COMPLETED e CANCELLED.
/api/sessionsToken de sessão Bearer ou chave de APILista sessões para o utilizador autenticado. Os operadores veem as sessões que operaram; os clientes veem as sessões nos seus robôs. O conjunto de campos difere ligeiramente entre as duas vistas: a vista de cliente inclui episodes_collected e data_collected_mb, a vista de operador inclui operator_earnings_cents.
| Name | In | Type | Description |
|---|---|---|---|
| status | query | string | Opcional. Filtra por estado de sessão, por exemplo ACTIVE ou COMPLETED. Omita para listar todas. |
| limit | query | number | Opcional. Tamanho da página, padrão 50, máximo 100. |
| offset | query | number | Opcional. Deslocamento de paginação, padrão 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 sessão Bearer ou chave de API (função de operador)Inicia uma sessão de teleoperação num robô disponível. Exige a função de operador: os clientes não podem iniciar sessões. Um operador pode deter, no máximo, uma sessão ACTIVE ou PAUSED de cada vez, e o robô tem de ter atualmente o estado AVAILABLE. Num início imediato, o robô muda para IN_SESSION e o cliente é notificado.
| Name | In | Type | Description |
|---|---|---|---|
| robotId | body | string | Obrigatório. Id do robô a operar. O robô tem de estar AVAILABLE. |
| operatorId | body | string | Opcional. Id explícito do operador; por defeito é o operador autenticado. |
| scheduledFor | body | string (ISO 8601) | Opcional. Agenda a sessão para um momento futuro em vez de a iniciar imediatamente. |
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 sessão Bearer ou chave de APIDevolve uma única sessão com os seus detalhes.
/api/sessions/[id]Token de sessão Bearer ou chave de APIAtualiza o ciclo de vida da sessão: pausar, retomar, terminar e ações relacionadas.
/api/sessions/[id]/extendToken de sessão Bearer ou chave de API (cliente, dono da sessão)Solicita uma extensão de sessão. Só o cliente dono da sessão pode chamar este endpoint, e a sessão tem de estar ACTIVE. O pedido é registado como um evento de sessão e o operador recebe uma notificação; a extensão em si acontece quando o operador reage a ela.
| Name | In | Type | Description |
|---|---|---|---|
| id | path | string | O id da sessão. |
| additionalMinutes | body | number | Duração da extensão solicitada, em 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 sessão Bearer ou chave de APILista as mensagens de chat de uma sessão.
/api/sessions/[id]/messagesToken de sessão Bearer ou chave de APIEnvia uma mensagem de chat numa sessão.
/api/sessions/[id]/rateToken de sessão Bearer ou chave de API (cliente)Avalia uma sessão concluída numa escala de 1 a 5 estrelas, com um comentário opcional.
/api/sessions/exportToken de sessão Bearer ou chave de APIExporta dados de sessão.
Pagamentos
Toda a movimentação de dinheiro passa pelo Stripe. A faturação do cliente usa um cliente Stripe com um método de pagamento guardado; os pagamentos a operadores usam o Stripe Connect. A própria plataforma nunca guarda dados de cartão ou bancários.
/api/stripe/customerToken de sessão Bearer (função de cliente)Cria ou devolve o cliente Stripe usado para a faturação do cliente.
/api/stripe/connectToken de sessão Bearer (função de operador)Devolve o estado da conta Stripe Connect do operador.
/api/stripe/connectToken de sessão Bearer (função de operador)Inicia o onboarding do Stripe Connect para pagamentos a operadores.
/api/stripe/setup-intentToken de sessão Bearer (função de cliente)Cria um SetupIntent do Stripe para guardar um método de pagamento.
/api/stripe/portalToken de sessão Bearer (função de cliente)Cria uma sessão do portal de faturação do Stripe para gerir métodos de pagamento e faturas.
/api/stripe/payoutToken de sessão Bearer (função de operador)Devolve informação de pagamento para o operador autenticado.
/api/stripe/payoutToken de sessão Bearer (função de operador)Solicita um pagamento dos ganhos acumulados. O pagamento mínimo é de 10,00 EUR.
/api/stripe/webhookAssinatura de webhook do StripeRecebe eventos de webhook do Stripe. Chamado pelo Stripe, não por clientes da API.
Endpoints públicos
Estes endpoints não exigem autenticação. São seguros de chamar a partir de monitorização, páginas de marketing ou uma sonda de estado.
/api/healthVerificação de saúde da API e da sua ligação à base de dados. Devolve 200 quando ambas estão bem; se a verificação da base de dados falhar, é devolvida a mesma estrutura com status e db definidos como error e o 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]Devolve informação pública sobre um modelo de robô suportado.
/api/public/pricingDevolve os planos de preços públicos atuais.
/api/contactSubmete uma mensagem do formulário de contacto. A mensagem é primeiro guardada e depois entregue por email, para que uma falha temporária de correio não a perca: nesse caso a resposta reporta stored true e delivered false, e a entrega é repetida operacionalmente.
| Name | In | Type | Description |
|---|---|---|---|
| name | body | string | Obrigatório. O seu nome. |
| body | string | Obrigatório. Um endereço de email válido para a resposta. | |
| category | body | string | Obrigatório. Uma de: General Inquiry, Bug Report, Feature Request, Sales & Pricing, Partnership, Career/Jobs, Technical Support, Billing & Payments, Press & Media, Other. |
| subject | body | string | Obrigatório. Linha de assunto curta. |
| message | body | string | Obrigatório. O corpo da mensagem. |
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 suporte para um tipo de robô que ainda não está na plataforma.
/api/statsDevolve estatísticas públicas da plataforma.
Como a AY-Robots protege contas e o controlo de robôs: autenticação Supabase, modelo de funções, chaves de API, salvaguardas de sessão e encriptação.
Como funcionam as sessões na AY-Robots: o ciclo de PENDING a COMPLETED, cada evento de atividade, chat, avaliações, extensões e dados de treino.