Validate · Enforce · Trust

Single Instant Payment — Requirements v2.16 min read

The Consent requirements and the User Journeys for this payment type also apply and must be adhered to.

The tables below list the validation rules that apply to Single Instant Payment. The Validated by column indicates where each rule is enforced. All requests require an active Trust Framework application with the BSIP role, a valid transport certificate presented on every request via mTLS, and an active signing key for JWT signing.

02 Section

Authorization — Account Selection

#
Field
Rule
Validated by
1
Initiation.DebtorAccount ownership
If Initiation.DebtorAccount was provided on the consent and the authenticated customer does not hold that account, the consent will be set to Rejected with error: invalid_request and error_description: user_does_not_own_debtor_account.
LFI
2
consent.IsSingleAuthorization
If true, only accounts that the authenticated customer can solely authorize (no subsequent approvers required) may be offered and selected. If false or not provided (default), accounts where the customer is one of multiple required authorizers may also be offered; subsequent authorizers must then approve the consent before the consent reaches Authorized status and any payment can be executed. See Multi-Authorization.
LFI
3
Eligible payment accounts
If the authenticated customer does not hold any account eligible to initiate a payment under this consent, the consent will be set to Rejected with error: invalid_request and error_description: user_lacks_eligible_accounts. The eligible set is constrained by consent.IsSingleAuthorization as described above.
LFI
03 Endpoint

Payment Initiation

POST/payments
#
Field
Rule
Validated by
1
Authorization
Must contain a valid Bearer access token issued with the payments openid scope (or accounts payments openid where account permissions were included on the consent — see Account Permissions in a Payment Consent). The consent bound to the token must be in Authorized status and the ExpirationDateTime of the Consent must be in the future.
API Hub
2
Request timing
The TPP MUST submit POST /payments without undue delay after completing the token exchange that follows the authorization callback. Although the access token is valid for 10 minutes, a SingleInstantPayment is initiated with the User actively present and awaiting confirmation — avoidable delay creates uncertainty about whether the payment has been initiated and degrades the User experience.
TPP
3
URL version
The version in the request URL path (e.g. v2.1 in /open-finance/service-initiation/v2.1/payments) must match the version in the consent's authorization_details[0].type (urn:openfinanceuae:service-initiation-consent:v2.1).
API Hub
4
Data.ConsentId
Must match the ConsentId bound to the access token. The Consent must be in Authorized status and the ExpirationDateTime of the Consent must be in the future.
API Hub
5
Data.Instruction.Amount.Amount
Must exactly match consent.ControlParameters.ConsentSchedule.SinglePayment.Amount.Amount.
API Hub
6
Data.Instruction.Amount.Currency
Must exactly match consent.ControlParameters.ConsentSchedule.SinglePayment.Amount.Currency.
API Hub
7
Data.PaymentPurposeCode
Must exactly match consent.PaymentPurposeCode.
API Hub
8
Data.OpenFinanceBilling
Must exactly match consent.OpenFinanceBilling (including Type and, if present, MerchantId).
API Hub
9
Data.DebtorReference
Must exactly match consent.DebtorReference.
API Hub
10
Data.CreditorReference
Must exactly match consent.CreditorReference.
API Hub
11
*(implicit)*
Only one payment may be made against this consent. A second POST /payments call will be rejected.
API Hub
12
OpenAPI schema
The request must conform exactly to the POST /payments OpenAPI schema. No additional or undocumented parameters are permitted.
API Hub
13
PersonalIdentifiableInformation
The decrypted PII payload must conform exactly to the Domestic Payment PII Schema Object (POST /payments). All required properties must be present with values of the correct type, and no additional or undocumented properties are permitted (additionalProperties: false). Note that DebtorAccount is not part of the payment-time PII — the debtor is fixed by the consent, and Initiation.Creditor is a single object rather than an array.
LFI
14
PersonalIdentifiableInformation.Risk
The Risk block must be fully populated — every field that is known or derivable from the TPP's system must be included. See Risk.
Monitored by Nebras
15
PersonalIdentifiableInformation (Creditor)
Initiation.Creditor[] had exactly 1 entry at consent time. The submitted creditor must exactly match that consent-time entry. See Creditor.
LFI
16
x-fapi-interaction-id
Should be included. Should be a valid UUID (RFC 4122). An invalid value will not cause a failure but tracing will not be possible.
N/A
17
x-idempotency-key
Must be included. Must be a stable, unique value per payment attempt — the same key must be reused on retries of the same payment.
API Hub
18
x-fapi-auth-date
Must be sent when the customer is authenticated at the time of the call. Must be a valid HTTP-date (RFC 7231), e.g. Tue, 11 Sep 2012 19:43:31 UTC.
TPP
19
x-fapi-customer-ip-address
Must be sent as the customer is actively present at the time of the call. Must be a valid IPv4 or IPv6 address.
LFI
20
x-customer-user-agent
Should be sent when the customer is actively present. Should reflect the user-agent of the customer's browser or device.
TPP
04 Section

Account Status Handling

The debtor account selected at consent authorization must still be in a state that permits payment initiation at the time POST /payments is called. If the account's status has changed since consent authorization, the LFI will respond with 403 according to the table below. The TPP MUST handle these responses and surface a suitable message to the User.

Status
Response
Active
Payment is accepted and processed.
Inactive, Dormant, Suspended
403 with errorCode: Consent.AccountTemporarilyBlocked and errorMessage: The account is temporarily blocked.
Unclaimed, Deceased, Closed
403 with errorCode: Consent.PermanentAccountAccessFailure and errorMessage: The account is permanently inaccessible.