{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown"},"seo":{"title":"Getting started","llmstxt":{"hide":false,"sections":[{"title":"Table of contents","includeFiles":["**/*"],"excludeFiles":[]}],"excludeFiles":[]}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"getting-started","__idx":0},"children":["Getting started"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The Rho API gives you programmatic access to your business's banking data on Rho. Use it to pull transactions into your data warehouse, reconcile against your accounting system, power internal dashboards, or wire Rho into the workflow tools your team already runs."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Current release is ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["read-only"]}," and covers accounts and transactions."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The API is published as ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["v1"]}]},", served under ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/api/v1/"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"first-call-in-three-steps","__idx":1},"children":["First call in three steps"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Create an API Access Token"]}," from your Rho banking settings. Admins and Account Owners have permission to manage API Access Tokens, and creation is protected by a 2FA challenge - see ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/v1/auth"},"children":["Authentication"]}," for the full lifecycle."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Send the token as a bearer credential"]}," on every request: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Authorization: Bearer <rho_api_access_token>"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Walk paginated responses"]}," using the cursor returned in each page - see ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/v1/pagination"},"children":["Pagination"]},"."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A minimal first call:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"curl https://rhoapi.rho.co/api/v1/accounts \\\n  -H \"Authorization: Bearer $RHO_API_TOKEN\"\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"sandbox","__idx":2},"children":["Sandbox"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Use the sandbox environment to try the API against fictional, deterministic data before calling production:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"curl https://rhoapi-sandbox.rho.co/api/v1/accounts \\\n  -H \"Authorization: Bearer sandbox\"\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The sandbox accepts any non-empty bearer token, so you do not need to create a real API Access Token before testing requests there."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"whats-next","__idx":3},"children":["What's next"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/v1/auth"},"children":["Authentication"]}]}," - Create, send, scope, and revoke API Access Tokens. Covers IP allowlists, expiration, the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["401"]}," vs ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["403"]}," distinction, and the security practices we recommend."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/v1/pagination"},"children":["Pagination"]}]}," - Cursor-based iteration with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["page_size"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["page_token"]},". Includes a Python iteration example and the common pitfalls to avoid."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/v1/rate-limits"},"children":["Rate limits"]}]}," - Understand request limits, pace traffic, and retry safely after a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["429"]}," response."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/api/v1/openapi"},"children":["API Reference"]}]}," - The endpoint catalogue: paths, parameters, response shapes, and the scopes each endpoint requires."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/v1/versioning"},"children":["Versioning and compatibility"]}]}," - The stability contract: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["v1"]}," is additive-only, what can change without a new version, and the client obligations that keep your integration working."]}]}]},"headings":[{"value":"Getting started","id":"getting-started","depth":1},{"value":"First call in three steps","id":"first-call-in-three-steps","depth":2},{"value":"Sandbox","id":"sandbox","depth":2},{"value":"What's next","id":"whats-next","depth":2}],"frontmatter":{"seo":{"title":"Getting started"}},"lastModified":"2026-07-29T13:58:14.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/docs/v1/getting-started","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}