Webhooks
Receive signed release events in Slack, PagerDuty or your own service.
Events
release.created, release.ready, release.published, release.paused, release.rolled_back, release.failed, release.archived, rollout.updated, rollout.completed, firebase.disconnected, firebase.expired, app.created.
Verify signatures
js
import { createHmac, timingSafeEqual } from "node:crypto";
// x-fireota-signature: sha256=<hex> x-fireota-timestamp: <unix seconds>
export function verify(rawBody, headers, secret) {
const ts = headers["x-fireota-timestamp"];
if (Math.abs(Date.now() / 1000 - Number(ts)) > 300) return false; // replay window
const expected = "sha256=" + createHmac("sha256", secret).update(`${ts}.${rawBody}`).digest("hex");
const given = String(headers["x-fireota-signature"] ?? "");
return given.length === expected.length && timingSafeEqual(Buffer.from(given), Buffer.from(expected));
}Retries
Failed deliveries are retried with exponential backoff (1, 2, 4, 8, 16 minutes) and then marked as dead letters. Deliveries never affect the release that triggered them.