This guide explains how to retrieve wallet transactions from one or multiple blockchains using the BCReader API. You can get transactions for a specific blockchain or retrieve multi-blockchain and multi-token transactions in a single request, with optional filtering, pagination, and real-time price data.
The Transactions API uses a generic proxy pattern to route requests to BCReader. The IBEx.Fi API provides a transparent proxy endpoint that forwards requests to the BCReader API, which handles the actual transaction queries.
The proxy endpoints are:
:verb is transactions)For transactions, you call:
/api/transactions/api/v1.1/transactionsUse this endpoint to retrieve transactions for a wallet address on a specific blockchain with basic filtering. This routes through the generic proxy to BCReader's /api/transactions endpoint.
Endpoint : GET /v1.1/bcreader/transactions (via generic proxy GET /v1.1/bcreader/:verb)
Headers :
Authorization: Bearer <access_token> (required)X-Blockchain-Id: <chainId> (optional) : Target blockchain ID. If omitted, uses default chainQuery Parameters :
address (string, optional) : Safe address. If omitted, uses the first Safe of the authenticated userstartDate (string, optional) : Start date filter (YYYY-MM-DD, inclusive)endDate (string, optional) : End date filter (YYYY-MM-DD, inclusive)direction (string, optional) : Transaction direction ("IN" or "OUT")tokenType (string, optional) : Token type ("ERC20", "ERC721", "ERC1155", "NATIVE")page (number, optional) : Page number for paginationlimit (number, optional) : Maximum number of results per pageoffset (number, optional) : Number of results to skip (alternative to page)Request Example :
GET /v1.1/bcreader/transactions?address=0xd676c6188195372EC269E9C2cAf815C56436A679&startDate=2025-01-01&endDate=2025-01-31&limit=20&page=1 Authorization: Bearer <access_token> X-Blockchain-Id: 421614
Response (200 OK) :
{
"total": 125,
"page": 1,
"limit": 20,
"totalPages": 7,
"data": [
{
"transactionHash": "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef",
"from": "0xabcdefabcdefabcdefabcdefabcdefabcdefabcdefab",
"to": "0xd676c6188195372EC269E9C2cAf815C56436A679",
"watchedAddress": "0xd676c6188195372EC269E9C2cAf815C56436A679",
"direction": "IN",
"tokenAddress": "0xEURE12345678901234567890123456789012345678",
"tokenType": "ERC20",
"valueFormatted": "10.5",
"timestamp": "2025-01-15T10:30:00.000Z"
}
]
}
address is omitted, the API automatically uses the first Safe address of the authenticated user for the current rpId.
Use this endpoint to retrieve detailed transactions across one or multiple blockchains, with optional token metadata and price data. This routes through the generic proxy to BCReader's /api/v1.1/transactions endpoint.
Endpoint : GET /v1.1/bcreader/v1.1/transactions or GET /v1.1/bcreader/transactions (via generic proxy)
Headers :
Authorization: Bearer <access_token> (required)X-Blockchain-Id: <chainId> (optional) : Target blockchain ID. If omitted, returns transactions for all configured blockchainsQuery Parameters :
address (string, required) : Safe address to querystartDate (string, optional) : Start date filter (YYYY-MM-DD, inclusive)endDate (string, optional) : End date filter (YYYY-MM-DD, inclusive)direction (string, optional) : Transaction direction ("IN" or "OUT")tokenType (string, optional) : Token type ("ERC20", "ERC721", "ERC1155", "NATIVE")tokenAddress (string, optional) : Filter by token address (0x...) or comma-separated listsymbol (string, optional) : Filter by token symbol (e.g., "EURE,USDC")watchedTokensOnly (boolean, optional) : Keep only transfers for watched tokensincludeTokenMeta (boolean, optional) : Include token metadata (symbol, name, decimals)includePrices (boolean, optional, default: true) : Include real-time price data (USD/EUR)aggregateBy (string, optional) : Aggregate transactions by token ("token")page (number, optional) : Page number for paginationlimit (number, optional) : Maximum number of results per pageWhen X-Blockchain-Id header is provided:
Request Example :
GET /v1.1/bcreader/v1.1/transactions?address=0xd676c6188195372EC269E9C2cAf815C56436A679&startDate=2025-01-01&endDate=2025-01-31&includeTokenMeta=true&includePrices=true&limit=20 Authorization: Bearer <access_token> X-Blockchain-Id: 421614
Response (200 OK) :
{
"blockchainId": "421614",
"total": 125,
"page": 1,
"limit": 20,
"totalPages": 7,
"data": [
{
"transactionHash": "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef",
"from": "0xabcdefabcdefabcdefabcdefabcdefabcdefabcdefab",
"to": "0xd676c6188195372EC269E9C2cAf815C56436A679",
"watchedAddress": "0xd676c6188195372EC269E9C2cAf815C56436A679",
"direction": "IN",
"tokenAddress": "0xEURE12345678901234567890123456789012345678",
"primaryAddress": "0xeure12345678901234567890123456789012345678",
"secondaryAddress": null,
"active": true,
"tokenType": "ERC20",
"tokenSymbol": "EURE",
"tokenName": "EURe",
"tokenDecimals": 18,
"valueFormatted": "10.5",
"price_usd": 1.08,
"price_eur": 0.92,
"value_usd": "11.34",
"value_eur": "9.66",
"price_updated_at": "2025-01-15T10:30:00Z",
"price_source": "coinbase",
"timestamp": "2025-01-15T10:30:00.000Z"
}
],
"prices_available": true
}
When X-Blockchain-Id header is omitted, returns transactions for all configured blockchains:
Request Example :
GET /v1.1/bcreader/v1.1/transactions?address=0xd676c6188195372EC269E9C2cAf815C56436A679&startDate=2025-01-01&endDate=2025-01-31&limit=20 Authorization: Bearer <access_token>
Response (200 OK) :
{
"timestamp": "2025-06-02T13:30:45Z",
"transactions": {
"421614": {
"total": 125,
"page": 1,
"limit": 20,
"totalPages": 7,
"data": [
{
"transactionHash": "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef",
"from": "0xabcdefabcdefabcdefabcdefabcdefabcdefabcdefab",
"to": "0xd676c6188195372EC269E9C2cAf815C56436A679",
"watchedAddress": "0xd676c6188195372EC269E9C2cAf815C56436A679",
"direction": "IN",
"tokenAddress": "0xEURE12345678901234567890123456789012345678",
"primaryAddress": "0xeure12345678901234567890123456789012345678",
"secondaryAddress": null,
"active": true,
"tokenType": "ERC20",
"valueFormatted": "10.5",
"timestamp": "2025-01-15T10:30:00.000Z"
}
]
},
"100": {
"total": 80,
"page": 1,
"limit": 20,
"totalPages": 4,
"data": [
{
"transactionHash": "0xabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcd",
"from": "0xd676c6188195372EC269E9C2cAf815C56436A679",
"to": "0x1234567890123456789012345678901234567890",
"watchedAddress": "0xd676c6188195372EC269E9C2cAf815C56436A679",
"direction": "OUT",
"tokenAddress": "0xEURE12345678901234567890123456789012345678",
"primaryAddress": "0xeure12345678901234567890123456789012345678",
"secondaryAddress": null,
"active": true,
"tokenType": "ERC20",
"valueFormatted": "5.25",
"timestamp": "2025-01-15T12:00:00.000Z"
}
]
}
}
}
You can aggregate transactions by token using aggregateBy=token:
Request Example :
GET /v1.1/bcreader/v1.1/transactions?address=0xd676c6188195372EC269E9C2cAf815C56436A679&aggregateBy=token&limit=20 Authorization: Bearer <access_token> X-Blockchain-Id: 421614
Response (200 OK) :
{
"blockchainId": "421614",
"total": 125,
"page": 1,
"limit": 20,
"totalPages": 7,
"data": [ /* ...transactions... */ ],
"aggregates": {
"byToken": [
{
"tokenAddress": "0xEURE12345678901234567890123456789012345678",
"symbol": "EURE",
"count": 80,
"sumValue": "250.75"
},
{
"tokenAddress": "0xUSDC12345678901234567890123456789012345678",
"symbol": "USDC",
"count": 45,
"sumValue": "130.00"
}
]
}
}
total : Total number of transactions matching the querypage : Current page numberlimit : Results per pagetotalPages : Total number of pagesdata : Array of transaction objectsaggregates : Aggregated statistics (if aggregateBy=token)blockchainId : Blockchain ID (single blockchain response)transactions : Object keyed by blockchain ID (multi-blockchain response)transactionHash : On-chain transaction hashfrom : Sender addressto : Recipient addresswatchedAddress : The wallet address being monitoreddirection : Transaction direction ("IN" or "OUT")tokenAddress : ERC20 token contract addressprimaryAddress : Primary token address (lowercased)secondaryAddress : Secondary token address (if applicable)active : Whether the token is active (watched)tokenType : Token type ("ERC20", "ERC721", "ERC1155", "NATIVE")tokenSymbol : Token symbol (if includeTokenMeta=true)tokenName : Token name (if includeTokenMeta=true)tokenDecimals : Token decimals (if includeTokenMeta=true)valueFormatted : Human-readable transaction valueprice_usd : Token price in USD at transaction time (if includePrices=true)price_eur : Token price in EUR at transaction time (if includePrices=true)value_usd : Transaction value in USD (if includePrices=true)value_eur : Transaction value in EUR (if includePrices=true)price_updated_at : Price update timestamp (if includePrices=true)price_source : Price data source (e.g., "coinbase")timestamp : Transaction timestamp (ISO 8601)Filter transactions by date range (inclusive):
GET /v1.1/bcreader/transactions?address=0xd676c6188195372EC269E9C2cAf815C56436A679&startDate=2025-01-01&endDate=2025-01-31 Authorization: Bearer <access_token>
Filter by transaction direction:
GET /v1.1/bcreader/transactions?address=0xd676c6188195372EC269E9C2cAf815C56436A679&direction=IN Authorization: Bearer <access_token>
Filter by specific token address or symbol (v1.1):
GET /v1.1/bcreader/v1.1/transactions?address=0xd676c6188195372EC269E9C2cAf815C56436A679&tokenAddress=0xEURE12345678901234567890123456789012345678 Authorization: Bearer <access_token>
Or by symbol:
GET /v1.1/bcreader/v1.1/transactions?address=0xd676c6188195372EC269E9C2cAf815C56436A679&symbol=EURE,USDC Authorization: Bearer <access_token>
Keep only transactions for watched tokens (v1.1):
GET /v1.1/bcreader/v1.1/transactions?address=0xd676c6188195372EC269E9C2cAf815C56436A679&watchedTokensOnly=true Authorization: Bearer <access_token>
Include token symbol, name, and decimals in each transaction (v1.1):
GET /v1.1/bcreader/v1.1/transactions?address=0xd676c6188195372EC269E9C2cAf815C56436A679&includeTokenMeta=true Authorization: Bearer <access_token>
To disable price data (faster response, v1.1):
GET /v1.1/bcreader/v1.1/transactions?address=0xd676c6188195372EC269E9C2cAf815C56436A679&includePrices=false Authorization: Bearer <access_token>
Transactions are paginated by default. Use page and limit to navigate through results:
Request Example (Page 1) :
GET /v1.1/bcreader/transactions?address=0xd676c6188195372EC269E9C2cAf815C56436A679&page=1&limit=20 Authorization: Bearer <access_token>
Request Example (Page 2) :
GET /v1.1/bcreader/transactions?address=0xd676c6188195372EC269E9C2cAf815C56436A679&page=2&limit=20 Authorization: Bearer <access_token>
offset instead of page for pagination. For example, offset=20 is equivalent to page=2 with limit=20.
You can optionally include transaction data in the sign-in response by setting includeTransactions: true in the sign-in request body:
Request Example :
POST /v1.2/auth/sign-in
Content-Type: application/json
{
"credential": { ... },
"includeTransactions": true
}
Response (200 OK) :
{
"access_token": "...",
"refresh_token": "...",
"safeAddress": { ... },
"transactions": {
"total": 125,
"page": 1,
"limit": 20,
"totalPages": 7,
"data": [ /* ...transactions... */ ]
}
}
includeTransactions is not set or is false, the transactions field will not be included in the response.
If the JWT is missing or invalid, you will receive a 401 error. Make sure to include a valid Authorization header.
If the wallet address is not found or the user has no Safe addresses, you will receive a 404 error.
If the address format is invalid or date filters are malformed, you will receive a 400 error.
X-Blockchain-Id header for single blockchain, omit for all blockchainspage and limit to navigate through resultsincludeTransactions: true in sign-in requestsaddress is omitted in v1, the API uses the first Safe of the authenticated userX-Blockchain-Id for all blockchains)page/limit or offset/limitincludePrices=false to disable)includeTokenMeta=true (v1.1)aggregateBy=token (v1.1)This section provides detailed technical information for AI systems integrating the IBEX wallet transactions flow, including architecture patterns, data models, and implementation details.
Generic Proxy Pattern
GET /v1.1/bcreader/:verb and POST /v1.1/bcreader/:verb:verb is transactions, so you call GET /v1.1/bcreader/transactionsGET /v1.1/bcreader/transactions
GET /v1.1/bcreader/:verb with verb=transactionsGET /api/transactionsaddress omitted, uses first Safe of authenticated userX-Blockchain-Id header or query parameter (forwarded to BCReader)GET /v1.1/bcreader/v1.1/transactions
GET /v1.1/bcreader/:verb with verb=v1.1/transactions or GET /v1.1/bcreader/transactionsGET /api/v1.1/transactionsX-Blockchain-Id: Returns single blockchain responseX-Blockchain-Id: Returns multi-blockchain responsetokenAddress, symbol query parameters (supports comma-separated lists) - forwarded to BCReaderwatchedTokensOnly, includeTokenMeta, includePrices, aggregateBy - all forwarded to BCReaderAPIPRICE_ENABLED=true on BCReader)Single Blockchain Response:
{
"blockchainId": "string (chain ID)",
"total": number,
"page": number,
"limit": number,
"totalPages": number,
"data": [
{
"transactionHash": "0x...",
"from": "0x...",
"to": "0x...",
"watchedAddress": "0x...",
"direction": "IN | OUT",
"tokenAddress": "0x...",
"primaryAddress": "0x...",
"secondaryAddress": "0x... | null",
"active": boolean,
"tokenType": "ERC20 | ERC721 | ERC1155 | NATIVE",
"tokenSymbol": "string",
"tokenName": "string",
"tokenDecimals": number,
"valueFormatted": "string (human-readable)",
"price_usd": number,
"price_eur": number,
"value_usd": "string",
"value_eur": "string",
"price_updated_at": "ISO-8601 timestamp",
"price_source": "string",
"timestamp": "ISO-8601 timestamp"
}
],
"aggregates": {
"byToken": [
{
"tokenAddress": "0x...",
"symbol": "string",
"count": number,
"sumValue": "string"
}
]
},
"prices_available": boolean
}
Multi-Blockchain Response:
{
"timestamp": "ISO-8601 timestamp",
"transactions": {
"blockchainId1": {
"total": number,
"page": number,
"limit": number,
"totalPages": number,
"data": [...]
},
"blockchainId2": {
"total": number,
"page": number,
"limit": number,
"totalPages": number,
"data": [...]
}
}
}
Date Filters:
startDate : Start date (YYYY-MM-DD, inclusive)endDate : End date (YYYY-MM-DD, inclusive)Direction Filter:
direction=IN : Only incoming transactionsdirection=OUT : Only outgoing transactionsToken Type Filter:
tokenType=ERC20 : ERC20 tokens onlytokenType=ERC721 : ERC721 (NFT) tokens onlytokenType=ERC1155 : ERC1155 (multi-token) onlytokenType=NATIVE : Native blockchain token (ETH, etc.) onlyToken Filters (v1.1):
tokenAddress : Single address or comma-separated list (e.g., "0x...,0x...")symbol : Single symbol or comma-separated list (e.g., "EURE,USDC")watchedTokensOnly=true : Only transactions for watched tokensPagination Methods:
page + limit : Page-based pagination (recommended)offset + limit : Offset-based pagination (alternative)page=1, limit varies by endpointResponse Fields:
total : Total number of transactions matching filterspage : Current page numberlimit : Results per pagetotalPages : Total number of pages (calculated from total and limit)Price Data:
includePrices=true) in v1.1APIPRICE_ENABLED=true on BCReaderprice_usd, price_eur, value_usd, value_eurAggregate by Token:
aggregateBy=token to get token-level statisticsaggregates.byToken arraytokenAddress, symbol, count, sumValueSign-In Integration:
includeTransactions: true in sign-in request bodytransactions fieldWebSocket Integration:
transaction_datasrc/routes/v1.1/bcreader.ts : Generic proxy endpoints (GET /v1.1/bcreader/:verb, POST /v1.1/bcreader/:verb)src/clients/BCReader.ts : BCReader API client (handles actual BCReader communication)src/routes/v1/auth.ts : Sign-in integration with includeTransactionsdocs/BCREADER_ENDPOINTS_v1.1.en.md : Complete BCReader API documentationGET /v1.1/bcreader/transactions?address=0x... or GET /v1.1/bcreader/v1.1/transactions?address=0x...GET /v1.1/bcreader/:verb where verb=transactionsincludePrices=true, BCReader fetches real-time pricesaggregateBy=token, BCReader calculates token-level statisticspage and totalPages to navigate