エージェントコンピューターAPI
API Playgroundでお試しください。
ベースURL
Section titled “ベースURL”https://api.rebyte.ai/v1すべてのリクエストにはAPI_KEYヘッダーが必要です。設定 > APIキーからキーを取得してください。
curl https://api.rebyte.ai/v1/tasks \ -H "API_KEY: rbk_your_key_here"ヘッダー名は大文字と小文字を区別しません。API_KEY、api-key、x-api-keyのすべてが機能します。
エンドポイント
Section titled “エンドポイント”| メソッド | パス | 説明 |
|---|---|---|
| POST | /tasks | タスクを作成 |
| GET | /tasks | タスクを一覧表示 |
| GET | /tasks/:id | ステータスとプロンプト履歴を含むタスクを取得 |
| POST | /tasks/:id/prompts | フォローアッププロンプトを送信 |
| PATCH | /tasks/:id/visibility | タスクの可視性を変更 |
| DELETE | /tasks/:id | タスクをソフト削除 |
| GET | /tasks/:id/events | 実行イベントのSSEストリーム |
| POST | /files | 署名付きファイルアップロードURLを取得 |
| POST | /webhooks | Webhookを登録 |
| GET | /webhooks | Webhookを一覧表示 |
| GET | /webhooks/:id | Webhookの詳細を取得 |
| DELETE | /webhooks/:id | Webhookを削除 |
すべてのパスはベースURL (https://api.rebyte.ai/v1) に対する相対パスです。 |
タスクの作成
Section titled “タスクの作成”POST /tasks新しいタスクを作成します。デフォルトでは、新しいVM(エージェントコンピューター)をプロビジョニングします。既存のワークスペースでタスクを実行するにはworkspaceIdを渡します。これによりプロビジョニングがスキップされ、大幅に高速化されます。
VMがプロビジョニングされ、最初のプロンプトが送信されるまで、この呼び出しはブロックされます。
リクエストボディ:
| フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
prompt | string | Yes | タスクの説明(最大100,000文字) |
executor | string | No | claude(デフォルト)、gemini、codex、opencode |
model | string | No | エグゼキューターのモデルティア。モデルを参照してください。 |
workspaceId | string | No | 再利用する既存のワークスペースのUUID |
files | object[] | No | POST /filesからのファイル。各項目: {"id": "...", "filename": "..."} |
skills | string[] | No | スキルスラッグ(例: ["deep-research", "pdf"]) |
githubUrl | string | No | owner/repo形式のGitHubリポジトリ |
branchName | string | No | ブランチ名(デフォルト: main) |
curl -X POST https://api.rebyte.ai/v1/tasks \ -H "API_KEY: rbk_xxx" \ -H "Content-Type: application/json" \ -d '{ "prompt": "Build a REST API with Express and add tests", "executor": "claude", "skills": ["deep-research"], "githubUrl": "your-org/your-repo" }'レスポンス (201):
{ "id": "550e8400-e29b-41d4-a716-446655440000", "workspaceId": "660e8400-e29b-41d4-a716-446655440001", "url": "https://app.rebyte.ai/run/550e8400-e29b-41d4-a716-446655440000", "status": "running", "createdAt": "2026-01-28T12:00:00.000Z"}同じエージェントコンピューターで後続のタスクを作成するために、レスポンスからworkspaceIdを保存します。
# 最初のタスク -- 新しいVMをプロビジョニングRESP=$(curl -s -X POST https://api.rebyte.ai/v1/tasks \ -H "API_KEY: rbk_xxx" -H "Content-Type: application/json" \ -d '{"prompt": "Set up the project"}')WS_ID=$(echo $RESP | jq -r '.workspaceId')
# 2番目のタスク -- 同じVMを再利用(はるかに高速)curl -s -X POST https://api.rebyte.ai/v1/tasks \ -H "API_KEY: rbk_xxx" -H "Content-Type: application/json" \ -d "{\"prompt\": \"Now add tests\", \"workspaceId\": \"$WS_ID\"}"利用可能なモデルはエグゼキューターによって異なります:
| エグゼキューター | 利用可能なモデル | デフォルト |
|---|---|---|
claude | claude-sonnet-4.6, claude-opus-4.6, gemini-3.1-pro, gpt-5.3-codex, gpt-5.4, minimax-m2.7, kimi-k2.5, glm-5, gemini-3-flash | claude-sonnet-4.6 |
codex | gpt-5.4, gpt-5.3-codex | gpt-5.4 |
gemini | auto-gemini-3 (flashとproの間で自動ルーティング) | auto-gemini-3 |
opencode | claudeと同じ | gemini-3.1-pro |
BYOK(独自のAPIキーを使用)の場合、エグゼキューターのネイティブプロバイダーモデルのみが利用可能です(例: BYOKを使用するclaudeエグゼキューターはclaude-sonnet-4.6とclaude-opus-4.6のみを利用できます)。
タスクの一覧表示
Section titled “タスクの一覧表示”GET /tasks?limit=50&offset=0API経由で作成されたタスクを、作成時間(新しい順)でソートして返します。
| パラメーター | タイプ | デフォルト | 説明 |
|---|---|---|---|
limit | number | 50 | 1ページあたりの結果数(最大100) |
offset | number | 0 | ページネーションオフセット |
curl "https://api.rebyte.ai/v1/tasks?limit=10" \ -H "API_KEY: rbk_xxx"レスポンス:
{ "data": [ { "id": "550e8400-...", "url": "https://app.rebyte.ai/run/550e8400-...", "title": "Build REST API with Express", "executor": "claude", "model": "claude-sonnet-4.6", "createdAt": "2026-01-28T12:00:00.000000+00:00", "completedAt": "2026-01-28T12:05:00.000000+00:00" } ], "total": 42, "limit": 10, "offset": 0}タスクの取得
Section titled “タスクの取得”GET /tasks/:idプロンプト履歴と派生ステータスを含むタスクの詳細をすべて返します。
curl https://api.rebyte.ai/v1/tasks/550e8400-... \ -H "API_KEY: rbk_xxx"レスポンス:
{ "id": "550e8400-...", "url": "https://app.rebyte.ai/run/550e8400-...", "status": "running", "title": "Build REST API with Express", "executor": "claude", "model": "claude-sonnet-4.6", "createdAt": "2026-01-28T12:00:00.000000+00:00", "completedAt": null, "prompts": [ { "id": "660e8400-...", "status": "running", "submittedAt": "2026-01-28T12:05:00.000000+00:00", "completedAt": null }, { "id": "550e8400-...", "status": "succeeded", "submittedAt": "2026-01-28T12:00:01.000000+00:00", "completedAt": "2026-01-28T12:03:00.000000+00:00" } ]}タスクステータスはプロンプトの状態から派生します:
| ステータス | 条件 |
|---|---|
running | いずれかのプロンプトがpendingまたはrunning |
completed | すべてのプロンプトが終了し、最新がsucceeded |
failed | すべてのプロンプトが終了し、最新がfailed |
canceled | すべてのプロンプトが終了し、最新がcanceled |
フォローアップの送信
Section titled “フォローアップの送信”POST /tasks/:id/prompts実行中または完了したタスクにフォローアッププロンプトを送信します。VMが停止している場合、自動的に再開されます。
| フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
prompt | string | Yes | フォローアッププロンプト(最大100,000文字) |
skills | string[] | No | このプロンプト用の追加スキルスラッグ |
curl -X POST https://api.rebyte.ai/v1/tasks/550e8400-.../prompts \ -H "API_KEY: rbk_xxx" \ -H "Content-Type: application/json" \ -d '{"prompt": "Now add authentication with JWT"}'レスポンス (201):
{ "promptId": "770f9500-..."}イベントのストリーミング (SSE)
Section titled “イベントのストリーミング (SSE)”GET /tasks/:id/eventsタスクの最新プロンプトに対するServer-Sent Eventsストリームを開きます。イベントには、エージェントの出力(stdout、stderr)、ツール呼び出し、完了シグナルが含まれます。
curl -N https://api.rebyte.ai/v1/tasks/550e8400-.../events \ -H "API_KEY: rbk_xxx"ストリームは2つのイベントタイプを出力します:
event— 実行イベント(エージェント出力、ツール呼び出し)done— 完了ステータスを含む最終イベント。その後ストリームは閉じます。
可視性の変更
Section titled “可視性の変更”PATCH /tasks/:id/visibility| フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
visibility | string | Yes | private、shared、またはpublic |
| レベル | 閲覧できるユーザー |
|---|---|
private | APIキーの所有者のみ |
shared | すべての組織メンバー(デフォルト) |
public | リンクを知っている人なら誰でも(読み取り専用) |
curl -X PATCH https://api.rebyte.ai/v1/tasks/550e8400-.../visibility \ -H "API_KEY: rbk_xxx" \ -H "Content-Type: application/json" \ -d '{"visibility": "public"}'publicに設定すると、レスポンスには認証なしでアクセスするためのshareUrlが含まれます。
タスクの削除
Section titled “タスクの削除”DELETE /tasks/:idタスクをソフト削除します。204 No Contentを返します。
curl -X DELETE https://api.rebyte.ai/v1/tasks/550e8400-... \ -H "API_KEY: rbk_xxx"タスクに添付するファイルをアップロードします。2段階の署名付きURLフローを使用します。
ステップ1: アップロードURLの取得
Section titled “ステップ1: アップロードURLの取得”POST /files| フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
filename | string | Yes | ファイル名(最大255文字) |
contentType | string | No | MIMEタイプ(デフォルト: application/octet-stream) |
レスポンス (201):
{ "id": "550e8400-...", "filename": "data.csv", "uploadUrl": "https://storage.googleapis.com/...", "maxFileSize": 52428800}アップロードURLは1時間で期限切れになります。
ステップ2: ファイルのアップロード
Section titled “ステップ2: ファイルのアップロード”curl -X PUT "UPLOAD_URL_FROM_STEP_1" \ -H "Content-Type: application/octet-stream" \ --data-binary @data.csvステップ3: タスクへの添付
Section titled “ステップ3: タスクへの添付”タスク作成時にステップ1のidとfilenameを渡します:
{ "prompt": "Analyze the uploaded data", "files": [ {"id": "550e8400-...", "filename": "data.csv"} ]}ファイルは実行開始時にタスクのVMに自動的にコピーされます。
Webhook
Section titled “Webhook”タスクイベントが発生したときにHTTP POST通知を受け取ります。Webhookはユニバーサルであり、API、UI、またはその他のチャネルを介して作成されたかどうかにかかわらず、組織内のすべてのタスクに対して発火します。
| イベント | 発生条件 |
|---|---|
task.created | 新しいタスクが作成されたとき |
task.running | エージェントが実行を開始したとき |
task.completed | タスクが正常に完了したとき |
task.failed | タスクが失敗したとき |
task.canceled | タスクがユーザーによってキャンセルされたとき |
Webhookの作成
Section titled “Webhookの作成”POST /webhooks| フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
url | string | Yes | HTTPSエンドポイントURL |
events | string[] | Yes | 購読するイベント |
description | string | No | 人間が読めるラベル(最大500文字) |
secret | string | No | 事前共有シークレット(最大500文字)。設定されている場合、すべての配信でX-Webhook-Secretヘッダーとして含まれます。 |
# Webhook without secretcurl -X POST https://api.rebyte.ai/v1/webhooks \ -H "API_KEY: rbk_xxx" \ -H "Content-Type: application/json" \ -d '{ "url": "https://your-server.com/webhook", "events": ["task.completed", "task.failed"] }'
# Webhook with pre-shared secretcurl -X POST https://api.rebyte.ai/v1/webhooks \ -H "API_KEY: rbk_xxx" \ -H "Content-Type: application/json" \ -d '{ "url": "https://your-server.com/webhook", "events": ["task.completed", "task.failed"], "secret": "my-shared-secret-value" }'レスポンス (201):
{ "id": "880e8400-...", "url": "https://your-server.com/webhook", "events": ["task.completed", "task.failed"], "description": null, "hasSecret": true, "isActive": true, "createdAt": "2026-01-28T12:00:00.000Z", "lastTriggeredAt": null, "failureCount": 0}動作に関する注意点:
- 重複URL: 同じURLを2回登録すると、既存のWebhookが返されます(冪等性)
- 制限: 組織あたり最大3つのWebhook。4つ目を登録すると
limit_exceededが返されます。 - シークレットの保存: シークレット値はどのレスポンスでも返されません。
hasSecret: true/falseのみが公開されます。
Webhookの一覧表示
Section titled “Webhookの一覧表示”GET /webhooks組織のすべてのWebhookを、ステータス情報(lastTriggeredAt、failureCount、isActive)とともに返します。シークレットは決して公開されません。
Webhookの取得
Section titled “Webhookの取得”GET /webhooks/:idWebhookの削除
Section titled “Webhookの削除”DELETE /webhooks/:id204 No Contentを返します。削除されたWebhookはすぐに配信を受け取らなくなります。
タスクイベントがWebhookの購読イベントと一致すると、RebyteはWebhook URLにHTTP POSTを送信します。
ペイロード:
{ "event": "task.completed", "taskId": "550e8400-e29b-41d4-a716-446655440000", "timestamp": 1706443200, "data": { "status": "succeeded", "taskUrl": "https://app.rebyte.ai/run/550e8400-...", "result": "Created CSV file with 10 Hacker News posts..." }}status— プロンプトステータス:pending(task.created)、running(task.running)、succeeded(task.completed)、failed(task.failed)、canceled(task.canceled)taskUrl— Rebyte UI内のタスクへの直接リンク(常に存在)result— 最終的なAI出力テキスト(task.completed、task.failed、task.canceledなどの終了イベントで存在。task.createdおよびtask.runningでは存在しない)
プロンプト履歴を含むタスクの詳細をすべて取得するには、GET /tasks/:idを呼び出してください。
配信ヘッダー:
| ヘッダー | 常に存在 | 説明 |
|---|---|---|
Content-Type | Yes | application/json |
X-Webhook-Signature | Yes | Base64エンコードされたRSA-SHA256署名 |
X-Webhook-Timestamp | Yes | Unixタイムスタンプ(秒) |
X-Webhook-Secret | シークレットが設定されている場合のみ | 作成時に設定した事前共有シークレット値 |
タイムアウト: 配信は10秒後にタイムアウトします。
エラー処理:
- 配信はfire-and-forgetです — 失敗時の自動再試行はありません
- 2xx以外のレスポンスは
failureCountをインクリメントします - 10回連続で失敗すると、Webhookは自動的に無効になります(
isActive: false) - 成功した配信は
failureCountを0にリセットします
事前共有シークレットが設定されているかどうかにかかわらず、すべての配信は組織のRSA-2048キーペアで署名されます。
仕組み:
- Rebyteは
{timestamp}.{body}を連結します(例:1706443200.{"event":"task.completed",...}) - 組織の秘密鍵を使用して文字列をRSA-SHA256で署名します
- Base64エンコードされた署名を
X-Webhook-Signatureで送信します
公開鍵の取得: サポートに連絡するか、Rebyteダッシュボードから取得してください。RSA-2048キーペアは最初のWebhook作成時に自動的に生成され、組織に永続的に保存されます。
検証例 (Node.js):
const crypto = require('crypto');
function verifyWebhook(rawBody, timestamp, signature, publicKey) { const payload = `${timestamp}.${rawBody}`; const verifier = crypto.createVerify('RSA-SHA256'); verifier.update(payload); return verifier.verify(publicKey, signature, 'base64');}
// Webhookハンドラー内:app.post('/webhook', (req, res) => { const rawBody = req.body; // must be raw string, not parsed JSON const timestamp = req.headers['x-webhook-timestamp']; const signature = req.headers['x-webhook-signature'];
if (!verifyWebhook(rawBody, timestamp, signature, PUBLIC_KEY)) { return res.status(401).send('Invalid signature'); }
const event = JSON.parse(rawBody); console.log(`Task ${event.taskId}: ${event.event}`); res.status(200).send('OK');});検証例 (Python):
from cryptography.hazmat.primitives import hashes, serializationfrom cryptography.hazmat.primitives.asymmetric import paddingimport base64
def verify_webhook(raw_body: str, timestamp: str, signature: str, public_key_pem: str) -> bool: public_key = serialization.load_pem_public_key(public_key_pem.encode()) payload = f"{timestamp}.{raw_body}".encode() try: public_key.verify( base64.b64decode(signature), payload, padding.PKCS1v15(), hashes.SHA256() ) return True except Exception: return False二層セキュリティ
Section titled “二層セキュリティ”Webhookは、組み合わせて使用できる2つの独立した検証方法をサポートしています:
| 方法 | ヘッダー | 仕組み | ユースケース |
|---|---|---|---|
| RSA署名 | X-Webhook-Signature | ペイロードがRebyteから送信されたことを暗号学的に証明 | 改ざん防止検証 |
| 事前共有シークレット | X-Webhook-Secret | 作成時に設定した静的文字列で、すべての配信でエコーバックされます | シンプルな共有シークレットチェック |
RSA署名は常に存在します。事前共有シークレットはオプションです — よりシンプルな検証パスが必要な場合は、Webhook作成時に設定してください。
ポーリングの例
Section titled “ポーリングの例”完全な例: タスクを作成し、完了するまでポーリングし、その後フォローアップを送信します。
# タスクを作成TASK_ID=$(curl -s -X POST https://api.rebyte.ai/v1/tasks \ -H "API_KEY: rbk_xxx" \ -H "Content-Type: application/json" \ -d '{"prompt": "Write a Python CLI that converts CSV to JSON"}' | jq -r '.id')
echo "Task: https://app.rebyte.ai/run/$TASK_ID"
# 完了するまでポーリングwhile true; do STATUS=$(curl -s https://api.rebyte.ai/v1/tasks/$TASK_ID \ -H "API_KEY: rbk_xxx" | jq -r '.status') echo "Status: $STATUS" [[ "$STATUS" == "completed" || "$STATUS" == "failed" ]] && break sleep 5done
# フォローアップを送信curl -s -X POST https://api.rebyte.ai/v1/tasks/$TASK_ID/prompts \ -H "API_KEY: rbk_xxx" \ -H "Content-Type: application/json" \ -d '{"prompt": "Now add support for nested JSON objects"}'すべてのエラーはこの構造に従います:
{ "error": { "code": "validation_error", "message": "Invalid request body" }}| コード | HTTPステータス | 説明 |
|---|---|---|
missing_api_key | 401 | API_KEYヘッダーが提供されていません |
invalid_api_key | 401 | 無効または期限切れのAPIキー |
validation_error | 400 | リクエストボディの検証に失敗しました |
not_found | 404 | リソースが存在しないか、アクセスできません |
limit_exceeded | 400 | 組織の制限に達しました(例: Webhookの最大数) |
agent_disabled | 403 | 要求されたエグゼキューターはこの組織で無効になっています |
internal_error | 500 | サーバー側の障害 |
APIは現在、キーごとのレート制限を適用していません。各POST /tasksは実際のVMをプロビジョニングするため、コストは使用量に応じて増加します。不要なリクエストを減らすために、積極的なポーリングの代わりにWebhookを使用してください。