Skip to main content
All paths are under the base URL (/api/v1) and require authentication (an API key or a dashboard session). Reads are workspace-member; writes require the work:write scope over OAuth. See Projects for the model.

Projects

MethodPathPermPurpose
POST/workspaces/:slug/projectsmember (work:write)Create a project
GET/workspaces/:slug/projectsmemberList projects (?status)
GET/workspaces/:slug/projects/:idmemberProject detail (?view, card_limit, card_offset, card_status)
PATCH/workspaces/:slug/projects/:idmember (work:write)Update a project
Create body (CreateProjectDto): title (required), goal, playbook_slug, owner_clerk_id, context[]. Update accepts title, status, goal, playbook_slug, owner_clerk_id, add_context.

Cards

Base path /workspaces/:slug/projects/:projectId/cards.
MethodPathPermPurpose
POST.../cardsmember (work:write)Create a card
GET.../cardsmemberList cards (?status, limit, offset, owner)
GET.../cards/nextmemberThe loop tick (?context=refs|summaries|full)
GET.../cards/:cardIdmemberCard detail
PATCH.../cards/:cardIdmember (work:write)Update a card
DELETE.../cards/:cardIdmember (work:write)Delete a card
Create body (CreateCardDto): title (required), description, status, owner_clerk_id, acceptance, validate, depends_on (uuid array), context, allow_secrets. Update also accepts to_project_id, validate_result, validate_passed, and add_context.
curl -X POST https://api.driftless.icu/api/v1/workspaces/acme/projects \
  -H "x-api-key: drift_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{"title":"Refunds revamp","goal":"Refund path is idempotent","playbook_slug":"refund-flow"}'

Bodies, pagination, and errors

Cards paginate with limit (1 to 100) and offset; next returns a card plus its context bundle, or a terminal signal when nothing is actionable. Status values are validated against the card enum (todo, in_progress, blocked, review, done) and the project enum (active, done, archived); an invalid value returns 400 VALIDATION_FAILED. Unknown body fields are rejected. See errors for the envelope.