Split Payments (SplitPay)
A split payment collects one order in several parts: several cards, or cards together with non-card methods such as wallets, mobile billing (Faturana Yansıt) and promissory notes (Senetle Öde). For example, a ₺1,000 order = Card A ₺400 + Card B ₺350 + mobile billing ₺250.
The outcome is all-or-nothing:
- If every part succeeds, the order counts as paid.
- If a part fails, the holds on the cards are released and the parts already charged are refunded. The buyer pays nothing net. The rule for a non-reversible part: Failure and compensation.
In the API each part is a leg (legs[]).
Amounts are integers in minor units: "amount": 40000 = ₺400.00. The part amounts must add up to the order amount exactly.
Ways to split
| Way | Parts | Page |
|---|---|---|
| Multiple cards | Cards only | Multiple Cards — card parts, installments per part, 3D Secure display, continuation page, the result sent to your callbackUrl |
| Multiple payment methods | One or more cards and non-card methods | Multiple Payment Methods — order of the steps, the non-reversible part, credit part, insurance, failure and compensation, method block and provider choice |
This page covers what both ways share: the two paths, enabling, the order of the steps, rules, time limit, statuses, events, refunds, listing and detail.
Two paths
| Path | Who starts it | Section |
|---|---|---|
| Checkout Form | The buyer, from the Pay with more than one method entry in the form. You do not need to write any extra code | With the Checkout Form |
| Merchant API | You, from your own payment page, with POST /payments/split | With the API |
Both paths use the same rules, the same order of steps and the same events.
Enabling
In the panel, the Payments → Form Settings → Split Payment section has two independent switches. You can turn on either one or both.
| Switch | What it enables |
|---|---|
| Pay with Multiple Cards | The buyer can split the payment across several of their cards. You choose the number of cards between 2 and 5 (default 3) |
| Split Payment with Non-Card Methods | Alongside cards, the buyer can use the non-card methods you select as parts. You pick the methods from a list |
The Shared settings apply to split payments that include a non-card method:
| Setting | Value |
|---|---|
| Maximum parts | 2–5, default 3. Cards and non-card methods are counted together |
| Minimum amount per part | Empty means no minimum. The provider's own amount limits always apply |
| Total time | 10–25 minutes, default 20. See Time limit |
- In a split payment with a non-card method, the number of cards follows the Pay with Multiple Cards limit when that switch is on; when it is off, at most 1 card can be used.
- Only methods that are enabled in Form Settings can be part of a split payment.
- Whether a method and a provider can be used in a split payment is shown by
splitEligibleon theGET /payments/methodsrow. - An API split payment made of cards only does not depend on the Pay with Multiple Cards switch; that switch enables multiple cards in the Checkout Form.
Order of the steps
The platform sets the order; neither you nor the buyer can change it. The order the platform sets is the steps[] list in the responses.
- In a split payment made of cards only, the cards are processed in the order you sent them.
- In a split payment with a non-card method, parts are arranged into four phases according to the method's split payment behaviour (
splitBehavior): approval, card hold, reversible charge and non-reversible charge. The phases and the order within a phase: Multiple Payment Methods › Order of the steps.
When every part has succeeded, the holds on the cards (and the credit approval, if any) are captured and the order is complete.
Rules
A split payment is validated before it starts. A request that breaks a rule is rejected; no part is charged.
- Currency: every part is in the order's currency, and the chosen provider must support that currency.
- Amount: the parts add up to the order amount. Each part is a positive integer, is not below the Minimum amount per part, and is within the provider's
minAmount/maxAmountrange. - Count: a split payment with a non-card method has between 2 and Maximum parts parts. For the number of cards see Enabling.
- Card part: Multiple Cards › Card part.
- Non-card part, method and provider: Multiple Payment Methods › Method and provider choice.
- Non-reversible part: Multiple Payment Methods › Non-reversible part.
The installment rules for a card part are in Multiple Cards › Installments on a card part.
Time limit
A split payment with a non-card method must complete within the Total time (default 20 minutes).
- The end time is in the
expiresAtfield of the responses. The Checkout Form shows the remaining time to the buyer. - When the time runs out, the holds on the cards are released, the reversible parts already charged are refunded and the split payment is cancelled.
- Once the non-reversible part starts, the clock stops and
expiresAtbecomesnull. The card holds are kept until that part's result is final. - The steps' own time limits (e.g. how long a verification code is valid) also apply.
- A split payment made of cards only has no total time; a card part whose 3D Secure is not completed ends with its own time limit.
With the Checkout Form
Enable split payments (once)
In the panel, on Payments → Form Settings → Split Payment, turn on Pay with Multiple Cards, Split Payment with Non-Card Methods, or both. See Enabling.
Create an intent and mount the form
The steps are the same as for cards → Checkout Form. The order amount is read from the intent.
The buyer adds the parts
The buyer selects the Pay with more than one method entry in the method list. They add their cards and the non-card methods you enabled as parts, and distribute the amount across the parts. For a card part see Multiple Cards › With the Checkout Form; for a non-card part see Multiple Payment Methods › With the Checkout Form.
The form runs the steps in order
When the payment starts, the form shows the steps in the platform's order as a checklist. At each step the buyer does what is asked: 3D Secure verification for a card, a verification code or the requested data for a non-card method. The remaining time is shown on screen.
A card's 3D Secure verification opens within the form in a window or on a separate page, according to the 3D Secure display you selected. On a separate page, the payment continues on the continuation page and at the end the buyer returns to your callbackUrl with the result.
Receive the result by webhook
When the order completes, a single payment.captured arrives for the main payment. Ship the order on this event → Events.
The states the buyer may see during the payment are in Multiple Payment Methods › States the buyer may see.
Order lock
When a split payment starts, the order is locked:
- While the split payment is in progress, no single-card, non-card or wallet payment can be started for the same order: the request gets
409payment.checkout.order_locked. - The reverse also holds: while a single-method payment is in progress for the order, or once the order is closed, no split payment can be started:
409split_pay.checkout.order_not_open. - If the split payment fails, its time runs out or the buyer gives up, the lock is released and the order stays open. The buyer can pay the same order with another method.
- Only one split payment runs for an order at a time. If the page is reloaded or the request is sent twice, the existing split payment continues; no new charge is made.
When a credit or BNPL provider is connected, the credit approval rules are in Multiple Payment Methods › Credit part.
How a card part's 3D Secure verification opens in the form is described in Multiple Cards › 3D Secure display.
The page where the payment continues after 3D Secure on a separate page is described in Multiple Cards › Continuation page.
The fields sent from the continuation page to your callbackUrl are in Multiple Cards › The result sent to your callbackUrl.
Endpoint reference
This section is for reference; the Checkout Form SDK calls the endpoints. As with the other form endpoints, authentication is the form token (token) and, when needed, checkoutSessionProof.
| Endpoint | What it does |
|---|---|
POST /payments/form/split/init | Starts the split payment. legs[]: card part { cardToken, amount, installment?, installmentQuoteToken? }, non-card part { paymentMethod, providerCode, amount } |
POST /payments/form/split/status | Returns the current status, the main payment's paymentId, the step list and the expected step |
POST /payments/form/split/method | Starts the non-card part whose turn it is. The body is the form/payment body plus legId |
POST /payments/form/split/card | After a credit approval, starts a card part with the buyer's card: { legId, cardToken } |
POST /payments/form/split/replacement-card | Takes the new card for the missing amount: { cardToken }. The amount comes from the server |
POST /payments/form/split/continue | Turns the continuation link's code (code) into a new form token for the order |
POST /payments/form/split/restart-3ds | When the bank does not allow a window, restarts 3D Secure for the same card part on a separate page. Once per card part; see 3D Secure display |
- The responses carry the
status,steps,pendingStepandexpiresAtfields of the API response;splitPaymentIdis not given to the browser. - The responses also carry the 3D Secure display the payment started with in
threeDsDisplay(INLINEorREDIRECT). - The
form/split/initandform/split/statusresponses carry the main payment'spaymentIdat the top level. This is the id returned to you when you create the intent and sent to yourcallbackUrl. The parts' ids are insteps[].paymentIdandpendingStep.paymentId. - The continuation page calls its own endpoints (
/payments/split/resume/*); you do not need to call them. - The verification code of a non-card part is confirmed and resent with the action endpoints on Payment, using
pendingStep.paymentId.
With the API
With POST /api/v1/payments/split you start a split payment from your own server. The endpoint requires Step-Up authentication (Bearer token and Ed25519 signature headers; see Authentication) and the payment:split-pay permission. The Idempotency-Key header is mandatory.
Read the methods
Get the methods and providers with GET /payments/methods. For a non-card part, offer the buyer only providers with splitEligible: true.
Start the split payment
Send the cards and the non-card method blocks in legs[]. The platform validates the rules and sets the order. The card holds are taken; the non-card part whose turn it is starts with the block in this request.
Complete the expected step
pendingStep in the response tells you what is expected from the buyer or from you: a 3D Secure redirect, a verification code or starting the next non-card part. See Steps.
Receive the result by webhook
When every part is complete, the cards are captured and a single payment.captured arrives for the main payment → Events.
Request
Example requests: with cards only in Multiple Cards › With the API, with non-card methods in Multiple Payment Methods › With the API.
| Field | Required | Description |
|---|---|---|
totalAmount | Yes | Order amount, minor units. Must equal the sum of the parts exactly |
currency | Yes | ISO-4217 (TRY, USD, EUR) |
ownerRef | Yes | Cardholder key (cardUserKey); every card part must be a card of this owner. Sent even when there is no card part (your customer reference) |
legs[] | Yes | 1–5 parts. In a request with a non-card part, between 2 and Maximum parts |
callbackUrl | Conditional | Your http(s) URL the buyer returns to after 3D Secure. Required when a card part sets force3D |
orderId | No | Your order number. Returned as orderId in the events |
ownerScope | No | Owner scope; default MERCHANT_CUSTOMER |
The fields of a card part are in Multiple Cards › Card part fields.
The fields of a non-card part and its method block are in Multiple Payment Methods › Non-card part fields.
Response
{
"success": false,
"code": "AWAITING_ACTION",
"message": "…",
"data": {
"splitPaymentId": "b1e4…",
"status": "AWAITING_ACTION",
"duplicate": false,
"needsReconciliation": false,
"steps": [
{ "legId": "leg-1", "sequence": 1, "kind": "CARD", "paymentMethod": "CARD", "providerCode": null, "splitBehavior": "HOLD_CAPTURE", "amount": 40000, "status": "AUTHORIZED", "paymentId": null, "replacesLegId": null, "current": false },
{ "legId": "leg-2", "sequence": 2, "kind": "CARD", "paymentMethod": "CARD", "providerCode": null, "splitBehavior": "HOLD_CAPTURE", "amount": 35000, "status": "AUTHORIZED", "paymentId": null, "replacesLegId": null, "current": false },
{ "legId": "leg-3", "sequence": 3, "kind": "METHOD", "paymentMethod": "MOBILE_BILLING", "providerCode": "<providerCode>", "splitBehavior": "CAPTURE_IRREVERSIBLE", "amount": 25000, "status": "AWAITING_ACTION", "paymentId": "7d3a…", "replacesLegId": null, "current": true }
],
"pendingStep": {
"legId": "leg-3",
"sequence": 3,
"step": "ACTION",
"paymentMethod": "MOBILE_BILLING",
"providerCode": "<providerCode>",
"amount": 25000,
"paymentId": "7d3a…",
"actionId": "act_5c2e…",
"redirectPath": null,
"action": {
"id": "act_5c2e…",
"type": "OTP",
"expiresAt": "2026-10-20T09:03:00.000Z",
"otp": { "maskedTarget": "53****67" },
"consent": { "required": true, "url": "https://…" }
}
},
"expiresAt": null,
"pendingLeg": { /* compatibility field */ },
"legs": [ /* per-leg states */ ]
}
}| Field | Description |
|---|---|
success | true only when the split payment completed (COMPLETED) |
code, data.status | The split payment's status; see Statuses |
duplicate | true when a request with the same Idempotency-Key returned the existing split payment; no new charge is made |
needsReconciliation | The split payment is under operations follow-up |
steps[] | The step list the platform built, in execution order |
pendingStep | The expected step; null when nothing is pending |
expiresAt | End of the total time (ISO-8601). null when there is no time limit or the non-reversible part has started |
pendingLeg, legs[] | Kept for compatibility with card-only split payments. In a new integration use steps and pendingStep |
A steps[] item:
| Field | Description |
|---|---|
legId, sequence | The part's id and execution order (starting at 1) |
kind | CARD or METHOD (non-card) |
paymentMethod, providerCode | Method and provider. providerCode is null on a card part |
splitBehavior | The part's phase; see Order of the steps |
amount | The part's amount, minor units |
status | The part's status; see Statuses |
paymentId | The non-card part's payment record; used with the action endpoints. null on a card part and before the part starts |
replacesLegId | If this part is a new card for a missing amount, the id of the part it replaces |
current | true when the split payment is waiting on this part |
Besides the same legId, sequence, paymentMethod, providerCode, amount and paymentId fields, pendingStep carries step, actionId, redirectPath and action. action is set only for an action started in this request that is still awaited; its shape is the same as in Payment — Actions. Read the action's current state with GET /payments/{paymentId}.
Steps
step | Meaning | What to do |
|---|---|---|
THREE_DS | A card part awaits 3D Secure | Redirect the buyer to redirectPath without delay (resolve it against https://api-gateway.lunixi.com). The buyer returns to your callbackUrl and the split payment continues by itself. See Multiple Cards › 3D Secure step |
START_METHOD | The next non-card part is waiting to start | Send the same request with the same Idempotency-Key again. No new record is created; the part starts with the block in this request |
ACTION | A buyer action is open on a non-card part (e.g. a verification code) | Send the code with POST /payments/{paymentId}/actions/{actionId}/confirm; to send the code again use resend → Payment — Confirm. paymentId = pendingStep.paymentId |
RESULT_PENDING | The non-card part's result is awaited from the provider | Wait; once the result is final the split payment continues by itself. Show the buyer "your payment is being checked" |
CREDIT_APPROVAL | Credit approval is awaited | Only when a credit provider is connected. See Credit part |
CARD_INPUT, REPLACEMENT_CARD | The buyer's card is awaited | Seen only in the Checkout Form |
- When an action completes, the platform advances the split payment by itself. If the next step is again a non-card part (
START_METHOD), send the same request with the sameIdempotency-Key. When all non-card parts are done, the cards are captured and the result arrives by webhook. - You can also send the same request with the same
Idempotency-Keyto get the current step list; the response carriesduplicate: trueand no money movement is repeated. - What to do when a non-card part cannot be started: Multiple Payment Methods › Completing a non-card part.
- If the provider declines the payment or the action fails, the part fails and the split payment compensates (see Failure and compensation).
- The Merchant API has no new-card step for a missing amount: if a card capture fails after the non-reversible part, the split payment moves to reconciliation required (see Failure and compensation).
- When the buyer does not complete 3D Secure, and when 3D Secure holds are not enabled on your setup: Multiple Cards › 3D Secure step.
The compensation rules that apply when a part fails or the time runs out are in Multiple Payment Methods › Failure and compensation.
Statuses
Statuses of the split payment:
| Status | Meaning |
|---|---|
COMPOSING | Validated and recorded; no part has started yet |
AUTHORIZING | The parts are being run in order |
AWAITING_3DS | A card part awaits 3D Secure |
AWAITING_ACTION | A non-card part is waiting to start, for a buyer action or for its result |
AWAITING_CREDIT_APPROVAL | Credit approval is awaited (only when a credit provider is connected) |
AWAITING_REPLACEMENT_CARD | The buyer's new card for a missing amount is awaited (Checkout Form only) |
AUTHORIZED, CAPTURING | Every part is ready; the cards are being captured |
COMPLETED | Every part was charged; the order is paid |
COMPENSATING | Compensation in progress: holds are being released and charged parts refunded |
VOIDED | Compensation finished; the buyer paid nothing net |
FAILED | The split payment ended in failure |
RECONCILIATION_REQUIRED | The non-reversible part was charged but the rest of the order could not be collected; you decide about shipping |
Statuses of a part (legStatus, steps[].status): PENDING, AUTHORIZING, AWAITING_3DS, AWAITING_ACTION, AUTHORIZED, CAPTURED, VOIDED, REFUNDED, COMPENSATING, FAILED.
A split payment that stays COMPENSATING with needsReconciliation: true is under operations follow-up; money risk is never silently abandoned.
Events
Result of the main payment
The result of a split payment always arrives as a single event: payment.captured or payment.failed, as in a single-method payment. Ship the order on payment.captured.
| Field | Description |
|---|---|
settlementMode | SPLIT: the money is collected on the parts |
splitPaymentId | The split payment's id |
orderId | Your order number |
intentId | Checkout Form only: the order's payment record |
status | CAPTURED or FAILED; the split payment's own status is in splitStatus |
totalAmountMinor | Order amount |
capturedAmountMinor / amountMinor | The captured order amount on success / the order amount on failure |
legs[] | Per part: legId, sequence, amountMinor, legStatus, paymentIntentId, paymentMethod, providerCode and, when present, refundState |
In the Checkout Form, if the split payment is cancelled (VOIDED), the order stays open and no payment.failed is sent; the buyer can pay the same order with another method. In that case payment.split.voided arrives.
Split payment events
| Event | When |
|---|---|
payment.split.completed | Every part was charged (COMPLETED). Carries part summaries |
payment.split.voided | Compensation finished (VOIDED); the buyer paid nothing net |
payment.split.compensating | The split payment needs operations follow-up (COMPENSATING, needsReconciliation). cause: CAPTURE_FAILURE or COMPENSATION_INCOMPLETE |
payment.split.outcome_pending | The non-reversible part's result is awaited; the clock stopped. Carries pendingLegId, pendingLegSequence |
payment.split.reconciliation_required | Reconciliation required. Carries shortfallAmountMinor (missing amount), reason (REPLACEMENT_CARD_FAILED, REPLACEMENT_WINDOW_EXPIRED, BUYER_ABANDONED, CAPTURE_NOT_RECOVERABLE) and, when present, unsettledLegId |
Each of these events is sent at most once per split payment. They are not part events: if your endpoint subscribes to the event type, they arrive regardless of the option below.
Part events
The events of each part's own payment record (payment.authorized, payment.captured, payment.failed, payment.voided, payment.refunded …) and payment.split.leg_refund_pending (compensation refund pending) are not sent by default.
- To receive them, add the
payment.split.leg_eventsoption to your webhook endpoint's event list. In the panel it is the option that also sends part events for split payments. - The option is not an event type; you must also subscribe to the part event's type (e.g.
payment.captured). Apayment.*subscription does not turn this option on. - A part event's
orderIdhas the form<order>:leg:<sequence>, and thedata.splitLegfield carriessplitPaymentId,parentPaymentId(the order's payment record in the Checkout Form,nullin the API),parentOrderId,legIdandlegSequence. - Ship on the main payment's
payment.captured, not on part events.
A chargeback (payment.disputed) is always sent regardless of this option and carries the main payment information in data.splitLeg.
Delivery, signatures and subscriptions: Webhooks.
Refunds
You request a refund on the main payment of a split payment; the platform distributes the amount across the parts. Only a completed (COMPLETED) split payment can be refunded.
Distribution rule
- Card parts are refunded first, in order and partially if needed.
- The remaining amount is covered from the reversible non-card parts. A non-card part is refunded only for its full remaining amount.
- A non-reversible part (e.g. mobile billing, promissory notes) is never part of the distribution.
- A part's refund ceiling is the amount captured from it; for a card part with installments the installment fee is included. A full refund also refunds the installment fee.
- The refundable amount and the non-refundable amount are in the
refund.refundableAmountandrefund.nonRefundableAmountfields of theGET /payments/split/:idresponse.
If the amount exceeds the refundable total, the request gets 400 split_pay.refund.amount_exceeded; the refundable amount is in details.refundableAmount. If the amount is within the total but cannot be split across the parts (e.g. only non-card parts remain and the amount would split one of them), 422 split_pay.refund.amount_not_distributable is returned.
For a Checkout Form payment
Request the refund on the order's payment record with the existing refund endpoint: POST /payments/:id/refund → Refunds.
amountis required.- The per-part result is in the response's
meta.details.splitRefundfield. - If some parts could not be refunded, the response fails with the code
split_pay.refund.incomplete. If a part's result is not yet known, the response is202. In both cases retry with the sameIdempotency-Key; a part already refunded is not refunded again.
For a split payment started from the API
POST https://api-gateway.lunixi.com/api/v1/payments/split/{splitPaymentId}/refundThe body is { "amount": 15000, "reason": "…" }; reason is optional. The endpoint requires the payment:refund permission and a mandatory Idempotency-Key.
- The response's
datacarriesrefundRequestId,splitPaymentId,orderId,currency,status(COMPLETED,PARTIAL,FAILED,PROCESSING),requestedAmount,refundedAmount,refundableAmount,nonRefundableAmount,duplicateand per-partlegs[](legId,sequence,paymentIntentId,paymentMethod,providerCode,amount,status,errorCode). - When every part was refunded the response has
success: true. If some parts could not be refunded, the response carriessuccess: falseandcode: "split_pay.refund.incomplete"; retry with the sameIdempotency-Key. - A request with the same key but a different amount or reason is rejected.
After the refund
- A single event arrives for the main payment:
payment.refundedwhen no refundable amount is left on the main payment, otherwisepayment.partially_refunded. The event carriessettlementMode: "SPLIT",refundId,refundAmountMinor,totalRefundedMinor,fullyRefundedandrefundedLegs[]. - The main payment's
statusdoes not change after the refund. The refunded total is shown bytotalRefundedMinorin the event andrefund.refundedAmountin theGET /payments/split/:idresponse. - You can also refund a single part:
POST /payments/:id/refundon the part's payment record. While the split payment is in progress, or while the part's compensation refund is pending, this request gets409split_pay.refund.not_allowed.
Listing and detail
Payment list
- In the
GET /paymentslist a Checkout Form split payment is a single row: the order's payment record, with the order amount. The parts are not in the list. - With
includeLegs=truethe parts' payment records are listed too. - Rows related to a split payment carry a
splitfield:splitPaymentId,role(PARENTmain payment,LEGpart), and on a partparentPaymentIdandlegSequence. - The main payment of a split payment started from the API is not a payment record; its parts appear in the list with
role: "LEG". Read the main payment withGET /payments/split.
Split payment detail
GET /api/v1/payments/split (list, keyset pagination) and GET /api/v1/payments/split/:id (detail) require a Bearer token and the payment:view permission.
Per part in the detail:
| Field | Description |
|---|---|
legStatus | The part's status; see Statuses |
paymentMethod, providerCode | Method and provider |
legAmount | The part's share of the order amount |
installmentCount, chargeAmount | Number of installments and the charged amount including the installment fee |
capturedAmount, refundedAmount | Captured and refunded amount |
refundState | REFUND_PENDING (refund pending), REFUNDED (refunded), NOT_REFUNDABLE (cannot be reversed) or null |
compensationRefund | Details of the compensation refund: status, amount, attempt, requestedAt, nextAttemptAt, lastErrorCode, refundedAt |
dispute | When the part has a chargeback: state, disputedAmount, openChargebackCount |
pendingRedirectPath, awaiting3dsSince | While a card part awaits 3D Secure: the redirect path and when the wait started |
cardTokenMasked, cardLast4, cardBrand | Card identity; the raw token is never returned |
paymentIntentId, paymentIntentStatus | The part's payment record and its status |
failureReason | On a failed part, the normalized error code and the provider message |
At the top level there are refund (refundableAmount, nonRefundableAmount, refundedAmount) and dispute (hasDispute, disputedAmount, legCount).
Chargebacks
A chargeback is recorded on the part's payment record. The main payment's status does not change; the detail shows the dispute flag and amount. No automatic action is taken on the other parts. The payment.disputed event arrives with data.splitLeg → Chargebacks.
Errors
Every code is described on Error Handling.
| Status | Code | What to do |
|---|---|---|
| 422 | split_pay.validation.amount_mismatch | Make the parts add up to the order amount |
| 422 | split_pay.validation.leg_count_out_of_range | Keep the number of parts between details.min and details.max |
| 422 | split_pay.validation.card_leg_count_out_of_range | Limit the number of cards to details.max |
| 422 | split_pay.validation.invalid_leg_amount | Send the part amount as a positive integer |
| 422 | split_pay.validation.currency_mismatch | Send every part in the order's currency, with a provider that supports it |
| 422 | split_pay.validation.missing_card_token | Add cardToken to the card part; remove card fields from the non-card part |
| 422 | split_pay.validation.methods_disabled | Turn on Split Payment with Non-Card Methods |
| 422 | split_pay.validation.method_not_allowed | Enable the method for split payments or choose another method |
| 422 | split_pay.validation.provider_not_available | Choose a provider from the GET /payments/methods list |
| 422 | split_pay.validation.provider_not_split_eligible | Choose a provider with splitEligible: true |
| 422 | split_pay.validation.duplicate_provider | Use a provider in one part only |
| 422 | split_pay.validation.multiple_irreversible_legs | Send at most one non-reversible part |
| 422 | split_pay.validation.leg_below_minimum | Raise the part to details.minLegAmount or more |
| 422 | split_pay.validation.leg_outside_provider_limits | Bring the part into the provider's details.minAmount–details.maxAmount range |
| 422 | split_pay.validation.invalid_installment | Choose installments between 1 and details.max; send no installments on a non-card part |
| 422 | split_pay.validation.installment_quote_rejected | Refresh the quote with the part's amount |
| 422 | split_pay.insurance.requires_card_leg | With insurance selected, add at least one card part or continue without insurance; the premium is collected from a card part |
| 422 | split_pay.validation.callback_url_required / callback_url_invalid | With a force3D part, send an http(s) callbackUrl |
| 422 | split_pay.validation.duplicate_card / mixed_owner | Distinct cards, same cardholder |
| 422 | payment.provider.disabled_in_form | In the Checkout Form, choose a provider shown in the form |
| 409 | split_pay.checkout.order_not_open | Another payment is in progress for the order or the order is closed; check details.reason |
| 409 | payment.checkout.order_locked | A split payment is in progress for the order; wait for it to finish |
| 409 | split_pay.step.not_allowed | Read the status and follow the expected step; check details.reason |
| 409 | split_pay.step.busy | Retry in a few seconds |
| 410 | split_pay.continuation.unavailable | The continuation link can no longer be used; check details.reason |
| 410 | split_pay.resume.unavailable | The continuation page link is invalid or has expired; check details.reason |
| 409 | split_pay.resume.already_opened | The payment is continuing in another window; the buyer continues there |
| 401 | split_pay.resume.proof_invalid | The buyer continues the payment in the window where the continuation page was first opened |
| 503 | split_pay.resume.not_configured | The split payment was not started and no money moved; try again shortly |
| 409 | split_pay.three_ds.restart_exhausted | 3D Secure for this card has already been restarted once and the separate page was opened; the buyer completes verification on that page |
| 410 | split_pay.three_ds.restart_expired | The 3D Secure session is closed or has expired; the buyer is asked to enter the card again. Check details.reason |
| 400 | split_pay.refund.amount_exceeded | Limit the amount to details.refundableAmount |
| 422 | split_pay.refund.amount_not_distributable | Choose an amount that covers a non-card part in full |
| 409 | split_pay.refund.not_allowed | Check details.reason |
| — | split_pay.refund.incomplete | Retry with the same Idempotency-Key |
| 400 | missing Idempotency-Key | Send the header on every request |
| 403 | Split payments disabled | The feature is off for your installation |
Related pages
- Multiple Cards — splitting with cards only
- Multiple Payment Methods — splitting with cards and non-card methods
- Checkout Form — Payment — single-method non-card payments and provider choice
- Listing Methods —
splitEligible,splitBehaviorand order - Pre-authorization, Capture & Void — the single-payment version of the hold and capture model
- Installments & BIN — installment quotes
- Webhooks — delivery and signatures