Rather than polling, you can register a webhook endpoint to be notified when
a review reaches a terminal state.
Events
Payload
The payload intentionally carries only identifiers and status; fetch
GET /reviews/{review_id}/report to retrieve the result over an
authenticated channel.
Verifying signatures
Each delivery is signed so you can verify it came from Flightline. The
signature is sent in the X-Flightline-Signature header as
t=<timestamp>,v1=<hex-hmac>, where the HMAC is HMAC_SHA256(secret, "<t>.<raw-body>")
using the signing secret shown when you register the endpoint.
Reject any delivery whose signature does not verify, or whose timestamp is
older than a few minutes.
Managing endpoints
Register, list, and delete your webhook endpoints with your organization API
key (Authorization: Bearer <key>), the same key you use for every other
/v1 call.
Register
The signing_secret is returned only in this registration response. Store
it immediately; it cannot be retrieved again. List and delete responses
return only a non-reversible secret_hint, never the secret itself.
The endpoint URL must be HTTPS and resolve to a public host. URLs pointing
at internal, private, loopback, link-local, or cloud-metadata addresses are
rejected with a 400.
List
Delete
Returns 204 No Content. Endpoints are scoped to your organization; an id
that belongs to another organization returns 404.
Delivery, retries, and security
- Transport:
POST with a JSON body to your registered https URL.
Endpoints must be https; internal/private hosts are rejected at
registration.
- Retries: up to 3 attempts with exponential backoff (~0.5s, 1s) on a
non-2xx response or transport error. Return a
2xx quickly (within ~10s) to
acknowledge; we time out a slow endpoint and retry.
- Best-effort: webhooks are a convenience, not the source of truth. If
every attempt fails, the review state is unchanged; always treat
GET /reviews/{review_id} / …/report as authoritative, and reconcile on a
schedule as a backstop.
- Verify the signature (see above) on every delivery. Reject any delivery
whose signature doesn’t verify, or whose
t timestamp is more than 5
minutes old, to prevent replay.
- Idempotency: a delivery may arrive more than once. De-duplicate on
(
review_id, event); processing should be idempotent.
- Source: deliveries originate from Flightline’s infrastructure without a
fixed source-IP range; authenticate them by verifying the signature,
not by IP allowlisting.