> ## 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.

# EFT API Overview

> API reference for EFT (Electronic Funds Transfer) payments — V1 endpoints

<Warning>
  **Work in progress**

  This 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](/guides/support/contact-flinks).
</Warning>

The EFT (Electronic Funds Transfer) API provides endpoints to create, monitor, and manage PAD-based debit and credit transactions through Canada's EFT rail.

## Base URLs

**Production:** `{{BaseUri}}`
**Sandbox:** `{{BaseUri}}`

## Authentication

EFT API endpoints use two authentication methods:

1. **OAuth 2.0 Client Credentials** — Used for the `/authorize` endpoint. Authenticate with Basic auth (Client ID and Secret) to obtain a Bearer token valid for 599 seconds.
2. **API Key** — Most EFT endpoints authenticate via the `x-client-id` header, provided during onboarding.

## API Endpoints

### Authentication

| Method | Endpoint            | Description                                                   |
| ------ | ------------------- | ------------------------------------------------------------- |
| POST   | `/api/v1/authorize` | [Obtain access token](/api/pay/endpoints/authorize/authorize) |

### Transactions

| Method | Endpoint               | Description                                                         |
| ------ | ---------------------- | ------------------------------------------------------------------- |
| POST   | `/api/v1/transactions` | [Create EFT transaction](/api/pay/endpoints/eft/create-transaction) |

### Payment Requests

| Method | Endpoint                                     | Description                |
| ------ | -------------------------------------------- | -------------------------- |
| GET    | `/api/v1/paymentrequests/{requestId}`        | Get payment request status |
| POST   | `/api/v1/paymentrequests/{requestId}/cancel` | Cancel payment request     |

### Schedules

| Method | Endpoint                                | Description                                               |
| ------ | --------------------------------------- | --------------------------------------------------------- |
| POST   | `/api/v1/schedules/{scheduleId}/cancel` | [Cancel schedule](/api/pay/endpoints/eft/cancel-schedule) |

### Institutions

| Method | Endpoint               | Description                 |
| ------ | ---------------------- | --------------------------- |
| GET    | `/api/v1/institutions` | List supported institutions |

## Quick Start

### 1. Authenticate

```bash theme={null}
curl --location '{{BaseUri}}/api/v1/authorize' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header 'Authorization: Basic {{clientId:clientSecret}}' \
--data-urlencode 'grant_type=client_credentials'
```

### 2. Create a Transaction

```bash theme={null}
curl --location '{{BaseUri}}/api/v1/transactions' \
--header 'Content-Type: application/json' \
--header 'x-client-id: {{your-client-id}}' \
--data '[{
  "transactionCode": 1,
  "amount": 100.00,
  "paymentDirection": "DEBIT",
  "currency": "CAD",
  "payor": {
    "accountInfo": {
      "institutionCode": "001",
      "transitNumber": "12345",
      "accountNumber": "1234567"
    },
    "contactInfo": {
      "firstName": "John",
      "lastName": "Smith"
    }
  },
  "scheduleInfo": {
    "paymentFrequency": "OneTime",
    "startDate": "2026-04-15"
  }
}]'
```

### 3. Monitor Status

```bash theme={null}
curl --location '{{BaseUri}}/api/v1/paymentrequests/{{requestId}}'
```

## EFT Status Codes

### EFT Transaction Status (`EftStatus`)

| Status       | Description                                     |
| ------------ | ----------------------------------------------- |
| `Received`   | Transaction request received by Flinks          |
| `Created`    | Transaction created and queued for processing   |
| `Submitted`  | Submitted to Payments Canada                    |
| `Reconciled` | Confirmation received from the payment network  |
| `Settled`    | Funds have settled                              |
| `Cancelled`  | Transaction was cancelled before submission     |
| `Rejected`   | Transaction was rejected by the payment network |

### Payment Request Status (`PaymentStatus`)

| Status       | Description                     |
| ------------ | ------------------------------- |
| `Initiated`  | Payment request created         |
| `Processing` | Payment is being processed      |
| `Accepted`   | Payment accepted by the network |
| `Processed`  | Payment has been processed      |
| `Settled`    | Funds have settled              |
| `Cancelled`  | Payment was cancelled           |

## Field Specifications

### Character Limits

| Field                  | Constraint                                       |
| ---------------------- | ------------------------------------------------ |
| `description`          | Max 15 characters                                |
| `crossReferenceNumber` | Alphanumeric and hyphens only, max 36 characters |
| `institutionCode`      | Exactly 3 digits                                 |
| `transitNumber`        | Exactly 5 digits                                 |
| `accountNumber`        | 7–12 digits                                      |

### Amount Rules

| Rule     | Value      |
| -------- | ---------- |
| Minimum  | \$0.01     |
| Currency | `CAD` only |

## Validation Rules

### DEBIT Transactions

* `payor` is **required**; `payee` must not be provided
* `startDate` must be a future date
* **OneTime**: `startDate` is required
* **Recurring** (Weekly, Biweekly, Monthly): `startDate` is required, plus either `endDate` or `transactionsCount` (not both); `transactionsCount` max is 300; `endDate` must be after `startDate`

### CREDIT Transactions

* `payee` is **required**; `payor` must not be provided
* Only `OneTime` frequency is supported
* `startDate` must be the current day (same-day only)

### Account Info

Provide either:

* `accountId` (a GUID referencing a previously stored account), **or**
* The combination of `institutionCode` + `transitNumber` + `accountNumber`

You cannot provide both.

### Contact Info

Provide either:

* `contactId` (a GUID referencing a previously stored contact), **or**
* `firstName` + `lastName`, or `legalName`

You cannot provide both.

## Schedule Frequency Reference

| Frequency | Value      | Notes                               |
| --------- | ---------- | ----------------------------------- |
| One-time  | `OneTime`  | Single payment on start date        |
| Weekly    | `Weekly`   | Every 7 days from start date        |
| Biweekly  | `Biweekly` | Every 14 days from start date       |
| Monthly   | `Monthly`  | Same day each month from start date |

## EFT Processing Windows

Flinks follows Payments Canada EFT processing schedule:

| Window   | Cutoff Time | Submission Time | Days    |
| -------- | ----------- | --------------- | ------- |
| Window 1 | 2:30am EDT  | 9:30am EDT      | Mon–Fri |
| Window 2 | 1:30pm EDT  | 4:30pm EDT      | Mon–Fri |
| Window 3 | 6:00pm EDT  | 9:00pm EDT      | Mon–Fri |

No processing on weekends or statutory holidays.

## Error Handling

### Common Errors

**Validation Error (400):**

```json theme={null}
{
  "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
  "title": "Bad Request",
  "status": 400,
  "errors": {
    "Amount": ["Amount should be greater than 1 cent"],
    "Payor": ["Debit transactions require a Payor."]
  }
}
```

**Unauthorized (401):**
Returned when the `x-client-id` header is missing or invalid.

## Next Steps

1. **[Create Transaction](/api/pay/endpoints/eft/create-transaction)** — Full request and response schema
2. **Get Payment Request** — Monitor payment status (endpoint reference coming soon)
3. **[Setup Guide](/guides/pay/eft/setup-flinks-pay)** — Complete implementation walkthrough
