error field on any failed request. The tables below list the errors each endpoint can return, grouped by who calls it: integration and callback endpoints used by runners and automation, and the admin API behind the admin UI.
Run statuses and failures
What AI-Implement reports about a run — statuses, ticket comments, and failure messages.
Troubleshooting
Step-by-step fixes for the most common problems.
Response body shapes
A failed request returns a JSON body with a singleerror field:
string
The error identifier that varies by endpoint.
- For
/runner/*and/trigger/gap-fill, a stable slug code (for example,missing_bearer). - For
/api/*and the webhook, a human-readable message (for example,Invalid JSON body).
Some responses add fields alongside
error, noted per endpoint below.Integration and callback API
These endpoints are called by runners (GitHub Actions jobs, Fly Machine sessions, or local Docker containers) and by external automation, not from the admin UI. They do not use the admin session — each authenticates with a token or nonce tied to the run or trigger.POST /runner/result
A runner reports the final outcome of a dispatch: success with a PR, or failure with error context.
POST /runner/progress
A runner streams step-by-step progress during a run.
GET /runner/planning-context
A runner fetches the planning context for its run.
POST /trigger/gap-fill
External automation triggers a gap-fill run on an existing pull request.
POST /api/token
A session requests a short-lived GitHub token, issued against a one-time nonce.
POST /api/status
A session posts a lifecycle status event, which becomes a comment on the issue.
POST /api/step-report
A runner reports the status of a single pipeline step.
POST /api/github/webhook
GitHub notifies the orchestrator of pull-request events.
Events that don’t match a merged pull request return
200 and are ignored.Admin API
These endpoints support the admin UI. See Admin UI for what each panel does.Every admin endpoint below requires a valid admin session except
POST /api/auth.Requests without one return 401 with Unauthorized.POST /api/auth
Exchange the admin access code for a session token.
Job steps and issue lists
GET /api/jobs/{jobId}/stepsreturns a job’s step historyGET /api/issueslists tracked issuesGET /api/blockerslists issues currently blocked from dispatch
POST /api/mappings
Create or update a project mapping.
Every field validation returns
400 with a message naming the problem.
Claude provider
Execution and resources
Other settings
Mapping changes
PATCH /api/mappings/{teamKey}updates a mapping’s concurrency cap or paused stateDELETE /api/mappings/{teamKey}removes a mapping
DELETE returns 404 with { "deleted": false } (no error field) when the mapping does not exist.POST /api/mappings/{teamKey}/sync-workflows
Re-sync workflow templates into the mapping’s repository.
Jira configuration
POST /api/jira/validate-jqlvalidates a JQL clauseGET /api/jira/fieldslists Jira fieldsGET /api/jira/field-optionslists the options for a Jira field
/api/jira/field-options returns an empty list, not an error, when the field has no selectable options.POST /api/runner-mode
Override the global runner execution mode.
Sessions
GET /api/sessionslists active sessionsDELETE /api/sessions/{machineId}destroys a session
GET /api/sessions returns an empty list, not an error, when Fly sessions are not configured.Secrets
/api/mappings/{teamKey}/secretslists, sets, and deletes per-team secrets/api/global-secretslists, sets, and deletes global secrets
Deployments
POST /api/deploystarts a self-deployPOST /api/deploy-policychanges what happens when a deployment becomes available
Dispatch breaker
GET /api/parkedlists the issues the breaker has parkedPOST /api/parked/unparkreleases one
Unparking an issue that is not parked is not an error — it answers
200 with unparked: false.