Teller API

Unified banking API for real-time access to accounts, transactions, balances, and identity data across US financial institutions. Supports account management, transaction history, balance retrieval, and account holder identity verification via a single REST API secured with mTLS and per-user access tokens.

OpenAPI Specification

teller-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Teller API
  description: >-
    Teller is a unified banking API providing real-time access to bank accounts,
    transactions, balances, identity data, and payment initiation across US financial
    institutions. Connect to thousands of banks and credit unions through a single
    integration. Teller uses mutual TLS (mTLS) for application authentication and
    access tokens obtained via Teller Connect for per-account authorization.
  version: 2020-10-12
  contact:
    name: Teller Developer Support
    url: https://teller.io/docs
  termsOfService: https://teller.io/legal/terms-of-service
servers:
  - url: https://api.teller.io
    description: Teller Production API
tags:
  - name: Identity
    description: Account holder identity information
  - name: Accounts
    description: Bank account management
  - name: Transactions
    description: Account transaction history
  - name: Institutions
    description: Supported financial institutions
paths:
  /identity:
    get:
      operationId: listIdentity
      summary: List Account Identity
      description: >-
        Returns an array of accounts with beneficial owner identity information
        attached, including names, addresses, phone numbers, and email addresses.
      tags:
        - Identity
      security:
        - BearerMtls: []
      parameters:
        - name: Teller-Version
          in: header
          schema:
            type: string
            default: '2020-10-12'
          description: API version header for requesting a specific version.
      responses:
        '200':
          description: Identity information retrieved successfully
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/AccountIdentity'
        '401':
          description: Unauthorized - invalid or missing access token
        '429':
          description: Rate limit exceeded
  /accounts:
    get:
      operationId: listAccounts
      summary: List Accounts
      description: Returns all bank accounts authorized by the current access token enrollment.
      tags:
        - Accounts
      security:
        - BearerMtls: []
      parameters:
        - name: Teller-Version
          in: header
          schema:
            type: string
          description: API version header.
      responses:
        '200':
          description: Accounts retrieved successfully
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Account'
        '401':
          description: Unauthorized
        '429':
          description: Rate limit exceeded
    delete:
      operationId: deleteAccounts
      summary: Delete Accounts
      description: >-
        Removes authorization to access all accounts in the enrollment. Does not
        delete the actual bank accounts.
      tags:
        - Accounts
      security:
        - BearerMtls: []
      responses:
        '204':
          description: Authorization revoked for all accounts
        '401':
          description: Unauthorized
  /accounts/{account_id}:
    get:
      operationId: getAccount
      summary: Get Account
      description: Retrieve a single bank account by ID.
      tags:
        - Accounts
      security:
        - BearerMtls: []
      parameters:
        - name: account_id
          in: path
          required: true
          schema:
            type: string
          description: The account identifier.
      responses:
        '200':
          description: Account retrieved successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Account'
        '401':
          description: Unauthorized
        '404':
          description: Account not found
    delete:
      operationId: deleteAccount
      summary: Delete Account
      description: >-
        Removes authorization to access the specified account. Does not delete
        the actual bank account.
      tags:
        - Accounts
      security:
        - BearerMtls: []
      parameters:
        - name: account_id
          in: path
          required: true
          schema:
            type: string
          description: The account identifier.
      responses:
        '204':
          description: Authorization revoked for account
        '401':
          description: Unauthorized
        '404':
          description: Account not found
  /accounts/{account_id}/details:
    get:
      operationId: getAccountDetails
      summary: Get Account Details
      description: >-
        Retrieve account details including routing number and account number for
        the specified bank account.
      tags:
        - Accounts
      security:
        - BearerMtls: []
      parameters:
        - name: account_id
          in: path
          required: true
          schema:
            type: string
          description: The account identifier.
      responses:
        '200':
          description: Account details retrieved successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AccountDetails'
        '401':
          description: Unauthorized
        '404':
          description: Account not found
  /accounts/{account_id}/balances:
    get:
      operationId: getAccountBalances
      summary: Get Account Balances
      description: Retrieve current available and ledger balances for the specified account.
      tags:
        - Accounts
      security:
        - BearerMtls: []
      parameters:
        - name: account_id
          in: path
          required: true
          schema:
            type: string
          description: The account identifier.
      responses:
        '200':
          description: Account balances retrieved successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AccountBalances'
        '401':
          description: Unauthorized
        '404':
          description: Account not found
  /accounts/{account_id}/transactions:
    get:
      operationId: listTransactions
      summary: List Transactions
      description: >-
        Returns a list of all transactions belonging to the specified account.
        Supports pagination and date range filtering.
      tags:
        - Transactions
      security:
        - BearerMtls: []
      parameters:
        - name: account_id
          in: path
          required: true
          schema:
            type: string
          description: The account identifier.
        - name: count
          in: query
          schema:
            type: integer
          description: Maximum number of transactions to return.
        - name: from_id
          in: query
          schema:
            type: string
          description: Paginate backward from this transaction ID.
        - name: start_date
          in: query
          schema:
            type: string
            format: date
          description: Filter transactions on or after this ISO 8601 date.
        - name: end_date
          in: query
          schema:
            type: string
            format: date
          description: Filter transactions on or before this ISO 8601 date.
      responses:
        '200':
          description: Transactions retrieved successfully
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Transaction'
        '401':
          description: Unauthorized
        '404':
          description: Account not found
        '429':
          description: Rate limit exceeded
  /accounts/{account_id}/transactions/{transaction_id}:
    get:
      operationId: getTransaction
      summary: Get Transaction
      description: Retrieve a single transaction by ID.
      tags:
        - Transactions
      security:
        - BearerMtls: []
      parameters:
        - name: account_id
          in: path
          required: true
          schema:
            type: string
          description: The account identifier.
        - name: transaction_id
          in: path
          required: true
          schema:
            type: string
          description: The transaction identifier.
      responses:
        '200':
          description: Transaction retrieved successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Transaction'
        '401':
          description: Unauthorized
        '404':
          description: Transaction not found
  /institutions:
    get:
      operationId: listInstitutions
      summary: List Institutions
      description: >-
        Returns all supported financial institutions and the Teller products available
        for each. Does not require authentication.
      tags:
        - Institutions
      responses:
        '200':
          description: Institutions retrieved successfully
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Institution'
components:
  securitySchemes:
    BearerMtls:
      type: http
      scheme: bearer
      description: >-
        Access token obtained via Teller Connect when a user successfully enrolls their
        bank account. Must be used together with a Teller client certificate (mTLS).
        Encoded using HTTP Basic Auth scheme: ACCESS_TOKEN as username, empty password.
  schemas:
    Account:
      type: object
      description: A bank account enrolled via Teller Connect
      properties:
        id:
          type: string
          description: Teller's unique identifier for the account
        enrollment_id:
          type: string
          description: Identifier for the enrollment (user session)
        name:
          type: string
          description: Name of the account as reported by the institution
        last_four:
          type: string
          description: Last four digits of the account number
        type:
          type: string
          description: Account type
          enum:
            - checking
            - savings
            - credit_card
            - money_market
            - mortgage
            - loan
        subtype:
          type: string
          description: Account subtype
        currency:
          type: string
          description: Currency code (e.g. USD)
        status:
          type: string
          description: Account status
          enum:
            - open
            - closed
        institution:
          $ref: '#/components/schemas/InstitutionRef'
        links:
          $ref: '#/components/schemas/AccountLinks'
    AccountLinks:
      type: object
      properties:
        self:
          type: string
          format: uri
        transactions:
          type: string
          format: uri
        balances:
          type: string
          format: uri
        details:
          type: string
          format: uri
    AccountDetails:
      type: object
      description: Sensitive account details including routing and account numbers
      properties:
        account_id:
          type: string
        account_number:
          type: string
          description: Full account number
        routing_numbers:
          type: object
          properties:
            ach:
              type: string
              description: ACH routing number
            wire:
              type: string
              description: Wire transfer routing number
    AccountBalances:
      type: object
      description: Current account balance information
      properties:
        account_id:
          type: string
        available:
          type: string
          description: Available balance as a string decimal
        ledger:
          type: string
          description: Ledger/posted balance as a string decimal
        links:
          type: object
          properties:
            self:
              type: string
              format: uri
            account:
              type: string
              format: uri
    AccountIdentity:
      type: object
      description: Account with attached owner identity information
      allOf:
        - $ref: '#/components/schemas/Account'
        - type: object
          properties:
            owners:
              type: array
              items:
                $ref: '#/components/schemas/Owner'
    Owner:
      type: object
      description: Beneficial owner of a bank account
      properties:
        type:
          type: string
          enum:
            - person
            - organization
            - unknown
        names:
          type: array
          items:
            type: object
            properties:
              type:
                type: string
                enum:
                  - name
                  - alias
              data:
                type: string
        addresses:
          type: array
          items:
            type: object
            properties:
              primary:
                type: boolean
              data:
                type: object
                properties:
                  street:
                    type: string
                  city:
                    type: string
                  region:
                    type: string
                  postal_code:
                    type: string
                  country:
                    type: string
        phone_numbers:
          type: array
          items:
            type: object
            properties:
              type:
                type: string
                enum:
                  - mobile
                  - home
                  - work
                  - unknown
              data:
                type: string
        emails:
          type: array
          items:
            type: object
            properties:
              data:
                type: string
                format: email
    Transaction:
      type: object
      description: A financial transaction on a bank account
      properties:
        id:
          type: string
          description: Teller transaction identifier
        account_id:
          type: string
          description: Account this transaction belongs to
        amount:
          type: string
          description: Transaction amount as signed decimal string (negative = debit)
        date:
          type: string
          format: date
          description: ISO 8601 transaction date
        description:
          type: string
          description: Bank statement text
        status:
          type: string
          enum:
            - posted
            - pending
          description: Whether the transaction has settled
        type:
          type: string
          description: Transaction type
          enum:
            - card_payment
            - transfer
            - atm
            - deposit
            - withdrawal
            - digital_payment
            - wire
            - check
            - interest
            - fee
            - other
        running_balance:
          type: string
          description: Running account balance after this transaction (posted only)
        details:
          $ref: '#/components/schemas/TransactionDetails'
        links:
          type: object
          properties:
            self:
              type: string
              format: uri
            account:
              type: string
              format: uri
    TransactionDetails:
      type: object
      properties:
        processing_status:
          type: string
          enum:
            - pending
            - complete
        category:
          type: string
          description: >-
            Transaction category (e.g. dining, groceries, utilities, travel, entertainment)
        counterparty:
          type: object
          properties:
            name:
              type: string
              description: Name of the merchant or counterparty
            type:
              type: string
              enum:
                - person
                - organization
    Institution:
      type: object
      description: A supported financial institution
      properties:
        id:
          type: string
          description: Teller identifier for the institution
        name:
          type: string
          description: Institution name
        products:
          type: array
          description: Teller products available for this institution
          items:
            type: string
            enum:
              - verify
              - balance
              - transactions
              - identity
    InstitutionRef:
      type: object
      properties:
        id:
          type: string
        name:
          type: string