Webhooks
Merchant-public status: Events GET list/retrieve and WebhookEndpoint management are contracted-test. Unsupported Events methods remain unsupported.
Register endpoints with a Fluveo merchant secret key. The server chooses the merchant and mode before parsing management input. Stored endpoints, delivery, retries, and automatic disable all use that same owner and mode.
Manage endpoints
Create and list endpoints at /v1/webhook_endpoints. Retrieve, update, and
delete one endpoint with its we_* id. Stripe has no secret rotation operation,
so public /v1 offers none; rotate a secret in the dashboard.
Each endpoint has its own whsec_* secret and event filter. The full secret is
returned only on create and rotation. Normal reads show a fixed redacted marker,
update omits the field, and logs do not print the secret.
Unknown, malformed, foreign-owner, and wrong-mode ids all return the same resource-missing response without repeating the supplied id.
Verify a signature
Verify the raw request bytes before parsing JSON. Enforce timestamp tolerance, compare signatures in constant time, and keep real secrets out of source and logs. SDKs are not supported; the step-by-step check is in Verify a webhook signature.
Delivery safety
Fluveo checks the endpoint URL at registration and before each delivery. The sender pins checked addresses, ignores proxies, refuses redirects, and blocks private or internal destinations. The local-host exception exists only in separate dev images and is absent from release builds.
Retries keep the original event body, owner, and mode. An event with no proven owner reaches no endpoint. Repeated failure disables only the failing endpoint.
Test events
The dashboard (Test mode only) sends one synthetic event to your
endpoint. Public /v1 has no test-send operation, as on Stripe. A test event is
signed exactly like a real delivery, with the same headers, and verifies with the
endpoint’s own secret under either signature header. Recognize a test event from
its signed body:
- top-level
fluveo_test_event: true; livemode: false;- an
evt_test_event id, and a<prefix>_test_object id such aspi_test_….
A test event is never listed in /v1/events, and GET /v1/events/{id} answers
resource_missing for it. It is sent once and never retried. A repeated send with
the same Idempotency-Key, endpoint, and type carries the same event id, so a
receiver that removes duplicates by event id handles it once.
Use the generated API Reference for the exact public methods and schemas.
Hidden from the public API
Each item below is hidden because it does not follow the Stripe parity ADR (ADR 0004 as amended). The hidden public /v1 registry lists every
hidden item. Public /v1 answers a hidden operation as an unknown URL, refuses a hidden request
parameter or value with Stripe’s invalid_request_error, and omits a hidden response key.
- the operation
GET /v1/webhook_endpoints/{endpoint_id}/delivery_attempts(HIDE0-061) - the operation
POST /v1/webhook_endpoints/{endpoint_id}/rotate_secret(HIDE0-071) - the operation
POST /v1/webhook_endpoints/{endpoint_id}/send_test_event(HIDE0-072) - the platform
hs.*values ofenabled_eventsonPOST /v1/webhook_endpoints(HIDE0-119) - the platform
hs.*values ofenabled_eventsonPOST /v1/webhook_endpoints/{endpoint_id}(HIDE0-120)