Open Banking Payment Requests (BETA)
Create an Open Banking Payment Request and receive asynchronous payment status updates by webhook.
Create a payment request that will appear on the debtor’s bank portal/app. Once the request is created, the bank will send an SMS to the debtor, notifying them on the request awaiting for approval.
Supported Banks
Payment Provider Private accounts Business account Leumi/Pepper - 10 ✅ ✅ Poalim - 12 ✅ ❌ available by the end of 2026 Discount/Mercantile - 11,17 ✅ ✅ Mizrahi - 20 ✅ ✅ FIBI group - 14,26,31,46,52 ❌ production bug on provider side ✅
When to use OB-RTP
Use OB-RTP when:
- You want to request payment without redirecting the payer immediately.
- The payer should approve the request later inside their bank portal or app.
- Your use case needs asynchronous collection, such as debt collection or business payment requests.
Use Single Payment or Fast Seamless instead when you need a single session synchronous process .
How the OB-RTP flow works
- Request a bearer token using the Seamless token flow with
srv: "seamless/tpp". - Call the requests-for-payments API with the required payment details.
- Feezback forwards the request to the debtor's bank account (app/website).
- The bank returns an initial request status - indicating the request was received and awaits approval.
- Feezback monitors the transaction for status changes.
- Feezback sends you a webhook update on every status transition.
- Polling stops when the request reaches a final status.
1. Request a bearer token
OB-RTP uses the same bearer token flow as Fast Seamless.
Create and sign this JWT with RS512:
{
"sub": "sub",
"iss": "tpp/{TPP_ID}",
"srv": "seamless/tpp",
"iat": 1728986260,
"exp": 1728986860,
"ttl": 600
}Send the signed JWT to the /token endpoint.
curl --location --request POST 'https://{ENVIRONMENT}.feezback.cloud/token' \
--header 'Content-Type: application/json' \
--data-raw '{
"token": "{GENERATED_JWT_TOKEN}"
}'| Environment | Token endpoint |
|---|---|
| Integration | https://lgs-integ01.feezback.cloud/token |
| Production | https://lgs-prod.feezback.cloud/token |
The bearer token is valid for 600 seconds.
2. Create the payment request
Call the TPP payments API with the bearer token.
POST https://{TPP_ENVIRONMENT}-tpp.feezback.cloud/tpp/v1/users/{sub}@{tpp_id}/requests-for-paymentsUse the correct TPP API host:
| Environment | TPP API host |
|---|---|
| Integration | https://integ01-tpp.feezback.cloud |
| Production | https://prod-tpp.feezback.cloud |
Configure request fields
OB-RTP uses the standard Seamless payment fields, with these additions and changes.
All other standard payment fields according to the seamless configuration guide.
Example request body for corporate debtor:
{
"context": "11112222",
"idValue": "200200202",
"debtorName": "ישראל ישראלי",
"bankCode": "12",
"accountType": "private",
"amount": "712.00",
"creditorAccount": "IL430110040000000123456",
"creditorName": "חברה בעמ",
"remittanceInformationUnstructured": "תשלום עבור שירות"
}
Example request body:
{
"context": "11112222",
"idValue": "200200202",
"debtorName": "ישראל ישראלי",
"bankCode": "12",
"accountType": "corporate",
"corporateId": "51222222222",
"amount": "712.00",
"creditorAccount": "IL430110040000000123456",
"creditorName": "Kathleen Martinez",
"remittanceInformationUnstructured": "תשלום עבור שירות"
}Response
Success
In response to a valid request, you will receive:
| Field | Description |
|---|---|
paymentId | A unique identifier for the transaction, generated by Feezback. |
aspspIssues | Object array — indicates if any service issues are currently active on the debtor's bank. |
Example:
{
"paymentId": "0f2aee50-dd9f-4bee-9583-1c7809c4f933",
"aspspIssues": []
}Error
In response to an invalid request, or if an error occurs, an error code and description are returned according to the following mapping:
Example:
{
"error": {
"code": "INVALID_PAYMENT_PAYLOAD",
"message": "Missing or invalid values format: ['idValue']"
},
"meta": null
}-
Open banking payment requests uses the standardMonitor for status updatesPaymentStatusChangedwebhook, plus apayment_methodfield. You will get updates on the payment status via the payments webhook.
Transaction statuses
| Status | Meaning |
|---|---|
received | Request received by the bank and is waiting for the customer on their bank portal/app. |
rejected | Request rejected. |
accepted | Request approved by the debtor. |
acceptedWithChange | Request accepted with technical changes to the value date or description. |
Webhook payload example
{
"event": "PaymentStatusChanged",
"timestamp": "2025-01-18T18:25:54.114182+00:00",
"payload": {
"paymentRequest": "uuid",
"context": "rtp-20250113001",
"payment_method": "OB-RTP",
"currentStatus": "received",
"previousStatus": "received"
}
}- The
payment_methodfield may containPIS,RTP, orOB-RTP. OB-RTP stands for Open Banking Request To Pay - Use
payload.contextto correlate the webhook with your original request. - See Webhooks & IP Whitelisting for webhook delivery requirements and IP allowlisting.
Operational notes
-
OB-RTP is asynchronous. Do not expect the payer to approve the request during the API call.
-
Store the returned payment request identifier and your
contextvalue. -
Treat
rejectedand expiry-related statuses as terminal failure states. -
Check the ASPSP issues feed before creating requests:
https://fb.feezback.cloud/aspsp_issues.json
Quick-Start collection
cURL:
curl --location --globoff 'https://tpp-prod.feezback.cloud/tpp/v1/users/{SUB}@{TPP_ID}/requests-for-payments' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {validToken}' \
--data '{
"context": "11112222",
"idValue": "200200202",
"debtorName": "ישראל ישראלי",
"bankCode": "12",
"accountType": "private",
"amount": "712.00",
"creditorAccount": "IL430110040000000123456",
"creditorName": "חברה בעמ",
"remittanceInformationUnstructured": "תשלום עבור שירות"
}Updated 7 days ago