skyfleetdocs

API

Submit issues, start agents from webhooks and manage your Inbox from code.

Authentication

EndpointToken
/api/v1/signalsAuthorization: Bearer sig_… (or Cloudflare's cf-webhook-auth) from the source's page under Integrations
/api/v1/webhooks/:idAuthorization: Bearer bxw_… from the webhook's page
Everything elseAuthorization: Bearer <token> from skyfleet login (in ~/.config/box/config.json), or a dashboard session

When something goes wrong, you get { "error": "…" } back, saying what happened and what to do about it.

Submit issues

Starts one agent per issue, as you, from the environment you pick. Each one shows up in your Inbox.

POST /api/issues
{
  "envId": "env_8c1f…",
  "issues": [
    { "title": "Fix the flaky checkout test", "prompt": "checkout.spec.ts fails 1 in 10 runs. Find why, fix it, open a PR." }
  ]
}

Send 1 to 10 issues at a time. Titles can be up to 200 characters and prompts up to 20,000. Submitting the same title twice won't start a second agent.

{ "data": [{ "issue": "is_…", "title": "Fix the flaky checkout test", "agent": "acme-app-fix-the-flaky-…", "error": null, "url": "https://…/inbox/is_…" }] }

If an agent couldn't start, agent is null and error says why. You can look up envId with GET /api/environments.

List issues

GET /api/issues

Returns the 200 most recent issues as { "data": [...] }, newest first:

Field
idis_…
sourceerrors, linear or submitted
serviceThe service, Linear identifier, or who submitted it
title, detailThe headline and the error, ticket or prompt
countEvents so far
statusopen, resolved or ignored
boxThe agent working on it, or null
firstAt, lastAtTimestamps

Update an issue

PATCH /api/issues/:id
{ "status": "resolved", "title": "Double charge on annual upgrade" }

Send either field, or both. If a resolved issue comes back, it starts a new agent. An ignored one never does.

Report an error

POST /api/v1/signals. See Errors API.

Call a webhook

POST /api/v1/webhooks/:id
Authorization: Bearer bxw_…

Send any body up to 256 KB, and the agent gets it as context. You'll get back 202 {"box": "<name>"}.

StatusWhen
401Unknown webhook or wrong token
403The webhook's creator left the team
409The creator isn't signed in to Claude
413Body over 256 KB

Agents

Request
GET /api/boxesEvery agent on the team
POST /api/boxes/:id/pausePut it to sleep
POST /api/boxes/:id/resumeWake it
PATCH /api/boxes/:id{"alwaysOn": true}, {"size": "large"} or {"title": "…"}
DELETE /api/boxes/:idDelete it; add ?force=1 while it's in use
GET /api/environmentsEnvironments you can use

On this page