Canada — CAD Interac collect and payout
Base URL
https://api.transacty.ai
Summary
Collect CAD (Interac Request Money or Interac e-transfer email) and pay out CAD (Canadian bank, Interac email, or bill pay). Proceeds settle to the merchant CAD wallet only — no FX swap to USDC/USDT.
Each collect is one deposit per API call. Your checkout is the returned
paymentInstructions. For Interac email, Transacty does not email the payer —
show recipientEmail, securityQuestion, and securityAnswer so they send the
e-transfer themselves.
Swaps, NGN/BVN, permanent virtual accounts, and PYUSD/USDC pockets are not part of this rail.
Live only
This rail has no sandbox. Use a live API key. A test key returns 503
{ "code": "payment_unavailable" }.
Settlement wallet & market
| Collect | One deposit per API call; payer completes Interac using paymentInstructions |
| Request Money | Fixed amount (CAD); poll or wait for webhook |
| Interac email | Payer identified by sender email + Canadian phone. No outbound payment email — payer sends to recipientEmail with the security Q/A from paymentInstructions |
| Settle | Transacty credits CAD when the deposit is credited (webhook and/or poll) |
| Payout | Debit merchant CAD → bank / Interac email / bill pay |
| Spend | Other pockets cannot fund CAD payouts; CAD cannot fund USDC / PYUSD-USDC / NGN |
| Live only | Use a live API key. test → 503 payment_unavailable |
| Market | canada must be approved and KYC verified |
CAD is a separate wallet pocket. Never sum unlike currencies into one headline
number. Read it on GET /v1/balance items[].
Enable the canada market first. Until Canada is KYB-approved (and KYC
verified), /v1/cad/* returns 403 (market_not_enabled).
Limits (major units, CAD)
| Flow | Min | Max |
|---|---|---|
Collect (request_money) | 1 | 50,000 |
Collect (interac_email, when amount sent) | 1 | 50,000 |
| Payout | 1 | 50,000 |
Required headers
Every request uses HMAC authentication (same scheme as all /v1/* endpoints):
X-Transacty-KeyX-Transacty-Timestamp(Unix seconds)X-Transacty-Signature=HMAC-SHA256(secret, "{timestamp}.{rawBody}")Content-Type: application/jsonon POSTIdempotency-Key(16–255 chars, required on POST collects and POST payouts)
Required scopes
payin:create—POST/GET /v1/cad/collectspayout:create— payouts,GET /v1/cad/institutions,POST /v1/cad/verify-bank,GET /v1/cad/bills/search
Collect flow
| Step | Merchant server | Transacty API |
|---|---|---|
| 1 | Create a collect | POST /v1/cad/collects with Idempotency-Key |
| 2 | Store transactionId; render paymentInstructions in your checkout | — |
| 3 | Request Money: payer completes the Interac request. Interac email: payer sends e-transfer to recipientEmail with the security Q/A | — |
| 4 | Poll or wait for webhook | GET /v1/cad/collects/:transactionId |
| 5 | Credit your order when settled: true / status is credited / payin.completed | — |
List history with GET /v1/transactions?type=payin, then
filter rail === "canada" in your app (no rail= query).
Payout flow
| Step | API |
|---|---|
| 1 | GET /v1/cad/institutions (bank rail) |
| 2 | POST /v1/cad/verify-bank (optional, bank rail) |
| 3 | GET /v1/cad/bills/search?query= (bill rail) |
| 4 | POST /v1/cad/payouts with Idempotency-Key |
| 5 | GET /v1/cad/payouts/:transactionId or wait for webhook |
Creating a payout debits the CAD wallet immediately. Insufficient balance →
400. On payout.failed, the send amount is refunded to CAD when applicable.
Webhook events
When a webhook URL is configured, Transacty sends:
payin.completed— collect credited to CAD (currency: "CAD")payin.failed— collect failed / expiredpayout.completed— payout succeededpayout.failed— payout failed
See Webhooks for signature verification.