Zum Inhalt springen

Agent Computer API

Probieren Sie es im API Playground aus.

https://api.rebyte.ai/v1

Jede Anfrage erfordert einen API_KEY-Header. Holen Sie sich Ihren Schlüssel unter Einstellungen > API-Schlüssel.

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

Der Header-Name ist nicht zwischen Groß- und Kleinschreibung zu unterscheiden. API_KEY, api-key und x-api-key funktionieren alle.


MethodePfadBeschreibung
POST/tasksEine Aufgabe erstellen
GET/tasksAufgaben auflisten
GET/tasks/:idAufgabe mit Status und Prompt-Verlauf abrufen
POST/tasks/:id/promptsEinen Folge-Prompt senden
PATCH/tasks/:id/visibilityAufgabensichtbarkeit ändern
DELETE/tasks/:idEine Aufgabe soft-löschen
GET/tasks/:id/eventsSSE-Stream von Ausführungsereignissen
POST/filesEine signierte Datei-Upload-URL abrufen
POST/webhooksEinen Webhook registrieren
GET/webhooksWebhooks auflisten
GET/webhooks/:idWebhook-Details abrufen
DELETE/webhooks/:idEinen Webhook löschen
Alle Pfade sind relativ zur Basis-URL (https://api.rebyte.ai/v1).

POST /tasks

Erstellt eine neue Aufgabe. Standardmäßig wird eine neue VM (Agent Computer) bereitgestellt. Übergeben Sie workspaceId, um die Aufgabe stattdessen in einem bestehenden Workspace auszuführen – dies überspringt die Bereitstellung und ist deutlich schneller.

Der Aufruf blockiert, bis die VM bereitgestellt und der erste Prompt übermittelt wurde.

Anfragekörper:

FeldTypErforderlichBeschreibung
promptstringJaAufgabenbeschreibung (max. 100.000 Zeichen)
executorstringNeinclaude (Standard), gemini, codex, opencode
modelstringNeinModell-Tier für den Executor. Siehe Modelle.
workspaceIdstringNeinUUID eines bestehenden Workspaces zur Wiederverwendung
filesobject[]NeinDateien von POST /files. Jeweils: {"id": "...", "filename": "..."}
skillsstring[]NeinSkill-Slugs (z.B. ["deep-research", "pdf"])
githubUrlstringNeinGitHub-Repo im Format owner/repo
branchNamestringNeinBranch-Name (Standard: main)
Terminal-Fenster
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"
}'

Antwort (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"
}

Speichern Sie die workspaceId aus der Antwort, um Folgeaufgaben auf demselben Agent Computer zu erstellen:

Terminal-Fenster
# First task -- provisions a new 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')
# Second task -- reuses the same VM (much faster)
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\"}"

Verfügbare Modelle hängen vom Executor ab:

ExecutorVerfügbare ModelleStandard
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 (auto-routes between flash and pro)auto-gemini-3
opencodeSame as claudegemini-3.1-pro

Mit BYOK (bring your own API key) sind nur die nativen Provider-Modelle des Executors verfügbar (z.B. erhält der claude-Executor mit BYOK nur claude-sonnet-4.6 und claude-opus-4.6).

GET /tasks?limit=50&offset=0

Gibt über die API erstellte Aufgaben zurück, sortiert nach Erstellungszeit (neueste zuerst).

ParameterTypStandardBeschreibung
limitnumber50Ergebnisse pro Seite (max. 100)
offsetnumber0Paginierungs-Offset
Terminal-Fenster
curl "https://api.rebyte.ai/v1/tasks?limit=10" \
-H "API_KEY: rbk_xxx"

Antwort:

{
"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

Gibt vollständige Aufgabendetails einschließlich Prompt-Verlauf und abgeleitetem Status zurück.

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

Antwort:

{
"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"
}
]
}

Der Aufgabenstatus wird aus den Prompt-Zuständen abgeleitet:

StatusBedingung
runningJeder Prompt ist pending oder running
completedAlle Prompts sind terminal, der neueste ist succeeded
failedAlle Prompts sind terminal, der neueste ist failed
canceledAlle Prompts sind terminal, der neueste ist canceled
POST /tasks/:id/prompts

Senden Sie einen Folge-Prompt an eine laufende oder abgeschlossene Aufgabe. Wenn die VM gestoppt ist, wird sie automatisch fortgesetzt.

FeldTypErforderlichBeschreibung
promptstringJaFolge-Prompt (max. 100.000 Zeichen)
skillsstring[]NeinZusätzliche Skill-Slugs für diesen Prompt
Terminal-Fenster
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"}'

Antwort (201):

{
"promptId": "770f9500-..."
}
GET /tasks/:id/events

Öffnet einen Server-Sent Events Stream für den neuesten Prompt der Aufgabe. Ereignisse umfassen Agenten-Output (stdout, stderr), Tool-Aufrufe und Abschluss-Signale.

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

Der Stream sendet zwei Ereignistypen aus:

  • event — Ausführungsereignisse (Agenten-Output, Tool-Aufrufe)
  • done — finales Ereignis mit Abschlussstatus, danach schließt der Stream
PATCH /tasks/:id/visibility
FeldTypErforderlichBeschreibung
visibilitystringJaprivate, shared oder public
StufeWer kann sehen
privateNur der API-Schlüsselbesitzer
sharedAlle Organisationsmitglieder (Standard)
publicJeder mit dem Link (schreibgeschützt)
Terminal-Fenster
curl -X PATCH https://api.rebyte.ai/v1/tasks/550e8400-.../visibility \
-H "API_KEY: rbk_xxx" \
-H "Content-Type: application/json" \
-d '{"visibility": "public"}'

Wenn auf public gesetzt, enthält die Antwort eine shareUrl für den nicht authentifizierten Zugriff.

DELETE /tasks/:id

Löscht die Aufgabe ‘soft’. Gibt 204 No Content zurück.

Terminal-Fenster
curl -X DELETE https://api.rebyte.ai/v1/tasks/550e8400-... \
-H "API_KEY: rbk_xxx"

Laden Sie Dateien hoch, um sie an Aufgaben anzuhängen. Verwendet einen zweistufigen Signed-URL-Flow.

POST /files
FeldTypErforderlichBeschreibung
filenamestringJaDateiname (max. 255 Zeichen)
contentTypestringNeinMIME-Typ (Standard: application/octet-stream)

Antwort (201):

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

Die Upload-URL läuft in 1 Stunde ab.

Terminal-Fenster
curl -X PUT "UPLOAD_URL_FROM_STEP_1" \
-H "Content-Type: application/octet-stream" \
--data-binary @data.csv

Übergeben Sie id und filename aus Schritt 1 beim Erstellen einer Aufgabe:

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

Dateien werden automatisch in die VM der Aufgabe kopiert, wenn die Ausführung beginnt.


Erhalten Sie HTTP POST-Benachrichtigungen, wenn Aufgabenereignisse auftreten. Webhooks sind universell – sie werden für alle Aufgaben in Ihrer Organisation ausgelöst, unabhängig davon, ob sie über API, UI oder einen anderen Kanal erstellt wurden.

EreignisWird ausgelöst, wenn
task.createdEine neue Aufgabe erstellt wird
task.runningDer Agent mit der Ausführung beginnt
task.completedAufgabe erfolgreich abgeschlossen wird
task.failedAufgabe fehlschlägt
task.canceledAufgabe vom Benutzer abgebrochen wird
POST /webhooks
FeldTypErforderlichBeschreibung
urlstringJaHTTPS-Endpunkt-URL
eventsstring[]JaEreignisse, die abonniert werden sollen
descriptionstringNeinMenschlich lesbare Bezeichnung (max. 500 Zeichen)
secretstringNeinVorab geteiltes Geheimnis (max. 500 Zeichen). Wenn gesetzt, wird es als X-Webhook-Secret-Header in jeder Zustellung enthalten sein.
Terminal-Fenster
# 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"
}'

Antwort (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
}

Verhaltenshinweise:

  • Doppelte URLs: Das zweimalige Registrieren derselben URL gibt den bestehenden Webhook zurück (idempotent)
  • Limit: maximal 3 Webhooks pro Organisation. Der 4. gibt limit_exceeded zurück.
  • Geheimnis-Speicherung: Der Geheimniswert wird niemals in einer Antwort zurückgegeben. Nur hasSecret: true/false wird offengelegt.
GET /webhooks

Gibt alle Webhooks für Ihre Organisation mit Statusinformationen (lastTriggeredAt, failureCount, isActive) zurück. Geheimnisse werden niemals offengelegt.

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

Gibt 204 No Content zurück. Gelöschte Webhooks erhalten sofort keine Zustellungen mehr.

Wenn ein Aufgabenereignis mit den abonnierten Ereignissen eines Webhooks übereinstimmt, sendet Rebyte einen HTTP POST an die Webhook-URL.

Payload:

{
"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 — Prompt-Status: pending (task.created), running (task.running), succeeded (task.completed), failed (task.failed), canceled (task.canceled)
  • taskUrl — direkter Link zur Aufgabe in der Rebyte UI (immer vorhanden)
  • result — finaler KI-Ausgabetext (vorhanden bei terminalen Ereignissen: task.completed, task.failed, task.canceled; nicht vorhanden bei task.created und task.running)

Rufen Sie GET /tasks/:id auf, um vollständige Aufgabendetails einschließlich Prompt-Verlauf zu erhalten.

Zustellungs-Header:

HeaderImmer vorhandenBeschreibung
Content-TypeJaapplication/json
X-Webhook-SignatureJaBase64-kodierte RSA-SHA256-Signatur
X-Webhook-TimestampJaUnix-Zeitstempel (Sekunden)
X-Webhook-SecretNur wenn Geheimnis konfiguriertDer vorab geteilte Geheimniswert, den Sie bei der Erstellung festgelegt haben

Timeout: Zustellungen laufen nach 10 Sekunden ab.

Fehlerbehandlung:

  • Die Zustellung ist Fire-and-Forget – keine automatischen Wiederholungsversuche bei Fehlern
  • Nicht-2xx-Antworten erhöhen failureCount
  • Nach 10 aufeinanderfolgenden Fehlern wird der Webhook automatisch deaktiviert (isActive: false)
  • Erfolgreiche Zustellungen setzen failureCount auf 0 zurück

Jede Zustellung wird mit dem RSA-2048-Schlüsselpaar Ihrer Organisation signiert, unabhängig davon, ob ein vorab geteiltes Geheimnis konfiguriert ist.

So funktioniert es:

  1. Rebyte verkettet {timestamp}.{body} (z.B. 1706443200.{"event":"task.completed",...})
  2. Signiert die Zeichenkette mit RSA-SHA256 unter Verwendung des privaten Schlüssels Ihrer Organisation
  3. Sendet die base64-kodierte Signatur im X-Webhook-Signature-Header

Holen Sie sich Ihren öffentlichen Schlüssel: Kontaktieren Sie den Support oder rufen Sie ihn über das Rebyte-Dashboard ab. Das RSA-2048-Schlüsselpaar wird automatisch bei der ersten Webhook-Erstellung generiert und bleibt für die Organisation bestehen.

Verifizierungsbeispiel (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');
}
// In your webhook handler:
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');
});

Verifizierungsbeispiel (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

Webhooks unterstützen zwei unabhängige Verifizierungsmethoden, die zusammen verwendet werden können:

MethodeHeaderFunktionsweiseAnwendungsfall
RSA signatureX-Webhook-SignatureKryptografischer Nachweis, dass die Payload von Rebyte stammtManipulationssichere Verifizierung
Pre-shared secretX-Webhook-SecretStatische Zeichenkette, die Sie bei der Erstellung festlegen und die in jeder Zustellung zurückgegeben wirdEinfache Überprüfung mit geteiltem Geheimnis

RSA-Signaturen sind immer vorhanden. Das vorab geteilte Geheimnis ist optional – legen Sie es bei der Erstellung des Webhooks fest, wenn Sie einen einfacheren Verifizierungspfad wünschen.


Vollständiges Beispiel: Eine Aufgabe erstellen, bis zum Abschluss abfragen und dann einen Folge-Prompt senden.

Terminal-Fenster
# Create task
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"
# Poll until done
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
# Send a follow-up
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"}'

Alle Fehler folgen dieser Struktur:

{
"error": {
"code": "validation_error",
"message": "Invalid request body"
}
}
CodeHTTP-StatusBeschreibung
missing_api_key401API_KEY-Header nicht angegeben
invalid_api_key401Ungültiger oder abgelaufener API-Schlüssel
validation_error400Anfragekörper konnte nicht validiert werden
not_found404Ressource existiert nicht oder ist nicht zugänglich
limit_exceeded400Organisationslimit erreicht (z.B. maximale Webhooks)
agent_disabled403Der angeforderte Executor ist für diese Organisation deaktiviert
internal_error500Serverseitiger Fehler

Die API erzwingt derzeit keine Ratenbegrenzungen pro Schlüssel. Jedes POST /tasks stellt eine echte VM bereit, sodass die Kosten mit der Nutzung skalieren. Verwenden Sie Webhooks anstelle von aggressivem Polling, um unnötige Anfragen zu reduzieren.