Get your user's account and card data
Learn about the different types of data you can access with the Data API.
With the Data API, you can access data about both accounts and cards, such as account numbers, card numbers, or account holder information. Additionally, you can go deeper and access balance and transaction data at either the account or card level.
This section will help you configure Data API requests for both accounts and cards. It also contains examples, and explanations of, the data you get in responses from either API. Learn about using the Data API for:
Difference between/accountsand/cardsendpointsThe
/accountsendpoint is used to retrieve a list of user debit card accounts.The
/cardsendpoint is used to retrieve a list of user credit card accounts.
You can discover information about a user’s finances through their accounts. The Data API currently supports four account types:
TRANSACTION: A transaction account is a checking or current account.SAVINGS: An account that accrues interest at an agreed rate and interval. These accounts can have restrictions upon the withdrawal of funds.BUSINESS_TRANSACTION: A transaction account for a business.BUSINESS_SAVINGS: A savings account for a business.
Through account data requests, you can fetch:
- an overview of all the accounts owned by a particular user
- identity information associated with a specific account, for example full name
- the balance of a particular account
- information about all the transactions made from and to that account, within particular dates
Get all accounts
You can get all user accounts and any associated data by making a GET /accounts call.
You need to enable the accounts scope in Console to make this request.
/accounts request
/accounts requestcurl -H "Authorization: Bearer ${access_token}" \
https://api.truelayer.com/data/v1/accounts/accounts response example
/accounts response exampleIf the request is successful, you receive a response like the following.
{
"results": [
{
"update_timestamp": "2017-02-07T17:29:24.740802Z",
"account_id": "f1234560abf9f57287637624def390871",
"account_type": "TRANSACTION",
"display_name": "Club Lloyds",
"currency": "GBP",
"account_number": {
"iban": "GB35LOYD12345678901234",
"number": "12345678",
"sort_code": "12-34-56",
"bsb": "067101",
"swift_bic": "LOYDGB2L"
},
"provider": {
"provider_id": "lloyds"
}
},
{
"update_timestamp": "2017-02-07T17:29:24.740802Z",
"account_id": "f1234560abf9f57287637624def390872",
"account_type": "SAVINGS",
"display_name": "Club Lloyds",
"currency": "GBP",
"account_number": {
"iban": "GB35LOYD12345678901235",
"number": "12345679",
"sort_code": "12-34-57",
"bsb": "067101",
"swift_bic": "LOYDGB2L"
},
"provider": {
"provider_id": "lloyds"
}
}
]
}/accounts response fields
/accounts response fields| Field | Type | Description | Required |
|---|---|---|---|
account_id | string | Unique identifier of the account. | ✅ |
account_type | string | The account type. The possible account types are TRANSACTION, SAVINGS, BUSINESS_TRANSACTION and BUSINESS_SAVINGS. | ✅ |
account_number.iban | string | ISO 13616-1:2007 international bank number. | |
account_number.number | string | Bank account number. | Only returned for AU and UK accounts. |
account_number.sort_code | string | United Kingdom SORT code. | Only returned for UK accounts. |
account_number.swift_bic | string | ISO 9362:2009 Business Identifier Codes | ✅ |
account_number.bsb | string | BSB (Bank State Branch) number of the account. | Only returned for AU accounts. |
currency | string | ISO 4217 alpha-3 currency code of the account. | ✅ |
display_name | string | Human-readable name of the account. | ✅ |
update_timestamp | datetime | Last update time of the account information. | ✅ |
provider.display_name | string | Display name for the provider. | Deprecated |
provider.logo_uri | string | URI for the provider logo. | Deprecated |
provider.provider_id | string | Unique identifier for the provider. | ✅ |
Get identity information for a single account
You can make a request to /info to get your user’s identity information held by the provider. This information can include name, address, emails, phone numbers, and the user's banking branch identifier.
You need to enable the info scope in Console to make this request.
When implementing this endpoint for UK accounts, the user's data should be requested within five minutes of the consent grant, and stored if necessary for your use case. Provider implementations of this endpoint differ due to varying interpretations of Article 10 of PSD2's Regulatory Technical Standards on Strong Customer Authentication. If the data becomes unavailable, we will return an sca_exceeded error message.
/info request
/info requestcurl -H \"Authorization: Bearer ${access_token}\" \\\n https://api.truelayer.com/data/v1/info/info response example
/info response example{
"results": [
{
"full_name": "John Doe",
"update_timestamp": "2020-11-19T09:30:00Z"
}
]
}
/info response fields
/info response fields| Field | Type | Description | Required |
|---|---|---|---|
update_timestamp | datetime | Last time the data has been updated from the provider. | ✅ |
full_name | string | Full name of the user. | Not required |
branch_id | string | Identifier of your user's banking branch | Only returned for some customers in France. |
emails[...] | array of strings | Email addresses (if none are available, returns empty array) | Returned for most customers in Australia |
phones[...] | array of strings | Phone numbers (if none are available, returns empty array) | Returned for most customers in Australia |
Many providers only return the
full_namein the response.
Get information for a specific account
You can get data associated with an account by making a GET /accounts/${account_id) call.
You need to enable the accounts scope in Console to make this request.
/accounts/{account_id} request
/accounts/{account_id} requestcurl -H "Authorization: Bearer ${access_token}" \
https://api.truelayer.com/data/v1/accounts/${account_id}/accounts/{account_id} response example
/accounts/{account_id} response example{
"results": [
{
"update_timestamp": "2017-02-07T17:29:24.740802Z",
"account_id": "f1234560abf9f57287637624def390871",
"account_type": "TRANSACTION",
"display_name": "Club Lloyds",
"currency": "GBP",
"account_number": {
"iban": "GB35LOYD12345678901234",
"number": "12345678",
"sort_code": "12-34-56",
"bsb": "067101"
},
"provider": {
"provider_id": "lloyds"
}
}
]
}/accounts/{account_id} response fields
/accounts/{account_id} response fields| Field | Type | Description | Required |
|---|---|---|---|
currency | string | ISO 4217 alpha-3 currency code | ✅ |
available | number | The amount of funds available to the account holder. This takes into account any pending transactions and includes any overdraft facility. | |
current | number | The amount of funds within the account. This does not include any pending transactions. | ✅ |
overdraft | number | Pre-arranged overdraft limit. Available for all TRANSACTION and BUSINESS_TRANSACTION account types. | |
update_timestamp | datetime | Last update time. | Only returned if applicable. |
Get the balance of an account
You can make a GET request to /accounts/${account_id}/balance to get the balance in an account.
You need to enable the accounts and balance scopes in Console to make this request.
/accounts/${account_id}/balance request
/accounts/${account_id}/balance requestcurl -H "Authorization: Bearer ${access_token}" \ https://api.truelayer.com/data/v1/accounts/${account_id}/balance/accounts/${account_id}/balance response example
/accounts/${account_id}/balance response exampleFor payments accounts (current and some savings), a negative balance amount represents funds owed to the provider from the account holder, such as an overdraft. A positive balance amount represents funds that are available to spend.
In the following response example, the account has a current balance of £1161.20, a £1000.00 overdraft facility. and has £11.60 spent in pending transactions. Therefore, available is calculated as 2150.80 = 1161.20 + 1000.00 - 11.60.
{
"results": [
{
"currency": "GBP",
"available": 2150.8,
"current": 1161.2,
"overdraft": 1000,
"update_timestamp": "2017-02-07T17:33:30.001222Z"
}
]
}/accounts/${account_id}/balance response fields
/accounts/${account_id}/balance response fields| Field | Type | Description | Required |
|---|---|---|---|
currency | string | ISO 4217 alpha-3 currency code | ✅ |
available | number | The amount of funds available to the account holder. This takes into account any pending transactions and includes any overdraft facility. | |
current | number | The amount of funds within the account. This does not include any pending transactions. | ✅ |
overdraft | number | Pre-arranged overdraft limit. Available for all TRANSACTION and BUSINESS_TRANSACTION account types. | |
update_timestamp | datetime | Last update time. | Only returned if applicable. |
Get account transaction data
You can make a GET request to /accounts/${account_id}/transactions to get the transaction data for a specific account. Optionally, you can include from and to parameters to retrieve transaction data for a specified period of time.
For payment accounts (current and some savings), a positive transaction amount represents the addition of funds to the account, for example an incoming bank transfer. A negative transaction amount indicates the flow of funds out of an account, such as a shop purchase.
A negative running balance amount represents funds owed to the provider from the account holder, such as an overdraft. A positive running balance amount represents funds that are available to spend.
You need to enable the accounts and transactions scopes in Console to make this request.
/accounts/${account_id}/transactions request
/accounts/${account_id}/transactions requestcurl -H "Authorization: Bearer ${access_token}" \
"https://api.truelayer.com/data/v1/accounts/${account_id}/transactions?from=${from}&to=${to}"/accounts/${account_id}/transactions response example
/accounts/${account_id}/transactions response example{
"results": [
{
"transaction_id": "03c333979b729315545816aaa365c33f",
"timestamp": "2018-03-06T00:00:00",
"description": "GOOGLE PLAY STORE",
"amount": -2.99,
"currency": "GBP",
"transaction_type": "DEBIT",
"transaction_category": "PURCHASE",
"transaction_classification": [
"Entertainment",
"Games"
],
"merchant_name": "Google play",
"running_balance": {
"amount": 1238.60,
"currency": "GBP"
},
"meta": {
"bank_transaction_id": "9882ks-00js",
"provider_category": "DEB"
}
},
{
"transaction_id": "3484333edb2078e77cf2ed58f1dec11e",
"timestamp": "2018-02-18T00:00:00",
"description": "PAYPAL EBAY",
"amount": -25.25,
"currency": "GBP",
"transaction_type": "DEBIT",
"transaction_category": "PURCHASE",
"transaction_classification": [
"Shopping",
"General"
],
"merchant_name": "Ebay",
"meta": {
"bank_transaction_id": "33b5555724",
"provider_category": "DEB"
}
}
]
}/accounts/${account_id}/transactions response fields
/accounts/${account_id}/transactions response fields| Field | Type | Description | Required |
|---|---|---|---|
transaction_id | string | Unique identifier of the transaction in a request. It may change between requests. | ✅ |
normalised_provider_transaction_id | string | TrueLayer's recommended identifier of the transaction in a request. It will not change between requests. | |
provider_transaction_id | string | Provider's identifier of the transaction in a request. The format of this string will vary across providers. | |
timestamp | datetime | Date the transaction was posted on the account | ✅ |
description | string | Original description of the transaction as reported by the provider | Returned if the provider returns a description. |
transaction_type | string | Type of the transaction. transaction_type can have the following values:
| ✅ |
transaction_category | string | Category of the transaction | ✅ |
transaction_classification | array | Classification of the transaction. Array can be empty if classification has not been successfully assigned. | ✅ |
merchant_name | string | Name of the merchant | Returned if merchant has been identified. |
amount | number | Amount of the transaction | ✅ |
currency | string | ISO 4217 alpha-3 currency code | ✅ |
meta | object | A collection of additional provider specific transaction metadata | ✅ |
running_balance.amount | number | If available, contains the running balance. | |
running_balance.currency | string | If available, contains the running balance currency - ISO 4217 alpha-3 currency code |
You can also use the Data API to get balance and transaction data associated with a user's card.
However, some providers do not support the cards scope. You can make a GET request to /providers to discover what data each provider supports by checking the scopes parameter provided in the response.
How far back you can request transactions from varies depending upon provider.
Get data for all cards
To get all stored user cards and associated data, make a GET request to /cards .
You need to enable the cards scope in Console to make this request.
/cards request
/cards requestcurl -H "Authorization: Bearer ${access_token}" \
https://api.truelayer.com/data/v1/cards/cards response example
/cards response example{
"results": [
{
"account_id": "f7b093437032c216d4350b7d442b9c5ccc0e9f19",
"card_network": "VISA",
"card_type": "CREDIT",
"currency": "GBP",
"display_name": "Club Credit Card",
"partial_card_number": "0044",
"name_on_card": "A. N. Other",
"valid_from": "2017-01",
"valid_to": "2018-01",
"update_timestamp": "2017-02-07T17:29:24.740802Z",
"provider": {
"provider_id": "lloyds"
}
},
{
"account_id": "ad86fb1c213245b6b6594895068973efca5f9367",
"card_network": "MASTERCARD",
"card_type": "CHARGE",
"currency": "GBP",
"display_name": "Club Charge Card",
"partial_card_number": "0055",
"name_on_card": "A. N. Other",
"valid_from": "2017-01",
"valid_to": "2018-01",
"update_timestamp": "2017-02-07T17:29:24.740802Z",
"provider": {
"provider_id": "lloyds"
}
}
]
}/cards response fields
/cards response fields| Field | Type | Description | Required |
|---|---|---|---|
account_id | string | Unique identifier of the account. | ✅ |
card_network | string | Processing network (for example, VISA). | ✅ |
card_type | string | Type of card (for example, Credit). | ✅ |
currency | string | ISO 4217 alpha-3 currency code of the account. | ✅ |
display_name | string | Human-readable name of the account. | ✅ |
partial_card_number | string | Last 4 digits of the card. | ✅ |
name_on_card | string | If available, the name on the card. | |
valid_from | string | If available, the valid from date. | |
valid_to | string | If available, the valid to date. | |
update_timestamp | datetime | Last updated time of the card information | ✅ |
provider.display_name | string | Display name for the provider. | Deprecated |
provider.logo_uri | string | URI for the provider logo. | Deprecated |
provider.provider_id | string | Unique identifier for the provider. | ✅ |
Note that the provider attributes display_name and logo_uri are deprecated. Details about the providers are available through the separate /providers endpoint.
Supported card networks
The card_network field can currently return the following results and supported networks.
| Type | Description |
|---|---|
AMEX | Processing network is American Express. |
MASTERCARD | Processing network is Mastercard. |
VISA | Processing network is VISA. |
NOT_SUPPORTED_BY_GEO | Processing network is not supported in the geographical location. |
NOT_SUPPORTED_BY_PROVIDER | Processing network is not supported by the provider. |
Get data for a specific card
You can make a GET request to /cards/${account_id} to get data for a specific card.
You need to enable the cards scope in Console to make this request.
/card/{account_id} request
/card/{account_id} requestcurl -H "Authorization: Bearer ${access_token}" \
https://api.truelayer.com/data/v1/cards/${account_id}/card/{account_id} response example
/card/{account_id} response example{
"results": [
{
"account_id": "f7b093437032c216d4350b7d442b9c5ccc0e9f19",
"card_network": "VISA",
"card_type": "CREDIT",
"currency": "GBP",
"display_name": "Club Credit Card",
"partial_card_number": "0044",
"name_on_card": "A. N. Other",
"valid_from": "2017-01",
"valid_to": "2018-01",
"update_timestamp": "2017-02-07T17:29:24.740802Z",
"provider": {
"provider_id": "lloyds"
}
}
]
}/card/{account_id}response fields
/card/{account_id}response fields| Field | Type | Description | Required |
|---|---|---|---|
account_id | string | Unique identifier of the account. | ✅ |
card_network | string | Processing network (for example, VISA). | ✅ |
card_type | string | Type of card (for example, Credit). | ✅ |
currency | string | ISO 4217 alpha-3 currency code of the account. | ✅ |
display_name | string | Human-readable name of the account | ✅ |
partial_card_number | string | Last 4 digits of the card. | ✅ |
name_on_card | string | If available, the name on the card. | |
valid_from | string | If available, the valid from date. | |
valid_to | string | If available, the valid to date. | |
update_timestamp | datetime | Last update time of the card information. | |
provider.display_name | string | Display name for the provider. | Deprecated |
provider.logo_uri | string | URI for the provider logo. | Deprecated |
provider.provider_id | string | Unique identifier for the provider. | ✅ |
Note that the provider attributes display_name and logo_uri are deprecated. Details about providers are available through the separate /providers endpoint.
Get the balance on a card
Make a GET request to /cards/${account_id}/balance to get the balance on a user's card.
You need to enable the cards and balance scopes in Console to make this request.
/cards/{account_id}/balance request
/cards/{account_id}/balance requestcurl -H "Authorization: Bearer ${access_token}" \
https://api.truelayer.com/data/v1/cards/${account_id}/balance/cards/{account_id}/balance response example
/cards/{account_id}/balance response example{
"results": [
{
"available": 3279.0,
"currency": "GBP",
"current": 20.0,
"credit_limit": 3300,
"last_statement_balance": 226,
"last_statement_date": "2017-01-28",
"payment_due": 5.0,
"payment_due_date": "2017-02-24",
"update_timestamp": "2017-02-247T17:29:24.740802Z"
}
]
}/cards/{account_id}/balance response fields
/cards/{account_id}/balance response fields| Field | Type | Description | Required |
|---|---|---|---|
available | number | The amount available to the card holder. This takes into account any pending transactions and credit limit. | |
currency | string | ISO 4217 alpha-3 currency code. | ✅ |
current | number | The amount of expenditure on the card. This does not include any pending transactions. | ✅ |
credit_limit | number | Card credit limit. | |
last_statement_balance | number | Card balance at time of last statement, if available. | |
last_statement_date | string | Date of last statement, if available. | |
payment_due | number | Minimum amount required by due date. | |
payment_due_date | number | Date by which payment due should be remitted. | |
update_timestamp | datetime | Last update time | ✅ |
You can optionally get an available amount in the response which takes any pending transactions into account.
A negative available amount means the card’s credit limit has been exceeded. A positive available amount represents the credit available to the cardholder.
Get transaction data for a card
To get transaction data from a user's card, make a GET request to /cards/${account_id}/transactions .
You can include the optional from and to parameters to retrieve transaction data from a specified period of time.
Ensure to use the
fromandtoparameters together. Using just one of them changes the time period to a default value of 88 days.
You need to enable the cards and transactions scopes in Console to make this request.
/cards/{account_id}/transactions request
/cards/{account_id}/transactions requestcurl -H "Authorization: Bearer ${access_token}" \
"https://api.truelayer.com/data/v1/cards/${account_id}/transactions?from=${from}&to=${to}"/cards/{account_id}/transactions response example
/cards/{account_id}/transactions response example{
"results": [
{
"transaction_id": "a15d8156569ba848d84c07c34d291bca",
"timestamp": "2018-01-16T00:00:00+00:00",
"amount": 24.25,
"currency": "GBP",
"description": "SAINSBURYS SMRKT STORE 128",
"transaction_type": "DEBIT",
"transaction_category": "PURCHASE",
"running_balance": {
"amount": 1238.60,
"currency": "GBP"
},
"meta": {
"cardNumber": "1234********5678",
"location": "INTERNET"
}
},
{
"transaction_id": "af4d5470cc7ad6a83a02335ab8053481",
"timestamp": "2018-03-19T00:00:00",
"amount": 46.82,
"currency": "GBP",
"description": "TALKTALK TELECOM",
"transaction_type": "DEBIT",
"transaction_category": "PURCHASE",
"meta":{
"provider_transaction_category": "DEB",
"cardNumber": "1234********5678",
"location": "INTERNET"
}
}
]
}/cards/{account_id}/transactions response fields
/cards/{account_id}/transactions response fields| Parameter | Type | Description |
|---|---|---|
transaction_id | string | Unique identifier of the transaction in a request. It may change between requests. |
timestamp | datetime | Date the transaction was posted on the account. |
description | string | Original description of the transaction as reported by the provider. |
transaction_type | string | Type of the transaction. Possible values are: - CREDIT: Indicates an incoming fund. - DEBIT: Indicates an outgoing fund. |
transaction_category | string | Category of the transaction. |
transaction_classification | array | Classification of the transaction. Array can be empty if classification has not been successfully assigned. |
amount | number | Amount of the transaction. A positive transaction amount reflects the flow of funds out of a card, such as a purchase. A negative amount indicates the flow of funds into the card, for example a refund. |
currency | string | ISO 4217 alpha-3 currency code. |
meta | object | A collection of additional provider-specific transaction metadata. The format of this data contained in For example, when returning transactions for an American Express card, meta also contains a |
You can optionally get a running_balance.amount in the response which displays any available running balance.
A positive running balance amount represents money owed to the provider by the cardholder. A negative running balance amount represents money owed to the cardholder by the provider.
For the complete list of optional and mandatory response parameters, see our API reference.
Pending transactionsIt isn't possible to return a list of pending transactions for a specific time range, the API returns all pending transactions. Although most transactions clear within 7 days, transactions can be pending for up to 120 days.
Updated 20 days ago