Outbound Webhooks
NuxtBase lets each organization register its own outbound webhook endpoints.
This is separate from the Stripe inbound webhook endpoint. Here, NuxtBase is the sender.
Who Can Manage Endpoints
Section titled “Who Can Manage Endpoints”Webhook endpoints are organization-scoped and manager-controlled.
The create, update, and delete APIs require the active user to be an organization:
owneradmin
Regular members do not get webhook management actions in the dashboard.
Events The Template Can Send
Section titled “Events The Template Can Send”The shipped event list is:
member.addedmember.removedmember.role_changedteam_member.addedteam_member.removedsubscription.createdsubscription.updatedsubscription.cancelledproject.createdproject.deleted
This list is validated in shared schema code, so it is not just a UI convention.
Endpoint Lifecycle
Section titled “Endpoint Lifecycle”The normal management flow is:
- create an endpoint URL
- choose one or more subscribed events
- save the endpoint and store the generated secret
- toggle active state or edit event selection later
- delete the endpoint if it is no longer needed
Each endpoint gets its own secret in this format:
whsec_...Delivery Behavior
Section titled “Delivery Behavior”When an event is dispatched, the webhook service:
- loads endpoints for the organization
- filters to active endpoints that subscribed to the event
- signs the JSON payload with HMAC-SHA256
- sends a
POSTrequest with webhook headers - records a delivery log row
- retries failures until the total attempt count reaches
3
In the current template, that means:
- 1 initial delivery attempt
- up to 2 retry attempts
The retry schedule is:
- after 1 minute
- after 5 minutes
The third slot in the retry delay array is not reached by the current
MAX_RETRIES = 3 logic, because the service only schedules another delivery
when attempt < MAX_RETRIES.
Headers And Signature
Section titled “Headers And Signature”The outgoing request includes:
X-Webhook-SignatureX-Webhook-EventX-Webhook-Timestamp
Your receiver should verify the signature against the raw JSON body using the endpoint secret.
Delivery Logs
Section titled “Delivery Logs”NuxtBase stores delivery metadata locally, including:
- endpoint ID
- event name
- payload
- HTTP status code
- truncated response text
- attempt count
- next retry time
That makes webhook failures observable without needing external logging first.
Debugging with Webhook.site
Section titled “Debugging with Webhook.site”For quick webhook debugging, Webhook.site is a useful external receiver.
Official Webhook.site references:
- Webhook.site Docs
- What is Webhook.site?
- How do I forward webhook requests?
- How do I send data to my computer or localhost?
Practical debugging flow:
- Open Webhook.site and copy the unique URL it generates for you.
- Create a NuxtBase outbound webhook endpoint with that URL.
- Subscribe the endpoint to one or more events.
- Trigger a real event in NuxtBase.
- Inspect the received request on Webhook.site, including the JSON body, headers, and response code.
- Compare the received
X-Webhook-Event,X-Webhook-Timestamp, andX-Webhook-Signatureheaders with what your receiver expects.
This is especially useful when you want to confirm:
- the payload shape is correct
- the right event names are being sent
- headers are present before you start debugging signature verification code
- retries are happening after a failed response
According to the official Webhook.site FAQ, free URLs expire after 7 days and stop accepting new requests after 100 requests. That is fine for quick local debugging, but not something you should treat as your long-term customer endpoint.
If you need to forward captured requests to a local machine, Webhook.site’s docs point to three approaches:
- fetch data through the API
- stream requests to localhost with the Webhook.site CLI
- use XHR Redirect if your local endpoint can answer with the required CORS headers