API Version

Introduction

The Teller API is organized around REST. Resources have predictable, self-describing URLs and contain links to related resources. Our API accepts form-encoded requests and returns JSON encoded responses. It uses standard HTTP status codes, authentication, and methods in their usual ways.

You can use the Teller API in sandbox mode, which is free, does not call out to any real banks, and does not affect your live data. The access token you use determines whether your request is handled in the live or sandbox enviroments.

Access tokens for the live environment are obtained using Teller Connect when a user successfully connects a bank account to your Teller application.

Take a look at the Teller Connect integration guide to learn how to integrate Teller Connect into your application.

https://api.teller.io/
test_CQBfg5yAPM2mb8fEWbrh-Q

Authentication

The Teller API uses TLS client certificates to authenticate your API requests. Secondly it uses access tokens to identify the user whose bank accounts your API call operates on. Access tokens are tied to your application, they are useless without your client certificate and its private key.

Client certificates are necessary for live production API calls. In the interests of getting up and running as quickly as possible they're not required in the sandbox environment. We recommend using client certificates as soon as possible in order to become familiarised with them.

It's of paramount importance that you keep your private key confidential, anyone that knows it is able to make API requests as you. If you suspect your private key has been compromised, immediately revoke it and request a new certificate from the certificate dashboard. Your new certificate will have a new private key.

Access tokens are encoded using HTTP Basic Auth. The access token is given as the username value, the password field should be left empty and is ignored by the API server. Teller uses access tokens to identify the resource owner and determine that your application has their consent to operate on their resources, i.e. their bank accounts.

http https://api.teller.io/accounts --auth test_CQBfg5yAPM2mb8fEWbrh-Q:

Errors

Teller uses standard HTTP response status codes to indicate the success or failure of a request. Status codes in the 2xx denote a successful request. Status codes in the 4xx range denote a client error, e.g. not using a client certificate to make the request, a problem with the user access token, etc. Status codes in the 5xx range denote a problem on our end, e.g. a bank is unavailable and it's not possible or otherwise doesn't make sense to gracefully handle the exception.

error
object
An object describing the error condition.
error.code
string
The error condition.
error.message
string
A human readable string describing the error and how to resolve it.
OK A successful request.
Accepted A payment instruction was accepted by the financial institution for processing.
Bad Request The request was unacceptable. This status is used when a request that must be made with a Teller client certificate is made without one.
Unauthorized A request was made without an access token where one was required.
Forbidden A request was made with an invalid or revoked access token.
Unprocessable Entity A request was made with an invalid request body.
Bad Gateway A 500 level response was received when making a request to a financial institution where a graceful fallback is not possible, e.g. a payment instruction.

Versioning

Teller uses dated versions with the latest one being 2020-10-12. By default all API requests will use the version specified in the Teller Dashboard.

In order to test a new version, you can request it using the Teller-Version HTTP header. Once you are ready to upgrade to a new version permanently, you can do so from the dashboard. You will have 72 hours to rollback to the version you were previously using.

http https://api.teller.io/accounts Teller-Version: 2019-07-01

Accounts

The Accounts resource represents a collection of the user's bank accounts.

currency_code
string
The ISO 4217 currency code of the account.
enrollment_id
string
The id of the enrollment that the account belongs to.
id
string
The id of the account itself.
institution
object
An object containing information about the bank that holds the account
institution.id
string
The snake_cased name of the bank that holds the account.
institution.name
string
The Title Cased name of the bank that holds the account.
last_four
string
The last four digits of the account number.
links
object
An object containing links to related objects.
links.self
string
A self link to the account.
links.details
string
A link to the account's details, such as account number and routing numbers.
links.balances
string
A link to the account's balances.
links.transactions
string
A link to the account's ledger transactions.
name
string
The account's name.
type
string
The account's type e.g depository.
subtype
string
The account's subtype e.g checking or savings.
  • GET /accounts
  • GET /accounts/:id
{
  "currency_code": "USD",
  "enrollment_id": "test_enr_VSSX1Mtu",
  "id": "test_acc_W57LIupC",
  "institution": {
    "id": "first_republic",
    "name": "First Republic"
  },
  "last_four": "1126",
  "links": {
    "balances": "https://api.teller.io/accounts/test_acc_W57LIupC/balances",
    "details": "https://api.teller.io/accounts/test_acc_W57LIupC/details",
    "self": "https://api.teller.io/accounts/test_acc_W57LIupC",
    "transactions": "https://api.teller.io/accounts/test_acc_W57LIupC/transactions"
  },
  "name": "Teller API Sandbox Checking",
  "subtype": "checking",
  "type": "depository"
}

Account Details

The Account Details resource exposes the account's ACH routing number, if different, its wire routing number and its account number.

account_id
string
The id of the account the balance belongs to.
account_number
string
The account's account number.
links
object
An object containing links to related objects.
links.self
string
A self link to the account.
links.account
string
A link to the account that the details belongs to.
routing_numbers
object
An object containing the account's routing numbers.
routing_numbers.ach
string
The account's ACH routing number.
routing_numbers.wire
string
The account's wire routing number.
  • GET /accounts/:id/details
{
  "account_id": "test_acc_W57LIupC",
  "account_number": "6024341126",
  "links": {
    "account": "https://api.teller.io/accounts/test_acc_W57LIupC",
    "self": "https://api.teller.io/accounts/test_acc_W57LIupC/details"
  },
  "routing_numbers": {
    "ach": "682304737"
  }
}

Account Balances

The Account Balances resource represents the account's real-time balances.

account_id
string
The id of the account the balances belong to.
ledger
string
The account's ledger balance. The ledger balance is the total amount of funds in the account.
available
string
The account's available balance. The available balance is the ledger balance less any outstanding holds or debits that have not yet posted to the account.
links.self
string
A self link to the account.
links.account
string
A link to the account that the balances belongs to.
  • GET /accounts/:id/balances
{
  "account_id": "test_acc_W57LIupC",
  "available": "3140.96",
  "ledger": "3140.96",
  "links": {
    "account": "https://api.teller.io/accounts/test_acc_W57LIupC",
    "self": "https://api.teller.io/accounts/test_acc_W57LIupC/balances"
  }
}

Transactions

The Transactions resource represents the known transactions on the account. Each individual Transaction resource exposes an individual transaction on the account either posted or pending.

account_id
string
The id of the account that the transaction belongs to.
amount
string
The signed amount of the transaction as a string.
date
string
The ISO 8601 date of the transaction.
description
string
The unstructured transaction description as it appears on the bank statement.
status
string
The transaction's status, e.g posted or pending.
id
string
The id of the transaction itself.
links
object
An object containing links to related objects.
links.self
string
A self link to the account.
links.account
string
A link to the account that the transaction belongs to.
running_balance
optional string
The running balance of the account that the transaction belongs to. Running balance is only present on transactions with a posted status.
type
string
The type code transaction, e.g. card_payment.

Pagination

The Transactions endpoint returns all transactions for the given account. Usually this does not represent a large amount of data transfer, but if your application has specific requirements of minimising the amount of data going over the wire the transactions list endpoint supports pagination controls.

Pagination controls are given as query params on the request URL.

GET /accounts/:account_id/transactions?count=5&from_id=txn_test

count
integer
The maximum number of transactions to return in the API response.
from_id
string
The transaction from where to start the page. The first transaction in the API response will be the one immediately before the transaction in the ledger with this id.
  • GET /accounts/:account_id/transactions
  • GET /accounts/:account_id/transactions/:id
{
  "account_id": "test_acc_W57LIupC",
  "amount": "-1.81",
  "date": "2020-10-12",
  "description": "In-N-Out Burger",
  "id": "test_txn_G1aUaZBz",
  "links": {
    "account": "https://api.teller.io/accounts/test_acc_W57LIupC",
    "self": "https://api.teller.io/accounts/test_acc_W57LIupC/transactions/test_txn_G1aUaZBz"
  },
  "running_balance": "3140.96",
  "status": "posted",
  "type": "card_payment"
}