Payment Resilience
If a connection error causes a payment request to fail, your Platform can safely repeat the request. QBank Connect API supports idempotency to prevent the risk of duplicate payments.1
1. Transactional Idempotence Protocol
All transaction requests require the Idempotency-Key header containing a 36-character key value (Value Type: UUID V4). In the event that the request needs to be retried, this key provides a database constraint that prevents duplicate records.23
Sample Header:
1.2. Conflict Resolution (HTTP 409)
When a request is received successfully, the confirmation response can still fail. Your Platform mistakes the non-response as a sign of request failure, so it tries the request again. When QBank Connect finds that the first request is still processing, the second request is rejected with a 409 Conflict error.
The response body conforms to the standard application/problem+json structure:
HTTP/1.1 409 Conflict
Link: https://docs.qbankconnect.com/03_payment_workflow.md#transactional-idempotency-protocol; rel="describedby"
Content-Type: application/problem+json
{
"type": "https://api.qbankconnect.com/errors/idempotency_conflict",
"title": "A request is outstanding for this Idempotency-Key",
"status": 409,
"detail": "The payment submission with this key is already in the P_VALIDATED or P_SUBMITTED_TO_CORE state.",
"instance": "a2b3c4d5-6e7f-8g9h-0i1j-2k3l4m5n6o7p"
}
2. Payment Orchestration Finite State Machine
All payment requests are tracked by the Payment Orchestration Service (POS) using a finite state machine. 4 5
| State | Transition Event | Actor/System | Latency |
|---|---|---|---|
P_CREATED |
A POST /payments/ach request is submitted. |
ERP Platform / API | Instant |
P_VALIDATED |
Validations succeed (schema, funds). | QBank Connect Service | Sub-Second |
P_SUBMITTED_TO_CORE |
The mETL Engine job successfully places the batch file into the Fiserv SFTP Location. | mETL Engine | 15 Minutes (Max) |
P_PROCESSING |
The Fiserv CoreAdvance confirms receipt and begins processing the transaction. | Fiserv CoreAdvance | EOD (Variable) |
P_COMPLETED |
Final Settlement Confirmation Received. | mETL / POS | Next Business Day |
P_FAILED |
Either rejected by Core Advance, or validation failed. | Core Advance / POS | Immediate or Batch |
3. Payable Status Notifications
For payable transactions, QBank Connect uses webhooks to send status updates to your Platform. 1
3.1. Webhook Events
When a significant state transition occurs (i.e. from P_PROCESSING to P_COMPLETED) the Webhook Notification Service (WNS) sends an event payload to your registered callback URL. The headers include:
-
Webhook-Event-ID: An identifier for this webhook delivery attempt.
-
Webhook-Signature: The HMAC signature that verifies that a). The payload originated from QBank Connect, b). The payload contents have not been tampered with.
3.2. Signature Verification
In order to prevent impersonation and ensure non-repudiation of events received, your Platform must verify the Webhook-Signature header against the payload using the shared secret provided by QBank Connect. Any events received without a valid signature should be discarded.
4. Documents Cited
-
QBank Connect API Reference, "Payment Status and Webhook Integration." ↩↩
-
Idempotency Key Specification, RFC 8142. ↩
-
Payments API Integration Guide, "Handling Duplicate Submissions." ↩
-
Payment Orchestration Service (POS) State Diagram, Internal Document. ↩
-
Fiserv CoreAdvance Batch Processing Guide, "Payment Lifecycle States." ↩