Skip to main content
The orchestrator’s HTTP endpoints return an 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 single error 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.
Some sections below cover several related endpoints that return the same errors.
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}/steps returns a job’s step history
  • GET /api/issues lists tracked issues
  • GET /api/blockers lists issues currently blocked from dispatch
Responses shown as (underlying error message) return the raw error text with a 500 or 502 status, not a stable code. Treat them as diagnostic detail — the wording can change between releases.

POST /api/mappings

Create or update a project mapping.
Every field validation returns 400 with a message naming the problem.
Required fields Claude provider Execution and resources Other settings

Mapping changes

  • PATCH /api/mappings/{teamKey} updates a mapping’s concurrency cap or paused state
  • DELETE /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-jql validates a JQL clause
  • GET /api/jira/fields lists Jira fields
  • GET /api/jira/field-options lists 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/sessions lists active sessions
  • DELETE /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}/secrets lists, sets, and deletes per-team secrets
  • /api/global-secrets lists, sets, and deletes global secrets

Deployments

  • POST /api/deploy starts a self-deploy
  • POST /api/deploy-policy changes what happens when a deployment becomes available

Dispatch breaker

  • GET /api/parked lists the issues the breaker has parked
  • POST /api/parked/unpark releases one
Unparking an issue that is not parked is not an error — it answers 200 with unparked: false.