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_lookups_id": "loo_abc123...",
  // either pass the order_id or the order object
  "order_id": "ord_12345",
  // create a new order
  "order": {
    "reference": "ORD0045",
    "description": "Monthly plan + setup",
    "amount_subtotal": "1100.00",
    "amount_discount": "0.00",
    "amount_shipping": "0.00",
    "amount_tax": "100.00",
    "amount_total": "1200.00",
    "items": [
      {
        "sku": "SKU00567",
        "name": "Pro Plan (Monthly)",
        "quantity": 1,
        "unit_amount": "1200.00",
        "tax_amount": 0,
        "discount_amount": 0,
        "currency_lookups_id": "loo_abc123...",
        "metadata": {
          "custom_field_1": "custom data 1",
          "custom_field_2": "custom data 2",
        },
      }
    ]
  },
  // [optional: if no customer id or object is specified a form will show, here you can specify the fields to capture]
  "customer_fields": "reference,id_number,email,contact_number,billing,shipping",
  // [optional: 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"], // [optional: populate to specify payment methods to show else all will show]
    "payment_type_lookups_id": "loo_abc13...", // [optional: Direct Debit (Default), Pre-Authorization]
  },
  "cards": {
    "save_cards": true, // [optional: save cards for one-time payments]
    "show_cards": true, // [optional: show previous saved cards for use to select from]
  },
  "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
currency_lookups_idYString(32)Currency lookup IDloo_abc123...
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.amount_subtotalNStringSubtotal amount before tax, shipping, and discounts1100.00
order.amount_discountNStringTotal discount amount applied0.00
order.amount_shippingNStringShipping cost amount0.00
order.amount_taxNStringTax amount applied100.00
order.amount_totalNStringTotal order amount including all fees1200.00
order.items.skuCStringProduct SKUSKU00567
order.items.nameCStringProduct namePro Plan (Monthly)
order.items.quantityCIntegerItem quantity1
order.items.unit_amountCStringUnit price1200.00
order.items.tax_amountNNumberTax amount0
order.items.discount_amountNNumberDiscount amount0
order.items.currency_lookups_idNString(32)Currency lookup IDloo_abc123...
order.items.metadataNObjectAdditional metadata for this item{"custom_field_1": "custom data 1"}
customer_fieldsNStringComma-separated list of customer fields to capture in form (if no customer_id or customer object is specified)reference,id_number,email,contact_number,billing,shipping
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.line2NStringBilling address line 2Floor 5
customer.billing_address.city_or_townYStringBilling cityCape Town
customer.billing_address.province_or_stateNStringBilling province/stateWestern Cape
customer.billing_address.postal_or_zip_codeYStringPostal code8001
customer.billing_address.country_lookups_idYString(32)Country lookup IDloo_abc123...
customer.shipping.contact_nameNStringShipping contact nameJane Doe
customer.shipping.contact_numberNString(16)Shipping contact number+27820000000
customer.shipping.address.line1NStringShipping address line 11 Loop Street
customer.shipping.address.line2NStringShipping address line 2Floor 5
customer.shipping.address.city_or_townNStringShipping cityCape Town
customer.shipping.address.province_or_stateNStringShipping province/stateWestern Cape
customer.shipping.address.postal_or_zip_codeNStringShipping postal code8001
customer.shipping.address.country_lookups_idNString(32)Shipping country lookup IDloo_abc123...
customer.metadataNObjectAdditional customer metadata{"custom_field_1": "custom data 1"}
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_idsNArrayArray of allowed payment method IDs"pam_abc123"
payment.payment_type_lookups_idNString(32)Payment type lookup ID (e.g. Direct Debit, Pre-Authorization)loo_abc13...
payment.save_cardNBooleanWhether to save the card for future usetrue
payment.metadataNObjectAdditional payment metadata{"custom_field_1": "custom data 1"}
show_cardsNBooleanWhether to show all saved cards for the customertrue
card_idsNArrayArray of specific card IDs to show for the customer"crd_abc123..."
notifications.send_invoiceNBooleanWhether to send invoicetrue
notifications.send_confirmation_emailNBooleanWhether to send confirmation emailtrue
notifications.confirmation_email_overrideNStringOverride email for confirmationsaccounts@example.com
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_lookups_id": "loo_abc123...",
      "order_id": "ord_12345",
      "customer_id": "cus_abc123...",
      "page_url": "https://pay.kwik.co.za/checkout/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.currency_lookups_idString(32)Currency lookup IDloo_abc123...
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://pay.kwik.co.za/checkout/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_lookups_id": "loo_abc123...",
      "order_id": "ord_12345",
      "customer_id": "cus_abc123...",
      "card_id": "crd_abc123...", // return a card id if a card payment was made
      "transaction_id": "tra_abc123...",
      "transaction_status_lookups_id": "loo_abc123",
      "expires_at": "2025-09-13T12:30:00Z",
      "completed_at": "2025-09-13T10:15:30Z"
    },
    // return a payment only if a recurring payment was created
    "payment": {
      "id": "pay_abc123...",
      "amount": "1200.00",
      "currency_lookups_id": "loo_abc123...",
      "payment_status_lookups_id": "loo_abc123...",
      "payment_method_id": "pam_abc123...",
      "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.currency_lookups_idString(32)Currency lookup IDloo_abc123...
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.currency_lookups_idString(32)Payment currency lookup IDloo_abc123...
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