Skip to content
Talk to our solutions team

HTTP API

Tenant-scoped routes require the four CPET headers (X-Customer, X-Product, X-Env, X-Tenant). The management routes require a Bearer token; the dynamic trigger paths are gated by the job’s own access rule (and, for Teams, an HMAC signature) instead.

Registered dynamically from each job’s webhook / teams triggers.

MethodPathAuthBehavior
POST(job-defined)job access ruleWebhook trigger. Body → payload. 200 {"runid":"01K…","message":"job execution started successfully"}
POST(job-defined)HMACTeams trigger. Authorization: HMAC <sig>. 200 with a Teams message body; 401 on signature mismatch

Scheduled, git-poll, and database triggers fire internally — there is no “run now” endpoint for them.

MethodPathPurpose
GET/jobsThe loaded, active job definitions for the tenant → {"jobs": {<name>: <definition>}}
GET/runs?id=<ulid>One run by id
GET/runs?filter=<expr>&page=&pagesize=Query runs (default page 1, pagesize 10, ordered newest-first)
GET/jobdefinitionsList stored definitions (v2 query options)
POST/jobdefinitionsCreate — body {"definition": "<job YAML text>"}
POST/jobdefinitions/searchStructured search
GET/jobdefinitions/:idRead one
PATCH / PUT/jobdefinitions/:idUpdate
DELETE/jobdefinitions/:idDelete

A run record carries status (createdcompleted / failed), the trigger name, triggertype, the context payload, and logs. Logs include the script’s captured output and, under result, its return value. Output over ~16 KB is offloaded to object storage and surfaced as a link.

MethodPathPurpose
GET/agentsAgents serving this tenant — id, version, status, type, health, tags, capabilities
GET/workflow/queuePending/dispatched work items for this tenant
DELETE/workflow/queue/:idCancel one queued item (403 cross-tenant, 404 unknown)

GET /health and GET /ready — unauthenticated, no CPET headers.

CodeMeaning
jobs-json-request-parse-failedRequest body was not valid JSON
jobs-request-required-field-not-foundA required field was missing
jobs-query-parsing-failedThe /runs filter could not be parsed
jobs-ctx-tenant-not-foundCPET headers didn’t resolve to a tenant
jobs-global-config-is-nilThe service booted without required global config