Référence API
L'API REST d'AY-Robots se trouve sous https://www.ay-robots.com/api et communique en JSON dans les deux sens. Cette page documente l'authentification, les conventions de réponse et chaque endpoint, avec la documentation complète des paramètres pour les routes que vous appellerez le plus probablement par programmation.
Dernière mise à jour 2026-08-09
Authentification
Chaque endpoint nécessite une authentification, sauf s'il figure dans la section Public. L'API accepte deux formes d'identifiants, qui arrivent toutes deux de la même façon : soit comme cookie de session que le dashboard envoie déjà, soit comme en-tête Authorization avec un jeton Bearer.
| Méthode | Fonctionnement | Utilisation |
|---|---|---|
| Session navigateur | Le jeton de session Supabase de votre compte connecté, envoyé comme cookie ou comme jeton Bearer | Le dashboard lui-même et des essais rapides depuis un contexte de navigateur authentifié |
| Clé API | Une clé avec le préfixe ayr_live_, créée dans /dashboard/settings et envoyée comme jeton Bearer | Scripts, serveurs, CI, et tout ce qui ne doit pas dépendre d'une connexion navigateur |
| MCP | Le serveur MCP hébergé sur https://www.ay-robots.com/api/mcp (Streamable HTTP) | Agents LLM et outils qui parlent le Model Context Protocol |
curl https://www.ay-robots.com/api/sessions \
-H 'Authorization: Bearer ayr_live_your_key_here'Les clés API se créent et se révoquent dans /dashboard/settings. Traitez-les comme des mots de passe : gardez-les côté serveur, et effectuez une rotation en créant une clé de remplacement avant de révoquer l'ancienne. Si vous utilisez la CLI de bureau, elle peut aussi exposer la plateforme comme serveur MCP local avec la commande : ay-robots mcp.
Les réponses sont en JSON. Les erreurs utilisent une forme cohérente : un objet JSON avec un unique champ error contenant un message lisible par un humain, livré avec un code de statut 4xx ou 5xx approprié. Les réponses de succès renvoient la ressource directement ; quelques endpoints enveloppent les listes dans un champ nommé, ce que montrent les exemples ci-dessous là où c'est pertinent.
Endpoints d'authentification
La plomberie des comptes et des profils. Ils sont principalement utilisés par le dashboard lui-même, mais fonctionnent avec n'importe quel identifiant valide.
/api/auth/profileJeton de session Bearer ou clé APIRenvoie le profil de l'utilisateur authentifié.
/api/auth/profileJeton de session Bearer ou clé APIMet à jour des champs du profil tels que le nom affiché et les préférences de notification.
/api/auth/syncJeton de session BearerSynchronise l'utilisateur Supabase Auth avec l'enregistrement utilisateur de la plateforme.
/api/auth/check-onboardingJeton de session BearerIndique si l'utilisateur authentifié a terminé l'onboarding.
/api/auth/avatarJeton de session BearerEnvoie une nouvelle image d'avatar pour l'utilisateur authentifié.
Endpoints client
Tout ce que gère un propriétaire de robot : robots enregistrés, profil client, jeux de données, factures et statistiques du dashboard.
/api/client/robotsJeton de session Bearer ou clé API (rôle client)Liste les robots enregistrés par le client authentifié, du plus récent au plus ancien, jusqu'à 50 entrées. Les horodatages sont au format ISO 8601 ; last_online et last_heartbeat valent null tant que le robot ne s'est pas connecté au moins une fois.
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/robotsJeton de session Bearer ou clé API (rôle client)Enregistre un nouveau robot et renvoie son id. Un identifiant matériel de carte moteur ne peut appartenir qu'à un seul robot ; une collision est rejetée avec le statut 409.
/api/client/profileJeton de session Bearer ou clé API (rôle client)Renvoie le profil client de l'utilisateur authentifié.
/api/client/profileJeton de session Bearer ou clé API (rôle client)Met à jour les champs du profil client.
/api/client/datasetsJeton de session Bearer ou clé API (rôle client)Liste les jeux de données cloud du client avec le nombre d'épisodes et les tailles.
/api/client/invoicesJeton de session Bearer ou clé API (rôle client)Liste les factures mensuelles du client.
/api/client/statsJeton de session Bearer ou clé API (rôle client)Renvoie les statistiques d'utilisation pour le dashboard client.
Endpoints opérateur
Le côté opérateur : profil et disponibilité, certifications, planification et statistiques de gains.
/api/operator/profileJeton de session Bearer ou clé API (rôle opérateur)Renvoie le profil opérateur de l'utilisateur authentifié.
/api/operator/profileJeton de session Bearer ou clé API (rôle opérateur)Crée ou met à jour le profil opérateur.
/api/operator/available-robotsJeton de session Bearer ou clé API (rôle opérateur)Liste les robots actuellement disponibles correspondant aux certifications de l'opérateur.
/api/operator/certificationsJeton de session Bearer ou clé API (rôle opérateur)Liste les demandes de certification de l'opérateur et leur statut.
/api/operator/certificationsJeton de session Bearer ou clé API (rôle opérateur)Demande une certification pour un type de robot.
/api/operator/scheduleJeton de session Bearer ou clé API (rôle opérateur)Renvoie le planning hebdomadaire de disponibilité de l'opérateur.
/api/operator/scheduleJeton de session Bearer ou clé API (rôle opérateur)Met à jour le planning hebdomadaire de disponibilité.
/api/operator/availabilityJeton de session Bearer ou clé API (rôle opérateur)Renvoie la disponibilité actuelle de l'opérateur.
/api/operator/statsJeton de session Bearer ou clé API (rôle opérateur)Renvoie les statistiques de gains et de sessions pour le dashboard opérateur.
Sessions
Les sessions constituent la ressource centrale de la plateforme : une session est un engagement continu de téléopération entre un opérateur et un robot. Le statut de la session passe par PENDING, ACTIVE, PAUSED, COMPLETED et CANCELLED.
/api/sessionsJeton de session Bearer ou clé APIListe les sessions de l'utilisateur authentifié. Les opérateurs voient les sessions qu'ils ont pilotées ; les clients voient les sessions sur leurs robots. L'ensemble des champs diffère légèrement entre les deux vues : la vue client inclut episodes_collected et data_collected_mb, la vue opérateur inclut operator_earnings_cents.
| Name | In | Type | Description |
|---|---|---|---|
| status | query | string | Facultatif. Filtre par statut de session, par exemple ACTIVE ou COMPLETED. Omettez pour tout lister. |
| limit | query | number | Facultatif. Taille de page, 50 par défaut, maximum 100. |
| offset | query | number | Facultatif. Décalage de pagination, 0 par défaut. |
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/sessionsJeton de session Bearer ou clé API (rôle opérateur)Démarre une session de téléopération sur un robot disponible. Nécessite le rôle opérateur : les clients ne peuvent pas démarrer de sessions. Un opérateur ne peut détenir qu'une seule session ACTIVE ou PAUSED à la fois, et le robot doit actuellement avoir le statut AVAILABLE. Lors d'un démarrage immédiat, le robot passe à IN_SESSION et le client est notifié.
| Name | In | Type | Description |
|---|---|---|---|
| robotId | body | string | Obligatoire. Id du robot à piloter. Le robot doit être AVAILABLE. |
| operatorId | body | string | Facultatif. Id explicite de l'opérateur ; par défaut, l'opérateur authentifié. |
| scheduledFor | body | string (ISO 8601) | Facultatif. Planifie la session pour une heure future au lieu de la démarrer immédiatement. |
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]Jeton de session Bearer ou clé APIRenvoie une session unique avec ses détails.
/api/sessions/[id]Jeton de session Bearer ou clé APIMet à jour le cycle de vie de la session : pause, reprise, fin et actions associées.
/api/sessions/[id]/extendJeton de session Bearer ou clé API (client, propriétaire de la session)Demande une prolongation de session. Seul le client propriétaire de la session peut appeler cet endpoint, et la session doit être ACTIVE. La demande est journalisée comme un événement de session et l'opérateur reçoit une notification ; la prolongation elle-même a lieu quand l'opérateur y donne suite.
| Name | In | Type | Description |
|---|---|---|---|
| id | path | string | L'id de la session. |
| additionalMinutes | body | number | Durée de prolongation demandée, en minutes. |
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]/messagesJeton de session Bearer ou clé APIListe les messages du chat d'une session.
/api/sessions/[id]/messagesJeton de session Bearer ou clé APIEnvoie un message de chat dans une session.
/api/sessions/[id]/rateJeton de session Bearer ou clé API (client)Évalue une session terminée sur une échelle de 1 à 5 étoiles, avec un commentaire facultatif.
/api/sessions/exportJeton de session Bearer ou clé APIExporte les données de session.
Paiements
Tous les mouvements d'argent passent par Stripe. La facturation client utilise un client Stripe avec un moyen de paiement enregistré ; les versements aux opérateurs utilisent Stripe Connect. La plateforme elle-même ne stocke jamais de données de carte ou bancaires.
/api/stripe/customerJeton de session Bearer (rôle client)Crée ou renvoie le client Stripe utilisé pour la facturation client.
/api/stripe/connectJeton de session Bearer (rôle opérateur)Renvoie le statut du compte Stripe Connect de l'opérateur.
/api/stripe/connectJeton de session Bearer (rôle opérateur)Démarre l'onboarding Stripe Connect pour les versements aux opérateurs.
/api/stripe/setup-intentJeton de session Bearer (rôle client)Crée un SetupIntent Stripe pour enregistrer un moyen de paiement.
/api/stripe/portalJeton de session Bearer (rôle client)Crée une session du portail de facturation Stripe pour gérer les moyens de paiement et les factures.
/api/stripe/payoutJeton de session Bearer (rôle opérateur)Renvoie les informations de versement pour l'opérateur authentifié.
/api/stripe/payoutJeton de session Bearer (rôle opérateur)Demande un versement des gains accumulés. Le versement minimum est de 10,00 EUR.
/api/stripe/webhookSignature de webhook StripeReçoit les événements webhook de Stripe. Appelé par Stripe, pas par les clients de l'API.
Endpoints publics
Ces endpoints ne nécessitent aucune authentification. Ils peuvent être appelés en toute sécurité depuis un système de supervision, des pages marketing ou une sonde de statut.
/api/healthContrôle de santé de l'API et de sa connexion à la base de données. Renvoie 200 quand les deux sont normaux ; si le contrôle de la base de données échoue, la même structure est renvoyée avec status et db à error et le statut HTTP 503.
curl https://www.ay-robots.com/api/health{
"status": "ok",
"db": "ok",
"timestamp": "2026-08-09T10:12:00.000Z"
}/api/robots/[id]Renvoie des informations publiques sur un modèle de robot pris en charge.
/api/public/pricingRenvoie les forfaits tarifaires publics actuels.
/api/contactSoumet un message du formulaire de contact. Le message est d'abord stocké puis livré par e-mail, si bien qu'une panne temporaire de messagerie ne le fait pas perdre : dans ce cas, la réponse indique stored à true et delivered à false, et la livraison est retentée en interne.
| Name | In | Type | Description |
|---|---|---|---|
| name | body | string | Obligatoire. Votre nom. |
| body | string | Obligatoire. Une adresse e-mail valide pour la réponse. | |
| category | body | string | Obligatoire. Une des valeurs suivantes : General Inquiry, Bug Report, Feature Request, Sales & Pricing, Partnership, Career/Jobs, Technical Support, Billing & Payments, Press & Media, Other. |
| subject | body | string | Obligatoire. Court objet du message. |
| message | body | string | Obligatoire. Le corps du message. |
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-requestDemande la prise en charge d'un type de robot qui n'est pas encore sur la plateforme.
/api/statsRenvoie des statistiques publiques de la plateforme.
Découvrez comment AY-Robots sécurise les comptes et le contrôle des robots en direct : authentification Supabase, modèle de rôles, clés API, journal d'audit.
Comprenez le fonctionnement des sessions AY-Robots : cycle de vie de PENDING à COMPLETED, événements d'activité, chat, évaluations, prolongations et données.