Ga naar inhoud

Agent Computer API

Probeer het in de API Playground.

https://api.rebyte.ai/v1

Elke aanvraag vereist een API_KEY header. Haal uw sleutel op via Instellingen > API Keys.

Terminal window
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.


MethodePadBeschrijving
POST/tasksMaak een taak aan
GET/tasksLijst taken op
GET/tasks/:idHaal taak op met status en promptgeschiedenis
POST/tasks/:id/promptsVerstuur een vervolgprompt
PATCH/tasks/:id/visibilityWijzig taakzichtbaarheid
DELETE/tasks/:idVerwijder een taak (soft-delete)
GET/tasks/:id/eventsSSE-stream van uitvoeringsgebeurtenissen
POST/filesHaal een ondertekende URL voor bestandsupload op
POST/webhooksRegistreer een webhook
GET/webhooksLijst webhooks op
GET/webhooks/:idHaal webhookdetails op
DELETE/webhooks/:idVerwijder een webhook
Alle paden zijn relatief ten opzichte van de basis-URL (https://api.rebyte.ai/v1).

POST /tasks

Maakt 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:

VeldTypeVereistBeschrijving
promptstringJaTaakbeschrijving (max. 100.000 tekens)
executorstringNeeclaude (standaard), gemini, codex, opencode
modelstringNeeModelniveau voor de executor. Zie Modellen.
workspaceIdstringNeeUUID van een bestaande workspace om te hergebruiken
filesobject[]NeeBestanden van POST /files. Elk: {"id": "...", "filename": "..."}
skillsstring[]NeeSkill slugs (bijv. ["deep-research", "pdf"])
githubUrlstringNeeGitHub repo in owner/repo-formaat
branchNamestringNeeBranchnaam (standaard: 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"
}'

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:

Terminal window
# Eerste taak -- richt een nieuwe VM in
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')
# 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\"}"

Beschikbare modellen zijn afhankelijk van de executor:

ExecutorBeschikbare ModellenStandaard
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

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).

GET /tasks?limit=50&offset=0

Retourneert taken die via de API zijn aangemaakt, gesorteerd op aanmaaktijd (nieuwste eerst).

ParameterTypeStandaardBeschrijving
limitnumber50Resultaten per pagina (max. 100)
offsetnumber0Paginatie-offset
Terminal window
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
}
GET /tasks/:id

Retourneert volledige taakdetails inclusief promptgeschiedenis en afgeleide status.

Terminal window
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:

StatusConditie
runningElke prompt is pending of running
completedAlle prompts zijn afgerond, de laatste is succeeded
failedAlle prompts zijn afgerond, de laatste is failed
canceledAlle prompts zijn afgerond, de laatste is canceled
POST /tasks/:id/prompts

Verstuur een vervolgprompt naar een actieve of voltooide taak. Als de VM is gestopt, wordt deze automatisch hervat.

VeldTypeVereistBeschrijving
promptstringJaVervolgprompt (max. 100.000 tekens)
skillsstring[]NeeExtra skill slugs voor deze prompt
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"}'

Antwoord (201):

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

Opent een Server-Sent Events stream voor de nieuwste prompt van de taak. Gebeurtenissen omvatten agentuitvoer (stdout, stderr), toolaanroepen en voltooiingssignalen.

Terminal window
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
PATCH /tasks/:id/visibility
VeldTypeVereistBeschrijving
visibilitystringJaprivate, shared of public
NiveauWie kan bekijken
privateAlleen de eigenaar van de API-sleutel
sharedAlle organisatieleden (standaard)
publicIedereen met de link (alleen-lezen)
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"}'

Wanneer ingesteld op public, bevat het antwoord een shareUrl voor niet-geauthenticeerde toegang.

DELETE /tasks/:id

Verwijdert de taak (soft-delete). Retourneert 204 No Content.

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

Upload bestanden om aan taken te koppelen. Maakt gebruik van een tweestaps signed-URL-flow.

POST /files
VeldTypeVereistBeschrijving
filenamestringJaBestandsnaam (max. 255 tekens)
contentTypestringNeeMIME-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.

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

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.


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.

GebeurtenisWordt geactiveerd wanneer
task.createdEen nieuwe taak wordt aangemaakt
task.runningDe agent begint met uitvoeren
task.completedTaak succesvol is voltooid
task.failedTaak mislukt
task.canceledTaak wordt geannuleerd door gebruiker
POST /webhooks
VeldTypeVereistBeschrijving
urlstringJaHTTPS-eindpunt-URL
eventsstring[]JaGebeurtenissen waarop u zich wilt abonneren
descriptionstringNeeMenselijk leesbaar label (max. 500 tekens)
secretstringNeeVooraf gedeeld geheim (max. 500 tekens). Indien ingesteld, opgenomen als X-Webhook-Secret header in elke levering.
Terminal window
# Webhook zonder geheim
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 met vooraf gedeeld geheim
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"
}'

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/false wordt weergegeven.
GET /webhooks

Retourneert alle webhooks voor uw organisatie met statusinformatie (lastTriggeredAt, failureCount, isActive). Geheimen worden nooit weergegeven.

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

Retourneert 204 No Content. Verwijderde webhooks stoppen onmiddellijk met het ontvangen van leveringen.

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 bij task.created en task.running)

Roep GET /tasks/:id aan voor volledige taakdetails inclusief promptgeschiedenis.

Leveringsheaders:

HeaderAltijd aanwezigBeschrijving
Content-TypeJaapplication/json
X-Webhook-SignatureJaBase64-gecodeerde RSA-SHA256 handtekening
X-Webhook-TimestampJaUnix timestamp (seconden)
X-Webhook-SecretAlleen indien geheim geconfigureerdDe 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 failureCount terug op 0

Elke levering is ondertekend met het RSA-2048 sleutelpaar van uw organisatie, ongeacht of een vooraf gedeeld geheim is geconfigureerd.

Hoe het werkt:

  1. Rebyte concateneert {timestamp}.{body} (bijv. 1706443200.{"event":"task.completed",...})
  2. Ondertekent de string met RSA-SHA256 met behulp van de privésleutel van uw organisatie
  3. 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, 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 ondersteunen twee onafhankelijke verificatiemethoden die samen kunnen worden gebruikt:

MethodeHeaderHoe het werktGebruiksscenario
RSA signatureX-Webhook-SignatureCryptografisch bewijs dat de payload van Rebyte afkomstig isFraudebestendige verificatie
Pre-shared secretX-Webhook-SecretStatische string die u bij het aanmaken instelt, en die wordt teruggestuurd bij elke leveringEenvoudige 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.


Compleet voorbeeld: maak een taak aan, poll totdat deze is voltooid en verstuur vervolgens een vervolg.

Terminal window
# Taak aanmaken
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 totdat voltooid
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
# Vervolg versturen
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 fouten volgen deze structuur:

{
"error": {
"code": "validation_error",
"message": "Invalid request body"
}
}
CodeHTTP-statusBeschrijving
missing_api_key401API_KEY header niet opgegeven
invalid_api_key401Ongeldige of verlopen API-sleutel
validation_error400Aanvraagbody is mislukt bij validatie
not_found404Bron bestaat niet of is niet toegankelijk
limit_exceeded400Organisatielimiet bereikt (bijv. max. webhooks)
agent_disabled403De aangevraagde executor is uitgeschakeld voor deze organisatie
internal_error500Server-side fout

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.