Accept Flexible Card Payments with API

Korapay enables merchants to accept flexible card payments through advanced card operations such as Pre-Authorization, single and multiple Captures, Void Captures, Void authorization, and Refunds. This guide walks you through each of these processes and explains how to make the most of them using our APIs.


Pre-requisites

  1. Before you start, ensure that your account on Korapay is activated.
  2. Card payments need to be enabled on your account before you can start accepting such payments. Reach out to our team at [email protected] with a request to allow card payments on your account.
  3. To make use of our Card APIs, you are also required to be PCI DSS certified (Level 1).

Pre Authorization

This API operation allows you to place a lien on an amount on the card for some time. Once this action has been carried out successfully, the amount remains unavailable to the cardholder until expiry or it has been voided

To use this endpoint, encrypt your charge details by following the steps listed below;

  1. Collect Details
  2. Encrypt Data

Statement Descriptor

Merchants can customize the description that appears on the cardholder's bank statement by using a dynamic_descriptor. This helps to ensure that the cardholder can recognize the transaction. The dynamic descriptor is limited to 10 alphanumeric characters (A-Z, 0-9), and no special characters are allowed. This can be added to the encryption payload.


curl --request POST \
     --url https://api.korapay.com/merchant/api/v1/charges/card/pre-authorize \
     --header 'Authorization: Bearer YOUR_KORAPAY_SECRET_KEY' \
     --data '{
        "charge_data": c62ac600880756fa9456e812dbbaccc8:14ed28362057615390765db7eb6a9f4630f12d23c67ad462621cd7e8cc:f2197fe1911162010cefa3038a12188f}'

{
    "status": true,
    "message": "success",
    "data": {
        "amount": 10,
        "total_authorized_amount": 10,
        "total_captured_amount": 0,
        "total_refunded_amount": 0,
        "currency": "NGN",
        "payment_reference": "auth_payment_ref_55486648601",
        "transaction_reference": "auth_transaction_ref_14318822981",
        "auth_model": "NO_AUTH",
        "response_message": "Operation completed successfully",
        "status": "pre_authorized",
        "charge_operation": "pre_authorization",
        "pre_auth_expiry": "2024-09-05 04:07:38",
        "metadata": {
            "gateway_code": "00",
            "receipt": "424914235206",
            "stan": "235206"
        },
        "card": {
            "card_type": "mastercard",
            "first_six": "523046",
            "last_four": "6017",
            "expiry": "06/29"
        }
    }
}


Use case

Zero Auth

It may be desirable for you as a merchant to confirm a card's validity without actually charging the card. We refer to this as Zero Auth. A zero base amount, like NGN0 or NGN0.1, is charged momentarily before being instantly canceled. This procedure verifies that the card is active and prepared for use in the future.


Capture

After authorizing a transaction, you can capture the full funds at once or in multiple stages.
You can make multiple partial captures until the full authorized amount is captured, or the authorization expires

📘

The payment_reference should be the payment reference used during the pre-authorization step.


curl --location 'https://api.korapay.com/merchant/api/v1/charges/card/capture' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer sk_live_**** \
--data '{
    "amount": "3",
    "currency": "NGN",
    "payment_reference": "auth_payment_ref_55486648601",
    "transaction_reference": "capture_transaction_ref_41125937954"
}'

{
    "status": true,
    "message": "Card charged successfully",
    "data": {
        "amount": 3,
        "amount_charged": 3,
        "total_authorized_amount": 10,
        "total_captured_amount": 3,
        "total_refunded_amount": 0,
        "currency": "NGN",
        "fee": 0.23,
        "vat": 0.02,
        "payment_reference": "auth_payment_ref_55486648601",
        "transaction_reference": "capture_transaction_ref_41125937954",
        "status": "success",
        "charge_operation": "capture",
        "pre_auth_expiry": "2024-09-05 04:07:38",
        "response_message": "Card charged successfully",
        "metadata": {
            "gateway_code": "00",
            "receipt": "424914235206",
            "stan": "236286"
        },
        "card": {
            "card_type": "mastercard",
            "first_six": "523046",
            "last_four": "6017",
            "expiry": "06/29"
        }
    }
}


Use case

Flexible order processing

You can choose to capture funds incrementally as different milestones of an order or service are fulfilled


Void

This operation allows you to cancel a capture or pre-authorization transaction that has not yet been settled by Korapay.

📘

Void operation can only be performed on unsettled transactions. If multiple captures are made, the capture before the most recent capture is treated as a settled transaction. This means to successfully void auth, you need to have just one capture after the auth


curl --location 'https://api.korapay.com/merchant/api/v1/charges/card/void' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer sk_live_*****' \
--data '{
    "payment_reference": "auth_payment_ref_55486648601",
    "transaction_reference": "void_transaction_ref_8878739831",
    "target_transaction_reference": "capture_transaction_ref_41125937954"
}'

{
    "status": true,
    "message": "Authorization voided successfully",
    "data": {
        "amount": "10.00",
        "total_authorized_amount": 0,
        "total_captured_amount": 0,
        "total_refunded_amount": 0,
        "currency": "NGN",
        "payment_reference": "auth_payment_ref_55486648601",
        "target_transaction_reference": "auth_transaction_ref_14318822981",
        "transaction_reference": "void_transaction_ref_37239989472",
        "response_message": "Operation completed successfully",
        "status": "void_capture",
        "charge_operation": "void_authorization",
        "pre_auth_expiry": "2024-09-05 04:07:38",
        "metadata": {
            "gateway_code": "00",
            "receipt": "424914235206",
            "stan": "236353"
        },
        "card": {
            "card_type": "mastercard",
            "first_six": "523046",
            "last_four": "6017",
            "expiry": "06/29"
        }
    }
}


Use case

Void can also be used to test a card’s validity. An auth request can be made for a nominal amount and then immediately voided. See Zero Auth for more details


Refund

Refunds are applicable only for settled transactions. You can request a partial or full refund on settled transactions.

curl --location 'https://api.korapay.com/merchant/api/v1/charges/card/refund \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer sk_live_*****' \
--data '{
    "amount": "3",
    "currency": "NGN",
    "payment_reference": "auth_payment_ref_55486648601",
    "transaction_reference": "void_transaction_ref_8878739831",
    "target_transaction_reference": "capture_transaction_ref_41125937954"
}'

{
    "status": true,
    "message": "Authorization voided successfully",
    "data": {
        "amount": "10.00",
        "total_authorized_amount": 0,
        "total_captured_amount": 0,
        "total_refunded_amount": 0,
        "currency": "NGN",
        "payment_reference": "auth_payment_ref_55486648601",
        "target_transaction_reference": "auth_transaction_ref_14318822981",
        "transaction_reference": "void_transaction_ref_37239989472",
        "response_message": "Operation completed successfully",
        "status": "void_capture",
        "charge_operation": "void_authorization",
        "pre_auth_expiry": "2024-09-05 04:07:38",
        "metadata": {
            "gateway_code": "00",
            "receipt": "424914235206",
            "stan": "236353"
        },
        "card": {
            "card_type": "mastercard",
            "first_six": "523046",
            "last_four": "6017",
            "expiry": "06/29"
        }
    }
}


Use case

Chargeback

When a customer disputes a transaction and requests a chargeback, the full or partial refund of the disputed amount can be sent back to the card.