Invincible Pay
Checkout

Introduction

What is Checkout API?

The Checkout API creates a hosted InvinciblePay checkout page that guides customers through making an Interac e-Transfer.

InvinciblePay provides:

  • Merchant name
  • Receiving e-Transfer email
  • Exact payment amount
  • Unique reference code
  • Expiration countdown timer
  • "I've Sent My Payment" button

Customer Experience

The customer sees a hosted checkout page with the following elements:

  1. Merchant Name — The merchant receiving the funds. Example: EXAMPLE Inc.
  2. Expiration Timer — Shows how much time remains before the checkout expires. Example: 57m 4s
  3. Receiving e-Transfer Email — The email address to which the customer sends the Interac e-Transfer. Example: pay@cadpayment.ca
  4. Amount — The exact amount the customer must send. Example: $100.00 CAD
  5. Reference Code — A unique identifier generated by InvinciblePay. Example: C18ZP7K. The customer must include this code in the e-Transfer message or note. InvinciblePay uses this code to automatically match the incoming payment to the checkout.
  6. "I've Sent My Payment" Button — After sending the e-Transfer from their banking app, the customer clicks this button to notify InvinciblePay.

Important: Clicking this button does not mean the payment succeeded. It only informs InvinciblePay that the customer claims they initiated the transfer. The merchant should not mark the order as paid at this point.

Recommended Integration Model

Merchant websites should use:

  1. Webhooks — recommended
  2. Polling — fallback option

Webhooks notify your backend when a checkout changes state.

Register your webhook URL

Register a URL to receive webhook notifications:

POST /v1/webhook-urls

Example body:

{
  "url": "https://myfencestore.com/api/invinciblepay/webhook"
}

You can also list your registered webhook URLs:

GET /v1/webhook-urls

And manage an existing webhook URL:

PUT /v1/webhook-urls/{uuid}
DELETE /v1/webhook-urls/{uuid}

The API also exposes a webhook history/list endpoint at /v1/webhooks.

Checkout Flow

  1. Customer clicks Pay on your website.

    Your backend creates an internal order:

    order_id = ORD-10045
    amount = 100.00
    currency = CAD
    payment_status = pending
  2. Your backend creates an InvinciblePay checkout:

    POST /v1/checkout

    Example body:

    {
      "fundingSourceId": "fs_123",
      "amount": "100.00",
      "currency": "CAD",
      "expiresIn": 3600,
      "externalId": "ORD-10045",
      "redirectUrlSuccess": "https://example.com/ORD-10045/paid",
      "redirectUrlFailure": "https://example.com/ORD-10045/failed"
    }

    InvinciblePay returns:

    checkout_id = chk_123
    checkout_url = https://checkout.invinciblepay.com/c/a9df14d1-a602-4879-ad61-2966
    status = pending
  3. Redirect the customer to the returned checkout_url.

  4. Customer sends an Interac e-Transfer using their banking app, for example:

    Recipient: deposit@invinciblepay.com
    Amount: $100.00
    Message: C18ZP7K
  5. Customer clicks "I've Sent My Payment".

  6. InvinciblePay receives the e-Transfer.

  7. InvinciblePay automatically matches the payment using:

    • reference code
    • amount
    • merchant funding source
    • recipient email
  8. Checkout status becomes completed.

  9. InvinciblePay sends a webhook.

  10. Your backend fetches the checkout and confirms status == completed.

  11. Your backend marks the order as paid.

On this page