Tink
A production-ready Elixir client for the Tink open banking API.
Tink provides comprehensive access to Tink's full product suite — account aggregation, transaction data, financial insights, account and income verification — with built-in retry logic, optional caching, and optional rate limiting.
Features
- Full coverage of the Tink REST API
- OAuth 2.0 authentication (client credentials + authorization code)
- Automatic retry with exponential backoff and jitter
- Optional response caching via Cachex
- Optional rate limiting via Hammer 7.x
- Webhook signature verification (constant-time HMAC)
- Telemetry events for all HTTP requests, cache, and rate limit operations
-
Strict TLS in production; zero runtime dependencies on
Mix
Installation
# mix.exs
def deps do
[
{:tink, "~> 0.1"},
# Optional — enable caching
{:cachex, "~> 4.1"},
# Optional — enable rate limiting
{:hammer, "~> 7.2"}
]
endQuick Start
# 1. Configure credentials (config/runtime.exs)
config :tink,
client_id: System.fetch_env!("TINK_CLIENT_ID"),
client_secret: System.fetch_env!("TINK_CLIENT_SECRET")
# 2. Build a client
{:ok, client} = Tink.Client.new(
client_id: "your_client_id",
client_secret: "your_client_secret"
)
# 3. Authenticate
{:ok, token} = Tink.Auth.client_credentials(client,
scope: "accounts:read,transactions:read"
)
client = Tink.Client.with_token(client, token)
# 4. Call the API
{:ok, accounts} = Tink.Accounts.list(client)Products Covered
| Module | Description |
|---|---|
Tink.Accounts | Bank account data and balances |
Tink.Transactions | Full transaction history |
Tink.TransactionsOneTimeAccess | Single-fetch transaction consent |
Tink.TransactionsContinuousAccess | Ongoing transaction sync |
Tink.AccountCheck | Bank account ownership verification |
Tink.BalanceCheck | Real-time balance verification |
Tink.BusinessAccountCheck | Business account ownership verification |
Tink.IncomeCheck | Income stream analysis and PDF reports |
Tink.ExpenseCheck | Spending categorisation and analysis |
Tink.RiskInsights | Risk scoring and anomaly signals |
Tink.RiskCategorisation | Transaction-level risk categories |
Tink.Investments | Investment accounts and holdings |
Tink.Loans | Loan and mortgage accounts |
Tink.Budgets | User budget creation and tracking |
Tink.CashFlow | Cash flow analysis |
Tink.FinancialCalendar | Upcoming financial events |
Tink.Statistics | Aggregated financial statistics |
Tink.Categories | Tink transaction categories |
Tink.Users | Tink user management |
Tink.Providers | Bank provider metadata |
Tink.Link | Tink Link URL generation |
Tink.Connectivity | Provider connectivity checks |
Configuration
config :tink,
client_id: System.get_env("TINK_CLIENT_ID"),
client_secret: System.get_env("TINK_CLIENT_SECRET"),
base_url: "https://api.tink.com", # default
timeout: 30_000, # ms
max_retries: 3,
enable_rate_limiting: true,
cache: [
enabled: true,
max_size: 1_000
]See the Configuration guide for the full reference.
Documentation
Full documentation is available on HexDocs.
- Getting Started
- Authentication
- Configuration
- Error Handling
- Caching
- Rate Limiting
- Telemetry
- Webhooks
- Testing
License
MIT — see LICENSE.