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:
- Merchant Name — The merchant receiving the funds. Example:
EXAMPLE Inc. - Expiration Timer — Shows how much time remains before the checkout expires. Example:
57m 4s - Receiving e-Transfer Email — The email address to which the customer sends the Interac e-Transfer. Example:
pay@cadpayment.ca - Amount — The exact amount the customer must send. Example:
$100.00 CAD - 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. - "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:
- Webhooks — recommended
- 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-urlsExample body:
{
"url": "https://myfencestore.com/api/invinciblepay/webhook"
}You can also list your registered webhook URLs:
GET /v1/webhook-urlsAnd 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
-
Customer clicks Pay on your website.
Your backend creates an internal order:
order_id = ORD-10045 amount = 100.00 currency = CAD payment_status = pending -
Your backend creates an InvinciblePay checkout:
POST /v1/checkoutExample 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 -
Redirect the customer to the returned
checkout_url. -
Customer sends an Interac e-Transfer using their banking app, for example:
Recipient: deposit@invinciblepay.com Amount: $100.00 Message: C18ZP7K -
Customer clicks "I've Sent My Payment".
-
InvinciblePay receives the e-Transfer.
-
InvinciblePay automatically matches the payment using:
- reference code
- amount
- merchant funding source
- recipient email
-
Checkout status becomes
completed. -
InvinciblePay sends a webhook.
-
Your backend fetches the checkout and confirms
status == completed. -
Your backend marks the order as paid.