Overview
FinPro webhooks deliver real-time HTTP POST notifications to your server when consent and data lifecycle events occur. Instead of polling the FinPro APIs for status changes, your application receives instant updates as events happen — such as when a user approves a consent, data becomes ready for fetch, or a session expires. Use webhooks when you need to:- React immediately to consent approvals (e.g., trigger an FI Request)
- Know the moment financial data is ready for retrieval
- Track consent revocations, pauses, and expirations
- Receive raw financial data pushed directly via DATA_PUSH events
Configuration
Set up webhooks through the FinPro Admin Portal:Navigate to Webhooks
Log in to the Admin Portal and navigate to Admin → Webhooks.
Configure your endpoint
Provide:
- Webhook URL — Your HTTPS endpoint that will receive event notifications
- Secret Key — A shared secret used for HMAC-SHA256 signature verification
- App Identifier — The application/product identifier to scope events
Subscribe to event categories
Select the event categories you want to receive:
- CONSENT — Consent lifecycle events (approved, rejected, paused, resumed, revoked, expired)
- DATA — Data fetch events (ready, denied, session failed, session expired)
- DATA_EXT — Extended data events (DATA_PUSH with inline financial data)
Common Payload Structure
All webhook events are sent as JSON POST requests with these common fields:| Field | Type | Description |
|---|---|---|
timestamp | string | ISO 8601 timestamp of when the event occurred |
consentHandle | string | UUID identifying the consent request |
eventType | string | Event category: CONSENT, DATA, or DATA_EXT |
eventStatus | string | Specific event status (e.g., CONSENT_APPROVED, DATA_READY) |
consentId | string | UUID of the consent artifact (may be empty for rejected consents) |
vua | string | Virtual User Address of the user (e.g., 9999999999@onemoney) |
eventMessage | string | Human-readable description of the event |
Extended Payload Fields (Type 2)
Type 2 payloads include additional fields for richer event context:| Field | Type | Description |
|---|---|---|
productID | string | Product identifier configured in the Admin Portal |
accountID | string | Account identifier associated with the consent request |
fetchType | string | Consent fetch type: ONETIME or PERIODIC |
consentExpiry | string | Consent expiry datetime |
| Field | Type | Description |
|---|---|---|
dataExpiry | string | ISO 8601 timestamp when fetched data expires |
firstTimeFetch | boolean | Whether this is the first data fetch for this consent |
sessionId | string | Session identifier (present in SESSION_FAILED events) |
Webhook Verification (HMAC-SHA256)
Every webhook request includes anX-Webhook-Signature header containing a Base64-encoded HMAC-SHA256 signature. Verify this signature to confirm the request originated from FinPro and was not tampered with.
How it works:
- FinPro serializes the JSON payload body to a string
- Computes
HMAC-SHA256(JSON.stringify(payload), your_secret_key) - Base64-encodes the result
- Sends it in the
X-Webhook-Signatureheader
Event Categories
| Category | eventType | Events | Description |
|---|---|---|---|
| Consent | CONSENT | CONSENT_APPROVED, CONSENT_REJECTED, CONSENT_PAUSED, CONSENT_RESUMED, CONSENT_REVOKED, CONSENT_EXPIRED | Consent lifecycle state changes |
| Data | DATA | DATA_READY, DATA_DENIED, SESSION_FAILED, SESSION_EXPIRED | Data fetch status updates |
| Data Extended | DATA_EXT | DATA_PUSH | Inline data delivery with full FI payloads |
Endpoint Requirements
Your webhook endpoint must meet the following requirements:| Requirement | Details |
|---|---|
| Protocol | HTTPS only |
| HTTP Method | Accept POST requests |
| Content-Type | Handle application/json payloads |
| Response | Return HTTP 200 status to acknowledge receipt |
| Response Time | Respond within 10 seconds |
Best Practices
Security
Security
- Always verify signatures — Validate the
X-Webhook-Signatureheader on every request using HMAC-SHA256 - Use HTTPS only — Never expose webhook endpoints over plain HTTP
- Keep secrets secure — Store your webhook secret key in environment variables, not in source code
- Validate payloads — Check that
eventTypeandeventStatusvalues are expected before processing
Reliability
Reliability
- Respond quickly — Return HTTP 200 immediately, then process the event asynchronously
- Handle retries — FinPro retries failed deliveries up to 5 times, so your endpoint may receive the same event more than once
- Idempotency — Use the
consentHandle+eventStatus+timestampcombination to detect and deduplicate repeated deliveries - Queue processing — For high-volume integrations, enqueue events for background processing rather than handling inline
Monitoring
Monitoring
- Log all events — Record incoming webhook payloads for debugging and audit trails
- Alert on failures — Monitor your endpoint’s error rate and response times
- Track event types — Monitor which events you receive to verify your subscription is configured correctly
