Skip to content
Flarely

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.

MethodPathScope
GET/me, /account, /billingread
GET, POST/projectsread, write
GET, POST/projects/:id/checksread, write
GET, PATCH/checks/:idread, write (name, status, scheduleCron, env)
PUT/checks/:id/bundlewrite
GET/checks/:id/versions, /checks/:id/incidentsread
POST, GET/checks/:id/runsrun, read
GET/runs/:id (?signed=<seconds> for browser-openable artifact links)read
GET/runs/:id/failure-contextread
GET/runs/:id/artifacts/:artifactIdread
GET, POST, DELETE/projects/:id/alerts, /alerts/:id, /alerts/:id/testread, write
GET, POST, DELETE/projects/:id/hooks, /hooks/:id, /projects/:id/deploys, /deploys/:idread, write
GET/projects/:id/incidents?status=openread
POST/billing/checkoutwrite, 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-context

The 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.