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 ProviderPrivate accountsBusiness 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

  1. Request a bearer token using the Seamless token flow with srv: "seamless/tpp".
  2. Call the requests-for-payments API with the required payment details.
  3. Feezback forwards the request to the debtor's bank account (app/website).
  4. The bank returns an initial request status - indicating the request was received and awaits approval.
  5. Feezback monitors the transaction for status changes.
  6. Feezback sends you a webhook update on every status transition.
  7. 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}"
  }'
EnvironmentToken endpoint
Integrationhttps://lgs-integ01.feezback.cloud/token
Productionhttps://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-payments

Use the correct TPP API host:

EnvironmentTPP API host
Integrationhttps://integ01-tpp.feezback.cloud
Productionhttps://prod-tpp.feezback.cloud

Configure request fields

OB-RTP uses the standard Seamless payment fields, with these additions and changes.

FieldTypeRequiredNotes
debtorName
string
Yes
Payer name. Use Hebrew or English letters only.

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:

FieldDescription
paymentIdA unique identifier for the transaction, generated by Feezback.
aspspIssuesObject 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:

Status codeError codeMessage
400
INVALID_PAYMENT_PAYLOAD
"Missing or invalid values format: [<fieldname>, ...]"
400
IBAN_IS_NOT_WHITELISTED
"Creditor account is not whitelisted"
424
ASPSP_ERROR
"Failed to initiate payment on the bank side"
500
PAYMENT_REQUEST_FAILED
"Failed to create payment"

Example:

{
  "error": {
    "code": "INVALID_PAYMENT_PAYLOAD",
    "message": "Missing or invalid values format: ['idValue']"
  },
  "meta": null
}

  1. Monitor for status updates

    Open banking payment requests uses the standard PaymentStatusChanged webhook, plus a payment_method field. You will get updates on the payment status via the payments webhook.

Transaction statuses

StatusMeaning
receivedRequest received by the bank and is waiting for the customer on their bank portal/app.
rejectedRequest rejected.
acceptedRequest approved by the debtor.
acceptedWithChangeRequest 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_method field may contain PIS, RTP, or OB-RTP. OB-RTP stands for Open Banking Request To Pay
  • Use payload.context to 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 context value.

  • Treat rejected and 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": "תשלום עבור שירות"
}



Did this page help you?