Skip to main content
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.