Gå til indhold

API for Agent Computere

Prøv det i API Playground.

https://api.rebyte.ai/v1

Hver anmodning kræver en API_KEY-header. Få din nøgle fra Indstillinger > API-nøgler.

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


MetodeStiBeskrivelse
POST/tasksOpret en opgave
GET/tasksVis opgaver
GET/tasks/:idHent opgave med status og prompt-historik
POST/tasks/:id/promptsSend en opfølgende prompt
PATCH/tasks/:id/visibilitySkift opgavens synlighed
DELETE/tasks/:idSoft-slet en opgave
GET/tasks/:id/eventsSSE-stream af eksekveringsbegivenheder
POST/filesHent en signeret filupload-URL
POST/webhooksRegistrer en webhook
GET/webhooksVis webhooks
GET/webhooks/:idHent webhook-detaljer
DELETE/webhooks/:idSlet en webhook
Alle stier er relative til base-URL’en (https://api.rebyte.ai/v1).

POST /tasks

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

FeltTypePåkrævetBeskrivelse
promptstringYesOpgavebeskrivelse (maks. 100.000 tegn)
executorstringNoclaude (standard), gemini, codex, opencode
modelstringNoModel-tier for eksekutoren. Se Modeller.
workspaceIdstringNoUUID for et eksisterende workspace, der skal genbruges
filesobject[]NoFiler fra POST /files. Hver: {"id": "...", "filename": "..."}
skillsstring[]NoSkill slugs (f.eks. ["deep-research", "pdf"])
githubUrlstringNoGitHub repo i owner/repo-format
branchNamestringNoBranch-navn (standard: 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"
}'

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:

Terminal window
# Første opgave -- provisionerer en ny 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')
# 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\"}"

Tilgængelige modeller afhænger af eksekutoren:

EksekutorTilgængelige modellerStandard
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

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

GET /tasks?limit=50&offset=0

Returnerer opgaver oprettet via API’en, sorteret efter oprettelsestidspunkt (nyeste først).

ParameterTypeStandardBeskrivelse
limitnumber50Resultater pr. side (maks. 100)
offsetnumber0Sideinddeling offset
Terminal window
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
}
GET /tasks/:id

Returnerer fulde opgavedetaljer inklusive prompt-historik og afledt status.

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

StatusBetingelse
runningEnhver prompt er pending eller running
completedAlle prompts er terminale, den seneste er succeeded
failedAlle prompts er terminale, den seneste er failed
canceledAlle prompts er terminale, den seneste er canceled
POST /tasks/:id/prompts

Send en opfølgende prompt til en kørende eller afsluttet opgave. Hvis VM’en er stoppet, genoptages den automatisk.

FeltTypePåkrævetBeskrivelse
promptstringYesOpfølgende prompt (maks. 100.000 tegn)
skillsstring[]NoYderligere skill slugs for denne 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"}'

Svar (201):

{
"promptId": "770f9500-..."
}
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.

Terminal window
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
PATCH /tasks/:id/visibility
FeltTypePåkrævetBeskrivelse
visibilitystringYesprivate, shared eller public
NiveauHvem kan se
privateKun API-nøgleejeren
sharedAlle organisationsmedlemmer (standard)
publicAlle med linket (skrivebeskyttet)
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"}'

Når indstillet til public, inkluderer svaret en shareUrl for uautentificeret adgang.

DELETE /tasks/:id

Soft-sletter opgaven. Returnerer 204 No Content.

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

POST /files
FeltTypePåkrævetBeskrivelse
filenamestringYesFilnavn (maks. 255 tegn)
contentTypestringNoMIME-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.

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

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.


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.

BegivenhedUdløses når
task.createdEn ny opgave oprettes
task.runningAgenten begynder at eksekvere
task.completedOpgaven afsluttes succesfuldt
task.failedOpgaven mislykkes
task.canceledOpgaven annulleres af brugeren
POST /webhooks
FeltTypePåkrævetBeskrivelse
urlstringYesHTTPS endpoint-URL
eventsstring[]YesBegivenheder at abonnere på
descriptionstringNoMenneskelæselig etiket (maks. 500 tegn)
secretstringNoForuddelt hemmelighed (maks. 500 tegn). Når indstillet, inkluderet som X-Webhook-Secret-header i hver levering.
Terminal window
# Webhook uden hemmelighed
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 med foruddelt hemmelighed
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"
}'

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

Returnerer alle webhooks for din organisation med statusinformation (lastTriggeredAt, failureCount, isActive). Hemmeligheder eksponeres aldrig.

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

Returnerer 204 No Content. Slettede webhooks stopper øjeblikkeligt med at modtage leverancer.

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 ved task.created og task.running)

Kald GET /tasks/:id for fulde opgavedetaljer inklusive prompt-historik.

Leveringsheaders:

HeaderAltid til stedeBeskrivelse
Content-TypeYesapplication/json
X-Webhook-SignatureYesBase64-kodet RSA-SHA256 signatur
X-Webhook-TimestampYesUnix tidsstempel (sekunder)
X-Webhook-SecretOnly if secret configuredDen 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 failureCount til 0

Hver levering er signeret med din organisations RSA-2048 nøglepar, uanset om en foruddelt hemmelighed er konfigureret.

Sådan fungerer det:

  1. Rebyte sammenkæder {timestamp}.{body} (f.eks. 1706443200.{"event":"task.completed",...})
  2. Signerer strengen med RSA-SHA256 ved hjælp af din organisations private nøgle
  3. 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, 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 understøtter to uafhængige verifikationsmetoder, der kan bruges sammen:

MetodeHeaderSådan fungerer detAnvendelsestilfælde
RSA-signaturX-Webhook-SignatureKryptografisk bevis for, at payload’en kom fra RebyteManipulationssikker verifikation
Foruddelt hemmelighedX-Webhook-SecretStatisk streng, du indstiller ved oprettelsen, gentages i hver leveringSimpel 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.


Komplet eksempel: opret en opgave, poll indtil færdiggørelse, send derefter en opfølgning.

Terminal window
# Opret opgave
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 indtil færdig
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 en opfølgning
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 fejl følger denne struktur:

{
"error": {
"code": "validation_error",
"message": "Invalid request body"
}
}
KodeHTTP StatusBeskrivelse
missing_api_key401API_KEY-header ikke angivet
invalid_api_key401Ugyldig eller udløbet API-nøgle
validation_error400Anmodningskrop mislykkedes validering
not_found404Ressourcen eksisterer ikke eller er ikke tilgængelig
limit_exceeded400Organisationsgrænse nået (f.eks. maks. webhooks)
agent_disabled403Den anmodede eksekutor er deaktiveret for denne organisation
internal_error500Server-side fejl

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.