# PINless debit for Unified Payments API To accept PINless debit payments, you must request a payment using card details, or tokenized card data. Checkout.com automatically routes your transaction through a local debit network, if supported. ## Request a payment Call the [Request a payment](https://api-reference.checkout.com/tag/Payments/#operation/requestAPaymentOrPayout) endpoint: **Live** `POST` `https://{prefix}.api.checkout.com/payments/` **Sandbox** `POST` `https://{prefix}.api.sandbox.checkout.com/payments/` ### Request example **Full card details** ```json { "source": { "type": "card", "number": "4873400000000024", "expiry_month": 12, "expiry_year": 2027 }, "amount": 1000, "capture": true, "currency": "USD", "payment_type": "Regular" } ``` **Tokenized card details** ```json { "source": { "type": "token", "token": "tok_4gzeau5o2uqubbk6fufs3m7p54" }, "amount": 1000, "capture": true, "currency": "USD", "payment_type": "Regular" } ``` If you request an auto-capture payment, Checkout.com notifies you when the payment is captured using webhooks. When you receive a `payment_captured` webhook, it indicates that the transaction is successfully completed. > You cannot void an auto-captured payment. To reverse a payment in progress, wait for the payment to be captured, and then process a refund. --- ## Capture a payment If you set `capture` to `true` in your payment request, Checkout.com automatically authorizes and captures the payment. If you set `capture` to `false` in your payment request, we only authorize the payment. You must capture it manually. To perform a partial capture, call the [Capture a payment](https://api-reference.checkout.com/tag/Payments/#operation/captureAPayment) endpoint, and provide the `amount` and `items` objects. **Live** `POST` `https://{prefix}.api.checkout.com/payments/{id}/captures` **Sandbox** `POST` `https://{prefix}.api.sandbox.checkout.com/payments/{id}/captures` For more information, see [Capture a payment](https://www.checkout.com/docs/payments/manage-payments/capture-a-payment.md). --- ## Process merchant-initiated transactions You can process merchant-initiated transactions (MITs) to store your customer's card details and use them for future payments. Supported MIT transactions include: - Recurring payments
Because these are debit card payments, you cannot process installment payments. - Unscheduled payments **Recurring payments** You can process recurring payments using PINless debit. For example, to charge a subscription service. 1. Perform an initial cardholder-initiated transaction (CIT) to store the debit card details. For requirements, see [Store card details during an initial recurring transaction](https://www.checkout.com/docs/payments/accept-payments/pay-with-stored-card-details/recurring-payments-with-stored-card-details.md#Store_the_card_details_during_the_initial_transaction).
Ensure you provide `"payment_type": "Recurring"`. 2. Process subsequent payments using any previous payment ID. For requirements, see [Request a payment in a subsequent MIT](https://www.checkout.com/docs/payments/accept-payments/pay-with-stored-card-details/recurring-payments-with-stored-card-details.md#Request_a_payment_in_a_subsequent_MIT). ### Initial request example ```json { "source": { "type": "token", "token": "tok_4gzeau5o2uqubbk6fufs3m7p54" }, "amount": 6500, "currency": "GBP", "payment_type": "Recurring", "merchant_initiated": false } ``` ### Subsequent request example ```json { "source": { "type": "token", "token": "tok_4gzeau5o2uqubbk6fufs3m7p54" }, "amount": 6500, "currency": "GBP", "payment_type": "Recurring", "merchant_initiated": true, "previous_payment_id": "pay_paymentid" } ``` **Unscheduled payments** For example, a customer may provide their card details when checking in to a hotel, but is only charged after they check out, at which point they may have incurred additional charges. 1. Perform an initial unscheduled, zero-value transaction to store the debit card details. For requirements, see [Unscheduled payments with stored card details](https://www.checkout.com/docs/payments/accept-payments/pay-with-stored-card-details/unscheduled-payments-with-stored-card-details.md). 2. Process subsequent payments using any previous payment ID. For requirements, see [Request an unscheduled payment](https://www.checkout.com/docs/payments/accept-payments/pay-with-stored-card-details/unscheduled-payments-with-stored-card-details.md#Request_an_unscheduled_payment). ### Initial request example ```json { "source": { "type": "token", "token": "tok_4gzeau5o2uqubbk6fufs3m7p54" }, "amount": 0, "currency": "GBP", "payment_type": "Unscheduled", "merchant_initiated": false } ``` ### Subsequent request example ```json { "source": { "type": "token", "token": "tok_4gzeau5o2uqubbk6fufs3m7p54" }, "amount": 6500, "currency": "GBP", "payment_type": "Unscheduled", "merchant_initiated": true, "previous_payment_id": "pay_paymentid" } ``` --- ## Get payment details After you've requested the payment, you can use the `id` returned in the payment response to retrieve details about the payment. For more information, see [Get payment details](https://www.checkout.com/docs/payments/manage-payments/get-payment-details.md) and the [Get payment details](https://api-reference.checkout.com/tag/Payments/#operation/getPaymentsList) endpoint. --- ## Refund a payment PINless debit supports both partial and full refunds. You can process refunds using the [Dashboard](https://dashboard.checkout.com) or the [Refund API](https://www.checkout.com/docs/payments/manage-payments/refund-a-payment). --- ## Void a payment To void an authorized payment that you have not captured yet, call the [Void a payment](https://api-reference.checkout.com/tag/Payments/#operation/voidAPayment) endpoint, and provide `payment_id` of the payment you want to void as the `{id}` path parameter: **Live** `POST` `https://{prefix}.api.checkout.com/payments/{id}/voids` **Sandbox** `POST` `https://{prefix}.api.sandbox.checkout.com/payments/{id}/voids` If you receive a `202 Void accepted` response, your void request has been accepted for processing. To get the full void response, you must subscribe to the `payment_voided` webhook. If there was a problem with your request, you receive an error response such as `422 Invalid data was sent`. For more information, see [Void a payment](https://www.checkout.com/docs/payments/manage-payments/void-a-payment). ### Response examples If you receive a `202 Void accepted` response, your void request has been accepted for processing. To get the full void response, you must subscribe to the `payment_voided` webhook. If there was a problem with your request, you'll receive an error response such as `422 Invalid data was sent`. --- ## Test PINless debit payments To test PINless debit payments: 1. Create a test payment request. 2. Set `source.number` to any of the cards in the following table, depending on the outcome you want to simulate: | Status | Response code | PINless debit network | Card number | | --- | --- | --- | --- | | `10000` | `Approved` | Accel | `4873400000000024` | | `10000` | `Approved` | NYCE | `4817504310000183` | | `10000` | `Approved` | Pulse | `5838170077000196` | | `10000` | `Approved` | Star | `4524640077700195` | | `20005` | `Do not honor` | Accel | `4141900000000011` | | `20005` | `Do not honor` | NYCE | `5194290000000044` | | `20005` | `Do not honor` | Pulse | `4149810000055158` | | `20005` | `Do not honor` | Star | `5430320099900194` | To test cards that have an associated debit network but the transaction is rerouted and approved to signature, use the following cards: - `4902526690560177` - `5482730044440004`