Skip to main content
v2 is in beta and lives under https://api.redbark.com/v2. v1 keeps working unchanged; see the v1 to v2 mapping.
Everything you can do in the dashboard you can do with an API key: read accounts and transactions, manage syncs and runs, shape categories, create destinations and keys, and subscribe to events.

Base URL

The OpenAPI 3.1 document is at https://api.redbark.com/v2/openapi.json. Every operation carries x-redbark-scope (the scope it needs) and x-redbark-tier (its rate-limit tier). The endpoint pages in the sidebar are generated from it and have a playground: paste a key and a Redbark-Version once and every page can make live requests.

Required headers

Shape

  • JSON in, JSON out, snake_case everywhere.
  • Every resource has object ("sync", "api_key") and every list has "object": "list".
  • Ids are prefixed and opaque: sync_, conn_, acct_, cat_, dest_, run_, key_, ed_, evt_. Provider-issued ids are tagged: txn_fk_... (Fiskil), txn_ak_... (Akahu), txn_st_... (SnapTrade), and likewise hold_st_... and trd_st_... for brokerage holdings and trades.
  • created and updated are RFC 3339 UTC strings with milliseconds. Provider moments keep the bank’s offset. Local dates are YYYY-MM-DD.
  • Money is an integer in minor units plus a lowercase ISO 4217 currency: { "amount": 1250, "currency": "aud" }.
  • Optional fields are present and null, never omitted.
  • livemode is always true today.
  • metadata holds up to 50 string pairs (40 character keys, 500 character values) on connections, categories, destinations, syncs, event destinations and keys. Set a key to null in an update to unset it.

Lists

Lists are newest first and token paginated. limit is 1 to 100 (default 20). The response is:
Follow next_page_url until it is null. The page token encodes the filters the walk started with, so changing a filter while paging is 400 page_filters_changed. Array filters use bracket form: ?status[]=failed&status[]=cancelled. Lists are eventually consistent; a just-created object is immediately retrievable by id.

Include

Heavy or secret fields are null unless you name them: ?include[]=accounts, ?include[]=latest_run. Each endpoint documents what it can include. An unknown value is 400 include_invalid.

Errors

Every response carries Request-Id. See the error catalogue.

Idempotency

Send Idempotency-Key (up to 255 characters) on any POST or DELETE. Within 30 days:
  • the same key with the same parameters returns the stored response with Idempotent-Replayed: true;
  • the same key with different parameters is 409 idempotency_key_reused;
  • the same key while the first attempt is still running is 409 idempotency_key_in_use;
  • a failed first attempt is re-executed.
Without the header the server generates one and returns it in the Idempotency-Key response header; nothing is stored. GET ignores the header.

Versioning

Releases are named and dated: 2026-10-01.wattle is the first. Additions ship under the current name; a breaking change (removing or renaming a field, changing a type or enum, changing pagination) becomes a new name. Send the release you built against in Redbark-Version; the response echoes it. Event payloads are unversioned.

Rate limits

Applied per key, by tier: cheap 60/min, mid 30/min, heavy 30/min with 4 in flight, mutating 30/min. Headers are X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset and Retry-After on 429.

Scopes

Every v2 key is restricted. resource:write implies resource:read. Keys created before scopes existed are legacy keys: they hold every :read scope and nothing else. Create a new key in the dashboard or via POST /v2/api_keys to get write access.

Updates and deletes

Updates are POST /v2/{resource}/{id} with a partial body (PATCH is accepted as an alias). Deletes return { "id": "...", "object": "...", "deleted": true }.