Skip to main content

Inbound — Core API (target)

Provider webhooks are received by the Seismic Card Issuance API. Register these HTTPS URLs in each vendor dashboard (use your environment host). GET /v1/kyc/config returns sumsubWebhookUrl and sumsubWebhookMode for your environment — use that URL when registering Sumsub. After hosted Sumsub verification, you can still call POST /v1/applicants/{id}/submit to sync tenant KYC and trigger issuer handoff. Poll GET /v1/applicants/{id}/kyc-status for issuer progress — see KYC integration. Cutover steps (dashboards + Railway env): see scripts/aws/WEBHOOK_CUTOVER.md in the monorepo.

Legacy — seismic-cards (migration only)

Older deployments used the seismic-cards Railway service with SUMSUB_WEBHOOK_MODE=seismic and path /webhooks/sumsub (no /v1). That path is legacy — do not register new Sumsub webhooks there. Keep seismic only until the Sumsub dashboard points at Core API, then set SUMSUB_WEBHOOK_MODE=seismic.

Outbound — Seismic → your app

Seismic will send outbound webhooks to your endpoint so you can react to events without polling — an applicant is approved, a card changes state, or a credit purchase settles.
Outbound delivery is not yet available on all endpoints (POST /v1/webhooks returns not implemented). The sections below describe the planned contract.

Delivering events

You register an HTTPS endpoint and the events you care about. Seismic POSTs a JSON body to that URL for each matching event.
Example event

Verifying signatures

Each delivery is signed with the secret from your webhook subscription. Compute an HMAC-SHA256 over the raw request body and compare it, in constant time, to the signature header.
Always verify against the raw request body before parsing JSON. Reject any request whose signature does not match.

Best practices

Respond fast

Return 2xx immediately and process asynchronously. Slow handlers risk timeouts and retries.

Be idempotent

Deliveries may repeat. De-duplicate on the event id.

Verify every time

Check the signature on every request, not just the first.

Use HTTPS

Only register TLS endpoints so payloads stay encrypted in transit.