API
Base URL https://api.flarely.app/v1, bearer fl_api_… token. Scopes: read, write, run. Timestamps are epoch milliseconds. Errors are { "error": { "code", "message" } }; plan limits answer 402 PLAN_LIMIT with a message naming the cap.
| Method | Path | Scope |
|---|---|---|
| GET | /me, /account, /billing | read |
| GET, POST | /projects | read, write |
| GET, POST | /projects/:id/checks | read, write |
| GET, PATCH | /checks/:id | read, write (name, status, scheduleCron, env) |
| PUT | /checks/:id/bundle | write |
| GET | /checks/:id/versions, /checks/:id/incidents | read |
| POST, GET | /checks/:id/runs | run, read |
| GET | /runs/:id (?signed=<seconds> for browser-openable artifact links) | read |
| GET | /runs/:id/failure-context | read |
| GET | /runs/:id/artifacts/:artifactId | read |
| GET, POST, DELETE | /projects/:id/alerts, /alerts/:id, /alerts/:id/test | read, write |
| GET, POST, DELETE | /projects/:id/hooks, /hooks/:id, /projects/:id/deploys, /deploys/:id | read, write |
| GET | /projects/:id/incidents?status=open | read |
| POST | /billing/checkout | write, owner |
A check bundle
POST /v1/projects/:id/checks
{
"name": "Checkout completes",
"bundle": { "files": [{ "path": "tests/checkout.spec.ts", "content": "..." }] },
"message": "first version",
"authorRef": "my-tool"
}Paths are relative with forward slashes and no dot segments. A bundle needs at least one *.spec.ts or *.test.ts.
Triggering and reading a run
POST /v1/checks/:id/runs { "trigger": "manual", "env": { "BASE_URL": "https://staging.example.com" } }
-> 202 { "runId": "01M2…", "status": "queued" }
GET /v1/runs/01M2… poll until status is not queued or running
GET /v1/runs/01M2…/failure-contextThe failure context is the shape agents use most: per failed test, the file and line, the step that failed, Playwright's message and its Locator, Expected and Received block, the last steps, and artifact links.