Documentation Index
Fetch the complete documentation index at: https://docs.redbark.co/llms.txt
Use this file to discover all available pages before exploring further.
The REST API is in beta. Response shapes may change. These samples are kept in sync with the live API; the OpenAPI spec is the authoritative schema.
About the IDs
- Connection and account IDs are UUIDs generated by Redbark.
- Transaction IDs come from the banking provider (Fiskil) and are opaque strings — treat them as arbitrary strings, not UUIDs.
- Holding IDs are opaque strings from the brokerage provider (SnapTrade).
- Trade IDs are opaque strings (typically built deterministically from trade attributes, but the exact shape varies by brokerage — they are long and may contain hyphens). Treat them as opaque.
- All decimal values (balances, amounts, quantities, prices) are returned as strings to preserve precision — parse them with a decimal library, not a float.
The scenario
Two connections belonging to the same user:| Connection | Institution | Category | Accounts |
|---|---|---|---|
b7c4a1e2-8d3f-4e9a-9c5b-1f2a3e4d5c6b | Westpac | banking | 3 (transaction, savings, credit card) |
e8f1a2b3-7c4d-5e6f-8a9b-0c1d2e3f4a5b | Interactive Brokers | brokerage | 1 (investment) |
GET /v1/connections
Returns every active connection for the authenticated user. Connections with status deleting are excluded. Ordered by createdAt DESC (most recent first).
status values: active, invalidated, pending_mfa, revoked. institutionLogo and lastRefreshedAt are nullable. institutionId is an opaque provider-specific identifier (numeric strings for Fiskil, UUIDs for SnapTrade) — treat it as an arbitrary string. See the Connections reference.
GET /v1/accounts
Returns every account across both connections in a single paginated response. Ordered alphabetically by account name (ASC).
provider, institutionName, and accountNumber are nullable. accountNumber is masked to the last 4 digits as xxxx<last4>. See the Accounts reference.
GET /v1/balances?accountIds=...
Balances for all four accounts. Accepts a comma-separated list of up to 100 account UUIDs. Returned in the order the provider responds (not guaranteed to match the input order).
Request:
currentBalance can be negative (e.g. credit cards, overdrawn accounts). See the Balances reference.
GET /v1/transactions?connectionId=...
Transactions across the three Westpac accounts for the default 30-day window. Only transactions with status posted are returned — pending transactions are filtered out upstream at the provider.
Request:
GET /v1/holdings?connectionId=...
Holdings for the Interactive Brokers trading account. Holdings are only available on brokerage connections and require a Professional plan. Requesting holdings for a banking connection returns 400.
Request:
GET /v1/trades?connectionId=...
Trades on the IBKR account. pagination.total is null when hasMore is true (the total is only known once every page has been fetched). When hasMore is false, total is the exact count of returned trades.
Request:
Error responses
All errors return the same envelope regardless of endpoint:code and details are optional and omitted entirely when not set — the server never emits "code": null or "details": []. The server emits a stable set of machine-readable codes (professional_required, invalid_params, connection_not_found, account_not_found, upstream_bad_request, upstream_breaker_open, client_disconnected, and others) — see the Overview for the full list. A 400 validation error on transactions includes details:
429 rate-limit error is accompanied by a Retry-After response header (seconds):
Webhook payload (transactions.synced)
If you’re building a webhook destination consumer, here’s the envelope sent when a bank transaction sync completes. Payload formatting differs significantly from the REST API — notably, amounts are integers in the smallest currency unit (e.g. cents), all field names use snake_case, and timestamps in the envelope are Unix epoch seconds.
trades.synced events with the same envelope but trade objects in data.new; quantities, prices, and fees are decimal strings (not integers) to preserve precision for fractional shares. metadata.sync_run_id is a UUID for the sync run that produced the delivery, but is null when a delivery is replayed outside a sync run. See the Webhooks reference for payload fields, signature verification (HMAC-SHA256), chunking behaviour, and retry schedule.
Next steps
- Validate your parser against every response above.
- Pull the OpenAPI 3.1 spec and generate a typed client, or drive contract tests off it.
- When you’re ready, create an API key and swap fixtures for real calls.