Referensi API

API REST AY-Robots berada di https://www.ay-robots.com/api dan berbicara JSON di kedua arah. Halaman ini mendokumentasikan autentikasi, konvensi respons, dan setiap endpoint, dengan dokumentasi parameter lengkap untuk rute yang paling mungkin Anda panggil secara terprogram.

Terakhir diperbarui 2026-08-09

Autentikasi

Setiap endpoint membutuhkan autentikasi kecuali tercantum di bagian Endpoint publik. API menerima dua bentuk kredensial, dan keduanya datang dengan cara yang sama: baik sebagai session cookie yang sudah dikirim dashboard, atau sebagai header Authorization dengan Bearer token.

MetodeCara kerjanyaPakai untuk
Sesi browserSession token Supabase dari akun Anda yang sedang login, dikirim sebagai cookie atau sebagai Bearer tokenDashboard itu sendiri dan eksperimen cepat dari konteks browser yang terautentikasi
API keySebuah key dengan awalan ayr_live_, dibuat di /dashboard/settings dan dikirim sebagai Bearer tokenScript, server, CI, dan apa pun yang tidak boleh bergantung pada login browser
MCPServer MCP hosted di https://www.ay-robots.com/api/mcp (Streamable HTTP)Agen LLM dan tool yang berbicara Model Context Protocol
bash
curl https://www.ay-robots.com/api/sessions \
  -H 'Authorization: Bearer ayr_live_your_key_here'
Autentikasi dengan API key

API key dibuat dan dicabut di /dashboard/settings. Perlakukan seperti password: simpan di sisi server, dan lakukan rotasi dengan membuat key pengganti sebelum mencabut yang lama. Jika Anda memakai CLI desktop, CLI itu juga bisa mengekspos platform sebagai server MCP lokal dengan perintah: ay-robots mcp.

Respons berupa JSON. Error memakai bentuk yang konsisten: sebuah objek JSON dengan satu field error berisi pesan yang bisa dibaca manusia, dikirim dengan kode status 4xx atau 5xx yang sesuai. Respons sukses mengembalikan resource secara langsung; beberapa endpoint membungkus daftar dalam field bernama, yang ditunjukkan contoh di bawah ketika itu relevan.

Endpoint auth

Infrastruktur akun dan profil. Ini terutama dipakai oleh dashboard itu sendiri, tapi berfungsi dengan kredensial valid apa pun.

GET/api/auth/profileSession token Bearer atau API key

Mengembalikan profil pengguna yang terautentikasi.

POST/api/auth/profileSession token Bearer atau API key

Memperbarui field profil seperti nama tampilan dan preferensi notifikasi.

POST/api/auth/syncSession token Bearer

Menyinkronkan pengguna auth Supabase dengan catatan pengguna platform.

GET/api/auth/check-onboardingSession token Bearer

Melaporkan apakah pengguna yang terautentikasi telah menyelesaikan onboarding.

POST/api/auth/avatarSession token Bearer

Mengunggah gambar avatar baru untuk pengguna yang terautentikasi.

Endpoint client

Semua yang dikelola pemilik robot: robot yang terdaftar, profil client, dataset, invoice, dan statistik dashboard.

GET/api/client/robotsSession token Bearer atau API key (peran client)

Mencantumkan robot yang didaftarkan oleh client yang terautentikasi, terbaru lebih dulu, hingga 50 entri. Stempel waktu adalah ISO 8601; last_online dan last_heartbeat bernilai null sampai robot pernah terhubung sekali.

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/robotsSession token Bearer atau API key (peran client)

Mendaftarkan robot baru dan mengembalikan id-nya. Hardware id sebuah motor board hanya boleh dimiliki satu robot; tabrakan ditolak dengan status 409.

GET/api/client/profileSession token Bearer atau API key (peran client)

Mengembalikan profil client dari pengguna yang terautentikasi.

PATCH/api/client/profileSession token Bearer atau API key (peran client)

Memperbarui field profil client.

GET/api/client/datasetsSession token Bearer atau API key (peran client)

Mencantumkan dataset cloud milik client dengan jumlah episode dan ukurannya.

GET/api/client/invoicesSession token Bearer atau API key (peran client)

Mencantumkan invoice bulanan milik client.

GET/api/client/statsSession token Bearer atau API key (peran client)

Mengembalikan statistik penggunaan untuk dashboard client.

Endpoint operator

Sisi operator: profil dan ketersediaan, sertifikasi, penjadwalan, dan statistik penghasilan.

GET/api/operator/profileSession token Bearer atau API key (peran operator)

Mengembalikan profil operator dari pengguna yang terautentikasi.

POST/api/operator/profileSession token Bearer atau API key (peran operator)

Membuat atau memperbarui profil operator.

GET/api/operator/available-robotsSession token Bearer atau API key (peran operator)

Mencantumkan robot yang saat ini tersedia dan cocok dengan sertifikasi operator.

GET/api/operator/certificationsSession token Bearer atau API key (peran operator)

Mencantumkan permintaan sertifikasi operator dan statusnya.

POST/api/operator/certificationsSession token Bearer atau API key (peran operator)

Meminta sertifikasi untuk sebuah jenis robot.

GET/api/operator/scheduleSession token Bearer atau API key (peran operator)

Mengembalikan jadwal ketersediaan mingguan operator.

POST/api/operator/scheduleSession token Bearer atau API key (peran operator)

Memperbarui jadwal ketersediaan mingguan.

GET/api/operator/availabilitySession token Bearer atau API key (peran operator)

Mengembalikan ketersediaan operator saat ini.

GET/api/operator/statsSession token Bearer atau API key (peran operator)

Mengembalikan statistik penghasilan dan sesi untuk dashboard operator.

Sesi

Sesi adalah resource inti platform: satu sesi adalah satu keterlibatan teleoperasi berkelanjutan antara seorang operator dan sebuah robot. Status sesi bergerak melalui PENDING, ACTIVE, PAUSED, COMPLETED, dan CANCELLED.

GET/api/sessionsSession token Bearer atau API key

Mencantumkan sesi untuk pengguna yang terautentikasi. Operator melihat sesi yang mereka operasikan; client melihat sesi pada robot mereka. Kumpulan field-nya sedikit berbeda antara kedua tampilan: tampilan client menyertakan episodes_collected dan data_collected_mb, tampilan operator menyertakan operator_earnings_cents.

NameInTypeDescription
statusquerystringOpsional. Saring berdasarkan status sesi, misalnya ACTIVE atau COMPLETED. Kosongkan untuk mencantumkan semua.
limitquerynumberOpsional. Ukuran halaman, default 50, maksimum 100.
offsetquerynumberOpsional. Offset pagination, default 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/sessionsSession token Bearer atau API key (peran operator)

Memulai sesi teleoperasi pada robot yang tersedia. Membutuhkan peran operator: client tidak bisa memulai sesi. Seorang operator bisa memegang paling banyak satu sesi ACTIVE atau PAUSED sekaligus, dan robotnya harus saat ini berstatus AVAILABLE. Pada mulai langsung, robot berpindah ke IN_SESSION dan client diberi notifikasi.

NameInTypeDescription
robotIdbodystringWajib. Id robot yang akan dioperasikan. Robotnya harus AVAILABLE.
operatorIdbodystringOpsional. Id operator eksplisit; default-nya adalah operator yang terautentikasi.
scheduledForbodystring (ISO 8601)Opsional. Menjadwalkan sesi untuk waktu di masa depan alih-alih memulainya segera.
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]Session token Bearer atau API key

Mengembalikan satu sesi beserta detailnya.

PATCH/api/sessions/[id]Session token Bearer atau API key

Memperbarui siklus hidup sesi: jeda, lanjutkan, akhiri, dan aksi terkait lainnya.

POST/api/sessions/[id]/extendSession token Bearer atau API key (client, pemilik sesi)

Meminta perpanjangan sesi. Hanya client pemilik sesi yang bisa memanggil ini, dan sesinya harus ACTIVE. Permintaan dicatat sebagai session event dan operator menerima notifikasi; perpanjangannya sendiri terjadi saat operator menindaklanjutinya.

NameInTypeDescription
idpathstringId sesinya.
additionalMinutesbodynumberPanjang perpanjangan yang diminta, dalam menit.
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]/messagesSession token Bearer atau API key

Mencantumkan pesan chat sebuah sesi.

POST/api/sessions/[id]/messagesSession token Bearer atau API key

Mengirim pesan chat dalam sebuah sesi.

POST/api/sessions/[id]/rateSession token Bearer atau API key (client)

Memberi rating pada sesi yang selesai dalam skala 1 sampai 5 bintang, dengan komentar opsional.

POST/api/sessions/exportSession token Bearer atau API key

Mengekspor data sesi.

Pembayaran

Semua pergerakan uang berjalan lewat Stripe. Penagihan client memakai Stripe customer dengan metode pembayaran tersimpan; pembayaran operator memakai Stripe Connect. Platformnya sendiri tidak pernah menyimpan data kartu atau bank.

POST/api/stripe/customerSession token Bearer (peran client)

Membuat atau mengembalikan Stripe customer yang dipakai untuk penagihan client.

GET/api/stripe/connectSession token Bearer (peran operator)

Mengembalikan status akun Stripe Connect milik operator.

POST/api/stripe/connectSession token Bearer (peran operator)

Memulai onboarding Stripe Connect untuk pembayaran operator.

POST/api/stripe/setup-intentSession token Bearer (peran client)

Membuat Stripe SetupIntent untuk menyimpan metode pembayaran.

POST/api/stripe/portalSession token Bearer (peran client)

Membuat sesi Stripe billing portal untuk mengelola metode pembayaran dan invoice.

GET/api/stripe/payoutSession token Bearer (peran operator)

Mengembalikan informasi pembayaran untuk operator yang terautentikasi.

POST/api/stripe/payoutSession token Bearer (peran operator)

Meminta pembayaran atas penghasilan yang terkumpul. Pembayaran minimum adalah 10.00 EUR.

POST/api/stripe/webhookTanda tangan webhook Stripe

Menerima event webhook Stripe. Dipanggil oleh Stripe, bukan oleh client API.

Endpoint publik

Endpoint ini tidak membutuhkan autentikasi. Aman dipanggil dari monitoring, halaman marketing, atau probe status.

GET/api/health

Pemeriksaan kesehatan untuk API dan koneksi database-nya. Mengembalikan 200 saat keduanya baik-baik saja; jika pemeriksaan database gagal, bentuk yang sama dikembalikan dengan status dan db diset ke error dan status 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]

Mengembalikan informasi publik tentang sebuah model robot yang didukung.

GET/api/public/pricing

Mengembalikan paket harga publik saat ini.

POST/api/contact

Mengirim pesan formulir kontak. Pesan disimpan lebih dulu lalu dikirim lewat email, jadi gangguan sementara pada layanan mail tidak menghilangkannya: dalam kasus itu respons melaporkan stored true dan delivered false, dan pengiriman dicoba ulang secara operasional.

NameInTypeDescription
namebodystringWajib. Nama Anda.
emailbodystringWajib. Alamat email valid untuk balasan.
categorybodystringWajib. Salah satu dari: General Inquiry, Bug Report, Feature Request, Sales & Pricing, Partnership, Career/Jobs, Technical Support, Billing & Payments, Press & Media, Other.
subjectbodystringWajib. Baris subjek singkat.
messagebodystringWajib. Isi pesannya.
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

Meminta dukungan untuk sebuah jenis robot yang belum ada di platform.

GET/api/stats

Mengembalikan statistik publik platform.