Skip to main content
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

GET /v1/transactions

Headers

HeaderRequiredDescription
AuthorizationYesBearer rbk_live_...

Query parameters

ParameterTypeRequiredDefaultDescription
connectionIdstringYesConnection to fetch transactions from
accountIdstringNoAll accountsFilter to a specific account
fromstringNo30 days agoStart date (YYYY-MM-DD or ISO 8601)
tostringNoNowEnd date (YYYY-MM-DD or ISO 8601)
limitintegerNo200Maximum items to return (1 to 500)
offsetintegerNo0Number 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

FieldTypeDescription
idstringUnique transaction identifier
accountIdstringID of the account this transaction belongs to
accountNamestringAccount display name
statusstringAlways "posted" (pending transactions are filtered out)
datestringTransaction date in your account’s timezone (YYYY-MM-DD). Set your timezone in Settings.
datetimestring | nullRaw ISO 8601 timestamp from the banking provider. Use this if you need to handle timezone conversion yourself.
descriptionstringTransaction description
amountstringDecimal string (e.g. "-45.50"). Negative for debits.
directionstring"credit" or "debit"
categorystring | nullTransaction category (see list below), if available
merchantNamestring | nullMerchant name, if available
merchantCategoryCodestring | nullMerchant 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.

Pagination object

FieldTypeDescription
totalintegerTotal posted transactions matching the filters
limitintegerLimit applied to this request
offsetintegerOffset applied to this request
hasMorebooleantrue if more items exist beyond this page

Error responses

StatusWhen
400Missing connectionId, or invalid date format
404Connection or account not found, or does not belong to you
502Banking 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`);