Skip to main content

Webhooks & SSE (Events)

Verified, idempotent webhooks; live UI via SSE.

C
Written by Catalin Fetean
Updated over 3 weeks ago

Audience: Backend, Security, Frontend
​Outcomes: Durable reconciliation; real-time UX.

Stripe webhook (raw body + signature)

POST /api/webhooks/stripe # verify Stripe-Signature; dedupe by event.id

Bank webhook (HMAC)

POST /api/webhooks/bank # verify X-Hmac-Signature (constant-time compare)

SSE stream

GET /api/events/stream # text/event-stream (withCredentials)

Event names (selection)

  • order.created, order.status.changed

  • deliverable.uploaded, deliverable.accepted, deliverable.rejected

  • payment.succeeded, payment.failed

  • escrow.released

  • dispute.opened, dispute.evidence.added, dispute.resolved

  • contract.fully_signed

Client

const es = new EventSource(`${API}/api/events/stream`, { withCredentials: true }); ['order.status.changed','payment.succeeded','dispute.opened'].forEach(n => es.addEventListener(n, e => console.log(n, JSON.parse(e.data))));
Did this answer your question?