Agent Computer API
Probeer het in de API Playground.
Basis-URL
Section titled “Basis-URL”https://api.rebyte.ai/v1Authenticatie
Section titled “Authenticatie”Elke aanvraag vereist een API_KEY header. Haal uw sleutel op via Instellingen > API Keys.
curl https://api.rebyte.ai/v1/tasks \ -H "API_KEY: rbk_your_key_here"De headernaam is niet hoofdlettergevoelig. API_KEY, api-key en x-api-key werken allemaal.
Eindpunten
Section titled “Eindpunten”| Methode | Pad | Beschrijving |
|---|---|---|
| POST | /tasks | Maak een taak aan |
| GET | /tasks | Lijst taken op |
| GET | /tasks/:id | Haal taak op met status en promptgeschiedenis |
| POST | /tasks/:id/prompts | Verstuur een vervolgprompt |
| PATCH | /tasks/:id/visibility | Wijzig taakzichtbaarheid |
| DELETE | /tasks/:id | Verwijder een taak (soft-delete) |
| GET | /tasks/:id/events | SSE-stream van uitvoeringsgebeurtenissen |
| POST | /files | Haal een ondertekende URL voor bestandsupload op |
| POST | /webhooks | Registreer een webhook |
| GET | /webhooks | Lijst webhooks op |
| GET | /webhooks/:id | Haal webhookdetails op |
| DELETE | /webhooks/:id | Verwijder een webhook |
Alle paden zijn relatief ten opzichte van de basis-URL (https://api.rebyte.ai/v1). |
Taak aanmaken
Section titled “Taak aanmaken”POST /tasksMaakt een nieuwe taak aan. Standaard wordt een nieuwe VM (Agent Computer) ingericht. Geef workspaceId door om de taak in plaats daarvan op een bestaande workspace uit te voeren — dit slaat het inrichten over en is aanzienlijk sneller.
De aanroep blokkeert totdat de VM is ingericht en de eerste prompt is ingediend.
Aanvraagbody:
| Veld | Type | Vereist | Beschrijving |
|---|---|---|---|
prompt | string | Ja | Taakbeschrijving (max. 100.000 tekens) |
executor | string | Nee | claude (standaard), gemini, codex, opencode |
model | string | Nee | Modelniveau voor de executor. Zie Modellen. |
workspaceId | string | Nee | UUID van een bestaande workspace om te hergebruiken |
files | object[] | Nee | Bestanden van POST /files. Elk: {"id": "...", "filename": "..."} |
skills | string[] | Nee | Skill slugs (bijv. ["deep-research", "pdf"]) |
githubUrl | string | Nee | GitHub repo in owner/repo-formaat |
branchName | string | Nee | Branchnaam (standaard: 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" }'Antwoord (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"}Sla de workspaceId uit het antwoord op om vervolgtaken op dezelfde Agent Computer aan te maken:
# Eerste taak -- richt een nieuwe VM inRESP=$(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')
# Tweede taak -- hergebruikt dezelfde VM (veel sneller)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\"}"Modellen
Section titled “Modellen”Beschikbare modellen zijn afhankelijk van de executor:
| Executor | Beschikbare Modellen | Standaard |
|---|---|---|
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 (auto-routes between flash and pro) | auto-gemini-3 |
opencode | Same as claude | gemini-3.1-pro |
Met BYOK (bring your own API key) zijn alleen de native provider-modellen van de executor beschikbaar (bijv. claude executor met BYOK krijgt alleen claude-sonnet-4.6 en claude-opus-4.6).
Taken weergeven
Section titled “Taken weergeven”GET /tasks?limit=50&offset=0Retourneert taken die via de API zijn aangemaakt, gesorteerd op aanmaaktijd (nieuwste eerst).
| Parameter | Type | Standaard | Beschrijving |
|---|---|---|---|
limit | number | 50 | Resultaten per pagina (max. 100) |
offset | number | 0 | Paginatie-offset |
curl "https://api.rebyte.ai/v1/tasks?limit=10" \ -H "API_KEY: rbk_xxx"Antwoord:
{ "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}Taak ophalen
Section titled “Taak ophalen”GET /tasks/:idRetourneert volledige taakdetails inclusief promptgeschiedenis en afgeleide status.
curl https://api.rebyte.ai/v1/tasks/550e8400-... \ -H "API_KEY: rbk_xxx"Antwoord:
{ "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" } ]}Taakstatus is afgeleid van promptstatussen:
| Status | Conditie |
|---|---|
running | Elke prompt is pending of running |
completed | Alle prompts zijn afgerond, de laatste is succeeded |
failed | Alle prompts zijn afgerond, de laatste is failed |
canceled | Alle prompts zijn afgerond, de laatste is canceled |
Vervolg versturen
Section titled “Vervolg versturen”POST /tasks/:id/promptsVerstuur een vervolgprompt naar een actieve of voltooide taak. Als de VM is gestopt, wordt deze automatisch hervat.
| Veld | Type | Vereist | Beschrijving |
|---|---|---|---|
prompt | string | Ja | Vervolgprompt (max. 100.000 tekens) |
skills | string[] | Nee | Extra skill slugs voor deze prompt |
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"}'Antwoord (201):
{ "promptId": "770f9500-..."}Gebeurtenissen streamen (SSE)
Section titled “Gebeurtenissen streamen (SSE)”GET /tasks/:id/eventsOpent een Server-Sent Events stream voor de nieuwste prompt van de taak. Gebeurtenissen omvatten agentuitvoer (stdout, stderr), toolaanroepen en voltooiingssignalen.
curl -N https://api.rebyte.ai/v1/tasks/550e8400-.../events \ -H "API_KEY: rbk_xxx"De stream zendt twee gebeurtenistypen uit:
event— uitvoeringsgebeurtenissen (agentuitvoer, toolaanroepen)done— laatste gebeurtenis met voltooiingsstatus, waarna de stream sluit
Zichtbaarheid wijzigen
Section titled “Zichtbaarheid wijzigen”PATCH /tasks/:id/visibility| Veld | Type | Vereist | Beschrijving |
|---|---|---|---|
visibility | string | Ja | private, shared of public |
| Niveau | Wie kan bekijken |
|---|---|
private | Alleen de eigenaar van de API-sleutel |
shared | Alle organisatieleden (standaard) |
public | Iedereen met de link (alleen-lezen) |
curl -X PATCH https://api.rebyte.ai/v1/tasks/550e8400-.../visibility \ -H "API_KEY: rbk_xxx" \ -H "Content-Type: application/json" \ -d '{"visibility": "public"}'Wanneer ingesteld op public, bevat het antwoord een shareUrl voor niet-geauthenticeerde toegang.
Taak verwijderen
Section titled “Taak verwijderen”DELETE /tasks/:idVerwijdert de taak (soft-delete). Retourneert 204 No Content.
curl -X DELETE https://api.rebyte.ai/v1/tasks/550e8400-... \ -H "API_KEY: rbk_xxx"Bestanden
Section titled “Bestanden”Upload bestanden om aan taken te koppelen. Maakt gebruik van een tweestaps signed-URL-flow.
Stap 1: Upload-URL ophalen
Section titled “Stap 1: Upload-URL ophalen”POST /files| Veld | Type | Vereist | Beschrijving |
|---|---|---|---|
filename | string | Ja | Bestandsnaam (max. 255 tekens) |
contentType | string | Nee | MIME-type (standaard: application/octet-stream) |
Antwoord (201):
{ "id": "550e8400-...", "filename": "data.csv", "uploadUrl": "https://storage.googleapis.com/...", "maxFileSize": 52428800}De upload-URL verloopt over 1 uur.
Stap 2: Het bestand uploaden
Section titled “Stap 2: Het bestand uploaden”curl -X PUT "UPLOAD_URL_FROM_STEP_1" \ -H "Content-Type: application/octet-stream" \ --data-binary @data.csvStap 3: Koppelen aan taak
Section titled “Stap 3: Koppelen aan taak”Geef id en filename van Stap 1 door bij het aanmaken van een taak:
{ "prompt": "Analyze the uploaded data", "files": [ {"id": "550e8400-...", "filename": "data.csv"} ]}Bestanden worden automatisch gekopieerd naar de VM van de taak wanneer de uitvoering begint.
Webhooks
Section titled “Webhooks”Ontvang HTTP POST-meldingen wanneer taakgebeurtenissen plaatsvinden. Webhooks zijn universeel — ze worden geactiveerd voor alle taken in uw organisatie, ongeacht of ze zijn aangemaakt via API, UI of een ander kanaal.
Gebeurtenissen
Section titled “Gebeurtenissen”| Gebeurtenis | Wordt geactiveerd wanneer |
|---|---|
task.created | Een nieuwe taak wordt aangemaakt |
task.running | De agent begint met uitvoeren |
task.completed | Taak succesvol is voltooid |
task.failed | Taak mislukt |
task.canceled | Taak wordt geannuleerd door gebruiker |
Webhook aanmaken
Section titled “Webhook aanmaken”POST /webhooks| Veld | Type | Vereist | Beschrijving |
|---|---|---|---|
url | string | Ja | HTTPS-eindpunt-URL |
events | string[] | Ja | Gebeurtenissen waarop u zich wilt abonneren |
description | string | Nee | Menselijk leesbaar label (max. 500 tekens) |
secret | string | Nee | Vooraf gedeeld geheim (max. 500 tekens). Indien ingesteld, opgenomen als X-Webhook-Secret header in elke levering. |
# Webhook zonder geheimcurl -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 met vooraf gedeeld geheimcurl -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" }'Antwoord (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}Gedragsnotities:
- Dubbele URL’s: het tweemaal registreren van dezelfde URL retourneert de bestaande webhook (idempotent)
- Limiet: maximaal 3 webhooks per organisatie. De 4e retourneert
limit_exceeded. - Opslag van geheim: de geheime waarde wordt nooit geretourneerd in een antwoord. Alleen
hasSecret: true/falsewordt weergegeven.
Webhooks weergeven
Section titled “Webhooks weergeven”GET /webhooksRetourneert alle webhooks voor uw organisatie met statusinformatie (lastTriggeredAt, failureCount, isActive). Geheimen worden nooit weergegeven.
Webhook ophalen
Section titled “Webhook ophalen”GET /webhooks/:idWebhook verwijderen
Section titled “Webhook verwijderen”DELETE /webhooks/:idRetourneert 204 No Content. Verwijderde webhooks stoppen onmiddellijk met het ontvangen van leveringen.
Levering
Section titled “Levering”Wanneer een taakgebeurtenis overeenkomt met de geabonneerde gebeurtenissen van een webhook, stuurt Rebyte een HTTP POST naar de 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— promptstatus:pending(task.created),running(task.running),succeeded(task.completed),failed(task.failed),canceled(task.canceled)taskUrl— directe link naar de taak in de Rebyte UI (altijd aanwezig)result— uiteindelijke AI-uitvoertekst (aanwezig bij terminale gebeurtenissen:task.completed,task.failed,task.canceled; afwezig bijtask.createdentask.running)
Roep GET /tasks/:id aan voor volledige taakdetails inclusief promptgeschiedenis.
Leveringsheaders:
| Header | Altijd aanwezig | Beschrijving |
|---|---|---|
Content-Type | Ja | application/json |
X-Webhook-Signature | Ja | Base64-gecodeerde RSA-SHA256 handtekening |
X-Webhook-Timestamp | Ja | Unix timestamp (seconden) |
X-Webhook-Secret | Alleen indien geheim geconfigureerd | De vooraf gedeelde geheime waarde die u bij het aanmaken hebt ingesteld |
Timeout: leveringen timen uit na 10 seconden.
Foutafhandeling:
- Levering is fire-and-forget — geen automatische herpogingen bij falen
- Niet-2xx antwoorden verhogen
failureCount - Na 10 opeenvolgende mislukkingen wordt de webhook automatisch uitgeschakeld (
isActive: false) - Succesvolle leveringen zetten
failureCountterug op 0
Handtekeningverificatie
Section titled “Handtekeningverificatie”Elke levering is ondertekend met het RSA-2048 sleutelpaar van uw organisatie, ongeacht of een vooraf gedeeld geheim is geconfigureerd.
Hoe het werkt:
- Rebyte concateneert
{timestamp}.{body}(bijv.1706443200.{"event":"task.completed",...}) - Ondertekent de string met RSA-SHA256 met behulp van de privésleutel van uw organisatie
- Verstuurt de base64-gecodeerde handtekening in
X-Webhook-Signature
Haal uw publieke sleutel op: neem contact op met support of haal deze op via het Rebyte dashboard. Het RSA-2048 sleutelpaar wordt automatisch gegenereerd bij de eerste webhook-aanmaak en blijft behouden voor de organisatie.
Verificatievoorbeeld (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 uw webhook-handler:app.post('/webhook', (req, res) => { const rawBody = req.body; // moet een ruwe string zijn, geen geparste 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('Ongeldige handtekening'); }
const event = JSON.parse(rawBody); console.log(`Taak ${event.taskId}: ${event.event}`); res.status(200).send('OK');});Verificatievoorbeeld (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 FalseTwee-lagen beveiliging
Section titled “Twee-lagen beveiliging”Webhooks ondersteunen twee onafhankelijke verificatiemethoden die samen kunnen worden gebruikt:
| Methode | Header | Hoe het werkt | Gebruiksscenario |
|---|---|---|---|
| RSA signature | X-Webhook-Signature | Cryptografisch bewijs dat de payload van Rebyte afkomstig is | Fraudebestendige verificatie |
| Pre-shared secret | X-Webhook-Secret | Statische string die u bij het aanmaken instelt, en die wordt teruggestuurd bij elke levering | Eenvoudige gedeelde-geheim controle |
RSA-handtekeningen zijn altijd aanwezig. Het vooraf gedeelde geheim is optioneel — stel het in bij het aanmaken van de webhook als u een eenvoudiger verificatiepad wilt.
Polling-voorbeeld
Section titled “Polling-voorbeeld”Compleet voorbeeld: maak een taak aan, poll totdat deze is voltooid en verstuur vervolgens een vervolg.
# Taak aanmakenTASK_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 totdat voltooidwhile 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
# Vervolg versturencurl -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"}'Foutformaat
Section titled “Foutformaat”Alle fouten volgen deze structuur:
{ "error": { "code": "validation_error", "message": "Invalid request body" }}| Code | HTTP-status | Beschrijving |
|---|---|---|
missing_api_key | 401 | API_KEY header niet opgegeven |
invalid_api_key | 401 | Ongeldige of verlopen API-sleutel |
validation_error | 400 | Aanvraagbody is mislukt bij validatie |
not_found | 404 | Bron bestaat niet of is niet toegankelijk |
limit_exceeded | 400 | Organisatielimiet bereikt (bijv. max. webhooks) |
agent_disabled | 403 | De aangevraagde executor is uitgeschakeld voor deze organisatie |
internal_error | 500 | Server-side fout |
Rate Limiting
Section titled “Rate Limiting”De API handhaaft momenteel geen rate limits per sleutel. Elke POST /tasks voorziet in een echte VM, dus de kosten schalen met het gebruik. Gebruik webhooks in plaats van agressief te pollen om onnodige verzoeken te verminderen.