Developers

API reference

Everything the dashboard does, it does over these endpoints. They're here so you can create tasks from your own tooling — a form, a cron job, an internal admin page.

Authentication

Requests are authenticated with the session cookie issued at login, or with an API key sent as a bearer token. Keys are issued per organization and scoped to it — a key can never read another organization's tasks.

curl https://onboardelisha.com/api/dashboard/overview \
  -H "Authorization: Bearer $ELISHA_API_KEY"

Endpoints

MethodPathWhat it does
POST/api/tasksCreate a task. Returns the task id immediately — the run happens asynchronously.
GET/api/dashboard/tasks/{taskId}Read one task: its gate decision, current status, run events, and pull request URL once opened.
GET/api/dashboard/overviewRecent activity across the organization — tasks, outcomes, and integration health.
GET/api/dashboard/scheduled-jobsList recurring jobs. The per-job route supports updating the schedule or disabling it.
GET/api/github/reposThe repositories the installation can reach, for a picker.

Creating a task

title and repo are required. body is where the detail goes — write it the way you'd write a ticket for a person, because that is exactly what the gate reads it as.

POST /api/tasks
Content-Type: application/json

{
  "title": "500 on checkout when the coupon field is empty",
  "body": "Three customers hit this today. Reproduces with an
           empty coupon input on the cart page.",
  "repo": "acme/web",
  "kind": "bug"
}

201 Created
{ "taskId": "tsk_8f21c0", "status": "queued" }

Reading the outcome

Poll the task, or let Elisha report back on Slack or the Notion card — which is what most teams do. status moves through queued, running, and then one of shipped, needs_human, or failed.

GET /api/dashboard/tasks/tsk_8f21c0

200 OK
{
  "taskId": "tsk_8f21c0",
  "status": "shipped",
  "gate": { "decision": "accept", "filesScoped": 3 },
  "prUrl": "https://github.com/acme/web/pull/482",
  "checks": { "tests": "passed", "reproVerified": true }
}

Errors

Errors are JSON with an error string that says what to do about it, not just what went wrong. A 403 on a repository means the GitHub App's selection doesn't include it; a 409 means a run for that task is already in flight.

Rate limits

Read endpoints are limited generously. Task creation is limited per organization to keep a runaway loop in someone's script from filling your queue — if you need a bulk import, tell us rather than working around it.