Webhooks
Create webhook endpoint
https://api.firstleeward.com/v0/webhooksRegisters a webhook endpoint for the project. The response includes a one-time signingSecret that the partner must store to verify incoming webhook signatures.
mode defaults to NOTIFICATION (async event delivery), of which a maximum of 5 ACTIVE per project is enforced - disable an existing one to make room. Pass REQUEST to register the project's single synchronous authorization endpoint (exactly one per project, rotate-only, available only on projects with EXTERNAL authorization mode).
Authorizations
Authorizationstring · headerrequiredAPI key as Bearer token, e.g. Bearer YOUR_API_KEY
Headers
Leeward-Versionenum<string>requiredAPI version (YYYY-MM-DD). Available option: 2026-09-18
Idempotency-KeystringUnique key for safely retrying this request. Up to 255 characters; we recommend a UUIDv4. The first request executes and its response is cached; subsequent requests with the same key replay the cached response (24h retention).
Body
application/json
namestringrequiredHuman-readable label for this webhook (e.g. prod-events, staging-mirror). Surfaced in logs and the partner dashboard.
urlstring<uri>requiredHTTPS endpoint that will receive webhook POST requests. Must be reachable from the public internet (HTTPS only, no private IPs).
modestringdefault: "NOTIFICATION"Interaction pattern of the endpoint. Defaults to NOTIFICATION.
NOTIFICATIONREQUESTResponse
200Created webhook, including its one-time signing secret.
idstring<uuid>requiredUnique webhook identifier
namestringrequiredHuman-readable label
urlstringrequiredHTTPS endpoint that receives signed POSTs
statusstringrequiredLifecycle status. Disabled webhooks receive no deliveries.
ACTIVEDISABLEDmodestringrequiredInteraction pattern of the endpoint.
NOTIFICATIONREQUESTlastUsedAtstring<date-time> | nullrequiredTimestamp of the most recent successful delivery
createdAtstring<date-time>requiredISO 8601 creation timestamp
updatedAtstring<date-time>requiredISO 8601 last update timestamp
signingSecretstringrequiredHMAC signing secret. Returned exactly once. Store it securely - it cannot be retrieved again. The previous secret (if any) is invalidated immediately.
400Webhook URL is invalid - must be HTTPS and resolve to a public address
errorobjectrequiredShow child attributes
codestringrequiredmessagestringrequireddetailobject | nullrequired409Response for status 409
Option 1 · WebhookLimitExceededError
errorobjectrequiredShow child attributes
codestringrequiredmessagestringrequireddetailobject | nullrequiredOption 2 · RequestWebhookAlreadyExistsError
errorobjectrequiredShow child attributes
codestringrequiredmessagestringrequireddetailobject | nullrequired