Riferimento API

L'API REST di AY-Robots si trova su https://www.ay-robots.com/api e parla JSON in entrambe le direzioni. Questa pagina documenta l'autenticazione, le convenzioni di risposta e ogni endpoint, con documentazione completa dei parametri per le rotte più probabilmente chiamate in modo programmatico.

Ultimo aggiornamento 2026-08-09

Autenticazione

Ogni endpoint richiede autenticazione, a meno che non sia elencato nella sezione Endpoint pubblici. L'API accetta due forme di credenziali, ed entrambe arrivano nello stesso modo: come cookie di sessione già inviato dalla dashboard, oppure come header Authorization con un token Bearer.

MetodoCome funzionaAdatto a
Sessione browserIl token di sessione Supabase del proprio account connesso, inviato come cookie o come token BearerLa dashboard stessa ed esperimenti rapidi da un contesto browser autenticato
Chiave APIUna chiave con prefisso ayr_live_, creata in /dashboard/settings e inviata come token BearerScript, server, CI e qualsiasi cosa non debba dipendere da un accesso via browser
MCPIl server MCP ospitato su https://www.ay-robots.com/api/mcp (Streamable HTTP)Agenti LLM e strumenti che parlano il Model Context Protocol
bash
curl https://www.ay-robots.com/api/sessions \
  -H 'Authorization: Bearer ayr_live_your_key_here'
Autenticazione con una chiave API

Le chiavi API si creano e si revocano in /dashboard/settings. Vanno trattate come password: conservarle lato server e ruotarle creando prima una chiave sostitutiva prima di revocare quella vecchia. Chi usa la CLI desktop può anche esporre la piattaforma come server MCP locale con il comando: ay-robots mcp.

Le risposte sono in JSON. Gli errori seguono una forma coerente: un oggetto JSON con un singolo campo error contenente un messaggio leggibile, restituito con un codice di stato 4xx o 5xx appropriato. Le risposte di successo restituiscono la risorsa direttamente; alcuni endpoint racchiudono le liste in un campo denominato, il che gli esempi seguenti mostrano dove è rilevante.

Endpoint di autenticazione

Gestione di account e profilo. Sono usati principalmente dalla dashboard stessa, ma funzionano con qualsiasi credenziale valida.

GET/api/auth/profileToken di sessione Bearer o chiave API

Restituisce il profilo dell'utente autenticato.

POST/api/auth/profileToken di sessione Bearer o chiave API

Aggiorna i campi del profilo, come il nome visualizzato e le preferenze di notifica.

POST/api/auth/syncToken di sessione Bearer

Sincronizza l'utente auth di Supabase con il record utente della piattaforma.

GET/api/auth/check-onboardingToken di sessione Bearer

Indica se l'utente autenticato ha completato l'onboarding.

POST/api/auth/avatarToken di sessione Bearer

Carica una nuova immagine avatar per l'utente autenticato.

Endpoint cliente

Tutto ciò che un proprietario di robot gestisce: robot registrati, profilo cliente, dataset, fatture e statistiche della dashboard.

GET/api/client/robotsToken di sessione Bearer o chiave API (ruolo cliente)

Elenca i robot registrati dal cliente autenticato, dal più recente, fino a 50 voci. I timestamp sono in formato ISO 8601; last_online e last_heartbeat sono null finché il robot non si è connesso almeno una volta.

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 di sessione Bearer o chiave API (ruolo cliente)

Registra un nuovo robot e ne restituisce l'id. Un id hardware di scheda motore può appartenere a un solo robot; una collisione viene rifiutata con status 409.

GET/api/client/profileToken di sessione Bearer o chiave API (ruolo cliente)

Restituisce il profilo cliente dell'utente autenticato.

PATCH/api/client/profileToken di sessione Bearer o chiave API (ruolo cliente)

Aggiorna i campi del profilo cliente.

GET/api/client/datasetsToken di sessione Bearer o chiave API (ruolo cliente)

Elenca i dataset cloud del cliente con conteggio degli episodi e dimensioni.

GET/api/client/invoicesToken di sessione Bearer o chiave API (ruolo cliente)

Elenca le fatture mensili del cliente.

GET/api/client/statsToken di sessione Bearer o chiave API (ruolo cliente)

Restituisce le statistiche di utilizzo per la dashboard cliente.

Endpoint operatore

Il lato operatore: profilo e disponibilità, certificazioni, pianificazione e statistiche sui guadagni.

GET/api/operator/profileToken di sessione Bearer o chiave API (ruolo operatore)

Restituisce il profilo operatore dell'utente autenticato.

POST/api/operator/profileToken di sessione Bearer o chiave API (ruolo operatore)

Crea o aggiorna il profilo operatore.

GET/api/operator/available-robotsToken di sessione Bearer o chiave API (ruolo operatore)

Elenca i robot attualmente disponibili che corrispondono alle certificazioni dell'operatore.

GET/api/operator/certificationsToken di sessione Bearer o chiave API (ruolo operatore)

Elenca le richieste di certificazione dell'operatore e il loro stato.

POST/api/operator/certificationsToken di sessione Bearer o chiave API (ruolo operatore)

Richiede la certificazione per un tipo di robot.

GET/api/operator/scheduleToken di sessione Bearer o chiave API (ruolo operatore)

Restituisce il calendario di disponibilità settimanale dell'operatore.

POST/api/operator/scheduleToken di sessione Bearer o chiave API (ruolo operatore)

Aggiorna il calendario di disponibilità settimanale.

GET/api/operator/availabilityToken di sessione Bearer o chiave API (ruolo operatore)

Restituisce la disponibilità attuale dell'operatore.

GET/api/operator/statsToken di sessione Bearer o chiave API (ruolo operatore)

Restituisce statistiche su guadagni e sessioni per la dashboard operatore.

Sessioni

Le sessioni sono la risorsa centrale della piattaforma: una sessione è un impegno continuo di teleoperazione tra un operatore e un robot. Lo stato della sessione passa per PENDING, ACTIVE, PAUSED, COMPLETED e CANCELLED.

GET/api/sessionsToken di sessione Bearer o chiave API

Elenca le sessioni per l'utente autenticato. Gli operatori vedono le sessioni che hanno operato; i clienti vedono le sessioni sui propri robot. L'insieme di campi differisce leggermente tra le due viste: la vista cliente include episodes_collected e data_collected_mb, la vista operatore include operator_earnings_cents.

NameInTypeDescription
statusquerystringFacoltativo. Filtra per stato della sessione, ad esempio ACTIVE o COMPLETED. Omettere per elencarle tutte.
limitquerynumberFacoltativo. Dimensione della pagina, predefinita 50, massimo 100.
offsetquerynumberFacoltativo. Offset di paginazione, predefinito 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 di sessione Bearer o chiave API (ruolo operatore)

Avvia una sessione di teleoperazione su un robot disponibile. Richiede il ruolo operatore: i clienti non possono avviare sessioni. Un operatore può mantenere al massimo una sessione ACTIVE o PAUSED alla volta, e il robot deve avere attualmente lo stato AVAILABLE. All'avvio immediato il robot passa a IN_SESSION e il cliente viene notificato.

NameInTypeDescription
robotIdbodystringObbligatorio. Id del robot da operare. Il robot deve essere AVAILABLE.
operatorIdbodystringFacoltativo. Id operatore esplicito; per impostazione predefinita l'operatore autenticato.
scheduledForbodystring (ISO 8601)Facoltativo. Pianifica la sessione per un momento futuro invece di avviarla immediatamente.
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 di sessione Bearer o chiave API

Restituisce una singola sessione con i relativi dettagli.

PATCH/api/sessions/[id]Token di sessione Bearer o chiave API

Aggiorna il ciclo di vita della sessione: pausa, ripresa, terminazione e azioni correlate.

POST/api/sessions/[id]/extendToken di sessione Bearer o chiave API (cliente, proprietario della sessione)

Richiede un'estensione della sessione. Solo il cliente proprietario della sessione può chiamare questo endpoint, e la sessione deve essere ACTIVE. La richiesta viene registrata come evento di sessione e l'operatore riceve una notifica; l'estensione vera e propria avviene quando l'operatore vi risponde.

NameInTypeDescription
idpathstringL'id della sessione.
additionalMinutesbodynumberDurata di estensione richiesta, in minuti.
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 di sessione Bearer o chiave API

Elenca i messaggi di chat di una sessione.

POST/api/sessions/[id]/messagesToken di sessione Bearer o chiave API

Invia un messaggio di chat in una sessione.

POST/api/sessions/[id]/rateToken di sessione Bearer o chiave API (cliente)

Valuta una sessione completata su una scala da 1 a 5 stelle, con un commento facoltativo.

POST/api/sessions/exportToken di sessione Bearer o chiave API

Esporta i dati di sessione.

Pagamenti

Tutti i movimenti di denaro passano attraverso Stripe. La fatturazione cliente usa un cliente Stripe con un metodo di pagamento salvato; i pagamenti agli operatori usano Stripe Connect. La piattaforma stessa non memorizza mai dati di carte o conti bancari.

POST/api/stripe/customerToken di sessione Bearer (ruolo cliente)

Crea o restituisce il cliente Stripe usato per la fatturazione cliente.

GET/api/stripe/connectToken di sessione Bearer (ruolo operatore)

Restituisce lo stato dell'account Stripe Connect dell'operatore.

POST/api/stripe/connectToken di sessione Bearer (ruolo operatore)

Avvia l'onboarding di Stripe Connect per i pagamenti agli operatori.

POST/api/stripe/setup-intentToken di sessione Bearer (ruolo cliente)

Crea un SetupIntent Stripe per salvare un metodo di pagamento.

POST/api/stripe/portalToken di sessione Bearer (ruolo cliente)

Crea una sessione del portale di fatturazione Stripe per gestire metodi di pagamento e fatture.

GET/api/stripe/payoutToken di sessione Bearer (ruolo operatore)

Restituisce informazioni sui pagamenti per l'operatore autenticato.

POST/api/stripe/payoutToken di sessione Bearer (ruolo operatore)

Richiede un pagamento del saldo accumulato. Il pagamento minimo è 10,00 EUR.

POST/api/stripe/webhookFirma webhook Stripe

Riceve eventi webhook da Stripe. Chiamato da Stripe, non dai client API.

Endpoint pubblici

Questi endpoint non richiedono autenticazione. È sicuro chiamarli da sistemi di monitoraggio, pagine di marketing o una sonda di stato.

GET/api/health

Controllo di salute per l'API e la sua connessione al database. Restituisce 200 quando entrambi sono a posto; se il controllo del database fallisce, viene restituita la stessa struttura con status e db impostati su error e stato 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]

Restituisce informazioni pubbliche su un modello di robot supportato.

GET/api/public/pricing

Restituisce i piani tariffari pubblici attuali.

POST/api/contact

Invia un messaggio dal modulo di contatto. Il messaggio viene prima memorizzato e poi consegnato via email, così un'interruzione temporanea della posta non lo fa perdere: in quel caso la risposta riporta stored true e delivered false, e la consegna viene ritentata operativamente.

NameInTypeDescription
namebodystringObbligatorio. Il proprio nome.
emailbodystringObbligatorio. Un indirizzo email valido per la risposta.
categorybodystringObbligatorio. Uno tra: General Inquiry, Bug Report, Feature Request, Sales & Pricing, Partnership, Career/Jobs, Technical Support, Billing & Payments, Press & Media, Other.
subjectbodystringObbligatorio. Breve oggetto.
messagebodystringObbligatorio. Il corpo del messaggio.
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

Richiede il supporto per un tipo di robot non ancora presente sulla piattaforma.

GET/api/stats

Restituisce statistiche pubbliche della piattaforma.