APIリファレンス

AY-RobotsのREST APIはhttps://www.ay-robots.com/api配下にあり、リクエストとレスポンスの両方でJSONを使用します。このページでは、認証、レスポンスの規約、そしてプログラムから呼び出す可能性が高いルートについてはパラメータの完全なドキュメントを含め、すべてのエンドポイントを解説します。

最終更新日 2026-08-09

認証

Publicセクションに記載されているものを除き、すべてのエンドポイントには認証が必要です。APIは2種類の認証情報を受け付けており、どちらも渡し方は同じです。ダッシュボードがすでに送信しているセッションクッキーとして渡すか、BearerトークンとしてAuthorizationヘッダーで渡します。

方式仕組み用途
ブラウザセッションログイン中のアカウントのSupabaseセッショントークンを、クッキーまたはBearerトークンとして送信しますダッシュボード自体、および認証済みブラウザコンテキストからの簡単な実験
APIキーayr_live_というプレフィックスを持つキーを/dashboard/settingsで作成し、Bearerトークンとして送信しますスクリプト、サーバー、CI、そのほかブラウザログインに依存させたくないもの全般
MCPhttps://www.ay-robots.com/api/mcp(Streamable HTTP)にあるホスト型MCPサーバーModel Context Protocolを話すLLMエージェントやツール
bash
curl https://www.ay-robots.com/api/sessions \
  -H 'Authorization: Bearer ayr_live_your_key_here'
APIキーで認証する

APIキーは/dashboard/settingsで作成・失効できます。パスワードと同様に扱い、サーバー側にのみ保管し、古いキーを失効させる前に新しいキーを作成してローテーションしてください。デスクトップCLIを使用している場合、コマンド1つでプラットフォームをローカルMCPサーバーとして公開することもできます。コマンドはay-robots mcpです。

レスポンスはJSONです。エラーは一貫した形式を取ります。人間が読めるメッセージを含む単一のerrorフィールドを持つJSONオブジェクトが、適切な4xxまたは5xxのステータスコードとともに返されます。成功レスポンスはリソースを直接返しますが、一部のエンドポイントはリストを名前付きフィールドでラップしており、それが重要な箇所については以下の例で示します。

認証エンドポイント

アカウントとプロフィールに関する基盤部分です。これらは主にダッシュボード自体が使用しますが、有効な認証情報であればどれでも動作します。

GET/api/auth/profileBearerセッショントークンまたは APIキー

認証済みユーザーのプロフィールを返します。

POST/api/auth/profileBearerセッショントークンまたは APIキー

表示名や通知設定などのプロフィール項目を更新します。

POST/api/auth/syncBearerセッショントークン

Supabaseの認証ユーザーを、プラットフォームのユーザーレコードと同期します。

GET/api/auth/check-onboardingBearerセッショントークン

認証済みユーザーがオンボーディングを完了しているかどうかを返します。

POST/api/auth/avatarBearerセッショントークン

認証済みユーザーの新しいアバター画像をアップロードします。

クライアントエンドポイント

ロボット所有者が管理するすべてのもの、すなわち登録済みロボット、クライアントプロフィール、データセット、請求書、ダッシュボードの統計情報です。

GET/api/client/robotsBearerセッショントークンまたは APIキー(クライアントロール)

認証済みクライアントが登録したロボットを、新しい順に最大50件まで一覧表示します。タイムスタンプはISO 8601形式です。last_onlineとlast_heartbeatは、ロボットが一度も接続していない間はnullになります。

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セッショントークンまたは APIキー(クライアントロール)

新しいロボットを登録し、そのidを返します。モーターボードのハードウェアIDは1台のロボットにしか属せません。衝突した場合はステータス409で拒否されます。

GET/api/client/profileBearerセッショントークンまたは APIキー(クライアントロール)

認証済みユーザーのクライアントプロフィールを返します。

PATCH/api/client/profileBearerセッショントークンまたは APIキー(クライアントロール)

クライアントプロフィールの項目を更新します。

GET/api/client/datasetsBearerセッショントークンまたは APIキー(クライアントロール)

クライアントのクラウドデータセットを、エピソード数とサイズとともに一覧表示します。

GET/api/client/invoicesBearerセッショントークンまたは APIキー(クライアントロール)

クライアントの月次請求書を一覧表示します。

GET/api/client/statsBearerセッショントークンまたは APIキー(クライアントロール)

クライアントダッシュボード用の利用統計を返します。

オペレーターエンドポイント

オペレーター側の機能です。プロフィールと稼働可能状況、認定、スケジューリング、収益統計を扱います。

GET/api/operator/profileBearerセッショントークンまたは APIキー(オペレーターロール)

認証済みユーザーのオペレータープロフィールを返します。

POST/api/operator/profileBearerセッショントークンまたは APIキー(オペレーターロール)

オペレータープロフィールを作成または更新します。

GET/api/operator/available-robotsBearerセッショントークンまたは APIキー(オペレーターロール)

現在利用可能で、そのオペレーターの認定と一致するロボットを一覧表示します。

GET/api/operator/certificationsBearerセッショントークンまたは APIキー(オペレーターロール)

オペレーターの認定リクエストとそのステータスを一覧表示します。

POST/api/operator/certificationsBearerセッショントークンまたは APIキー(オペレーターロール)

あるロボット機種の認定をリクエストします。

GET/api/operator/scheduleBearerセッショントークンまたは APIキー(オペレーターロール)

オペレーターの週次稼働可能スケジュールを返します。

POST/api/operator/scheduleBearerセッショントークンまたは APIキー(オペレーターロール)

週次稼働可能スケジュールを更新します。

GET/api/operator/availabilityBearerセッショントークンまたは APIキー(オペレーターロール)

オペレーターの現在の稼働可能状況を返します。

GET/api/operator/statsBearerセッショントークンまたは APIキー(オペレーターロール)

オペレーターダッシュボード用の収益とセッション統計を返します。

セッション

セッションはプラットフォームの中核リソースです。1つのセッションは、オペレーターとロボットの間で行われる1回の連続したテレオペレーションです。セッションのステータスは、PENDING、ACTIVE、PAUSED、COMPLETED、CANCELLEDの順に遷移します。

GET/api/sessionsBearerセッショントークンまたは APIキー

認証済みユーザーのセッションを一覧表示します。オペレーターには自分が操作したセッションが、クライアントには自分のロボットで行われたセッションが表示されます。フィールド構成は2つのビューで若干異なり、クライアントビューにはepisodes_collectedとdata_collected_mbが、オペレータービューにはoperator_earnings_centsが含まれます。

NameInTypeDescription
statusquerystring任意。セッションステータスで絞り込みます。例: ACTIVEやCOMPLETED。省略するとすべて一覧表示します。
limitquerynumber任意。1ページあたりの件数。デフォルト50、最大100。
offsetquerynumber任意。ページネーションのオフセット。デフォルト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セッショントークンまたは APIキー(オペレーターロール)

利用可能なロボットでテレオペレーションセッションを開始します。オペレーターロールが必要です。クライアントはセッションを開始できません。1人のオペレーターが同時に保持できるACTIVEまたはPAUSEDのセッションは最大1つで、対象のロボットは現在ステータスがAVAILABLEである必要があります。即座に開始すると、ロボットはIN_SESSIONに切り替わり、クライアントに通知されます。

NameInTypeDescription
robotIdbodystring必須。操作するロボットのid。そのロボットはAVAILABLEである必要があります。
operatorIdbodystring任意。明示的なオペレーターid。省略時は認証済みのオペレーターになります。
scheduledForbodystring (ISO 8601)任意。即座に開始する代わりに、セッションを未来の時刻に予約します。
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セッショントークンまたは APIキー

単一のセッションを詳細情報とともに返します。

PATCH/api/sessions/[id]Bearerセッショントークンまたは APIキー

セッションのライフサイクルを更新します。一時停止、再開、終了、および関連する操作です。

POST/api/sessions/[id]/extendBearerセッショントークンまたは APIキー(クライアント、セッション所有者)

セッションの延長をリクエストします。呼び出せるのはそのセッションを所有するクライアントのみで、セッションはACTIVEである必要があります。リクエストはセッションイベントとして記録され、オペレーターに通知が届きます。延長自体は、オペレーターがそれに応じて操作したときに実行されます。

NameInTypeDescription
idpathstringセッションid。
additionalMinutesbodynumberリクエストする延長時間(分)。
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セッショントークンまたは APIキー

セッションのチャットメッセージを一覧表示します。

POST/api/sessions/[id]/messagesBearerセッショントークンまたは APIキー

セッションでチャットメッセージを送信します。

POST/api/sessions/[id]/rateBearerセッショントークンまたは APIキー(クライアント)

完了したセッションを1から5の星で評価します。コメントは任意です。

POST/api/sessions/exportBearerセッショントークンまたは APIキー

セッションデータをエクスポートします。

決済

すべての金銭のやり取りはStripeを通じて行われます。クライアントの請求には、保存済みの支払い方法を持つStripeカスタマーを使用し、オペレーターへの支払いにはStripe Connectを使用します。プラットフォーム自体がカード情報や銀行情報を保存することはありません。

POST/api/stripe/customerBearerセッショントークン(クライアントロール)

クライアント請求に使用するStripeカスタマーを作成または取得します。

GET/api/stripe/connectBearerセッショントークン(オペレーターロール)

オペレーターのStripe Connectアカウントのステータスを返します。

POST/api/stripe/connectBearerセッショントークン(オペレーターロール)

オペレーターへの支払いのため、Stripe Connectのオンボーディングを開始します。

POST/api/stripe/setup-intentBearerセッショントークン(クライアントロール)

支払い方法を保存するためのStripe SetupIntentを作成します。

POST/api/stripe/portalBearerセッショントークン(クライアントロール)

支払い方法と請求書を管理するための、Stripe課金ポータルのセッションを作成します。

GET/api/stripe/payoutBearerセッショントークン(オペレーターロール)

認証済みオペレーターの支払い情報を返します。

POST/api/stripe/payoutBearerセッショントークン(オペレーターロール)

蓄積された収益の支払いをリクエストします。最低支払い額は10.00ユーロです。

POST/api/stripe/webhookStripe Webhook署名

StripeのWebhookイベントを受信します。APIクライアントではなく、Stripeから呼び出されます。

パブリックエンドポイント

これらのエンドポイントは認証を必要としません。監視、マーケティングページ、ステータスプローブなどから安全に呼び出せます。

GET/api/health

APIとそのデータベース接続のヘルスチェックです。両方とも問題なければ200を返します。データベースのチェックが失敗した場合は、statusとdbをerrorに設定した同じ形式のレスポンスが、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]

サポートされているロボット機種の公開情報を返します。

GET/api/public/pricing

現在の公開料金プランを返します。

POST/api/contact

お問い合わせフォームのメッセージを送信します。メッセージはまず保存され、その後メールで配信されるため、一時的なメール障害があってもメッセージが失われることはありません。その場合、レスポンスにはstoredがtrue、deliveredがfalseとして報告され、配信は運用上リトライされます。

NameInTypeDescription
namebodystring必須。お名前。
emailbodystring必須。返信先として有効なメールアドレス。
categorybodystring必須。次のいずれか1つ。General Inquiry、Bug Report、Feature Request、Sales & Pricing、Partnership、Career/Jobs、Technical Support、Billing & Payments、Press & Media、Other。
subjectbodystring必須。短い件名。
messagebodystring必須。メッセージ本文。
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

まだプラットフォームにないロボット機種のサポートをリクエストします。

GET/api/stats

公開プラットフォーム統計を返します。