API-referentie

De REST-API van AY-Robots leeft onder https://www.ay-robots.com/api en spreekt in beide richtingen JSON. Deze pagina documenteert de authenticatie, de responsconventies en elk endpoint, met volledige parameterdocumentatie voor de routes die u het meest waarschijnlijk programmatisch aanroept.

Laatst bijgewerkt 2026-08-09

Authenticatie

Elk endpoint vereist authenticatie, tenzij het staat vermeld in de sectie Publieke endpoints. De API accepteert twee vormen van credentials, en beide komen op dezelfde manier binnen: als de sessiecookie die het dashboard toch al verstuurt, of als een Authorization-header met een Bearer-token.

MethodeHoe het werktGebruik het voor
BrowsersessieHet Supabase-sessietoken van uw ingelogde account, verstuurd als cookie of als Bearer-tokenHet dashboard zelf en snelle experimenten vanuit een geauthenticeerde browsercontext
API-sleutelEen sleutel met het voorvoegsel ayr_live_, aangemaakt in /dashboard/settings en verstuurd als Bearer-tokenScripts, servers, CI en alles wat niet mag afhangen van een browserlogin
MCPDe gehoste MCP-server op https://www.ay-robots.com/api/mcp (Streamable HTTP)LLM-agents en tools die het Model Context Protocol spreken
bash
curl https://www.ay-robots.com/api/sessions \
  -H 'Authorization: Bearer ayr_live_your_key_here'
Authenticeren met een API-sleutel

API-sleutels worden aangemaakt en ingetrokken in /dashboard/settings. Behandel ze als wachtwoorden: bewaar ze serverzijdig, en roteer door eerst een vervangende sleutel aan te maken voordat u de oude intrekt. Gebruikt u de desktop-CLI, dan kan deze het platform ook als lokale MCP-server aanbieden met het commando: ay-robots mcp.

Responses zijn JSON. Fouten hebben een consistente vorm: een JSON-object met een enkel error-veld dat een leesbare boodschap bevat, geleverd met een passende 4xx- of 5xx-statuscode. Succesvolle responses geven de resource direct terug; enkele endpoints wikkelen lijsten in een benoemd veld, wat de onderstaande voorbeelden tonen waar het relevant is.

Auth-endpoints

Account- en profielbeheer. Deze endpoints worden vooral door het dashboard zelf gebruikt, maar werken met elke geldige credential.

GET/api/auth/profileBearer-sessietoken of API-sleutel

Geeft het profiel van de geauthenticeerde gebruiker terug.

POST/api/auth/profileBearer-sessietoken of API-sleutel

Werkt profielvelden bij, zoals de weergavenaam en de meldingsvoorkeuren.

POST/api/auth/syncBearer-sessietoken

Synchroniseert de Supabase-authgebruiker met het platformgebruikersrecord.

GET/api/auth/check-onboardingBearer-sessietoken

Meldt of de geauthenticeerde gebruiker de onboarding heeft voltooid.

POST/api/auth/avatarBearer-sessietoken

Uploadt een nieuwe avatarafbeelding voor de geauthenticeerde gebruiker.

Klantendpoints

Alles wat een robotbezitter beheert: geregistreerde robots, het klantprofiel, datasets, facturen en dashboardstatistieken.

GET/api/client/robotsBearer-sessietoken of API-sleutel (klantrol)

Toont de door de geauthenticeerde klant geregistreerde robots, nieuwste eerst, tot 50 items. Tijdstempels zijn ISO 8601; last_online en last_heartbeat zijn null totdat de robot ooit verbinding heeft gemaakt.

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/robotsBearer-sessietoken of API-sleutel (klantrol)

Registreert een nieuwe robot en geeft zijn id terug. Een hardware-id van een motorbord kan bij slechts één robot horen; een botsing wordt geweigerd met status 409.

GET/api/client/profileBearer-sessietoken of API-sleutel (klantrol)

Geeft het klantprofiel van de geauthenticeerde gebruiker terug.

PATCH/api/client/profileBearer-sessietoken of API-sleutel (klantrol)

Werkt velden van het klantprofiel bij.

GET/api/client/datasetsBearer-sessietoken of API-sleutel (klantrol)

Toont de clouddatasets van de klant met episodetallen en groottes.

GET/api/client/invoicesBearer-sessietoken of API-sleutel (klantrol)

Toont de maandelijkse facturen van de klant.

GET/api/client/statsBearer-sessietoken of API-sleutel (klantrol)

Geeft gebruiksstatistieken terug voor het klantdashboard.

Operatorendpoints

De operatorkant: profiel en beschikbaarheid, certificeringen, planning en verdienstenstatistieken.

GET/api/operator/profileBearer-sessietoken of API-sleutel (operatorrol)

Geeft het operatorprofiel van de geauthenticeerde gebruiker terug.

POST/api/operator/profileBearer-sessietoken of API-sleutel (operatorrol)

Maakt het operatorprofiel aan of werkt het bij.

GET/api/operator/available-robotsBearer-sessietoken of API-sleutel (operatorrol)

Toont robots die momenteel beschikbaar zijn en passen bij de certificeringen van de operator.

GET/api/operator/certificationsBearer-sessietoken of API-sleutel (operatorrol)

Toont de certificeringsaanvragen van de operator en hun status.

POST/api/operator/certificationsBearer-sessietoken of API-sleutel (operatorrol)

Vraagt certificering voor een robottype aan.

GET/api/operator/scheduleBearer-sessietoken of API-sleutel (operatorrol)

Geeft het wekelijkse beschikbaarheidsschema van de operator terug.

POST/api/operator/scheduleBearer-sessietoken of API-sleutel (operatorrol)

Werkt het wekelijkse beschikbaarheidsschema bij.

GET/api/operator/availabilityBearer-sessietoken of API-sleutel (operatorrol)

Geeft de huidige beschikbaarheid van de operator terug.

GET/api/operator/statsBearer-sessietoken of API-sleutel (operatorrol)

Geeft verdienste- en sessiestatistieken terug voor het operatordashboard.

Sessies

Sessies zijn de centrale resource van het platform: één sessie is één doorlopende teleoperatie-inzet tussen een operator en een robot. De sessiestatus doorloopt PENDING, ACTIVE, PAUSED, COMPLETED en CANCELLED.

GET/api/sessionsBearer-sessietoken of API-sleutel

Toont sessies voor de geauthenticeerde gebruiker. Operators zien sessies die zij bestuurden; klanten zien sessies op hun robots. De veldenset verschilt licht tussen de twee weergaven: de klantweergave bevat episodes_collected en data_collected_mb, de operatorweergave bevat operator_earnings_cents.

NameInTypeDescription
statusquerystringOptioneel. Filtert op sessiestatus, bijvoorbeeld ACTIVE of COMPLETED. Weglaten om alles te tonen.
limitquerynumberOptioneel. Paginagrootte, standaard 50, maximum 100.
offsetquerynumberOptioneel. Paginerings-offset, standaard 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/sessionsBearer-sessietoken of API-sleutel (operatorrol)

Start een teleoperatiesessie op een beschikbare robot. Vereist de operatorrol: klanten kunnen geen sessies starten. Een operator kan hoogstens één ACTIVE- of PAUSED-sessie tegelijk houden, en de robot moet momenteel de status AVAILABLE hebben. Bij een directe start schakelt de robot over naar IN_SESSION en wordt de klant op de hoogte gebracht.

NameInTypeDescription
robotIdbodystringVerplicht. Id van de te bedienen robot. De robot moet AVAILABLE zijn.
operatorIdbodystringOptioneel. Expliciet operator-id; standaard de geauthenticeerde operator.
scheduledForbodystring (ISO 8601)Optioneel. Plant de sessie voor een toekomstig tijdstip in plaats van meteen te starten.
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]Bearer-sessietoken of API-sleutel

Geeft één sessie met haar details terug.

PATCH/api/sessions/[id]Bearer-sessietoken of API-sleutel

Werkt de sessielevenscyclus bij: pauzeren, hervatten, beëindigen en gerelateerde acties.

POST/api/sessions/[id]/extendBearer-sessietoken of API-sleutel (klant, sessie-eigenaar)

Vraagt een sessieverlenging aan. Alleen de klant die de sessie bezit, kan dit endpoint aanroepen, en de sessie moet ACTIVE zijn. Het verzoek wordt vastgelegd als een sessiegebeurtenis en de operator ontvangt een melding; de verlenging zelf gebeurt wanneer de operator erop reageert.

NameInTypeDescription
idpathstringHet sessie-id.
additionalMinutesbodynumberGevraagde verlengingsduur in minuten.
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]/messagesBearer-sessietoken of API-sleutel

Toont de chatberichten van een sessie.

POST/api/sessions/[id]/messagesBearer-sessietoken of API-sleutel

Verstuurt een chatbericht in een sessie.

POST/api/sessions/[id]/rateBearer-sessietoken of API-sleutel (klant)

Beoordeelt een voltooide sessie op een schaal van 1 tot 5 sterren, met een optioneel commentaar.

POST/api/sessions/exportBearer-sessietoken of API-sleutel

Exporteert sessiedata.

Betalingen

Alle geldstromen lopen via Stripe. Klantfacturatie gebruikt een Stripe-klant met een opgeslagen betaalmethode; uitbetalingen aan operators gebruiken Stripe Connect. Het platform zelf slaat nooit kaart- of bankgegevens op.

POST/api/stripe/customerBearer-sessietoken (klantrol)

Maakt de Stripe-klant aan die voor klantfacturatie wordt gebruikt, of geeft deze terug.

GET/api/stripe/connectBearer-sessietoken (operatorrol)

Geeft de status van het Stripe Connect-account van de operator terug.

POST/api/stripe/connectBearer-sessietoken (operatorrol)

Start de Stripe Connect-onboarding voor uitbetalingen aan operators.

POST/api/stripe/setup-intentBearer-sessietoken (klantrol)

Maakt een Stripe SetupIntent aan voor het opslaan van een betaalmethode.

POST/api/stripe/portalBearer-sessietoken (klantrol)

Maakt een Stripe-facturatieportaalsessie aan voor het beheren van betaalmethoden en facturen.

GET/api/stripe/payoutBearer-sessietoken (operatorrol)

Geeft uitbetalingsinformatie terug voor de geauthenticeerde operator.

POST/api/stripe/payoutBearer-sessietoken (operatorrol)

Vraagt een uitbetaling van de opgebouwde verdiensten aan. De minimale uitbetaling is 10,00 EUR.

POST/api/stripe/webhookStripe-webhookhandtekening

Ontvangt Stripe-webhookgebeurtenissen. Wordt door Stripe aangeroepen, niet door API-clients.

Publieke endpoints

Deze endpoints vereisen geen authenticatie. Ze zijn veilig aan te roepen vanuit monitoring, marketingpagina's of een statusprobe.

GET/api/health

Health check voor de API en haar databaseverbinding. Geeft 200 terug wanneer beide in orde zijn; faalt de databasecontrole, dan wordt dezelfde structuur teruggegeven met status en db op error en HTTP-status 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]

Geeft publieke informatie over een ondersteund robotmodel terug.

GET/api/public/pricing

Geeft de huidige publieke prijsabonnementen terug.

POST/api/contact

Dient een bericht van het contactformulier in. Het bericht wordt eerst opgeslagen en daarna per e-mail bezorgd, zodat een tijdelijke mailstoring het niet verliest: in dat geval meldt de response stored true en delivered false, en wordt de bezorging operationeel opnieuw geprobeerd.

NameInTypeDescription
namebodystringVerplicht. Uw naam.
emailbodystringVerplicht. Een geldig e-mailadres voor het antwoord.
categorybodystringVerplicht. Een van: General Inquiry, Bug Report, Feature Request, Sales & Pricing, Partnership, Career/Jobs, Technical Support, Billing & Payments, Press & Media, Other.
subjectbodystringVerplicht. Korte onderwerpregel.
messagebodystringVerplicht. De berichttekst.
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

Vraagt ondersteuning aan voor een robottype dat nog niet op het platform staat.

GET/api/stats

Geeft publieke platformstatistieken terug.