The REST API is in beta. This endpoint’s response shape may change.
Returns a paginated list of posted transactions for a given connection. Transactions are fetched live from the banking provider. No transaction data is stored on Redbark servers.
Request
| Header | Required | Description |
|---|
Authorization | Yes | Bearer rbk_live_... |
Query parameters
| Parameter | Type | Required | Default | Description |
|---|
connectionId | string | Yes | | Connection to fetch transactions from |
accountId | string | No | All accounts | Filter to a specific account |
from | string | No | 30 days ago | Start date (YYYY-MM-DD or ISO 8601) |
to | string | No | Now | End date (YYYY-MM-DD or ISO 8601) |
limit | integer | No | 200 | Maximum items to return (1 to 500) |
offset | integer | No | 0 | Number of items to skip |
connectionId is required. Use the List Connections endpoint to get connection IDs.
Response
{
"data": [
{
"id": "txn_abc123",
"accountId": "acc_abc123",
"accountName": "Everyday Account",
"status": "posted",
"date": "2026-03-12",
"datetime": "2026-03-11T13:00:00.000Z",
"description": "Woolworths Sydney",
"amount": "-45.50",
"direction": "debit",
"category": "Groceries",
"merchantName": "Woolworths",
"merchantCategoryCode": null
},
{
"id": "txn_def456",
"accountId": "acc_abc123",
"accountName": "Everyday Account",
"status": "posted",
"date": "2026-03-11",
"datetime": "2026-03-10T13:00:00.000Z",
"description": "Salary Payment",
"amount": "3500.00",
"direction": "credit",
"category": "Income",
"merchantName": null,
"merchantCategoryCode": null
}
],
"pagination": {
"total": 87,
"limit": 200,
"offset": 0,
"hasMore": false
}
}
Transaction object
| Field | Type | Description |
|---|
id | string | Unique transaction identifier |
accountId | string | ID of the account this transaction belongs to |
accountName | string | Account display name |
status | string | Always "posted" (pending transactions are filtered out) |
date | string | Transaction date in your account’s timezone (YYYY-MM-DD). Set your timezone in Settings. |
datetime | string | null | Raw ISO 8601 timestamp from the banking provider. Use this if you need to handle timezone conversion yourself. |
description | string | Transaction description |
amount | string | Decimal string (e.g. "-45.50"). Negative for debits. |
direction | string | "credit" or "debit" |
category | string | null | Transaction category (see list below), if available |
merchantName | string | null | Merchant name, if available |
merchantCategoryCode | string | null | Merchant category code (MCC), if available |
The amount field is a string to preserve decimal precision. Parse it as a decimal or float in your application.
Categories
Transactions may include one of the following categories, assigned by the bank via CDR enrichment. Not all transactions have a category.
| Category |
|---|
Bank Fees |
Entertainment |
Food & Drink |
Government & Non-Profit |
Home Improvement |
Income |
Loan Payments |
Medical |
Merchandise |
Personal Care |
Rent & Utilities |
Services |
Transfer In |
Transfer Out |
Transportation |
Travel |
Categories depend on the banking provider and account type. Some transactions (e.g. direct debits, older transactions) may have a null category.
| Field | Type | Description |
|---|
total | integer | Total posted transactions matching the filters |
limit | integer | Limit applied to this request |
offset | integer | Offset applied to this request |
hasMore | boolean | true if more items exist beyond this page |
Error responses
| Status | When |
|---|
400 | Missing connectionId, or invalid date format |
404 | Connection or account not found, or does not belong to you |
502 | Banking provider temporarily unavailable. Retry later. |
Date validation
The from and to parameters accept:
- Date strings:
2026-03-01
- Full ISO 8601:
2026-03-01T00:00:00Z
Invalid formats return a 400 with details:
{
"error": {
"message": "Invalid date parameters",
"details": [
"from: Must be a valid ISO 8601 date string (YYYY-MM-DD or YYYY-MM-DDTHH:mm:ssZ)"
]
}
}
Examples
All transactions for a connection (last 30 days)
curl -H "Authorization: Bearer rbk_live_..." \
"https://api.redbark.co/v1/transactions?connectionId=conn_abc123"
Filter by account and date range
curl -H "Authorization: Bearer rbk_live_..." \
"https://api.redbark.co/v1/transactions?connectionId=conn_abc123&accountId=acc_abc123&from=2026-01-01&to=2026-03-01"
Paginate
curl -H "Authorization: Bearer rbk_live_..." \
"https://api.redbark.co/v1/transactions?connectionId=conn_abc123&limit=50&offset=50"
Python: fetch all pages
import requests
API_KEY = "rbk_live_..."
BASE = "https://api.redbark.co"
all_transactions = []
offset = 0
limit = 200
while True:
resp = requests.get(
f"{BASE}/v1/transactions",
headers={"Authorization": f"Bearer {API_KEY}"},
params={
"connectionId": "conn_abc123",
"from": "2026-01-01",
"to": "2026-03-13",
"limit": limit,
"offset": offset,
},
)
data = resp.json()
all_transactions.extend(data["data"])
if not data["pagination"]["hasMore"]:
break
offset += limit
print(f"Fetched {len(all_transactions)} transactions")
JavaScript: fetch all pages
const API_KEY = "rbk_live_...";
const BASE = "https://api.redbark.co";
const allTransactions = [];
let offset = 0;
const limit = 200;
while (true) {
const params = new URLSearchParams({
connectionId: "conn_abc123",
from: "2026-01-01",
to: "2026-03-13",
limit: String(limit),
offset: String(offset),
});
const resp = await fetch(`${BASE}/v1/transactions?${params}`, {
headers: { Authorization: `Bearer ${API_KEY}` },
});
const { data, pagination } = await resp.json();
allTransactions.push(...data);
if (!pagination.hasMore) break;
offset += limit;
}
console.log(`Fetched ${allTransactions.length} transactions`);