コンテンツにスキップ

エージェントコンピューターAPI

API Playgroundでお試しください。

https://api.rebyte.ai/v1

すべてのリクエストにはAPI_KEYヘッダーが必要です。設定 > APIキーからキーを取得してください。

Terminal window
curl https://api.rebyte.ai/v1/tasks \
-H "API_KEY: rbk_your_key_here"

ヘッダー名は大文字と小文字を区別しません。API_KEYapi-keyx-api-keyのすべてが機能します。


メソッドパス説明
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/webhooksWebhookを登録
GET/webhooksWebhookを一覧表示
GET/webhooks/:idWebhookの詳細を取得
DELETE/webhooks/:idWebhookを削除
すべてのパスはベースURL (https://api.rebyte.ai/v1) に対する相対パスです。

POST /tasks

新しいタスクを作成します。デフォルトでは、新しいVM(エージェントコンピューター)をプロビジョニングします。既存のワークスペースでタスクを実行するにはworkspaceIdを渡します。これによりプロビジョニングがスキップされ、大幅に高速化されます。

VMがプロビジョニングされ、最初のプロンプトが送信されるまで、この呼び出しはブロックされます。

リクエストボディ:

フィールドタイプ必須説明
promptstringYesタスクの説明(最大100,000文字)
executorstringNoclaude(デフォルト)、geminicodexopencode
modelstringNoエグゼキューターのモデルティア。モデルを参照してください。
workspaceIdstringNo再利用する既存のワークスペースのUUID
filesobject[]NoPOST /filesからのファイル。各項目: {"id": "...", "filename": "..."}
skillsstring[]Noスキルスラッグ(例: ["deep-research", "pdf"]
githubUrlstringNoowner/repo形式のGitHubリポジトリ
branchNamestringNoブランチ名(デフォルト: main
Terminal window
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を保存します。

Terminal window
# 最初のタスク -- 新しい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\"}"

利用可能なモデルはエグゼキューターによって異なります:

エグゼキューター利用可能なモデルデフォルト
claudeclaude-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-flashclaude-sonnet-4.6
codexgpt-5.4, gpt-5.3-codexgpt-5.4
geminiauto-gemini-3 (flashとproの間で自動ルーティング)auto-gemini-3
opencodeclaudeと同じgemini-3.1-pro

BYOK(独自のAPIキーを使用)の場合、エグゼキューターのネイティブプロバイダーモデルのみが利用可能です(例: BYOKを使用するclaudeエグゼキューターはclaude-sonnet-4.6claude-opus-4.6のみを利用できます)。

GET /tasks?limit=50&offset=0

API経由で作成されたタスクを、作成時間(新しい順)でソートして返します。

パラメータータイプデフォルト説明
limitnumber501ページあたりの結果数(最大100)
offsetnumber0ページネーションオフセット
Terminal window
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
}
GET /tasks/:id

プロンプト履歴と派生ステータスを含むタスクの詳細をすべて返します。

Terminal window
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
POST /tasks/:id/prompts

実行中または完了したタスクにフォローアッププロンプトを送信します。VMが停止している場合、自動的に再開されます。

フィールドタイプ必須説明
promptstringYesフォローアッププロンプト(最大100,000文字)
skillsstring[]Noこのプロンプト用の追加スキルスラッグ
Terminal window
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)、ツール呼び出し、完了シグナルが含まれます。

Terminal window
curl -N https://api.rebyte.ai/v1/tasks/550e8400-.../events \
-H "API_KEY: rbk_xxx"

ストリームは2つのイベントタイプを出力します:

  • event — 実行イベント(エージェント出力、ツール呼び出し)
  • done — 完了ステータスを含む最終イベント。その後ストリームは閉じます。
PATCH /tasks/:id/visibility
フィールドタイプ必須説明
visibilitystringYesprivateshared、またはpublic
レベル閲覧できるユーザー
privateAPIキーの所有者のみ
sharedすべての組織メンバー(デフォルト)
publicリンクを知っている人なら誰でも(読み取り専用)
Terminal window
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が含まれます。

DELETE /tasks/:id

タスクをソフト削除します。204 No Contentを返します。

Terminal window
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
フィールドタイプ必須説明
filenamestringYesファイル名(最大255文字)
contentTypestringNoMIMEタイプ(デフォルト: application/octet-stream

レスポンス (201):

{
"id": "550e8400-...",
"filename": "data.csv",
"uploadUrl": "https://storage.googleapis.com/...",
"maxFileSize": 52428800
}

アップロードURLは1時間で期限切れになります。

ステップ2: ファイルのアップロード

Section titled “ステップ2: ファイルのアップロード”
Terminal window
curl -X PUT "UPLOAD_URL_FROM_STEP_1" \
-H "Content-Type: application/octet-stream" \
--data-binary @data.csv

タスク作成時にステップ1のidfilenameを渡します:

{
"prompt": "Analyze the uploaded data",
"files": [
{"id": "550e8400-...", "filename": "data.csv"}
]
}

ファイルは実行開始時にタスクのVMに自動的にコピーされます。


タスクイベントが発生したときにHTTP POST通知を受け取ります。Webhookはユニバーサルであり、API、UI、またはその他のチャネルを介して作成されたかどうかにかかわらず、組織内のすべてのタスクに対して発火します。

イベント発生条件
task.created新しいタスクが作成されたとき
task.runningエージェントが実行を開始したとき
task.completedタスクが正常に完了したとき
task.failedタスクが失敗したとき
task.canceledタスクがユーザーによってキャンセルされたとき
POST /webhooks
フィールドタイプ必須説明
urlstringYesHTTPSエンドポイントURL
eventsstring[]Yes購読するイベント
descriptionstringNo人間が読めるラベル(最大500文字)
secretstringNo事前共有シークレット(最大500文字)。設定されている場合、すべての配信でX-Webhook-Secretヘッダーとして含まれます。
Terminal window
# Webhook without secret
curl -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 secret
curl -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のみが公開されます。
GET /webhooks

組織のすべてのWebhookを、ステータス情報(lastTriggeredAtfailureCountisActive)とともに返します。シークレットは決して公開されません。

GET /webhooks/:id
DELETE /webhooks/:id

204 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.completedtask.failedtask.canceledなどの終了イベントで存在。task.createdおよびtask.runningでは存在しない)

プロンプト履歴を含むタスクの詳細をすべて取得するには、GET /tasks/:idを呼び出してください。

配信ヘッダー:

ヘッダー常に存在説明
Content-TypeYesapplication/json
X-Webhook-SignatureYesBase64エンコードされたRSA-SHA256署名
X-Webhook-TimestampYesUnixタイムスタンプ(秒)
X-Webhook-Secretシークレットが設定されている場合のみ作成時に設定した事前共有シークレット値

タイムアウト: 配信は10秒後にタイムアウトします。

エラー処理:

  • 配信はfire-and-forgetです — 失敗時の自動再試行はありません
  • 2xx以外のレスポンスはfailureCountをインクリメントします
  • 10回連続で失敗すると、Webhookは自動的に無効になります(isActive: false
  • 成功した配信はfailureCountを0にリセットします

事前共有シークレットが設定されているかどうかにかかわらず、すべての配信は組織のRSA-2048キーペアで署名されます。

仕組み:

  1. Rebyteは{timestamp}.{body}を連結します(例: 1706443200.{"event":"task.completed",...}
  2. 組織の秘密鍵を使用して文字列をRSA-SHA256で署名します
  3. 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, serialization
from cryptography.hazmat.primitives.asymmetric import padding
import 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

Webhookは、組み合わせて使用できる2つの独立した検証方法をサポートしています:

方法ヘッダー仕組みユースケース
RSA署名X-Webhook-SignatureペイロードがRebyteから送信されたことを暗号学的に証明改ざん防止検証
事前共有シークレットX-Webhook-Secret作成時に設定した静的文字列で、すべての配信でエコーバックされますシンプルな共有シークレットチェック

RSA署名は常に存在します。事前共有シークレットはオプションです — よりシンプルな検証パスが必要な場合は、Webhook作成時に設定してください。


完全な例: タスクを作成し、完了するまでポーリングし、その後フォローアップを送信します。

Terminal window
# タスクを作成
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 5
done
# フォローアップを送信
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_key401API_KEYヘッダーが提供されていません
invalid_api_key401無効または期限切れのAPIキー
validation_error400リクエストボディの検証に失敗しました
not_found404リソースが存在しないか、アクセスできません
limit_exceeded400組織の制限に達しました(例: Webhookの最大数)
agent_disabled403要求されたエグゼキューターはこの組織で無効になっています
internal_error500サーバー側の障害

APIは現在、キーごとのレート制限を適用していません。各POST /tasksは実際のVMをプロビジョニングするため、コストは使用量に応じて増加します。不要なリクエストを減らすために、積極的なポーリングの代わりにWebhookを使用してください。