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étodoComo funcionaUse para
Sessão do browserO token de sessão Supabase da sua conta com sessão iniciada, enviado como cookie ou como token BearerO próprio painel e experiências rápidas a partir de um contexto de browser autenticado
Chave de APIUma chave com o prefixo ayr_live_, criada em /dashboard/settings e enviada como token BearerScripts, servidores, CI e tudo o que não deve depender de um login no browser
MCPO servidor MCP alojado em https://www.ay-robots.com/api/mcp (Streamable HTTP)Agentes LLM e ferramentas que falam o Model Context Protocol
bash
curl https://www.ay-robots.com/api/sessions \
  -H 'Authorization: Bearer ayr_live_your_key_here'
Autenticação com uma chave de API

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.

GET/api/auth/profileToken de sessão Bearer ou chave de API

Devolve o perfil do utilizador autenticado.

POST/api/auth/profileToken de sessão Bearer ou chave de API

Atualiza campos do perfil, como o nome de exibição e as preferências de notificação.

POST/api/auth/syncToken de sessão Bearer

Sincroniza o utilizador de autenticação Supabase com o registo de utilizador da plataforma.

GET/api/auth/check-onboardingToken de sessão Bearer

Indica se o utilizador autenticado concluiu o onboarding.

POST/api/auth/avatarToken de sessão Bearer

Carrega 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.

GET/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.

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 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.

GET/api/client/profileToken de sessão Bearer ou chave de API (função de cliente)

Devolve o perfil de cliente do utilizador autenticado.

PATCH/api/client/profileToken de sessão Bearer ou chave de API (função de cliente)

Atualiza campos do perfil de cliente.

GET/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.

GET/api/client/invoicesToken de sessão Bearer ou chave de API (função de cliente)

Lista as faturas mensais do cliente.

GET/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.

GET/api/operator/profileToken de sessão Bearer ou chave de API (função de operador)

Devolve o perfil de operador do utilizador autenticado.

POST/api/operator/profileToken de sessão Bearer ou chave de API (função de operador)

Cria ou atualiza o perfil de operador.

GET/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.

GET/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.

POST/api/operator/certificationsToken de sessão Bearer ou chave de API (função de operador)

Solicita certificação para um tipo de robô.

GET/api/operator/scheduleToken de sessão Bearer ou chave de API (função de operador)

Devolve o calendário semanal de disponibilidade do operador.

POST/api/operator/scheduleToken de sessão Bearer ou chave de API (função de operador)

Atualiza o calendário semanal de disponibilidade.

GET/api/operator/availabilityToken de sessão Bearer ou chave de API (função de operador)

Devolve a disponibilidade atual do operador.

GET/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.

GET/api/sessionsToken de sessão Bearer ou chave de API

Lista 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.

NameInTypeDescription
statusquerystringOpcional. Filtra por estado de sessão, por exemplo ACTIVE ou COMPLETED. Omita para listar todas.
limitquerynumberOpcional. Tamanho da página, padrão 50, máximo 100.
offsetquerynumberOpcional. Deslocamento de paginação, padrão 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 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.

NameInTypeDescription
robotIdbodystringObrigatório. Id do robô a operar. O robô tem de estar AVAILABLE.
operatorIdbodystringOpcional. Id explícito do operador; por defeito é o operador autenticado.
scheduledForbodystring (ISO 8601)Opcional. Agenda a sessão para um momento futuro em vez de a iniciar imediatamente.
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 sessão Bearer ou chave de API

Devolve uma única sessão com os seus detalhes.

PATCH/api/sessions/[id]Token de sessão Bearer ou chave de API

Atualiza o ciclo de vida da sessão: pausar, retomar, terminar e ações relacionadas.

POST/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.

NameInTypeDescription
idpathstringO id da sessão.
additionalMinutesbodynumberDuração da extensão solicitada, em 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 sessão Bearer ou chave de API

Lista as mensagens de chat de uma sessão.

POST/api/sessions/[id]/messagesToken de sessão Bearer ou chave de API

Envia uma mensagem de chat numa sessão.

POST/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.

POST/api/sessions/exportToken de sessão Bearer ou chave de API

Exporta 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.

POST/api/stripe/customerToken de sessão Bearer (função de cliente)

Cria ou devolve o cliente Stripe usado para a faturação do cliente.

GET/api/stripe/connectToken de sessão Bearer (função de operador)

Devolve o estado da conta Stripe Connect do operador.

POST/api/stripe/connectToken de sessão Bearer (função de operador)

Inicia o onboarding do Stripe Connect para pagamentos a operadores.

POST/api/stripe/setup-intentToken de sessão Bearer (função de cliente)

Cria um SetupIntent do Stripe para guardar um método de pagamento.

POST/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.

GET/api/stripe/payoutToken de sessão Bearer (função de operador)

Devolve informação de pagamento para o operador autenticado.

POST/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.

POST/api/stripe/webhookAssinatura de webhook do Stripe

Recebe 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.

GET/api/health

Verificaçã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.

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]

Devolve informação pública sobre um modelo de robô suportado.

GET/api/public/pricing

Devolve os planos de preços públicos atuais.

POST/api/contact

Submete 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.

NameInTypeDescription
namebodystringObrigatório. O seu nome.
emailbodystringObrigatório. Um endereço de email válido para a resposta.
categorybodystringObrigatório. Uma de: General Inquiry, Bug Report, Feature Request, Sales & Pricing, Partnership, Career/Jobs, Technical Support, Billing & Payments, Press & Media, Other.
subjectbodystringObrigatório. Linha de assunto curta.
messagebodystringObrigatório. O corpo da mensagem.
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 suporte para um tipo de robô que ainda não está na plataforma.

GET/api/stats

Devolve estatísticas públicas da plataforma.