Reference

Checkout Page

Create a secure, customizable checkout page session to capture payments with cards, bank transfers, and other payment methods. Supports 3D Secure authentication, order management, customer creation, and webhook notifications.

Request

Request to get a checkout page session with URL

Path

POST /checkout/page

Request Body

{
  "mode": "one-off", // recurring or save
  "amount": "1200.00",
  "currency": "ZAR",
  // either pass the order_id or the order object
  "order_id": "ord_12345",
  // create a new order
  "order": {
    "reference": "ORD0045",
    "description": "Monthly plan + setup",
    "items": [
      {
        "sku": "plan_pro_monthly",
        "name": "Pro Plan (Monthly)",
        "quantity": 1,
        "unit_amount": "1200.00",
        "tax_amount": 0,
        "metadata": {
          "custom_field_1": "custom data 1",
          "custom_field_2": "custom data 2",
        },
      }
    ]
  },
  // either pass the customer_id or the customer object
  "customer_id": "cus_abc123...",
  // create a new customer
  "customer": {
    "reference": "CLN240919000001",
    "company_name": null,
    "person_name": "John",
    "person_surname": "Doe",
    "client_type_lookups_id": "loo_abc123...",
    "id_type_lookups_id": "loo_abc123...",
    "id_number": "900112....",
    "email": "johndoe@mail.com",
    "contact_number": "+27831234567",
    "billing_address": {
        "line1": "1 Loop Street",
        "line2": "Floor 5",
        "city_or_town": "Cape Town",
        "province_or_state": "Western Cape",
        "postal_or_zip_code": "8001",
        "country_lookups_id": "loo_abc123..."
    },
    "shipping": {
      "contact_name": "Jane Doe",
      "contact_number": "+27820000000",
      "address": {
        "line1": "1 Loop Street",
        "line2": "Floor 5",
        "city_or_town": "Cape Town",
        "province_or_state": "Western Cape",
        "postal_or_zip_code": "8001",
        "country_lookups_id": "loo_abc123..."
      },
    },
    "metadata": {
      "custom_field_1": "custom data 1",
      "custom_field_2": "custom data 2",
    },
  },
  "redirects": {
    "success_url": "https://merchant.example/success?order=ord_12345",
    "cancel_url": "https://merchant.example/cancel?order=ord_12345",
    "notify_url": "https://merchant.example/webhooks/payments"
  },
  "payment": {
    "payment_methods_ids": ["pam_abc123"],
    "metadata": {
      "custom_field_1": "custom data 1",
      "custom_field_2": "custom data 2",
    },
  },
  "card": {
    "request_3ds": "automatic", // always
    "save_card": true, 
    "payment_type": "DB", // PA
  },
  "notifications": {
    "send_invoice": true,
    "send_confirmation_email": true,
    "confirmation_email_override": "accounts@example.com"
  },
  "customization": {
    "locale": "en-ZA",
    "theme": "light",
    "type": "page", // or embed
    "display_cancel_button": true,
    "display_total": true,
    "display_cart": true,
    "brand": {
      "primary": "#00DC82",
    }
  },
}

Request Parameters

Field
RequiredType
Description
Example
modeYStringPayment mode - one-off, recurring, or saveone-off
amountYStringPayment amount1200.00
currencyYStringCurrency codeZAR
order_idCString(32)Either pass order_id OR order object. ID of existing orderord_12345
order.referenceCString(35)Order reference identifierORD0045
order.descriptionCStringDescription of the orderMonthly plan + setup
order.items.skuCStringProduct SKUplan_pro_monthly
order.items.nameCStringProduct namePro Plan (Monthly)
order.items.quantityCIntegerItem quantity1
order.items.unit_amountCStringUnit price1200.00
order.items.tax_amountNNumberTax amount0
customer_idCString(32)Either pass customer_id OR customer object. ID of existing customercus_abc123...
customer.referenceCString(35)Reference to identify a specific customerCLN240919000001
customer.company_nameNString(64)Company name if applicablenull
customer.person_nameCString(32)Customer's first nameJohn
customer.person_surnameCString(32)Customer's surnameDoe
customer.client_type_lookups_idCString(32)Client type lookup IDloo_abc123...
customer.id_type_lookups_idCString(32)ID type lookup (e.g. South African ID, passport)loo_abc123...
customer.id_numberCString(13)ID number900112...
customer.emailCString(128)Customer email addressjohndoe@mail.com
customer.contact_numberCString(16)Customer contact number+27831234567
customer.billing_address.line1YStringBilling address line 11 Loop Street
customer.billing_address.city_or_townYStringBilling cityCape Town
customer.billing_address.postal_or_zip_codeYStringPostal code8001
customer.billing_address.country_lookups_idYString(32)Country lookup IDloo_abc123...
redirects.success_urlYStringURL to redirect on successful paymenthttps://merchant.example/success
redirects.cancel_urlYStringURL to redirect on cancelled paymenthttps://merchant.example/cancel
redirects.notify_urlYStringWebhook URL for payment notificationshttps://merchant.example/webhooks/payments
payment.payment_methods_idsYArrayArray of allowed payment method IDs"pam_abc123"
card.request_3dsNString3D Secure request mode (automatic/always)automatic
card.save_cardNBooleanWhether to save the card for future usetrue
card.payment_typeNStringPayment type (DB for debit, PA for preauth)DB
notifications.send_invoiceNBooleanWhether to send invoicetrue
notifications.send_confirmation_emailNBooleanWhether to send confirmation emailtrue
customization.localeNStringUI localeen-ZA
customization.themeNStringUI themelight
customization.typeNStringUI type - page or embedpage
customization.display_cancel_buttonNBooleanWhether to display the cancel buttontrue
customization.display_totalNBooleanWhether to display the total amounttrue
customization.display_cartNBooleanWhether to display the cart/order itemstrue
customization.brand.primaryNStringPrimary brand color in hex format#00DC82

Response Body

{
    "status": true,
    "result": {
      "id": "chk_abc123...",
      "session_id": "ses_abc123...",
      "amount": "1200.00",
      "currency": "ZAR",
      "order_id": "ord_12345",
      "customer_id": "cus_abc123...",
      "page_url": "https://checkout.kwik.co.za/pay/cs_test_a1b2c3",
      "expires_at": "2025-09-13T12:30:00Z",
    }
}

Response Parameters

Field
Type
Description
Example
statusBooleanIndicates if the request was successfultrue
result.idStringUnique checkout session identifierchk_abc123...
result.session_idStringSession identifier for the checkoutses_abc123...
result.amountStringCheckout amount1200.00
result.currencyStringCurrency codeZAR
result.order_idString(32)Associated order IDord_12345
result.customer_idString(32)Associated customer IDcus_abc123...
result.page_urlStringURL to redirect user to complete checkouthttps://checkout.kwik.co.za/pay/cs_test_a1b2c3
result.expires_atStringISO timestamp when the checkout session expires2025-09-13T12:30:00Z

Webhook

When a checkout session is completed, updated, or expires, a webhook notification is sent to the notify_url specified in the request.

Webhook Payload

{
  "event": "checkout.completed", // checkout.expired, checkout.failed
  "data": [{
    "checkout": {
      "id": "chk_abc123...",
      "session_id": "ses_abc123...",
      "amount": "1200.00",
      "currency": "ZAR",
      "order_id": "ord_12345",
      "customer_id": "cus_abc123...",
      // return a card token if storing card details
      "card": {
        "token": "60d678e2465b5b6c4fd5e847ef39c70c4b0c22d1b826f39eb80a107b3b8433ad",
      },
      "transaction_id": "tra_abc123...",
      "transaction_status_lookups_id": "loo_abc123",
      "expires_at": "2025-09-13T12:30:00Z",
      "completed_at": "2025-09-13T10:15:30Z"
    },
    "payment": {
      "id": "pay_abc123...",
      "amount": "1200.00",
      "currency": "ZAR",
      "status": "paid",
      "payment_method": "card",
      "created_at": "2025-09-13T10:15:30Z"
    }
  }],
  "created_at": "2025-09-13T10:15:30Z"
}

Webhook Payload Parameters

Field
Type
Description
Example
eventStringType of webhook event that occurredcheckout.completed
dataArrayArray containing checkout and payment data...
data.checkout.idStringUnique checkout session identifierchk_abc123...
data.checkout.session_idStringSession identifier for the checkoutses_abc123...
data.checkout.amountStringCheckout amount1200.00
data.checkout.currencyStringCurrency codeZAR
data.checkout.order_idString(32)Associated order IDord_12345
data.checkout.customer_idString(32)Associated customer IDcus_abc123...
data.checkout.card.tokenStringCard token if card was saved60d678e2465b5b6c4fd5e847ef39c70c4b0c22d1b826f39eb80a107b3b8433ad
data.checkout.transaction_idStringTransaction identifiertra_abc123...
data.checkout.transaction_status_lookups_idStringTransaction status lookup IDloo_abc123
data.checkout.expires_atStringISO timestamp when checkout session expires2025-09-13T12:30:00Z
data.checkout.completed_atStringISO timestamp when checkout was completed2025-09-13T10:15:30Z
data.payment.idStringPayment identifierpay_abc123...
data.payment.amountStringPayment amount1200.00
data.payment.currencyStringPayment currencyZAR
data.payment.statusStringPayment statuspaid
data.payment.payment_methodStringPayment method usedcard
data.payment.created_atStringISO timestamp when payment was created2025-09-13T10:15:30Z
created_atStringISO timestamp when webhook was created2025-09-13T10:15:30Z

Webhook Events

EventDescriptionTrigger ConditionData Included
checkout.completedCheckout session was successfully completed with paymentWhen customer completes payment successfullyCheckout details, payment information, transaction data
checkout.expiredCheckout session expired without completionWhen checkout session reaches expiry time without paymentCheckout details only, no payment data
checkout.failedCheckout session failed due to payment failureWhen payment processing fails (declined card, insufficient funds, etc.)Checkout details, failed payment attempt, error information
checkout.abandonedCustomer abandoned the checkout processWhen customer leaves checkout page without completingCheckout details, abandonment timestamp
checkout.pendingPayment is pending additional verificationWhen payment requires manual review or 3DS authenticationCheckout details, pending payment status
checkout.cancelledCheckout was cancelled by customer or systemWhen cancel button is used or system cancels due to fraudCheckout details, cancellation reason

Webhook Security

All webhooks are sent with the following headers for verification:

  • X-Signature: HMAC-SHA256 signature of the payload
  • X-Timestamp: Unix timestamp of when the webhook was sent
  • User-Agent: Kwik-Webhooks/1.0

Webhook Response

Your endpoint should respond with a 200 status code to acknowledge receipt. Failed webhooks will be retried up to 3 times with exponential backoff.


Copyright © 2024 Kwik