TrueLayer Data API v1.
Requires a user-delegated Data-scoped token obtained via
TruelayerClient.Auth.exchange_code/3 with Data scopes.
Data tokens and Payments tokens are strictly isolated — a Data token cannot authorise a Payments API call and vice versa.
Lazy streaming
transaction_stream/3 returns a lazy Stream.t() backed by Stream.resource/3.
This allows functional composition without loading all transactions into memory:
client
|> TruelayerClient.Data.transaction_stream(account_id,
from: ~U[2024-01-01 00:00:00Z], to: ~U[2024-03-31 23:59:59Z])
|> Stream.filter(&(&1["transaction_type"] == "CREDIT"))
|> Stream.map(& &1["amount"])
|> Enum.sum()
Summary
Functions
Extend an existing connection's consent period.
Generate a direct bank authentication link.
Generate a re-authentication link for an existing connection.
Get a single account (GET /data/v1/accounts/{id}).
Get the balance for an account (GET /data/v1/accounts/{id}/balance).
Get a single card (GET /data/v1/cards/{id}).
Get the balance for a card (GET /data/v1/cards/{id}/balance).
Get pending transactions for a card.
Get settled transactions for a card.
Get connection metadata for the current token (GET /data/v1/me).
Get direct debits for an account.
Get pending transactions for an account.
Get standing orders for an account.
Get settled transactions for an account (GET /data/v1/accounts/{id}/transactions).
Get identity info for the authenticated user (GET /data/v1/info).
List all bank accounts (GET /data/v1/accounts).
List all cards (GET /data/v1/cards).
List available data providers (GET /data/v1/providers).
Return a lazy Stream.t() of settled transactions for an account.
Functions
@spec extend_connection(TruelayerClient.t(), map()) :: :ok | {:error, TruelayerClient.Error.t()}
Extend an existing connection's consent period.
@spec generate_direct_auth_link(TruelayerClient.t(), map()) :: {:ok, map()} | {:error, TruelayerClient.Error.t()}
Generate a direct bank authentication link.
@spec generate_reauth_link(TruelayerClient.t(), map()) :: {:ok, map()} | {:error, TruelayerClient.Error.t()}
Generate a re-authentication link for an existing connection.
@spec get_account(TruelayerClient.t(), String.t()) :: {:ok, map()} | {:error, TruelayerClient.Error.t()}
Get a single account (GET /data/v1/accounts/{id}).
@spec get_account_balance(TruelayerClient.t(), String.t()) :: {:ok, map()} | {:error, TruelayerClient.Error.t()}
Get the balance for an account (GET /data/v1/accounts/{id}/balance).
@spec get_card(TruelayerClient.t(), String.t()) :: {:ok, map()} | {:error, TruelayerClient.Error.t()}
Get a single card (GET /data/v1/cards/{id}).
@spec get_card_balance(TruelayerClient.t(), String.t()) :: {:ok, map()} | {:error, TruelayerClient.Error.t()}
Get the balance for a card (GET /data/v1/cards/{id}/balance).
@spec get_card_pending_transactions(TruelayerClient.t(), String.t(), keyword()) :: {:ok, [map()]} | {:error, TruelayerClient.Error.t()}
Get pending transactions for a card.
@spec get_card_transactions(TruelayerClient.t(), String.t(), keyword()) :: {:ok, [map()]} | {:error, TruelayerClient.Error.t()}
Get settled transactions for a card.
@spec get_connection_meta(TruelayerClient.t()) :: {:ok, map()} | {:error, TruelayerClient.Error.t()}
Get connection metadata for the current token (GET /data/v1/me).
@spec get_direct_debits(TruelayerClient.t(), String.t()) :: {:ok, [map()]} | {:error, TruelayerClient.Error.t()}
Get direct debits for an account.
@spec get_pending_transactions(TruelayerClient.t(), String.t(), keyword()) :: {:ok, [map()]} | {:error, TruelayerClient.Error.t()}
Get pending transactions for an account.
@spec get_standing_orders(TruelayerClient.t(), String.t()) :: {:ok, [map()]} | {:error, TruelayerClient.Error.t()}
Get standing orders for an account.
@spec get_transactions(TruelayerClient.t(), String.t(), keyword()) :: {:ok, [map()]} | {:error, TruelayerClient.Error.t()}
Get settled transactions for an account (GET /data/v1/accounts/{id}/transactions).
Options
@spec get_user_info(TruelayerClient.t()) :: {:ok, map()} | {:error, TruelayerClient.Error.t()}
Get identity info for the authenticated user (GET /data/v1/info).
@spec list_accounts(TruelayerClient.t()) :: {:ok, [map()]} | {:error, TruelayerClient.Error.t()}
List all bank accounts (GET /data/v1/accounts).
@spec list_cards(TruelayerClient.t()) :: {:ok, [map()]} | {:error, TruelayerClient.Error.t()}
List all cards (GET /data/v1/cards).
@spec list_providers(TruelayerClient.t()) :: {:ok, [map()]} | {:error, TruelayerClient.Error.t()}
List available data providers (GET /data/v1/providers).
@spec transaction_stream(TruelayerClient.t(), String.t(), keyword()) :: Enumerable.t()
Return a lazy Stream.t() of settled transactions for an account.
The stream fetches transactions on first consumption and yields them one at a time.
Compose with Stream.filter/2, Stream.map/2, Enum.take/2, etc.
Example
client
|> TruelayerClient.Data.transaction_stream("acc-001", from: ~U[2024-01-01 00:00:00Z])
|> Stream.filter(&(&1["amount"] < 0))
|> Enum.to_list()