Payment Orchestrator
Payment

Non-card Methods — Checkout Form

Besides cards, the Checkout Form shows the non-card methods that are open on your account, such as wallets, mobile billing (Faturana Yansıt) and promissory notes (Senetle Öde). The buyer picks the method in the form, enters the requested data and, depending on the method, approves the payment with a code sent to their phone.

This page is for the Checkout Form path. The Checkout Form SDK makes the non-card method calls (POST /payments/form/payment and the action confirmation) from the buyer's browser itself. You do not need to write any extra code: the code you write is the same as for cards — create an intent on your server and mount the form on your page → Checkout Form.

If you start the payment from your own server, this page is not for you → Payment.

How it works

Enable the method for the form (once)

In the panel, open the method and connect its provider on the Payments → Form Settings screen. You set the order of methods and providers in the form on the same screen. Details: Enabling methods in the form.

Create an intent and mount the form

The steps are the same as for cards → Checkout Form. The amount, basket and buyer data are read from the intent; the browser cannot change them.

The buyer picks the method and the provider, then approves

The buyer picks the method; if more than one provider of the method is shown in the form, the buyer picks one. The form collects the data the chosen provider needs (e.g. a phone number), starts the payment and asks the buyer for the verification code. See Provider choice and Steps the buyer sees.

Receive the result by webhook

When the payment completes, payment.captured reaches your webhook; when it fails, payment.failed. Ship the order on payment.captured.

Enabling methods in the form

  • In the panel, on Payments → Form Settings, enable the method group and select the connected provider. The form only shows methods that are enabled and have at least one connected provider.
  • The form uses the same list as GET /payments/methods. You can check from your server which methods the form will show with this endpoint.
  • To narrow the methods shown for one intent, send settings.paymentMethods on the intent, for example ["card", "mobile_billing"]. This field cannot open a method that is disabled in the panel; it only narrows.
  • If you created the intent with "preauth": true, the form only shows methods and providers that support pre-authorization → Pre-authorization.
  • If you created the intent with "paymentMethod": "WALLET", the payment is pinned to the wallet: the form opens directly with the wallet and cannot be paid by card or with another method. With walletProvider you can also preselect the wallet.
  • If you create the intent with "paymentMethod": "PROMISSORY_NOTE", the payment is pinned to promissory notes. You can provide the due-date schedule in the intent with promissoryNote.schedule; if you do not, the buyer chooses the number of notes → Promissory Notes — With the Checkout Form.
MethodGroup in the form settingsWhat the buyer does
WalletwalletPicks the wallet, enters the phone number, approves with the code received
Mobile billingmobile_billingPicks the provider when more than one is shown, enters the line, enters the code received and accepts the agreement
Promissory notespromissory_noteSees the schedule or chooses the number of notes, enters the debtor details; no code

To let the buyer split one order across several methods (e.g. two cards and mobile billing): Split Payments.

Order and providers shown in the form

In the panel, on Payments → Form Settings:

  • You drag the method tabs into order. The form shows the tabs in this order.
  • In the Payment options list of each non-card method you drag the providers into order. The form shows the options in this order.
  • You turn each provider on or off for the form with the Show in the form switch.

Ordering rules:

  • If you have not set an order, methods and providers come in the default order; see Listing Methods › Order.
  • A provider you connect later is added to the end of its method's order. A provider whose connection you turn off drops out of the order.
  • The order is the same in the test and live environments.
  • The form, the panel and GET /payments/methods use the same order.

A provider turned off for the form:

  • Is hidden only in the form. It stays in the GET /payments/methods list and can be used with POST /payments/direct/payment. To turn a provider off everywhere, turn off its provider connection.
  • Cannot be used to start a payment from the form: the request gets 422 payment.provider.disabled_in_form.
  • If a method has no provider left that is shown in the form, the method is not shown in the form. A provider under maintenance is not shown in the form either.

Provider choice

In the form the buyer chooses the provider for every non-card method, mobile billing included.

  • More than one provider shown in the form: the form lists the options in your order, with each provider's logo and name; the buyer picks one. If there is no logo, the provider's name is shown.
  • One provider shown: no picker is shown. The provider's logo (or its name if there is no logo) is visible and the payment is made with that provider.
  • The form collects the fields the chosen provider needs and always sends the chosen provider's code.
  • The providerSelectionMode of the method row does not change the form's behaviour. It only decides what happens in the Direct API when no providerCode is sent → Listing Methods › Provider selection.

If the choice does not go through:

  • If the provider declined the payment before any money moved and the payment record is still open, the buyer can pick another provider or method on the same screen.
  • While an attempt whose result is not yet known is in progress, no new choice can be made; the form waits for the result.
  • A non-card method can be selected at most 3 times per payment. Once the limit is reached, a non-card selection gets 409 payment.method.selection_attempts_exhausted; the buyer can pay by card.

Steps the buyer sees

Mobile billing

Picks the method

The buyer selects mobile billing among the payment methods. The form explains that the amount is added to the bill of the selected line and that the code is sent to that line by SMS.

Picks the provider

If more than one provider is shown in the form, the buyer picks one. With a single provider there is no such step; the provider's logo or name is shown.

Enters the line

If you sent buyer.gsmNumber on the intent the field is prefilled; the buyer can change it.

Enters the code and accepts the agreement

The form shows the masked number the code was sent to, the time left and the provider's agreement link. The buyer enters the code and accepts the agreement; without acceptance the payment does not continue. If the code did not arrive, Resend code requests a new one. On a wrong code the form shows the remaining attempts.

Sees the result

When the payment completes the form shows a success message. If the line is not eligible for this method or the billing limit is not enough, the form says so.

Wallet

Picks the wallet

The wallets shown in the form are listed in your order with their names and logos; when there is more than one, the buyer picks one. If your business's own wallet program is connected, it appears with your program's name and logo. If you sent walletProvider on the intent, that wallet is preselected.

Enters the phone number

The code is sent to this number. If you sent customerId on the intent, the buyer is matched to the customer record in your wallet program and the number is verified against that record.

Enters the code and approves

The form shows the masked number the code was sent to and the name of the business receiving the payment. When the wallet passes fees or tax on to the buyer, the form shows the total to pay with its breakdown.

Sees the result

When the payment completes the form shows a success message. If the balance or limit is not enough, the buyer can pick another method without any money moving.

Promissory notes

The buyer selects Promissory Notes, sees the schedule you provided or chooses the number of notes, and enters the debtor details (and guarantors if needed). There is no code or redirect: the notes are issued immediately and the form shows the result. Step details: Promissory Notes — What the buyer sees.

Result

  • For non-card methods the buyer's browser is not redirected to your callbackUrl; the result is shown in the form. Close the order based on the payment.captured webhook or a GET /payments/:id query.
  • If a decline arrived before any money moved and the payment record is still open, the form offers the buyer another provider or method.
  • If the payment became FAILED, it cannot be paid again with the same intent; if the buyer wants to pay again, create a new intent.
  • If the result is being verified with the provider, the form shows a waiting message; the final result arrives by webhook.

Endpoint reference — POST /payments/form/payment

This section is for reference; the SDK calls the endpoints.

FieldTypeRequiredDescription
tokenstringYesForm token (the token in the intent response)
checkoutSessionProofstringNoSession proof; body fallback for environments that cannot carry cookies
paymentMethodstringYesWALLET, MOBILE_BILLING or PROMISSORY_NOTE. In the form, cards are always charged with form/2d and form/3d
wallet, mobileBilling, promissoryNoteobjectBy methodOnly the block that matches paymentMethod; the fields are the provider's inputFields definition. For every method the form sends the code of the provider the buyer chose as providerCode; when only one provider is shown in the form, it sends that provider's code. Rules of the promissory-note block: Promissory Notes
browserFingerprintstringYesBrowser fingerprint
paymentChannelstringYesWEB, MOBILE …
liveSessionTraceIdstringNoTrace of the risk session
  • The amount, basket, buyer and callbackUrl are not in this body; they are read from the intent. If sent, the request gets 400 VALIDATION_ERROR.
  • Confirming and resending the code use the action endpoints on Payment; when called from the form, the body carries token (and checkoutSessionProof when needed) instead of a signature.
  • The response has the same shape as Payment — Response.
{
  "token": "eyJhbGciOi…",
  "paymentMethod": "MOBILE_BILLING",
  "mobileBilling": { "providerCode": "<providerCode>", "gsmNumber": "+905321234567" },
  "browserFingerprint": "…",
  "paymentChannel": "WEB"
}

Errors

The form shows these errors to the buyer with a clear message. The codes are for support and log analysis.

SituationCodeWhat to do
The method is disabled in the form settings422 payment.method.disabledEnable the method in the panel
The selected provider is not connected422 payment.provider.not_availableConnect the provider in the panel
The selected provider is turned off for the form422 payment.provider.disabled_in_formThe form offers the buyer another provider or method. To use the provider in the form, turn on Show in the form in the panel
The non-card method selection limit (3) for this payment is reached409 payment.method.selection_attempts_exhaustedThe buyer can pay by card
A split payment is in progress for the order409 payment.checkout.order_lockedWait for the split payment to finish; see Split Payments
The intent is pinned to another method409 payment.method.intent_method_conflictCreate the intent without paymentMethod
The payment already started or is closed409 payment.method.intent_not_openIf the buyer wants to pay again, create a new intent
A card was sent to this endpoint from the form400 payment.method.card_uses_form_card_endpointsUse the current SDK; it charges cards with form/2d or form/3d
The method does not support pre-authorization422 payment.preauth.unsupported_for_methodCreate the intent without preauth, or disable the method
A field does not match the provider's definition400 payment.method.block_invalidThe form shows it under the field; the buyer corrects it
Form token or session proof invalid401See Card Payment — 2D, Errors

Code confirmation and resend errors: Payment — Error codes.

Error codes

CodeHTTPMeaning
payment.method.disabled422The method is disabled in the business's form settings, or it is not in the intent's settings.paymentMethods list
payment.method.intent_method_conflict409The intent was pinned to another method when it was created; the buyer cannot change the method
payment.method.intent_not_open409A method cannot be selected for this payment: it already started or is closed. A method is selected once per payment
payment.method.card_uses_form_card_endpoints400Card payments in the form use POST /payments/form/2d and POST /payments/form/3d
payment.method.intent_not_card409An intent pinned to a non-card method was sent to the card endpoints; the intent was not changed and can be paid with its own method

Webhooks

EventWhen
payment.capturedThe payment completed. Ship the order on this event. For promissory notes it reports that the notes were issued; collection happens at maturity
payment.authorizedThe amount was held for a pre-authorization (AUTHORIZED); no funds were captured yet. See Pre-authorization
payment.failedThe payment failed; nothing was charged

The data of the events carries paymentMethod (e.g. MOBILE_BILLING, WALLET, PROMISSORY_NOTE) and the providerCode of the provider that processed the payment. The outcomes of promissory notes at maturity arrive as separate events → Promissory Notes — Webhooks. Delivery and signature verification → Webhooks.

Next steps