Documentation Index
Fetch the complete documentation index at: https://docs.flinks.com/llms.txt
Use this file to discover all available pages before exploring further.
Work in progressThis section is currently under active development as part of improvements planned for 2026. Content may change as we expand product capabilities.If you’re interested in early access or want to learn more about what’s coming, feel free to reach out to the team.
This guide walks you through setting up Flinks Pay with EFT (Electronic Funds Transfer) as the payment method, from sandbox testing to production.
Prerequisites
Before starting your integration:
- Complete Flinks onboarding and receive your API credentials (
x-client-id)
- Review and finalize your Pre-Authorized Debit (PAD) agreement with Flinks
- Obtain sandbox access credentials from your Flinks representative
Step 1: Set Up Environments
Use the appropriate base URL for your environment:
| Environment | Base URL |
|---|
| Sandbox | https://payments-uat.flinksapp.com |
| Production | https://payments.flinksapp.com |
Start development in the sandbox environment. All examples below use the sandbox URL.
Step 2: Authenticate
Obtain an access token using the /api/v1/authorize endpoint with your Client ID and Secret:
curl --location 'https://payments-uat.flinksapp.com/api/v1/authorize' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header 'Authorization: Basic {{clientId:clientSecret}}' \
--data-urlencode 'grant_type=client_credentials'
The response includes an access_token valid for 299 seconds. See Authorize for details.
Step 3: Create an EFT Transaction
Call POST /api/v1/transactions to create a new EFT transaction. Include your x-client-id header for authentication.
One-Time Debit Example
curl --location 'https://payments-uat.flinksapp.com/api/v1/transactions' \
--header 'Content-Type: application/json' \
--header 'x-client-id: {{your-client-id}}' \
--data '[{
"transactionCode": 1,
"amount": 100.00,
"description": "Invoice 12345",
"crossReferenceNumber": "INV-12345",
"paymentDirection": "DEBIT",
"currency": "CAD",
"payor": {
"accountInfo": {
"institutionCode": "001",
"transitNumber": "12345",
"accountNumber": "1234567"
},
"contactInfo": {
"firstName": "John",
"lastName": "Smith"
}
},
"scheduleInfo": {
"paymentFrequency": "OneTime",
"startDate": "2026-04-15"
}
}]'
The response returns a schedules array containing the created schedule with its ID and status.
Recurring Debit Example
curl --location 'https://payments-uat.flinksapp.com/api/v1/transactions' \
--header 'Content-Type: application/json' \
--header 'x-client-id: {{your-client-id}}' \
--data '[{
"transactionCode": 1,
"amount": 50.00,
"paymentDirection": "DEBIT",
"currency": "CAD",
"payor": {
"accountInfo": {
"institutionCode": "001",
"transitNumber": "12345",
"accountNumber": "1234567"
},
"contactInfo": {
"firstName": "John",
"lastName": "Smith"
}
},
"scheduleInfo": {
"paymentFrequency": "Monthly",
"startDate": "2026-04-15",
"transactionsCount": 12
}
}]'
See Create Transaction for the full request and response schema.
Step 4: Monitor Payment Status
Poll the payment request status to track your transaction:
curl --location 'https://payments-uat.flinksapp.com/api/v1/paymentrequests/{{requestId}}'
Optionally pass refreshStatus=true to fetch the latest status from the payment network before responding:
curl --location 'https://payments-uat.flinksapp.com/api/v1/paymentrequests/{{requestId}}?refreshStatus=true'
See the Get Payment Request endpoint (reference coming soon) for the full response schema and status values.
Step 5: Handle Recurring Schedules
For recurring debit transactions, you can define a schedule using one of the following approaches:
- End date — Payments continue on the set frequency until the end date is reached.
- Transaction count — A fixed number of payments (maximum 300) are executed on the set frequency.
You must provide exactly one of endDate or transactionsCount for recurring schedules.
Available Frequencies
| Frequency | Description |
|---|
OneTime | Single payment on the start date |
Weekly | Every week from the start date |
Biweekly | Every two weeks from the start date |
Monthly | Every month from the start date |
Step 6: Cancel Schedules When Needed
To cancel an upcoming schedule:
curl --location --request POST \
'https://payments-uat.flinksapp.com/api/v1/schedules/{{scheduleId}}/cancel' \
--header 'x-client-id: {{your-client-id}}'
To cancel a specific payment request:
curl --location --request POST \
'https://payments-uat.flinksapp.com/api/v1/paymentrequests/{{requestId}}/cancel'
Step 7: Go to Production
When you are ready to go live:
- Switch your base URL from
payments-uat.flinksapp.com to payments.flinksapp.com.
- Use your production API credentials (provided by Flinks during onboarding).
- Verify your PAD agreement is finalized and approved.
- Confirm your settlement account is configured with Flinks.
Field Specifications Summary
| Field | Constraint |
|---|
amount | Minimum $0.01 |
description | Max 15 characters |
crossReferenceNumber | Alphanumeric + hyphens, max 36 characters |
institutionCode | Exactly 3 digits |
transitNumber | Exactly 5 digits |
accountNumber | 7–12 digits |
transactionsCount | Max 300 (recurring only) |
Common Integration Issues
- Start date must be in the future for debit transactions. Same-day start dates are only valid for credit transactions.
- DEBIT requires
payor, not payee. CREDIT requires payee, not payor.
- Recurring schedules need either
endDate or transactionsCount, but not both.
- Credit transactions only support
OneTime frequency with a same-day start date.
- Account info must provide either an
accountId or the combination of institutionCode + transitNumber + accountNumber, but not both.