Skip to main content

API Reference

DaoFlow's API is built with tRPC and organized into three lanes for safety.

Generated Contract Artifacts

The published API contract is generated from the live router and committed as static artifacts:

  • api-contract.json — full procedure inventory, HTTP method, auth requirements, role and scope requirements, and input JSON Schema for every exported procedure

The artifact is regenerated with bun run contracts:generate and validated with bun run contracts:check. CI also runs the check so docs cannot drift silently.

Three-Lane Model

LanePurposeSide EffectsExamples
ReadQuery current stateNonehealth, viewer, recentDeployments, infrastructureInventory
PlanningPreview changesNonedeploymentPlan, composeDeploymentPlan, rollbackPlan, backupRestorePlan, configDiff
CommandExecute mutationsYestriggerDeploy, registerServer, requestApproval

Base URL

http://localhost:3000/trpc

Authentication

All API requests (except health) require authentication via:

  • Session cookie — for browser-based access
  • Bearer token — for CLI and agent access
curl -H "Authorization: Bearer dfl_your_token" \
http://localhost:3000/trpc/health

See Authentication for details.

Request Format

tRPC uses JSON-encoded query parameters for queries and JSON body for mutations:

# Query
GET /trpc/recentDeployments?input={"json":{"limit":10}}

# Mutation
POST /trpc/triggerDeploy
Content-Type: application/json
{"json":{"serviceId":"svc_my_api","imageTag":"ghcr.io/acme/api:1.4.2"}}

Error Responses

All errors follow a consistent shape:

{
"error": {
"message": "Permission denied",
"code": "FORBIDDEN",
"data": {
"requiredScopes": ["deploy:start"],
"grantedScopes": ["deploy:read", "server:read"]
}
}
}

See Error Handling for the full error catalog and api-contract.json for the exact exported procedure list.