How it works
SetupSomeone with permission to manage webhooks adds an HTTPS URL in the Incard dashboard, chooses which events to receive, and saves the signing secret when it is shown. That secret is what your server uses to confirm deliveries really came from Incard. When a webhook event happens
If the event matches what that endpoint subscribed to, Incard sends a signed
POST to your URL with a JSON body and X-Incard-* headers. Your server should verify the signature on the raw body, process the event once (using the event id for deduplication), and return 2xx if you accepted it. If verification fails, respond with 4xx. If your server errors or times out, Incard may retry the delivery a limited number of times with incrementally increasing delays.
Configure in the dashboard
Outbound webhooks can be managed in the Incard web app — under Settings → Webhooks. Each endpoint has its own URL, signing secret, and list of subscribed event types.Endpoint URL rules
- Must be HTTPS with a normal public hostname.
- Must be reachable from the public internet (no
localhost, private IPs, or internal-only hostnames). - Maximum length 2048 characters.
- Incard does not follow redirects.
Transaction event types
For transaction webhooks, subscribe per endpoint to one or both of:
You only receive types you subscribed to. Each POST body includes the event type in JSON and in the
X-Incard-Event-Type header.
Transaction webhook request format
Each transaction delivery is aPOST with Content-Type: application/json.
Headers
Body — versioned envelope:
data fields
The transaction snapshot is produced by the transactions service. Fields marked Always are present on every delivery; fields marked When set are omitted when they have no value, so treat them as optional. New fields may be added over time — ignore any you don’t recognise.
Verify the signature
Always verify before trusting the body. Use the raw request body exactly as received (before parsing JSON). Signed string:X-Incard-Signature with a constant-time function.
Handle transaction webhook deliveries
Recommended handler flow:- Read raw body → verify signature → parse JSON.
- Skip or no-op if
idwas already processed. - Queue or persist work, then return
2xxpromptly (within a few seconds).
Do heavy processing asynchronously after responding
2xx.
Go live checklist
- Dashboard: create an endpoint with production URL and the transaction event types you need.
- Store signing secret securely (environment variable or secrets manager).
- Deploy verifier + idempotent handler.
- Return
2xxonly after the event is safely recorded on your side. - Monitor failures and disable the endpoint from the dashboard if your service is down.