Docs · API reference

API reference — the Volgarde telemetry, alerting and authentication contract.

Four endpoints, an auth matrix and an error model are now published. The surface below is locked — the documentation tracks the contract surfaced by the Volgarde routes listed on this portal.

01

Authentication

Every request is signed with a Bearer JWT issued from the Volgarde console. Tokens are minted per integrator, scoped to a fleet or an alert channel, and rotated without downtime via a dual-active window. Scopes follow the colon-case convention (fleet:read, alerts:write); a token without the required scope is rejected with a 403, regardless of signature validity.

Algorithm

Bearer JWT (RS256) over HTTPS, mutual TLS for sensitive fleet sources

Header

Authorization: Bearer <jwt>

Audience

volgarde.api · the aud claim must match the targeted environment

Scope

Colon-case concatenation of the required scopes (fleet:read, alerts:write, fleet:write, incidents:read, admin:rotate)

Rotation

Dual-active, 24 h overlap, prior token revoked on first success of the new one

Token scopes
ScopeGranted on
fleet:readTelemetry and health reads — GET /v1/fleet/{aircraft_id}/health, GET /v1/incidents
fleet:writeTelemetry ingestion — POST /v1/telemetry/ingest (advanced operator account)
alerts:writeExternal alert intake — POST /v1/alerts/webhook
incidents:readIncident reads — GET /v1/incidents (sub-scope of fleet:read, dedicated to alert-tier integrators)
admin:rotateToken rotation — cabinet endpoint, signed off by a Volgarde mission architect
02

Ingestion and consumption endpoints

Four documented endpoints: telemetry ingestion (POST /v1/telemetry/ingest, scope fleet:write), aircraft health reads (GET /v1/fleet/{aircraft_id}/health, scope fleet:read), external alert intake (POST /v1/alerts/webhook, scope alerts:write) and incident reads (GET /v1/incidents, scope fleet:read). Each endpoint returns a 2xx code and an id correlated to the audit trail.

MethodEndpointPurposeRate-limit
POST/v1/telemetry/ingestAircraft telemetry ingestion — JSON payload covering callsign, ICAO hex, position, altitude, engine parameters and timestamp.600 events/min · burst 1,200
GET/v1/fleet/{aircraft_id}/healthAggregated health for one airframe — last health, detected drifts, open alert events.60 req/min · burst 120
POST/v1/alerts/webhookExternal alert intake (Volgarde-tier third party) — severity, anomaly_type, recommended_action and confidence.300 events/min · burst 600
GET/v1/incidentsPaginated incident list — filters by aircraft_id, severity, time window and status.60 req/min · burst 120
03

Per-endpoint rate limits

Each endpoint enforces a sliding 1-minute window with a maximum burst. The Volgarde-RateLimit-Limit / -Remaining / -Reset headers ship with every 2xx and 4xx response, and a 429 additionally exposes a Retry-After in seconds.

EndpointWindowCeilingHeaders
POST /v1/telemetry/ingest1 minute600 events (burst 1,200)Volgarde-RateLimit-Limit, -Remaining, -Reset
GET /v1/fleet/{aircraft_id}/health1 minute60 req (burst 120)Volgarde-RateLimit-Limit, -Remaining, -Reset
POST /v1/alerts/webhook1 minute300 events (burst 600)Volgarde-RateLimit-Limit, -Remaining, -Reset
GET /v1/incidents1 minute60 req (burst 120)Volgarde-RateLimit-Limit, -Remaining, -Reset, ETag
04

Alert webhooks

Volgarde delivers agent-level alerts as signed webhooks. Each delivery carries a Volgarde-Event-Id, a Volgarde-Timestamp, and a Volgarde-Signature computed as HMAC-SHA256 over the raw body. Integrators must verify the signature and respond with a 2xx within 5 s; missed deliveries are retried with exponential backoff up to 24 h, and the full delivery log is exposed in the Volgarde console.

Event types
  • alert.firedanomaly confirmed, agent reasoning attached
  • alert.escalatedanomaly retained past the corroboration window
  • alert.resolvedoperator acknowledged, audit closed
  • fleet.ingest.lagstream lag exceeded the integrator-set threshold
  • auth.token.rotatednew token confirmed active
05

Error model

Every error response ships the same envelope { code, message, request_id }; a retry_after (in seconds) accompanies 429s. The request_id mirrors the ingest id when the error comes from an ingestion, and a Volgarde-side correlation id is attached to 5xx for incident follow-up.

CodeHTTPMeaning
payload.invalid400JSON payload malformed, out of contract or out of range — a field is missing or invalid.
auth.missing401No Bearer JWT on the request — Authorization header absent or empty.
scope.insufficient403Required scope missing from the token — the endpoint requires fleet:read / fleet:write / alerts:write / incidents:read.
rate.exceeded429Per-endpoint rate limit hit — the Retry-After header carries the delay in seconds.
internal.unexpected5xxVolgarde-side fault — response correlated by request_id (include in any escalation).