Skip to content
FlightStack Docs
Sign in Start free

REST API overview | FlightStack

FlightStack exposes a REST API for every feature in the dashboard, plus a SignalR streaming surface for live runs and agent updates. This page covers the cross-cutting concerns — base URL, authentication, headers, pagination, errors, real-time.

https://api.flightstack.voostack.com

For self-hosted deployments, set this to your own domain. The CLI stores it in ~/.flightstack/config.json under apiUrl; see CLI configuration.

The API supports two distinct token types:

TokenHeaderUsed by
User accessAuthorization: Bearer <token>The app, CLI, and any user-facing automation.
Agent tokenAgent-Token: <token>Build agents polling for jobs.

User tokens are issued by the GitHub OAuth flow at POST /authentication/github-login. Agent tokens are issued when a machine registers via POST /buildagent. See Authentication for the full flows.

Most user-facing list endpoints respect an X-Organization-Id header. When present, the response is restricted to that organization’s resources. When absent, you get every resource you have permission to see, across all your orgs.

Terminal window
curl https://api.flightstack.voostack.com/repository \
-H "Authorization: Bearer $TOKEN" \
-H "X-Organization-Id: 7d2a8c84-..."

Paginated endpoints accept skip and take query parameters:

Terminal window
GET /pipeline/runs?skip=0&take=20
ParamDefaultNotes
skip0Number of records to skip.
take20Page size. Server max is usually 100.

Some endpoints accept additional filters (status=, branch=, search=) — see the per-resource pages.

Most responses return the resource directly:

{
"id": "7d2a8c84-...",
"name": "build-ios",
"createdAt": "2026-06-14T12:00:00Z"
}

Errors use a standard problem-detail style with an HTTP status code:

{
"statusCode": 404,
"message": "Pipeline not found",
"code": "PIPELINE_NOT_FOUND"
}
StatusMeaning
200OK — payload returned.
201Created — resource created, returned in body.
204No Content — successful, no body (e.g. DELETE).
400Bad Request — payload validation failed.
401Unauthorized — missing or expired token.
403Forbidden — token valid, action not permitted.
404Not Found.
409Conflict — e.g. trying to connect an already-connected repo.
422Unprocessable — payload parsed but business-logic invalid.
429Too Many Requests — see rate limiting below.
5xxServer error. Retry with exponential backoff.

Default cloud rate limits:

  • 300 requests / minute per authenticated user
  • 3,000 requests / minute per agent (polling endpoints have separate, looser caps)
  • 30 requests / minute for unauthenticated callers (login, OAuth, etc.)

Limits are advertised on every response:

X-RateLimit-Limit: 300
X-RateLimit-Remaining: 274
X-RateLimit-Reset: 1718373600

On a 429, back off until the X-RateLimit-Reset time.

Live run output, agent heartbeats, and pipeline status updates stream over SignalR at:

{baseUrl}/hub/

The Dart client passes the user access token via accessTokenFactory. See Realtime (SignalR) for hub names, message shapes, and reconnect behavior.

ResourcePath prefixDoc
Authentication/authenticationAuthentication
Agents/buildagentAgents
Repositories/repositoryRepositories
Pipelines & runs/pipelinePipelines
Builds/buildBuilds
Organizations/organizationOrganizations
Code signing/codesigningCode signing
Secrets/secretsSecrets
Cloud runners/organizations/{orgId}/cloud-runnersCloud runners
Realtime/hub/*Realtime (SignalR)
Webhooks (inbound)/webhook/*Webhooks
LanguagePackage
Dart, Flutterflightstack_core — model + API client.
CLIflightstack — the same authentication and resource calls, wrapped for the terminal.

Third-party SDKs are welcome. The API surface is stable enough to generate from the OpenAPI schema (available on request — hello@voostack.com).