> For the complete documentation index, see [llms.txt](https://docs.ur.app/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.ur.app/api-reference/api/account/managed-custody-mode/fetch-transaction-history.md).

# Fetch transaction history

Fetch paginated transaction history for reconciliation, or fetch a single transaction by sending exactly one of id, txHash, or reqId (mutually exclusive). The transaction webhook delivers the same transaction structure; parse detailsJson according to the transaction type.

```json
{"openapi":"3.1.0","info":{"title":"UR API","version":"1.0.0"},"tags":[{"name":"Managed Custody Mode","description":"Server-to-server APIs where UR custodies user funds. Partner Auth (EIP-191) with user identity headers."}],"servers":[{"url":"https://openapi.ur.app","description":"Production (partner API)"},{"url":"https://uropenapi-qa.ur-inc.xyz","description":"Testnet (partner API)"}],"security":[{"partnerAuth":[]},{"userWalletAuth":[]}],"components":{"securitySchemes":{"partnerAuth":{"type":"apiKey","in":"header","name":"X-Api-Signature","description":"Partner Auth: EIP-191 signature by the partner's registered backend key, with X-Api-Deadline and optional X-Api-PublicKey headers. See the Signature and verify guide."},"userWalletAuth":{"type":"apiKey","in":"header","name":"sign","description":"User wallet auth (External Wallet Access Mode): EIP-191 signature by the user's wallet key, with tokenId, network, hash, and deadline headers. See the Signature and verify guide."}},"schemas":{"McTransactionsRequest":{"type":"object","properties":{"pageSize":{"type":"integer","description":"Page size. Defaults to 50; maximum is 100."},"type":{"type":"string","description":"Single transaction type filter. Do not send together with txTypes."},"txTypes":{"type":"array","items":{"type":"string"},"description":"Multiple transaction type filter. Do not send together with type."},"currencies":{"type":"array","items":{"type":"string"},"description":"Currency filter. Values are normalized to lowercase by UR."},"direction":{"type":"string","enum":["IN","OUT","ALL"],"description":"Direction filter."},"status":{"type":"string","description":"Transaction status filter."},"chainId":{"type":"string","description":"Chain ID filter, for example eip155:5000."},"tokenSymbol":{"type":"string","description":"Token symbol filter, for example USDC."},"minAmount":{"type":"string","description":"Minimum amount filter."},"maxAmount":{"type":"string","description":"Maximum amount filter."},"fromTimestamp":{"type":"integer","description":"Start timestamp filter."},"toTimestamp":{"type":"integer","description":"End timestamp filter."},"cursorTimestamp":{"type":"integer","description":"Next-page cursor timestamp from data.nextCursor.timestamp. Send only when hasNextPage is true."},"cursorId":{"type":"integer","description":"Next-page cursor ID from data.nextCursor.id. Send only when hasNextPage is true."},"prevCursorTimestamp":{"type":"integer","description":"Previous-page cursor timestamp from data.prevCursor.timestamp. Send only when hasPrevPage is true."},"prevCursorId":{"type":"integer","description":"Previous-page cursor ID from data.prevCursor.id. Send only when hasPrevPage is true."},"id":{"type":"integer","description":"Exact lookup by UR internal transaction ID. Mutually exclusive with txHash and reqId."},"txHash":{"type":"string","description":"Exact lookup by transaction hash. Mutually exclusive with id and reqId."},"reqId":{"type":"string","description":"Exact lookup by the idempotency key used when the transaction was created. Mutually exclusive with id and txHash."}}},"McTransactionsResponse":{"allOf":[{"$ref":"#/components/schemas/McBaseResponse"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/McTransactionsData"}}}]},"McBaseResponse":{"type":"object","description":"Standard UR OpenAPI response envelope. code 0 means success; a non-zero code is a business error described by message.","required":["code","message"],"properties":{"code":{"type":"integer","description":"0 on success; non-zero business error code."},"message":{"type":"string","description":"Human-readable explanation. May be empty on success."}}},"McTransactionsData":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/McTransactionItem"}},"hasNextPage":{"type":"boolean","description":"True when a next page exists. Only then send nextCursor fields."},"hasPrevPage":{"type":"boolean","description":"True when a previous page exists. Only then send prevCursor fields; a zero cursor means there is no previous page."},"nextCursor":{"$ref":"#/components/schemas/McTransactionCursor"},"prevCursor":{"$ref":"#/components/schemas/McTransactionCursor"},"currentPageSize":{"type":"integer","description":"Number of items in this page."}}},"McTransactionItem":{"type":"object","properties":{"id":{"type":"integer","description":"UR internal transaction ID."},"txHash":{"type":"string","description":"On-chain transaction hash."},"txLogIndex":{"type":"integer","description":"Transaction log index."},"blockNumber":{"type":"integer","description":"Block number."},"createTimeE9":{"type":"integer","description":"Creation time in nanoseconds."},"broadcastTimeE9":{"type":"integer","description":"Broadcast time in nanoseconds."},"finalTimeE9":{"type":"integer","description":"Finalization time in nanoseconds."},"type":{"type":"string","enum":["CRYPTO_DEPOSIT","INTERNAL_TOKEN_TRANSFER","UNKNOWN","FX_EXCHANGE","MARQETA_AUTHORIZE","FIAT_WITHDRAW","FIAT_DEPOSIT","ONRAMP"],"description":"Transaction type. Determines the structure of detailsJson."},"chainId":{"type":"string","description":"Chain ID, for example eip155:5000."},"chainName":{"type":"string","description":"Chain name, for example Mantle."},"urId":{"type":"string","description":"The user's URID as a string."},"direction":{"type":"string","enum":["IN","OUT"],"description":"Transaction direction."},"amount":{"type":"string","description":"Signed amount as a decimal string."},"currency":{"type":"string","description":"Currency in lowercase."},"status":{"type":"string","enum":["UNKNOWN","INIT","PENDING","CONFIRMED","FAILED","PENDING_DROP","DROPPED","REJECTED"],"description":"Transaction status. CONFIRMED means settled on-chain; REJECTED means UR's validation or compliance checks rejected it."},"reqId":{"type":"string","description":"Idempotency key used when the transaction was created."},"detailsJson":{"type":"string","description":"Stringified JSON whose structure depends on type. Parse the string before reading nested fields."},"refundType":{"type":"string","enum":["","BANK_REFUND","CARD_REFUND","CARD_REVERSAL"],"description":"Refund discriminator. Empty string means not a refund."}}},"McTransactionCursor":{"type":"object","properties":{"timestamp":{"type":"integer","description":"Cursor timestamp."},"id":{"type":"integer","description":"Cursor ID."}}}}},"paths":{"/api/fma/v1/transactions":{"post":{"tags":["Managed Custody Mode"],"operationId":"mcFetchTransactions","summary":"Fetch transaction history","description":"Fetch paginated transaction history for reconciliation, or fetch a single transaction by sending exactly one of id, txHash, or reqId (mutually exclusive). The transaction webhook delivers the same transaction structure; parse detailsJson according to the transaction type.","parameters":[{"name":"X-Api-Signature","in":"header","required":true,"schema":{"type":"string"},"description":"0x-prefixed 65-byte hex EIP-191 signature over the Partner Auth message. See the Signature and verify guide."},{"name":"X-Api-Deadline","in":"header","required":true,"schema":{"type":"string"},"description":"Unix seconds. UR rejects the request when the current time is past the deadline. Keep the validity window at or under 5 minutes."},{"name":"X-Api-PublicKey","in":"header","required":true,"schema":{"type":"string"},"description":"0x-prefixed partner signer address registered with UR."},{"name":"X-Ur-Id","in":"header","required":false,"schema":{"type":"string"},"description":"Send at least one of X-Ur-Id or X-External-User-Id. When both are present, UR resolves the user by X-Ur-Id first."},{"name":"X-External-User-Id","in":"header","required":false,"schema":{"type":"string"},"description":"Send at least one of X-Ur-Id or X-External-User-Id. When both are present, UR resolves the user by X-Ur-Id first."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/McTransactionsRequest"}}}},"responses":{"200":{"description":"Standard envelope. Business errors return HTTP 200 with a non-zero code. For exact lookups, data.items is empty when no transaction matches.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/McTransactionsResponse"}}}}}}}}}
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.ur.app/api-reference/api/account/managed-custody-mode/fetch-transaction-history.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
