Create a Payment
Create a payment and get a hosted pay URL.
Create a Payment
POST https://api.open-finance.ai/v2/payments
This creates a payment and returns its id plus a hosted payUrl. At minimum
you send paymentInformation (amount, currency, description) and identify the
payee — either a merchantId (see Merchants (Payees)) or the creditor's
account details. Requires a Bearer token (see Authentication); rejected
requests (validation, disallowed redirect URL, sandbox gate, …) return the
standard error shape — see Errors.
Payments require a connection. To make or receive a payment, the usermust have a linked bank (a Connection), and the payment must involve one of
their connected accounts — either as the debtor (paying from a connected
account) or the creditor (receiving into a connected account). If neither
side is a connected account, the payment can't proceed. Connections are created
only in the Financy UI — see Connections.
paymentInformation
paymentInformationDescribes what to charge and (unless you pass a merchantId) who to pay:
| Field | Required | Description |
|---|---|---|
amount | ✅ | Amount to charge, greater than 0. E.g. 100. |
currency | ✅ | ISO-4217 code, e.g. ILS. |
description | ✅ | Description shown to the payer. |
creditorName | ✳️ | Payee name. Required unless a merchantId is set. |
creditorAccountType | ✳️ | Payee account type: iban or bban. Required unless a merchantId is set. |
creditorAccountNumber | ✳️ | Payee account number (e.g. IL730200040000000552717). Required unless a merchantId is set. |
debtorAccountType | – | Payer account type (iban / bban), when known up front. |
debtorAccountNumber | – | Payer account number, when known up front. |
Provide the payee either by settingmerchantIdat the top level orby giving
creditorName+creditorAccountType+creditorAccountNumber
here. Omitting both returnsMerchant Id or creditor info is required.
Top-level fields
| Field | Description |
|---|---|
merchantId | Pay a saved payee instead of inline creditor details (see Merchants (Payees)). |
redirectUrl | Where the user returns after the hosted journey completes. |
providerIds | Restrict bank selection to specific providers (see Providers & Branches). |
language | Journey language: he or en. |
paymentService | Force a rail: masav, fp, or zahav (see below). |
psuId | The payer's national ID / passport, when the provider requires it. |
psuCorporateId | The payer's business ID, for corporate payments. |
allowBusiness | Allow the payer to pay from a business account. |
isBusiness | Require the payer to pay from a business account. |
iframe | Render the hosted journey inside an iframe. |
externalId | Your own reference id, echoed back on the payment. |
includeFakeProviders | Allow sandbox providers (testing) — see Errors (sandbox gate). |
directPayOnly | Complete the payment without the open-banking consent journey. |
callbackInformation | Webhook configuration — see Payment Webhooks. |
This covers the common fields.POST /v2/paymentsalso accepts
bulkPaymentInformationandperiodicPaymentInformation(for bulk and
recurring payments) and request-to-pay options — see the API Reference for
the full, field-by-field list.
Payment rails (paymentService)
paymentService)If you don't set paymentService, Financy picks the appropriate rail. The three
rails are:
| Rail | When it's used |
|---|---|
masav | Default. Transfers under 1,000,000 ILS. |
zahav | Fast/high-value transfers over 1,000,000 ILS (fees may apply). |
fp | Transfers within the same bank (creditor and debtor share a provider). |
Request
curl -X POST https://api.open-finance.ai/v2/payments \
-H "Authorization: Bearer <accessToken>" \
-H "Content-Type: application/json" \
-d '{
"redirectUrl": "https://your-app.com/payment/done",
"language": "he",
"paymentInformation": {
"amount": 149.90,
"currency": "ILS",
"description": "Order #4471"
}
}'Response
{
"id": "01J8X...",
"payUrl": "https://api.open-finance.ai/journey/01J8X..."
}id— thepaymentIdyou use for status polling and for the direct-init step.payUrl— the hosted journey. Hosted flow: redirect the user here and skip
to Payment Status. Direct flow: ignorepayUrland continue to
Initiate a Payment (Direct).
SetcallbackInformationto be pushed the outcome instead of polling — seePayment Webhooks. For what each status means, see Payment Statuses & FAQ.
Updated 7 days ago

