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.
| Metode | Cara kerjanya | Pakai untuk |
|---|---|---|
| Sesi browser | Session token Supabase dari akun Anda yang sedang login, dikirim sebagai cookie atau sebagai Bearer token | Dashboard itu sendiri dan eksperimen cepat dari konteks browser yang terautentikasi |
| API key | Sebuah key dengan awalan ayr_live_, dibuat di /dashboard/settings dan dikirim sebagai Bearer token | Script, server, CI, dan apa pun yang tidak boleh bergantung pada login browser |
| MCP | Server MCP hosted di https://www.ay-robots.com/api/mcp (Streamable HTTP) | Agen LLM dan tool yang berbicara Model Context Protocol |
curl https://www.ay-robots.com/api/sessions \
-H 'Authorization: Bearer ayr_live_your_key_here'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.
/api/auth/profileSession token Bearer atau API keyMengembalikan profil pengguna yang terautentikasi.
/api/auth/profileSession token Bearer atau API keyMemperbarui field profil seperti nama tampilan dan preferensi notifikasi.
/api/auth/syncSession token BearerMenyinkronkan pengguna auth Supabase dengan catatan pengguna platform.
/api/auth/check-onboardingSession token BearerMelaporkan apakah pengguna yang terautentikasi telah menyelesaikan onboarding.
/api/auth/avatarSession token BearerMengunggah gambar avatar baru untuk pengguna yang terautentikasi.
Endpoint client
Semua yang dikelola pemilik robot: robot yang terdaftar, profil client, dataset, invoice, dan statistik dashboard.
/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.
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/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.
/api/client/profileSession token Bearer atau API key (peran client)Mengembalikan profil client dari pengguna yang terautentikasi.
/api/client/profileSession token Bearer atau API key (peran client)Memperbarui field profil client.
/api/client/datasetsSession token Bearer atau API key (peran client)Mencantumkan dataset cloud milik client dengan jumlah episode dan ukurannya.
/api/client/invoicesSession token Bearer atau API key (peran client)Mencantumkan invoice bulanan milik client.
/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.
/api/operator/profileSession token Bearer atau API key (peran operator)Mengembalikan profil operator dari pengguna yang terautentikasi.
/api/operator/profileSession token Bearer atau API key (peran operator)Membuat atau memperbarui profil operator.
/api/operator/available-robotsSession token Bearer atau API key (peran operator)Mencantumkan robot yang saat ini tersedia dan cocok dengan sertifikasi operator.
/api/operator/certificationsSession token Bearer atau API key (peran operator)Mencantumkan permintaan sertifikasi operator dan statusnya.
/api/operator/certificationsSession token Bearer atau API key (peran operator)Meminta sertifikasi untuk sebuah jenis robot.
/api/operator/scheduleSession token Bearer atau API key (peran operator)Mengembalikan jadwal ketersediaan mingguan operator.
/api/operator/scheduleSession token Bearer atau API key (peran operator)Memperbarui jadwal ketersediaan mingguan.
/api/operator/availabilitySession token Bearer atau API key (peran operator)Mengembalikan ketersediaan operator saat ini.
/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.
/api/sessionsSession token Bearer atau API keyMencantumkan 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.
| Name | In | Type | Description |
|---|---|---|---|
| status | query | string | Opsional. Saring berdasarkan status sesi, misalnya ACTIVE atau COMPLETED. Kosongkan untuk mencantumkan semua. |
| limit | query | number | Opsional. Ukuran halaman, default 50, maksimum 100. |
| offset | query | number | Opsional. Offset pagination, default 0. |
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/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.
| Name | In | Type | Description |
|---|---|---|---|
| robotId | body | string | Wajib. Id robot yang akan dioperasikan. Robotnya harus AVAILABLE. |
| operatorId | body | string | Opsional. Id operator eksplisit; default-nya adalah operator yang terautentikasi. |
| scheduledFor | body | string (ISO 8601) | Opsional. Menjadwalkan sesi untuk waktu di masa depan alih-alih memulainya segera. |
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]Session token Bearer atau API keyMengembalikan satu sesi beserta detailnya.
/api/sessions/[id]Session token Bearer atau API keyMemperbarui siklus hidup sesi: jeda, lanjutkan, akhiri, dan aksi terkait lainnya.
/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.
| Name | In | Type | Description |
|---|---|---|---|
| id | path | string | Id sesinya. |
| additionalMinutes | body | number | Panjang perpanjangan yang diminta, dalam menit. |
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]/messagesSession token Bearer atau API keyMencantumkan pesan chat sebuah sesi.
/api/sessions/[id]/messagesSession token Bearer atau API keyMengirim pesan chat dalam sebuah sesi.
/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.
/api/sessions/exportSession token Bearer atau API keyMengekspor 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.
/api/stripe/customerSession token Bearer (peran client)Membuat atau mengembalikan Stripe customer yang dipakai untuk penagihan client.
/api/stripe/connectSession token Bearer (peran operator)Mengembalikan status akun Stripe Connect milik operator.
/api/stripe/connectSession token Bearer (peran operator)Memulai onboarding Stripe Connect untuk pembayaran operator.
/api/stripe/setup-intentSession token Bearer (peran client)Membuat Stripe SetupIntent untuk menyimpan metode pembayaran.
/api/stripe/portalSession token Bearer (peran client)Membuat sesi Stripe billing portal untuk mengelola metode pembayaran dan invoice.
/api/stripe/payoutSession token Bearer (peran operator)Mengembalikan informasi pembayaran untuk operator yang terautentikasi.
/api/stripe/payoutSession token Bearer (peran operator)Meminta pembayaran atas penghasilan yang terkumpul. Pembayaran minimum adalah 10.00 EUR.
/api/stripe/webhookTanda tangan webhook StripeMenerima 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.
/api/healthPemeriksaan 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.
curl https://www.ay-robots.com/api/health{
"status": "ok",
"db": "ok",
"timestamp": "2026-08-09T10:12:00.000Z"
}/api/robots/[id]Mengembalikan informasi publik tentang sebuah model robot yang didukung.
/api/public/pricingMengembalikan paket harga publik saat ini.
/api/contactMengirim 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.
| Name | In | Type | Description |
|---|---|---|---|
| name | body | string | Wajib. Nama Anda. |
| body | string | Wajib. Alamat email valid untuk balasan. | |
| category | body | string | Wajib. Salah satu dari: General Inquiry, Bug Report, Feature Request, Sales & Pricing, Partnership, Career/Jobs, Technical Support, Billing & Payments, Press & Media, Other. |
| subject | body | string | Wajib. Baris subjek singkat. |
| message | body | string | Wajib. Isi pesannya. |
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-requestMeminta dukungan untuk sebuah jenis robot yang belum ada di platform.
/api/statsMengembalikan statistik publik platform.
Cara AY-Robots mengamankan akun dan kontrol robot langsung: autentikasi Supabase, model peran, API key, pengaman sesi, audit trail, dan enkripsi.
Cara kerja sesi AY-Robots: siklus hidup dari PENDING ke COMPLETED, setiap activity event dijelaskan, session chat, rating, perpanjangan, dan data pelatihan.