{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":["admonition"]},"type":"markdown"},"seo":{"title":"Transactions","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":"transactions","__idx":0},"children":["Transactions"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The Transactions API surfaces every monetary movement that touches the accounts your business holds on Rho - card spend, ACH, wires, internal transfers, interest, and refunds. Use it to feed your data warehouse, drive reconciliation, or trigger workflows the moment money lands."]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info","name":"Stable contract"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The Transactions API is part of the stable ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["v1"]}," contract: additive-only, with breaking changes reserved for a new API version. See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/v1/versioning"},"children":["Versioning and compatibility"]},"."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"what-a-transaction-represents","__idx":1},"children":["What a transaction represents"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A single ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["transaction"]}," record models one ledger event against one account. Its key fields:"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Field"},"children":["Field"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"What it tells you"},"children":["What it tells you"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["id"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["A stable global identifier. Safe to use as an idempotency key downstream."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["money_movement_id"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Identifier used to correlate transaction legs belonging to the same money movement."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["account_id"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["account_type"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The account the event posted against, and its type."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["transaction_type"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The kind of event: card credits and debits, ACH, wires, transfers, refunds, repayments, and interest. See the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/api/v1/openapi/transactions"},"children":["API Reference"]}," for the full list of values."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["status"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["One of pending, settled, or failed. Most events pass through pending before they settle."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["amount"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["A signed amount in the account's currency, in minor units (cents for USD). Negative values are debits."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["initiated_at"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["posted_at"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["When the event was created versus when it cleared the ledger. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["posted_at"]}," stays empty until the transaction settles."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["attachments"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Stable file descriptors containing ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["file_id"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["file_name"]},". The array is empty when no files are attached."]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"downloading-attachments","__idx":2},"children":["Downloading attachments"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Transaction responses contain stable attachment metadata but never signed URLs. Request a fresh, short-lived URL only when the file is needed:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"curl \"https://rhoapi.rho.co/api/v1/transactions/{transaction_id}/files/{file_id}\" \\\n  -H \"Authorization: Bearer $RHO_API_TOKEN\"\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Set ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["{transaction_id}"]}," to the transaction's ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["id"]},", and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["{file_id}"]}," to an ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["attachments[].file_id"]}," value. A transaction ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["id"]}," identifies one transaction."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The response contains ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["file_id"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["file_name"]},", and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["download_url"]},". Fetch it again whenever a new signed URL is needed; do not persist the URL."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"lifecycle","__idx":3},"children":["Lifecycle"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Most transactions follow the same shape:"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Initiated"]}," - Rho creates the record with a status of pending and an ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["initiated_at"]}," timestamp. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["posted_at"]}," is still empty."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Settled"]}," - Once funds clear, the status flips to settled and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["posted_at"]}," is filled in. The amount can shift slightly between the initial authorization and final clearing."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Failed"]}," - On an unrecoverable failure (insufficient funds, a returned ACH, a declined card), the status flips to failed and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["posted_at"]}," stays empty. The record remains queryable for audit purposes."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Records do ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["not"]}," move backwards. A transaction that has settled will not flip back to pending - instead, a separate reversal transaction is issued."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"common-workflows","__idx":4},"children":["Common workflows"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"reconciling-daily-activity","__idx":5},"children":["Reconciling daily activity"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Iterate the list endpoint with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["posted_after"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["posted_before"]}," set to the boundaries of your accounting day, and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["status=settled"]}," to skip in-flight items:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"curl 'https://rhoapi.rho.co/api/v1/transactions?status=settled&posted_after=2026-05-21T00:00:00Z&posted_before=2026-05-22T00:00:00Z&page_size=100' \\\n  -H \"Authorization: Bearer $RHO_API_TOKEN\"\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Follow the cursor (see ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/v1/pagination"},"children":["Pagination"]},") until ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["next_page_token"]}," is ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["null"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"detecting-card-disputes","__idx":6},"children":["Detecting card disputes"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Filter on ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["transaction_type=card_refund"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["transaction_type=card_credit"]}," against the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["account_type=credit"]}," slice to surface refunds against the card line of credit. Each refund references the original auth via metadata."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"idempotent-ingestion","__idx":7},"children":["Idempotent ingestion"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Use ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["transaction.id"]}," as the primary key when writing to your warehouse. Re-fetching a day's window will return the same ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["id"]}," values, making the pipeline naturally idempotent."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"reference","__idx":8},"children":["Reference"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Full endpoint catalogue - paths, parameters, response shapes, and required scopes - lives in the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/api/v1/openapi/transactions"},"children":["API Reference"]},"."]}]},"headings":[{"value":"Transactions","id":"transactions","depth":1},{"value":"What a transaction represents","id":"what-a-transaction-represents","depth":2},{"value":"Downloading attachments","id":"downloading-attachments","depth":2},{"value":"Lifecycle","id":"lifecycle","depth":2},{"value":"Common workflows","id":"common-workflows","depth":2},{"value":"Reconciling daily activity","id":"reconciling-daily-activity","depth":3},{"value":"Detecting card disputes","id":"detecting-card-disputes","depth":3},{"value":"Idempotent ingestion","id":"idempotent-ingestion","depth":3},{"value":"Reference","id":"reference","depth":2}],"frontmatter":{"seo":{"title":"Transactions"}},"lastModified":"2026-07-29T13:58:14.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/docs/v1/transactions","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}