REST API
Preview. This is the planned
v1surface — not yet live. Shapes may change before launch.
Base URL https://api.delicious.works/v1. All requests carry Authorization: Bearer dk_live_… (or dk_test_… for the sandbox).
Conventions
- Versioned under
/v1; additive changes only within a version. - Idempotency: send an
Idempotency-Keyheader onPOST /v1/runsso a retried request never starts two runs. - Pagination: opaque
cursor+limit. - Errors:
{ error: { type, code, message, field? } }with a conventional HTTP status. - Rate limits:
X-RateLimit-*headers;429withRetry-After.
Runs
POST /v1/runs— create a run.GET /v1/runs/{id}— fetch status.GET /v1/runs— list (filter bystatus, cursor-paginated).POST /v1/runs/{id}/cancel— cancel.
Create an idea-mode run:
POST /v1/runs
Authorization: Bearer dk_live_…
Idempotency-Key: 8f3c…
{
"mode": "idea",
"idea": {
"pitch": "A calm habit tracker for parents",
"audience": "busy parents of young kids",
"monetization": "freemium"
}
}
Returns a run:
{
"id": "run_3kZ9…",
"mode": "idea",
"status": "running",
"stage": "02_spec",
"gate_pending": null,
"app_id": null,
"created_at": "2026-06-30T12:00:00Z"
}
For ship mode, send "mode": "ship" with a source (a repo URL or an App Spec) instead of idea.
Spec
GET /v1/runs/{id}/spec— the App Spec (see the schema).PATCH /v1/runs/{id}/spec— edit before or at a gate (idempotent merge).
Gates
GET /v1/runs/{id}/gates— list the three gates and their state.POST /v1/runs/{id}/gates/{gate}:approve— approve.gateisidea,brand, orfinal.POST /v1/runs/{id}/gates/{gate}:reject— reject with{ "notes": "…" }; sends the run back to the relevant stage.
Artifacts
GET /v1/runs/{id}/artifacts— the manifest.GET /v1/runs/{id}/artifacts/{kind}—kindisscreenshots,ipa,metadata,scorecard,preflight, orspec. Binaries return short-lived signed URLs.GET /v1/runs/{id}/scorecard— the Deliciousness scores + the pre-flight result.
Live
GET /v1/runs/{id}/events— a Server-Sent Events stream of stage transitions and build/QA logs.
For push instead of poll, register a webhook.