v2 is in beta and lives under
https://api.redbark.com/v2. v1 stays compatible and receives maintenance changes only; see the v1 to v2 mapping.Base URL
https://api.redbark.com/v2/openapi.json. That exact GET route is public and does not require authentication or Redbark-Version; every API operation does. 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_caseeverywhere. - 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_. Source transaction ids are tagged:txn_fk_...(Fiskil),txn_ak_...(Akahu),txn_pl_...(Plaid),txn_do_...(Documents),txn_st_...(SnapTrade), and likewisehold_st_...andtrd_st_...for brokerage holdings and trades. createdandupdatedare RFC 3339 UTC strings with milliseconds. Provider moments keep the bank’s offset. Local dates areYYYY-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. livemodeis alwaystruetoday.- Writable
metadataholds up to 50 string pairs (40 character keys, 500 character values) on categories, destinations, syncs, rulesets, rules, event destinations and keys. Set a key tonullin an update to unset it. Connection metadata is read-only.
Lists
Lists are newest first and token paginated.limit is 1 to 100 (default 20). The response is:
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 arenull 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
SendIdempotency-Key (up to 255 characters) on any POST or DELETE. Keys are isolated to the exact API key or OAuth access token that made the request, so another credential can reuse the same value independently. 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.
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 under Settings > API & MCP or via POST /v2/api_keys to get write access.
/v2/me returns email, name, first_name, and last_name when the credential holds account:read; otherwise those fields are null. OAuth mcp:read includes this permission. Authentication and version requirements still apply. The Redbark app alone can read /v2/me while its mobile plan is gated; other endpoints and third-party credentials retain their plan requirements.Updates and deletes
Updates arePOST /v2/{resource}/{id} with a partial body. Categories, destinations, syncs, rulesets, rules and event destinations also accept PATCH as an alias; API-key updates are POST-only. Connections have no general update endpoint: use their named refresh or reauthorize actions. Deletes return { "id": "...", "object": "...", "deleted": true }.
