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

# Create Transaction

> Create a new EFT transaction with optional recurring schedule. Supports both debit (collect from customer) and credit (send to customer) directions.

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

Create a new EFT transaction with optional recurring schedule. Supports both debit (collect from customer) and credit (send to customer) directions.

The request body is a JSON array containing one transaction object. Batch transactions are not currently supported.

## Validation Rules

### DEBIT Transactions

* `payor` is required; `payee` must be `null`
* `startDate` must be a **future** date
* **OneTime**: only `startDate` is required
* **Recurring**: `startDate` plus exactly one of `endDate` or `transactionsCount`
  * `endDate` must be after `startDate`
  * `transactionsCount` maximum is 300

### CREDIT Transactions

* `payee` is required; `payor` must be `null`
* Only `OneTime` frequency is supported
* `startDate` must be **today's date** (same-day processing only)

## Account Info Logic

Provide **either** `accountId` **or** the combination of `institutionCode` + `transitNumber` + `accountNumber`. You cannot provide both.

## Contact Info Logic

Provide **either** `contactId` **or** name fields (`firstName` + `lastName`, or `legalName`). You cannot provide both.


## OpenAPI

````yaml POST /api/v1/transactions
openapi: 3.0.3
info:
  title: Flinks EFT API
  description: >
    Flinks Electronic Funds Transfer (EFT) API provides endpoints to create,
    monitor, and manage PAD-based debit and credit transactions through Canada's
    EFT rail.


    ## Authentication

    Most endpoints require authentication using an API key passed via the
    `x-client-id` header, provided during onboarding.


    For more information, visit: https://docs.flinks.com
  version: 1.0.0
  contact:
    name: Flinks Support
    url: https://www.flinks.com/contact/sales
  termsOfService: https://www.flinks.com
servers:
  - url: https://www.{baseurl}.com
    description: Flinks Pay Production
    variables:
      baseurl:
        default: '{baseurl}'
        description: The base URI for the environment (e.g. flinks)
security: []
tags:
  - name: Transactions
    description: Create EFT debit and credit transactions
  - name: Payment Requests
    description: Monitor and manage payment requests
  - name: Schedules
    description: Manage recurring payment schedules
  - name: Contacts
    description: Retrieve stored contact information
  - name: PAD Agreements
    description: Retrieve Pre-Authorized Debit agreements
  - name: Institutions
    description: Retrieve supported financial institutions
paths:
  /api/v1/transactions:
    post:
      tags:
        - CTransactions
      summary: Create EFT Transaction
      description: >-
        Create a new EFT transaction with optional recurring schedule. Supports
        both debit (collect from customer) and credit (send to customer)
        directions.
      operationId: createEftTransaction
      parameters:
        - name: x-client-id
          in: header
          required: true
          description: Your API key provided during onboarding.
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/CreateEftTransactionRequest'
              minItems: 1
              maxItems: 1
              description: >-
                Array containing one transaction object. Batch transactions are
                not currently supported.
            example:
              - transactionCode: 1
                amount: 250
                description: Invoice 1001
                crossReferenceNumber: INV-1001
                paymentDirection: DEBIT
                currency: CAD
                payor:
                  accountInfo:
                    institutionCode: '001'
                    transitNumber: '12345'
                    accountNumber: '1234567'
                  contactInfo:
                    firstName: Jane
                    lastName: Doe
                scheduleInfo:
                  paymentFrequency: OneTime
                  startDate: '2026-04-15'
      responses:
        '200':
          description: Transaction created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateEftTransactionResponse'
              example:
                schedules:
                  - id: a1b2c3d4-5678-90ab-cdef-1234567890ab
                    amount: 250
                    startDate: '2026-04-15T00:00:00'
                    endDate: '0001-01-01T00:00:00'
                    transactionsCount: 1
                    frequency: OneTime
                    payor:
                      name: Jane Doe
                      email: null
                    payee:
                      name: null
                      email: null
                    status: Active
                    padStatus: null
                    padId: null
                    crossReferenceNumber: INV-1001
                    paymentDirection: DEBIT
        '400':
          description: Bad Request - Validation error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                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
                  ScheduleInfo.StartDate:
                    - Start Date must be in future
        '401':
          description: Unauthorized - Invalid or missing x-client-id header
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
components:
  schemas:
    CreateEftTransactionRequest:
      type: object
      required:
        - transactionCode
        - amount
        - paymentDirection
        - currency
        - scheduleInfo
      properties:
        transactionCode:
          type: integer
          description: >-
            Three-digit code identifying the payment type, as defined by
            Payments Canada Standard 007.
          example: 450
        amount:
          type: number
          format: double
          minimum: 0.01
          description: Payment amount. Minimum $0.01.
          example: 250
        description:
          type: string
          maxLength: 15
          description: Short description. Max 15 characters.
          example: Invoice 1001
        crossReferenceNumber:
          type: string
          maxLength: 36
          pattern: ^[A-Za-z0-9-]+$
          description: >-
            Your reference identifier. Alphanumeric and hyphens, max 36
            characters.
          example: INV-1001
        paymentDirection:
          type: string
          enum:
            - DEBIT
            - CREDIT
          description: '`DEBIT` to collect from customer, `CREDIT` to send to customer.'
          example: DEBIT
        currency:
          type: string
          enum:
            - CAD
          description: Currency code. Only `CAD` is supported.
          example: CAD
        purposeCategory:
          type: string
          description: Category for the payment purpose.
        payor:
          allOf:
            - $ref: '#/components/schemas/PartyInfo'
          description: Required for DEBIT transactions. Must be `null` for CREDIT.
          nullable: true
        payee:
          allOf:
            - $ref: '#/components/schemas/PartyInfo'
          description: Required for CREDIT transactions. Must be `null` for DEBIT.
          nullable: true
        scheduleInfo:
          $ref: '#/components/schemas/ScheduleInfo'
    CreateEftTransactionResponse:
      type: object
      properties:
        schedules:
          type: array
          items:
            $ref: '#/components/schemas/ScheduleResponseItem'
    ErrorResponse:
      type: object
      properties:
        type:
          type: string
          description: Error type URI.
          example: https://tools.ietf.org/html/rfc7231#section-6.5.1
        title:
          type: string
          description: Error title.
          example: Bad Request
        status:
          type: integer
          description: HTTP status code.
          example: 400
        detail:
          type: string
          description: Human-readable error description.
        errors:
          type: object
          additionalProperties:
            type: array
            items:
              type: string
          description: Field-level validation errors.
    PartyInfo:
      type: object
      required:
        - accountInfo
        - contactInfo
      properties:
        accountInfo:
          $ref: '#/components/schemas/AccountInfo'
        contactInfo:
          $ref: '#/components/schemas/ContactInfo'
    ScheduleInfo:
      type: object
      required:
        - paymentFrequency
        - startDate
      properties:
        paymentFrequency:
          type: string
          enum:
            - OneTime
            - Weekly
            - Biweekly
            - Monthly
          description: Payment frequency.
          example: OneTime
        startDate:
          type: string
          format: date
          description: ISO 8601 date (e.g., `2026-04-15`).
          example: '2026-04-15'
        endDate:
          type: string
          format: date
          description: >-
            End date for recurring schedules. Required if `transactionsCount` is
            not provided.
        transactionsCount:
          type: integer
          maximum: 300
          description: >-
            Number of payments for recurring schedules (max 300). Required if
            `endDate` is not provided.
    ScheduleResponseItem:
      type: object
      properties:
        id:
          type: string
          format: uuid
          description: Unique schedule identifier.
          example: a1b2c3d4-5678-90ab-cdef-1234567890ab
        amount:
          type: number
          format: double
          description: Payment amount.
          example: 250
        startDate:
          type: string
          format: date-time
          description: Schedule start date.
        endDate:
          type: string
          format: date-time
          description: Schedule end date (if applicable).
        transactionsCount:
          type: integer
          description: Total number of scheduled payments.
          example: 1
        frequency:
          type: string
          description: Payment frequency.
          example: OneTime
        payor:
          type: object
          properties:
            name:
              type: string
              nullable: true
              description: Payor name.
              example: Jane Doe
            email:
              type: string
              nullable: true
              description: Payor email.
        payee:
          type: object
          properties:
            name:
              type: string
              nullable: true
              description: Payee name.
            email:
              type: string
              nullable: true
              description: Payee email.
        status:
          type: string
          description: Schedule status.
          example: Active
        padStatus:
          type: string
          nullable: true
          description: PAD agreement status (if applicable).
        padId:
          type: string
          format: uuid
          nullable: true
          description: PAD agreement identifier (if applicable).
        crossReferenceNumber:
          type: string
          description: Your reference identifier.
          example: INV-1001
        paymentDirection:
          type: string
          enum:
            - DEBIT
            - CREDIT
          description: Payment direction.
          example: DEBIT
    AccountInfo:
      type: object
      description: >-
        Provide **either** `accountId` **or** the combination of
        `institutionCode` + `transitNumber` + `accountNumber`.
      properties:
        accountId:
          type: string
          format: uuid
          description: Reference to a previously stored account.
        institutionCode:
          type: string
          description: 3-digit financial institution code.
          example: '001'
        transitNumber:
          type: string
          description: 5-digit branch transit number.
          example: '12345'
        accountNumber:
          type: string
          description: 7–12 digit account number.
          example: '1234567'
    ContactInfo:
      type: object
      description: >-
        Provide **either** `contactId` **or** name fields (`firstName` +
        `lastName`, or `legalName`).
      properties:
        contactId:
          type: string
          format: uuid
          description: Reference to a previously stored contact.
        firstName:
          type: string
          description: Contact's first name.
          example: Jane
        lastName:
          type: string
          description: Contact's last name.
          example: Doe
        legalName:
          type: string
          description: Legal entity name (alternative to first/last name).
        contactType:
          type: string
          enum:
            - INDIVIDUAL
            - SMALL_BUSINESS
            - CORPORATION
          description: Contact type classification.

````