The REST API is in beta. This endpoint’s response shape may change.
Request
Headers
Trialing subscriptions on any plan receive full brokerage access, so you can evaluate
/holdings and /trades during a trial. Outside a trial, brokerage access requires an active (or past_due) subscription on a Professional price.
Query parameters
connectionId must refer to a brokerage connection. Passing a banking connection ID returns a 400 error. Use the List Connections endpoint to find your brokerage connection IDs.Response limits
To bound memory under wide date ranges, the service stops fetching upstream pages once it has roughly 5,000 matching rows for a single request. When this happens:pagination.hasMoreistrueandpagination.totalisnull(the exact total isn’t known when paging stops early). There is no dedicated header for this; the row ceiling surfaces only through the pagination fields.- Continue paginating with the next
offset + limitwindow. The same cap applies per request, not per session.
Response
Responses are not cached; every request fetches live from the brokerage provider.Trade object
Pagination object
Error responses
Errors use the standard envelope{ "error": { "message": string, "code"?: string, "details"?: string[] } }. The optional code field is set for the structured cases below — clients should branch on code rather than parsing message.
Example error body:
Date validation
Thefrom and to parameters accept:
- Date strings:
2026-03-01 - Full ISO 8601 / RFC 3339 with explicit timezone:
2026-03-01T00:00:00Zor2026-03-01T00:00:00+10:00
Z and no ±HH:MM offset are explicitly rejected.
Invalid formats return a 400 with details: