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éthodeFonctionnementUtilisation
Session navigateurLe jeton de session Supabase de votre compte connecté, envoyé comme cookie ou comme jeton BearerLe dashboard lui-même et des essais rapides depuis un contexte de navigateur authentifié
Clé APIUne clé avec le préfixe ayr_live_, créée dans /dashboard/settings et envoyée comme jeton BearerScripts, serveurs, CI, et tout ce qui ne doit pas dépendre d'une connexion navigateur
MCPLe serveur MCP hébergé sur https://www.ay-robots.com/api/mcp (Streamable HTTP)Agents LLM et outils qui parlent le Model Context Protocol
bash
curl https://www.ay-robots.com/api/sessions \
  -H 'Authorization: Bearer ayr_live_your_key_here'
S'authentifier avec une clé API

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.

GET/api/auth/profileJeton de session Bearer ou clé API

Renvoie le profil de l'utilisateur authentifié.

POST/api/auth/profileJeton de session Bearer ou clé API

Met à jour des champs du profil tels que le nom affiché et les préférences de notification.

POST/api/auth/syncJeton de session Bearer

Synchronise l'utilisateur Supabase Auth avec l'enregistrement utilisateur de la plateforme.

GET/api/auth/check-onboardingJeton de session Bearer

Indique si l'utilisateur authentifié a terminé l'onboarding.

POST/api/auth/avatarJeton de session Bearer

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

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

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

GET/api/client/profileJeton de session Bearer ou clé API (rôle client)

Renvoie le profil client de l'utilisateur authentifié.

PATCH/api/client/profileJeton de session Bearer ou clé API (rôle client)

Met à jour les champs du profil client.

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

GET/api/client/invoicesJeton de session Bearer ou clé API (rôle client)

Liste les factures mensuelles du client.

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

GET/api/operator/profileJeton de session Bearer ou clé API (rôle opérateur)

Renvoie le profil opérateur de l'utilisateur authentifié.

POST/api/operator/profileJeton de session Bearer ou clé API (rôle opérateur)

Crée ou met à jour le profil opérateur.

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

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

POST/api/operator/certificationsJeton de session Bearer ou clé API (rôle opérateur)

Demande une certification pour un type de robot.

GET/api/operator/scheduleJeton de session Bearer ou clé API (rôle opérateur)

Renvoie le planning hebdomadaire de disponibilité de l'opérateur.

POST/api/operator/scheduleJeton de session Bearer ou clé API (rôle opérateur)

Met à jour le planning hebdomadaire de disponibilité.

GET/api/operator/availabilityJeton de session Bearer ou clé API (rôle opérateur)

Renvoie la disponibilité actuelle de l'opérateur.

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

GET/api/sessionsJeton de session Bearer ou clé API

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

NameInTypeDescription
statusquerystringFacultatif. Filtre par statut de session, par exemple ACTIVE ou COMPLETED. Omettez pour tout lister.
limitquerynumberFacultatif. Taille de page, 50 par défaut, maximum 100.
offsetquerynumberFacultatif. Décalage de pagination, 0 par défaut.
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/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é.

NameInTypeDescription
robotIdbodystringObligatoire. Id du robot à piloter. Le robot doit être AVAILABLE.
operatorIdbodystringFacultatif. Id explicite de l'opérateur ; par défaut, l'opérateur authentifié.
scheduledForbodystring (ISO 8601)Facultatif. Planifie la session pour une heure future au lieu de la démarrer immédiatement.
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]Jeton de session Bearer ou clé API

Renvoie une session unique avec ses détails.

PATCH/api/sessions/[id]Jeton de session Bearer ou clé API

Met à jour le cycle de vie de la session : pause, reprise, fin et actions associées.

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

NameInTypeDescription
idpathstringL'id de la session.
additionalMinutesbodynumberDurée de prolongation demandée, en minutes.
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]/messagesJeton de session Bearer ou clé API

Liste les messages du chat d'une session.

POST/api/sessions/[id]/messagesJeton de session Bearer ou clé API

Envoie un message de chat dans une session.

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

POST/api/sessions/exportJeton de session Bearer ou clé API

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

POST/api/stripe/customerJeton de session Bearer (rôle client)

Crée ou renvoie le client Stripe utilisé pour la facturation client.

GET/api/stripe/connectJeton de session Bearer (rôle opérateur)

Renvoie le statut du compte Stripe Connect de l'opérateur.

POST/api/stripe/connectJeton de session Bearer (rôle opérateur)

Démarre l'onboarding Stripe Connect pour les versements aux opérateurs.

POST/api/stripe/setup-intentJeton de session Bearer (rôle client)

Crée un SetupIntent Stripe pour enregistrer un moyen de paiement.

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

GET/api/stripe/payoutJeton de session Bearer (rôle opérateur)

Renvoie les informations de versement pour l'opérateur authentifié.

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

POST/api/stripe/webhookSignature de webhook Stripe

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

GET/api/health

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

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]

Renvoie des informations publiques sur un modèle de robot pris en charge.

GET/api/public/pricing

Renvoie les forfaits tarifaires publics actuels.

POST/api/contact

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

NameInTypeDescription
namebodystringObligatoire. Votre nom.
emailbodystringObligatoire. Une adresse e-mail valide pour la réponse.
categorybodystringObligatoire. Une des valeurs suivantes : General Inquiry, Bug Report, Feature Request, Sales & Pricing, Partnership, Career/Jobs, Technical Support, Billing & Payments, Press & Media, Other.
subjectbodystringObligatoire. Court objet du message.
messagebodystringObligatoire. Le corps du message.
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

Demande la prise en charge d'un type de robot qui n'est pas encore sur la plateforme.

GET/api/stats

Renvoie des statistiques publiques de la plateforme.