Skip to main content
Webhooks are how OpenCard talks to your app. Every transaction, receipt, and lifecycle event gets POSTed to your URL.

Create webhook

Response includes secretsave it. You need it for challenge verification.

Challenge handshake 🔐

Immediately after create (or URL change), OpenCard verifies you own the endpoint:
Your server must respond 200 with header:
Node.js example:
If HMAC matches → active=true. If not → active=false, no events delivered.

Receiving events

Events come as POST to your URL:
Plus auth headers if configured: Always respond 200 quickly. Process async if needed. OpenCard retries on failure.

Custom headers

Add extra headers OpenCard includes on every delivery:

Webhook groups (buyer-party filter)

Filter events by card issuer buyer party:
Only transactions matching that buyer party hit this webhook.

Test an event

Sends a test payload to your endpoint. Good for verifying your handler works.

Delivery log

Paginated log of every delivery attempt — status code, payload, timestamp. Use for debugging.

Checklist ✅

  • HTTPS endpoint deployed
  • Challenge handler implemented (GET with ?challenge=)
  • Event handler implemented (POST with X-Event header)
  • Respond 200 fast, process async
  • secret stored securely
  • Subscribed to the right event flags
  • Test event sent and received