A complete, production-grade Elixir client for the Starling Bank Public API.
StarlingBank is organized as one module per API domain, each implementing
CRUD-style functions that mirror the underlying REST endpoints:
StarlingBank.Accounts— accounts, identifiers, confirmation of fundsStarlingBank.AccountHolders— identity, address, account holder type, customerStarlingBank.Balances— cleared/effective/available balancesStarlingBank.Transactions— feed items, metadata, attachments, statementsStarlingBank.Receipts— itemized receipts and receipt attachmentsStarlingBank.Merchants— merchant & merchant-location enrichment dataStarlingBank.Payees— saved payees and their imagesStarlingBank.Payments— local & international payments, standing ordersStarlingBank.DirectDebits— Direct Debit mandatesStarlingBank.SavingsGoals— savings goals, top-ups, withdrawalsStarlingBank.Cards— card controls (freeze, spending limits, channels)StarlingBank.Webhooks— webhook listing & signature verificationStarlingBank.OAuth— authorization code exchange & token refreshStarlingBank.CustomerOnboarding— TPP customer onboarding (elevated access)
Configuration
config :starling_bank,
access_token: {:system, "STARLING_ACCESS_TOKEN"},
environment: :sandbox # or :productionOr build an explicit client and pass it to any function:
client = StarlingBank.Client.new(access_token: "...", environment: :production)
{:ok, accounts} = StarlingBank.Accounts.list(client)Every function returns {:ok, result} or {:error, %StarlingBank.Error{}}.
Telemetry
Every HTTP call emits [:starling_bank, :request, :start | :stop | :exception]
telemetry events with %{method:, path:, environment:} metadata, suitable
for attaching :telemetry_metrics or logging handlers.
Summary
Functions
Convenience delegate: StarlingBank.client/1 builds a StarlingBank.Client.
Functions
@spec client(keyword()) :: StarlingBank.Client.t()
Convenience delegate: StarlingBank.client/1 builds a StarlingBank.Client.