API for Agent Computere
Prøv det i API Playground.
Base-URL
Section titled “Base-URL”https://api.rebyte.ai/v1Autentificering
Section titled “Autentificering”Hver anmodning kræver en API_KEY-header. Få din nøgle fra Indstillinger > API-nøgler.
curl https://api.rebyte.ai/v1/tasks \ -H "API_KEY: rbk_your_key_here"Headernavnet er ikke-case-sensitivt. API_KEY, api-key og x-api-key fungerer alle.
Endpoints
Section titled “Endpoints”| Metode | Sti | Beskrivelse |
|---|---|---|
| POST | /tasks | Opret en opgave |
| GET | /tasks | Vis opgaver |
| GET | /tasks/:id | Hent opgave med status og prompt-historik |
| POST | /tasks/:id/prompts | Send en opfølgende prompt |
| PATCH | /tasks/:id/visibility | Skift opgavens synlighed |
| DELETE | /tasks/:id | Soft-slet en opgave |
| GET | /tasks/:id/events | SSE-stream af eksekveringsbegivenheder |
| POST | /files | Hent en signeret filupload-URL |
| POST | /webhooks | Registrer en webhook |
| GET | /webhooks | Vis webhooks |
| GET | /webhooks/:id | Hent webhook-detaljer |
| DELETE | /webhooks/:id | Slet en webhook |
Alle stier er relative til base-URL’en (https://api.rebyte.ai/v1). |
Opgaver
Section titled “Opgaver”Opret opgave
Section titled “Opret opgave”POST /tasksOpretter en ny opgave. Som standard provisionerer den en ny VM (Agent Computer). Send workspaceId for i stedet at køre opgaven på et eksisterende workspace — dette springer provisionering over og er betydeligt hurtigere.
Kaldet blokerer, indtil VM’en er provisioneret, og den første prompt er sendt.
Anmodningskrop:
| Felt | Type | Påkrævet | Beskrivelse |
|---|---|---|---|
prompt | string | Yes | Opgavebeskrivelse (maks. 100.000 tegn) |
executor | string | No | claude (standard), gemini, codex, opencode |
model | string | No | Model-tier for eksekutoren. Se Modeller. |
workspaceId | string | No | UUID for et eksisterende workspace, der skal genbruges |
files | object[] | No | Filer fra POST /files. Hver: {"id": "...", "filename": "..."} |
skills | string[] | No | Skill slugs (f.eks. ["deep-research", "pdf"]) |
githubUrl | string | No | GitHub repo i owner/repo-format |
branchName | string | No | Branch-navn (standard: 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" }'Svar (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"}Gem workspaceId fra svaret for at oprette opfølgende opgaver på den samme Agent Computer:
# Første opgave -- provisionerer en ny VMRESP=$(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')
# Anden opgave -- genbruger den samme VM (meget hurtigere)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\"}"Modeller
Section titled “Modeller”Tilgængelige modeller afhænger af eksekutoren:
| Eksekutor | Tilgængelige modeller | Standard |
|---|---|---|
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 |
Med BYOK (bring your own API key) er kun eksekutorens native udbydermodeller tilgængelige (f.eks. får claude-eksekutoren med BYOK kun claude-sonnet-4.6 og claude-opus-4.6).
Vis opgaver
Section titled “Vis opgaver”GET /tasks?limit=50&offset=0Returnerer opgaver oprettet via API’en, sorteret efter oprettelsestidspunkt (nyeste først).
| Parameter | Type | Standard | Beskrivelse |
|---|---|---|---|
limit | number | 50 | Resultater pr. side (maks. 100) |
offset | number | 0 | Sideinddeling offset |
curl "https://api.rebyte.ai/v1/tasks?limit=10" \ -H "API_KEY: rbk_xxx"Svar:
{ "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}Hent opgave
Section titled “Hent opgave”GET /tasks/:idReturnerer fulde opgavedetaljer inklusive prompt-historik og afledt status.
curl https://api.rebyte.ai/v1/tasks/550e8400-... \ -H "API_KEY: rbk_xxx"Svar:
{ "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" } ]}Opgavestatus er afledt af prompt-tilstande:
| Status | Betingelse |
|---|---|
running | Enhver prompt er pending eller running |
completed | Alle prompts er terminale, den seneste er succeeded |
failed | Alle prompts er terminale, den seneste er failed |
canceled | Alle prompts er terminale, den seneste er canceled |
Send opfølgning
Section titled “Send opfølgning”POST /tasks/:id/promptsSend en opfølgende prompt til en kørende eller afsluttet opgave. Hvis VM’en er stoppet, genoptages den automatisk.
| Felt | Type | Påkrævet | Beskrivelse |
|---|---|---|---|
prompt | string | Yes | Opfølgende prompt (maks. 100.000 tegn) |
skills | string[] | No | Yderligere skill slugs for denne 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"}'Svar (201):
{ "promptId": "770f9500-..."}Stream begivenheder (SSE)
Section titled “Stream begivenheder (SSE)”GET /tasks/:id/eventsÅbner en Server-Sent Events-stream for opgavens seneste prompt. Begivenheder inkluderer agent-output (stdout, stderr), værktøjskald og færdiggørelsessignaler.
curl -N https://api.rebyte.ai/v1/tasks/550e8400-.../events \ -H "API_KEY: rbk_xxx"Streamen udsender to begivenhedstyper:
event— eksekveringsbegivenheder (agent-output, værktøjskald)done— sidste begivenhed med færdiggørelsesstatus, hvorefter streamen lukker
Skift synlighed
Section titled “Skift synlighed”PATCH /tasks/:id/visibility| Felt | Type | Påkrævet | Beskrivelse |
|---|---|---|---|
visibility | string | Yes | private, shared eller public |
| Niveau | Hvem kan se |
|---|---|
private | Kun API-nøgleejeren |
shared | Alle organisationsmedlemmer (standard) |
public | Alle med linket (skrivebeskyttet) |
curl -X PATCH https://api.rebyte.ai/v1/tasks/550e8400-.../visibility \ -H "API_KEY: rbk_xxx" \ -H "Content-Type: application/json" \ -d '{"visibility": "public"}'Når indstillet til public, inkluderer svaret en shareUrl for uautentificeret adgang.
Slet opgave
Section titled “Slet opgave”DELETE /tasks/:idSoft-sletter opgaven. Returnerer 204 No Content.
curl -X DELETE https://api.rebyte.ai/v1/tasks/550e8400-... \ -H "API_KEY: rbk_xxx"Upload filer for at vedhæfte dem til opgaver. Bruger en to-trins signeret-URL-flow.
Trin 1: Hent upload-URL
Section titled “Trin 1: Hent upload-URL”POST /files| Felt | Type | Påkrævet | Beskrivelse |
|---|---|---|---|
filename | string | Yes | Filnavn (maks. 255 tegn) |
contentType | string | No | MIME-type (standard: application/octet-stream) |
Svar (201):
{ "id": "550e8400-...", "filename": "data.csv", "uploadUrl": "https://storage.googleapis.com/...", "maxFileSize": 52428800}Upload-URL’en udløber om 1 time.
Trin 2: Upload filen
Section titled “Trin 2: Upload filen”curl -X PUT "UPLOAD_URL_FROM_STEP_1" \ -H "Content-Type: application/octet-stream" \ --data-binary @data.csvTrin 3: Vedhæft til opgave
Section titled “Trin 3: Vedhæft til opgave”Send id og filename fra Trin 1, når du opretter en opgave:
{ "prompt": "Analyze the uploaded data", "files": [ {"id": "550e8400-...", "filename": "data.csv"} ]}Filer kopieres automatisk ind i opgavens VM, når eksekveringen begynder.
Webhooks
Section titled “Webhooks”Modtag HTTP POST-meddelelser, når opgavebegivenheder opstår. Webhooks er universelle — de udløses for alle opgaver i din organisation, uanset om de er oprettet via API, UI eller enhver anden kanal.
Begivenheder
Section titled “Begivenheder”| Begivenhed | Udløses når |
|---|---|
task.created | En ny opgave oprettes |
task.running | Agenten begynder at eksekvere |
task.completed | Opgaven afsluttes succesfuldt |
task.failed | Opgaven mislykkes |
task.canceled | Opgaven annulleres af brugeren |
Opret Webhook
Section titled “Opret Webhook”POST /webhooks| Felt | Type | Påkrævet | Beskrivelse |
|---|---|---|---|
url | string | Yes | HTTPS endpoint-URL |
events | string[] | Yes | Begivenheder at abonnere på |
description | string | No | Menneskelæselig etiket (maks. 500 tegn) |
secret | string | No | Foruddelt hemmelighed (maks. 500 tegn). Når indstillet, inkluderet som X-Webhook-Secret-header i hver levering. |
# Webhook uden hemmelighedcurl -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 med foruddelt hemmelighedcurl -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" }'Svar (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}Bemærkninger om adfærd:
- Duplikerede URL’er: registrering af den samme URL to gange returnerer den eksisterende webhook (idempotent)
- Grænse: maksimalt 3 webhooks pr. organisation. Den 4. returnerer
limit_exceeded. - Hemmelig opbevaring: den hemmelige værdi returneres aldrig i noget svar. Kun
hasSecret: true/falseeksponeres.
Vis Webhooks
Section titled “Vis Webhooks”GET /webhooksReturnerer alle webhooks for din organisation med statusinformation (lastTriggeredAt, failureCount, isActive). Hemmeligheder eksponeres aldrig.
Hent Webhook
Section titled “Hent Webhook”GET /webhooks/:idSlet Webhook
Section titled “Slet Webhook”DELETE /webhooks/:idReturnerer 204 No Content. Slettede webhooks stopper øjeblikkeligt med at modtage leverancer.
Levering
Section titled “Levering”Når en opgavebegivenhed matcher en webhooks abonnerede begivenheder, sender Rebyte en HTTP POST til webhook-URL’en.
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— direkte link til opgaven i Rebyte UI (altid til stede)result— endelig AI-outputtekst (til stede ved terminale begivenheder:task.completed,task.failed,task.canceled; fraværende vedtask.createdogtask.running)
Kald GET /tasks/:id for fulde opgavedetaljer inklusive prompt-historik.
Leveringsheaders:
| Header | Altid til stede | Beskrivelse |
|---|---|---|
Content-Type | Yes | application/json |
X-Webhook-Signature | Yes | Base64-kodet RSA-SHA256 signatur |
X-Webhook-Timestamp | Yes | Unix tidsstempel (sekunder) |
X-Webhook-Secret | Only if secret configured | Den foruddelte hemmelige værdi, du indstillede ved oprettelsen |
Timeout: leverancer timer ud efter 10 sekunder.
Fejlhåndtering:
- Levering er fire-and-forget — ingen automatiske genforsøg ved fejl
- Ikke-2xx svar øger
failureCount - Efter 10 på hinanden følgende fejl deaktiveres webhook’en automatisk (
isActive: false) - Succesfulde leverancer nulstiller
failureCounttil 0
Signaturverifikation
Section titled “Signaturverifikation”Hver levering er signeret med din organisations RSA-2048 nøglepar, uanset om en foruddelt hemmelighed er konfigureret.
Sådan fungerer det:
- Rebyte sammenkæder
{timestamp}.{body}(f.eks.1706443200.{"event":"task.completed",...}) - Signerer strengen med RSA-SHA256 ved hjælp af din organisations private nøgle
- Sender den base64-kodede signatur i
X-Webhook-Signature
Hent din offentlige nøgle: kontakt support eller hent den fra Rebyte-dashboardet. RSA-2048 nøgleparret genereres automatisk ved første webhook-oprettelse og bevares for organisationen.
Verifikations eksempel (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');}
// I din 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');});Verifikations eksempel (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 FalseTo-lags sikkerhed
Section titled “To-lags sikkerhed”Webhooks understøtter to uafhængige verifikationsmetoder, der kan bruges sammen:
| Metode | Header | Sådan fungerer det | Anvendelsestilfælde |
|---|---|---|---|
| RSA-signatur | X-Webhook-Signature | Kryptografisk bevis for, at payload’en kom fra Rebyte | Manipulationssikker verifikation |
| Foruddelt hemmelighed | X-Webhook-Secret | Statisk streng, du indstiller ved oprettelsen, gentages i hver levering | Simpel delt-hemmeligheds-kontrol |
RSA-signaturer er altid til stede. Den foruddelte hemmelighed er valgfri — indstil den, når du opretter webhook’en, hvis du ønsker en enklere verifikationssti.
Polling-eksempel
Section titled “Polling-eksempel”Komplet eksempel: opret en opgave, poll indtil færdiggørelse, send derefter en opfølgning.
# Opret opgaveTASK_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 indtil færdigwhile 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
# Send en opfølgningcurl -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"}'Fejlformat
Section titled “Fejlformat”Alle fejl følger denne struktur:
{ "error": { "code": "validation_error", "message": "Invalid request body" }}| Kode | HTTP Status | Beskrivelse |
|---|---|---|
missing_api_key | 401 | API_KEY-header ikke angivet |
invalid_api_key | 401 | Ugyldig eller udløbet API-nøgle |
validation_error | 400 | Anmodningskrop mislykkedes validering |
not_found | 404 | Ressourcen eksisterer ikke eller er ikke tilgængelig |
limit_exceeded | 400 | Organisationsgrænse nået (f.eks. maks. webhooks) |
agent_disabled | 403 | Den anmodede eksekutor er deaktiveret for denne organisation |
internal_error | 500 | Server-side fejl |
Rate-begrænsning
Section titled “Rate-begrænsning”API’en håndhæver i øjeblikket ikke rate-begrænsninger pr. nøgle. Hver POST /tasks provisionerer en rigtig VM, så omkostningerne skalerer med brugen. Brug webhooks i stedet for aggressiv polling for at reducere unødvendige anmodninger.