MCP read first
Codex, Claude Code, Cursor, and Cowork should call search_tasks and read taskHealth before writes.
Open MCP quickstartAPI documentation
Build integrations against buildr-plannr workspaces, projects, tasks, feature groupings, agents, imports, exports, and audit diagnostics with scoped auth, copyable examples, version notes, rate limits, pagination rules, idempotency guidance, customer-safe error handling, and legacy /api/issues compatibility notes.
API and MCP first decision
Coding tools should start with read-only MCP calls, then move to scoped task writes after owners approve permissions and evidence requirements.
Codex, Claude Code, Cursor, and Cowork should call search_tasks and read taskHealth before writes.
Open MCP quickstartUse scoped tokens for tasks, agents, imports, exports, audit, and billing-safe reads.
Review limitsCreate or move tasks only after scope, files, approvals, quota, and proof are clear.
Open agents APIUse support for token setup, MCP client configuration, or blocked API access.
API supportSections
9
Endpoints
21
Versions
2
Error codes
7
Endpoint groups
Human users authenticate with the custom Cognito-backed auth flow. Agents use scoped Bearer tokens or x-api-key headers that are tied to plans, workspaces, agents, scopes, and rate limits.
/api/auth/loginStarts a custom login flow and returns the user to the requested protected path when authentication succeeds.
curl -X POST https://app.buildr.example.com/api/auth/login \
-H "content-type: application/json" \
-d '{"email":"owner@example.com","password":"not-logged"}'{
"data": {
"redirectTo": "/app",
"mode": "cognito"
}
}Errors
400 invalid-input, 401 unauthorized
Pagination
Not paginated.
Idempotency
Login attempts are not idempotent. Clients should retry only after user action.
/api/api-keysCreates a scoped API token for an agent, automation, or user integration when the workspace plan allows API access.
curl -X POST https://app.buildr.example.com/api/api-keys \
-H "content-type: application/json" \
-b "buildr_plannr_session=..." \
-d '{"label":"QA agent","workspaceId":"workspace-buildr","agentId":"agent-qa","planId":"pro","scopes":["issues:read","agents:execute"]}'{
"data": {
"apiKey": {
"id": "api-key-qa-agent",
"workspaceId": "workspace-buildr",
"agentId": "agent-qa",
"scopes": ["issues:read", "agents:execute"],
"rateLimit": { "requestsPerMinute": 600, "burst": 1200 }
},
"token": "buildr_live_..."
}
}Errors
400 invalid-input, 403 forbidden
Pagination
Not paginated.
Idempotency
Key creation is not idempotent. Store the returned token immediately because it is shown once.
Workspace endpoints list, create, and update secured planning environments for teams and their agents.
/api/workspaces?q=buildrLists workspaces visible to the authenticated session.
curl https://app.buildr.example.com/api/workspaces?q=buildr \
-b "buildr_plannr_session=..."{
"data": [
{
"id": "workspace-buildr",
"name": "Buildr Plannr",
"status": "active",
"ownerId": "user-damien",
"defaultSandbox": "workspace-write"
}
]
}Errors
401 unauthorized
Pagination
Workspace list responses are currently small and unpaginated. Future versions will add cursor and limit.
Idempotency
No idempotency key required.
/api/workspacesCreates a workspace shell before projects and agent policies are attached.
curl -X POST https://app.buildr.example.com/api/workspaces \
-H "content-type: application/json" \
-b "buildr_plannr_session=..." \
-d '{"name":"Design partner workspace","ownerId":"user-owner"}'{
"data": {
"id": "workspace-design-partner",
"name": "Design partner workspace",
"status": "active",
"ownerId": "user-owner",
"defaultSandbox": "workspace-write"
}
}Errors
400 invalid-input, 401 unauthorized
Pagination
Not paginated.
Idempotency
Workspace create is not idempotent. Use a client-side request key in your own workflow until server idempotency is added.
Project endpoints group issues, milestones, and agent readiness around a product goal inside one workspace.
/api/projects?workspaceId=workspace-buildr&q=agentLists projects for a workspace and optional search query.
curl "https://app.buildr.example.com/api/projects?workspaceId=workspace-buildr&q=agent" \
-b "buildr_plannr_session=..."{
"data": [
{
"id": "project-agent-foundation",
"workspaceId": "workspace-buildr",
"name": "Agent-first planning foundation",
"status": "active",
"goal": "Define the planning model for work agents can safely execute."
}
]
}Errors
401 unauthorized
Pagination
Use workspaceId and q to narrow results. Cursor pagination is reserved for larger remote datasets.
Idempotency
No idempotency key required.
/api/projectsUpdates project status or goal metadata.
curl -X PATCH https://app.buildr.example.com/api/projects \
-H "content-type: application/json" \
-b "buildr_plannr_session=..." \
-d '{"projectId":"project-agent-foundation","status":"active"}'{
"data": {
"id": "project-agent-foundation",
"status": "active",
"updatedAt": "2026-05-22T13:00:00.000Z"
}
}Errors
400 invalid-input, 401 unauthorized, 404 not-found
Pagination
Not paginated.
Idempotency
PATCH is safe to retry with the same payload; unchanged fields are returned as-is.
Task endpoints are the primary integration surface for human work, clear task briefs for agents, comments, proof, approvals, dependencies, and status changes. REST paths and scope names still use /api/issues and issues:* for API compatibility.
/api/issues?projectId=project-agent-foundation&status=ready&includeDependencyGraph=trueSearches tasks by workspace, project, milestone, status, priority, label, dependency state, assigned agent, and text query. The legacy REST path remains /api/issues.
curl "https://app.buildr.example.com/api/issues?projectId=project-agent-foundation&status=ready&includeDependencyGraph=true" \
-b "buildr_plannr_session=..."{
"data": {
"issues": [
{
"id": "item-models",
"title": "Define agent-first work item models",
"status": "ready",
"priority": "high",
"agent": { "assignedAgentId": "agent-planner", "readiness": "ready" }
}
],
"dependencyGraph": {
"edges": [{ "sourceIssueId": "item-imports", "targetIssueId": "item-models" }]
}
}
}Errors
401 unauthorized
Pagination
Use status, priority, label, milestoneId, assignedAgentId, sort, and direction to keep responses bounded. Cursor pagination is planned for remote persistence.
Idempotency
No idempotency key required.
/api/issues/bulk-updatePreviews or applies the same status, priority, labels, milestone, due date, estimate, or agent patch across a bounded task set.
curl -X POST https://app.buildr.example.com/api/issues/bulk-update \
-b "buildr_plannr_session=..." \
-H "content-type: application/json" \
-d '{"issueIds":["item-models","item-verify"],"mode":"preview","patch":{"status":"in-review","priority":"urgent"}}'{
"data": {
"plan": {
"requestedCount": 2,
"targetCount": 2,
"skippedCount": 0,
"changedFieldLabels": ["Status", "Priority"]
},
"updatedIssues": [],
"activity": []
}
}Errors
400 invalid-input, 401 unauthorized, 404 not-found
Pagination
Not paginated.
Idempotency
Preview mode never mutates data. Apply mode preflights all target updates before changing any task.
/api/issues/{issueId}/task-contractUpdates the clear task brief that agents use for goals, constraints, expected output, verification, permissions, and escalation. The path remains task-contract for API compatibility.
curl -X PATCH https://app.buildr.example.com/api/issues/item-models/task-contract \
-H "authorization: Bearer buildr_live_..." \
-H "content-type: application/json" \
-d '{"agent":{"instructions":{"objective":"Run the regression flow and attach proof."}}}'{
"data": {
"issue": { "id": "item-models", "status": "ready" },
"taskContract": {
"issueId": "item-models",
"goal": "Run the regression flow and attach proof.",
"completeness": { "ready": true, "score": 100 }
}
}
}Errors
400 invalid-input, 401 unauthorized, 403 forbidden, 404 not-found
Pagination
Not paginated.
Idempotency
PATCH can be retried with the same clear task brief fields. Activity proof records the resulting issue change.
Feature planning is represented through program-level initiatives, projects, milestones, labels, parent issues, and filtered issue queries.
/api/programs?workspaceId=workspace-buildrLists workspace programs that group strategic initiatives for agent-readable planning rollups.
curl "https://app.buildr.example.com/api/programs?workspaceId=workspace-buildr" \
-b "buildr_plannr_session=..."{
"data": [
{
"id": "program-buildr-plannr-launch",
"workspaceId": "workspace-buildr",
"name": "Buildr Plannr launch program",
"status": "active",
"ownerId": "user-damien"
}
]
}Errors
401 unauthorized
Pagination
Programs are workspace-scoped and can be filtered by workspaceId, status, and q.
Idempotency
No idempotency key required.
/api/initiatives?programId=program-buildr-plannr-launchLists initiatives inside a program so integrations can group related projects under a strategic objective.
curl "https://app.buildr.example.com/api/initiatives?programId=program-buildr-plannr-launch" \
-b "buildr_plannr_session=..."{
"data": [
{
"id": "initiative-agent-foundation",
"workspaceId": "workspace-buildr",
"programId": "program-buildr-plannr-launch",
"name": "Agent planning foundation",
"status": "active"
}
]
}Errors
401 unauthorized, 404 not-found
Pagination
Initiatives are bounded by workspaceId, programId, status, and q filters.
Idempotency
No idempotency key required.
/api/issues?label=feature&includeDependencyGraph=trueLists feature-labeled issues and their dependencies so integrations can synchronize feature groupings.
curl "https://app.buildr.example.com/api/issues?label=feature&includeDependencyGraph=true" \
-b "buildr_plannr_session=..."{
"data": {
"issues": [
{
"id": "item-feature-imports",
"title": "Bulk import/export feature",
"labels": ["feature", "import-export"],
"milestoneId": "milestone-data-portability"
}
],
"dependencyGraph": { "edges": [] }
}
}Errors
401 unauthorized
Pagination
Filter by projectId, milestoneId, label, status, and q to sync one feature area at a time.
Idempotency
No idempotency key required.
/api/milestones?projectId=project-agent-foundationLists milestones that integrations can treat as release slices or feature group containers.
curl "https://app.buildr.example.com/api/milestones?projectId=project-agent-foundation" \
-b "buildr_plannr_session=..."{
"data": [
{
"id": "milestone-domain",
"projectId": "project-agent-foundation",
"name": "Domain model",
"status": "active",
"targetDate": "2026-07-01"
}
]
}Errors
401 unauthorized, 404 not-found
Pagination
Milestones are scoped by projectId and currently returned as one bounded list per project.
Idempotency
No idempotency key required.
Agent endpoints let scoped agents discover ready work, claim exactly one task, retrieve files and docs, post status, attach proof, request approvals, and check run quota.
/api/mcpServes the remote MCP JSON-RPC endpoint for tool discovery, client bootstrap packets, agent preflight, handoff readiness, source-backed market standards, launch-readiness proof blockers, buyer-friction blockers, static knowledgebase search, task reminders, workspace customization, ready work, task search, scoped task creation, clear task brief reads and updates, files and docs, claim leases, agent status posts, cancellation/release, comments, time logging, proof, and approval requests.
curl -X POST https://app.buildr.example.com/api/mcp \
-H "authorization: Bearer buildr_live_..." \
-H "content-type: application/json" \
-d '{"jsonrpc":"2.0","id":"tools","method":"tools/list"}'{
"jsonrpc": "2.0",
"id": "tools",
"result": {
"tools": [
{ "name": "buildr_plannr.get_client_bootstrap" },
{ "name": "buildr_plannr.get_workspace_customization" },
{ "name": "buildr_plannr.get_agent_preflight" },
{ "name": "buildr_plannr.get_market_standards" },
{ "name": "buildr_plannr.get_launch_readiness" },
{ "name": "buildr_plannr.search_knowledgebase" },
{ "name": "buildr_plannr.list_task_reminders" },
{ "name": "buildr_plannr.list_ready_work" },
{ "name": "buildr_plannr.search_tasks" },
{ "name": "buildr_plannr.create_task" },
{ "name": "buildr_plannr.get_task_contract" },
{ "name": "buildr_plannr.update_task_contract" },
{ "name": "buildr_plannr.get_context_pack" },
{ "name": "buildr_plannr.claim_work" },
{ "name": "buildr_plannr.post_status" },
{ "name": "buildr_plannr.cancel_work" },
{ "name": "buildr_plannr.update_task_status" },
{ "name": "buildr_plannr.add_comment" },
{ "name": "buildr_plannr.log_time" },
{ "name": "buildr_plannr.add_evidence" },
{ "name": "buildr_plannr.request_approval" },
{ "name": "buildr_plannr.list_issue_reminders" },
{ "name": "buildr_plannr.search_issues" },
{ "name": "buildr_plannr.create_issue" },
{ "name": "buildr_plannr.update_issue_status" }
]
}
}Errors
400 invalid-input, 401 unauthorized, 403 forbidden
Pagination
Not paginated.
Idempotency
Read-only MCP calls are safe to retry. Call get_agent_preflight first and read firstSessionDecision before any write-capable flow. Then call get_workspace_customization and cache the Cards/List/Tags/Swimlanes viewModes, viewPresets, adminSetupPath, rulesCenter, evidencePolicy, and handoffPacket for the current task run. Call search_tasks and inspect taskHealth.blocksAgentClaim, firstReminder, and safeNextActions before claiming or mutating any task. Call list_task_reminders and use safeNextActions before claiming work with missing dates, stale updates, missing time, or overdue dates. Task-named write aliases use the same guarded mutation path as the legacy issue-named tools. Writes require the legacy issues:write scope plus agents:execute and should only be retried when the client can tolerate duplicate comments or time entries.
/api/agents/ready-workLists ready tasks the authenticated agent token can see.
curl https://app.buildr.example.com/api/agents/ready-work \
-H "authorization: Bearer buildr_live_..."{
"data": [
{
"id": "item-models",
"title": "Define agent-first work item models",
"status": "ready",
"agent": { "assignedAgentId": "agent-planner", "readiness": "ready" },
"agentClaimQueue": {
"state": "claimable",
"quotaState": "within-run-budget",
"nextAction": "Agent can claim this work now.",
"doneEvidence": { "completed": 2, "total": 6 }
}
}
]
}Errors
401 unauthorized, 403 forbidden
Pagination
Ready work is filtered by the token workspace and agent assignment. Use separate tokens per agent role.
Idempotency
No idempotency key required.
/api/agents/claimClaims one ready issue, meters an agent run, and moves ready work into progress.
curl -X POST https://app.buildr.example.com/api/agents/claim \
-H "authorization: Bearer buildr_live_..." \
-H "content-type: application/json" \
-H "idempotency-key: claim-item-models-2026-05-22" \
-d '{"issueId":"item-models"}'{
"data": {
"claim": {
"issueId": "item-models",
"agentId": "agent-planner",
"expiresAt": "2026-05-22T14:00:00.000Z"
},
"issue": { "id": "item-models", "status": "in-progress" },
"metering": { "allowed": true }
}
}Errors
400 invalid-input, 401 unauthorized, 403 forbidden, 409 work-already-claimed
Pagination
Not paginated.
Idempotency
Send an idempotency-key for client retry correlation. The server prevents duplicate active claims by issue ID.
Import endpoints preview, validate, redact, and commit JSON issue imports with plan-aware quota impact, progress, and recovery metadata.
/api/imports/previewBuilds a dry-run preview for JSON issue imports before any workspace data is mutated.
curl -X POST https://app.buildr.example.com/api/imports/preview \
-H "content-type: application/json" \
-H "idempotency-key: import-2026-05-22-a" \
-b "buildr_plannr_session=..." \
-d '{"plan":"pro","format":"json","payload":{"schemaId":"buildr-plannr.issue-import","schemaVersion":"2026-05-23.issue-import.v1","issues":[{"id":"item-imported","workspaceId":"workspace-buildr","projectId":"project-agent-foundation","title":"Imported issue"}]}}'{
"data": {
"id": "import-preview-123",
"idempotencyKey": "import-2026-05-22-a",
"status": "ready",
"source": { "schema": { "schemaVersion": "2026-05-23.issue-import.v1", "status": "current" } },
"summary": { "totalRows": 1, "creates": 1, "updates": 0, "conflicts": 0, "errors": 0, "quotaExceeded": false },
"progress": { "status": "ready", "activeStep": "commit-applied", "percentComplete": 100, "processedRows": 1, "blockedRows": 0 },
"recovery": { "recoverable": true, "idempotencyKey": "import-2026-05-22-a" }
}
}Errors
400 invalid-input, 401 unauthorized, 403 forbidden
Pagination
Not paginated.
Idempotency
Required for reliable retries. Reusing the same idempotency-key returns the existing preview metadata.
/api/imports/commitCommits an unexpired, unblocked import preview.
curl -X POST https://app.buildr.example.com/api/imports/commit \
-H "content-type: application/json" \
-H "idempotency-key: import-2026-05-22-a-commit" \
-b "buildr_plannr_session=..." \
-d '{"previewId":"import-preview-123"}'{
"data": {
"id": "import-commit-123",
"previewId": "import-preview-123",
"status": "committed",
"summary": { "created": 1, "updated": 0, "skipped": 0, "totalOperations": 1 },
"errors": []
}
}Errors
400 invalid-input, 401 unauthorized, 403 forbidden, 404 not-found
Pagination
Not paginated.
Idempotency
Required for commit retries. A preview can be committed once, and retries return the committed operation metadata.
Export endpoints produce plan-gated issue artifacts and redacted export history for backup, migration, and compliance workflows.
/api/issues/export?plan=hobbyist&format=json&workspaceSlug=buildr-plannrExports issue data for entitled plans in JSON, CSV, Markdown, or backup formats.
curl "https://app.buildr.example.com/api/issues/export?plan=hobbyist&format=json&workspaceSlug=buildr-plannr" \
-b "buildr_plannr_session=..."{
"exportedAt": "2026-05-22T13:00:00.000Z",
"issues": [
{
"id": "item-models",
"title": "Define agent-first work item models",
"status": "ready"
}
]
}Errors
401 unauthorized, 403 not-entitled
Pagination
Use workspaceSlug and filters to keep exported artifacts small. Large backup exports should run asynchronously in a future version.
Idempotency
No idempotency key required.
/api/issues/export/historyLists redacted export artifacts and retention metadata.
curl https://app.buildr.example.com/api/issues/export/history \
-b "buildr_plannr_session=..."{
"data": {
"entries": [
{
"id": "export-123",
"format": "json",
"redacted": true,
"retentionDays": 30
}
]
}
}Errors
401 unauthorized
Pagination
History responses should be filtered by workspace and retained artifact metadata. Cursor pagination is planned with remote persistence.
Idempotency
No idempotency key required.
Audit and diagnostics endpoints expose redacted operational proof for admins without returning raw tokens, secrets, payment data, or private issue payloads.
/api/admin/diagnosticsReturns redacted diagnostics, audit summaries, implementation readiness, launch proof blockers, and runtime readiness signals for workspace admins.
curl https://app.buildr.example.com/api/admin/diagnostics \
-b "buildr_plannr_session=..."{
"data": {
"generatedAt": "2026-05-22T13:00:00.000Z",
"audit": {
"totalEvents": 42,
"recentDeniedEvents": 2
},
"productReadiness": {
"implementation": {
"completionPercent": 100,
"verifiedCount": 10
},
"launchProof": {
"readyForPublicLaunch": false,
"nextProof": {
"id": "beta-activation-walkthrough",
"nextAction": "Capture beta activation walkthrough proof before public launch."
},
"summary": {
"publicLaunchBlockerCount": 4,
"proofPacketCount": 6
}
}
},
"redacted": true
}
}Errors
401 unauthorized, 403 forbidden
Pagination
Diagnostics are summarized. Dedicated audit export pagination is planned for enterprise compliance exports.
Idempotency
No idempotency key required.
Rate limits
| Plan | Requests/min | Burst | Scopes | Note |
|---|---|---|---|---|
| free | Disabled | Disabled | None | API access disabled. |
| beginner | 60 | 120 | issues:read, projects:read, agents:read | API access enabled. |
| hobbyist | 180 | 360 | issues:read, issues:write, projects:read, projects:write, agents:read | API access enabled. |
| pro | 600 | 1200 | issues:read, issues:write, projects:read, projects:write, agents:read, agents:execute, billing:read | API access enabled. |
| enterprise | 2000 | 4000 | issues:read, issues:write, projects:read, projects:write, agents:read, agents:execute, billing:read, admin | API access enabled. |
API errors return { error: { code, message } }. Quota errors may also include a redacted quota object.
Required identifiers, JSON payloads, or enum values are missing or malformed.
Session cookies or agent API token are missing, invalid, revoked, or disabled.
The authenticated principal or API token lacks the required workspace action or scope.
The requested workspace, project, milestone, issue, preview, API key, or agent record does not exist.
The mutation conflicts with current workflow state, such as an active agent claim.
Plan-level agent runs, imports, exports, storage, or API usage limits are exhausted.
The token exceeded its requestsPerMinute or burst limit.
Use workspaceId, projectId, milestoneId, status, priority, label, assignedAgentId, and q before requesting broad issue or project lists.
Current local responses are small and unpaginated; remote persistence will add limit and cursor while preserving the response envelope.
Large backup exports should move to an asynchronous job with history metadata, hash, retention, and retry-safe polling.
Send idempotency-key on /api/imports/preview so dry runs can be retried without duplicate preview artifacts.
Use a distinct idempotency-key when committing a preview. The preview and commit are separate operations.
Claim requests should include idempotency-key for client correlation; the server prevents duplicate active claims by issue ID.
Project, workspace, issue, and task contract PATCH calls can be retried with the same payload because unchanged fields are returned as-is.
Need help?
Do not paste raw API tokens, Cognito cookies, Stripe secrets, or customer issue content into support requests.