api:read / api:write.
Quick setup
1
Create an endpoint
POST /v1/webhooks with an HTTPS url. Optionally set events to an allowlist; omit or pass null to receive all event types.2
Store the signing secret
The create (and rotate) response includes
secret (whsec_…) once. Use it to verify X-Remitflex-Signature.3
Verify and acknowledge
Validate the signature, then return
2xx within ~10 seconds. RemitFlex retries failed deliveries with exponential backoff (up to 8 attempts).Delivery headers
Signature verification
v1 from the header to expected (constant-time). Reject if the timestamp is too far from your clock (e.g. ±5 minutes) to limit replay.
Payload shape
data is a resource snapshot. Status transitions include previousStatus and status (previousStatus is null on create).
Event catalog
Every subsequent status change emits
*.updated (including cancel/expire), not only terminal states. cngn.customer.enabled fires once when KYC finishes and names match; cngn.customer.failed fires once on KYC failure or customer_name_bvn_mismatch.
API
{webhookEndpointId} is the RemitFlex webhook endpoint UUID from POST or GET /webhooks.
Dashboard JWT sessions can call these routes without scopes. API keys need the matching
api:read / api:write scope.
Security notes
- URL must be HTTPS. Private, loopback, and link-local targets are rejected (SSRF protection).
- Signing secrets are stored server-side so RemitFlex can sign outbound deliveries; the raw value is only shown on create/rotate.