openapi: 3.2.0 info: description: Cached proxy layer for multiple blockchain APIs with 24-hour caching and automatic fallback across chains. Supports both Blockscout and ThirdWeb Insights APIs. Add ?mintlify parameter for Mintlify-compatible version. version: 1.0.0 title: B3 Data API - Multi-Chain Data Insights/transactions API contact: name: B3 Team url: https://b3.fun license: name: Apache 2.0 url: http://www.apache.org/licenses/LICENSE-2.0.html servers: - url: https://data-api.b3.fun/ description: B3 Data API - Multi-Chain Proxy tags: - name: insights/transactions description: ThirdWeb Insights transaction analytics paths: /insights/v1/transactions: get: description: Get transactions summary: Get transactions tags: - insights/transactions parameters: - name: chain in: query required: false deprecated: true description: Use chain_id instead schema: type: array example: - 20 - 56 - 1 items: type: number - name: chain_id in: query required: false description: The chain ID(s) to request the data for. You can specify multiple chain IDs, up to a maximum of 55. Use repeated query parameters, e.g., `?chain_id=20&chain_id=56`. Optional, because a single chain can as well be specified as a subdomain schema: type: array example: - 20 - 56 - 1 items: type: number - $ref: '#/components/parameters/filterBlockNumber' - $ref: '#/components/parameters/filterBlockNumberGte' - $ref: '#/components/parameters/filterBlockNumberGt' - $ref: '#/components/parameters/filterBlockNumberLte' - $ref: '#/components/parameters/filterBlockNumberLt' - $ref: '#/components/parameters/filterBlockHash' - $ref: '#/components/parameters/filterBlockTimestamp' - $ref: '#/components/parameters/filterBlockTimestampGte' - $ref: '#/components/parameters/filterBlockTimestampGt' - $ref: '#/components/parameters/filterBlockTimestampLte' - $ref: '#/components/parameters/filterBlockTimestampLt' - $ref: '#/components/parameters/sortBy' - $ref: '#/components/parameters/sortOrder' - $ref: '#/components/parameters/groupBy' - $ref: '#/components/parameters/aggregate' - $ref: '#/components/parameters/filterTransactionIndex' - $ref: '#/components/parameters/filterTransactionIndexGte' - $ref: '#/components/parameters/filterTransactionIndexGt' - $ref: '#/components/parameters/filterTransactionIndexLte' - $ref: '#/components/parameters/filterTransactionIndexLt' - $ref: '#/components/parameters/decode' - $ref: '#/components/parameters/filterHash' - $ref: '#/components/parameters/filterFromAddress' - $ref: '#/components/parameters/filterValue' - $ref: '#/components/parameters/filterValueGte' - $ref: '#/components/parameters/filterValueGt' - $ref: '#/components/parameters/filterValueLte' - $ref: '#/components/parameters/filterValueLt' - $ref: '#/components/parameters/filterGasPrice' - $ref: '#/components/parameters/filterGasPriceGte' - $ref: '#/components/parameters/filterGasPriceGt' - $ref: '#/components/parameters/filterGasPriceLte' - $ref: '#/components/parameters/filterGasPriceLt' - $ref: '#/components/parameters/filterGas' - $ref: '#/components/parameters/filterGasGte' - $ref: '#/components/parameters/filterGasGt' - $ref: '#/components/parameters/filterGasLte' - $ref: '#/components/parameters/filterGasLt' - $ref: '#/components/parameters/filterFunctionSelector' - $ref: '#/components/parameters/filterToAddress' - $ref: '#/components/parameters/limit' - $ref: '#/components/parameters/page' responses: '200': description: Successful response content: application/json: schema: type: object properties: data: type: array items: type: object properties: chain_id: type: string block_number: type: number block_hash: type: string block_timestamp: type: number hash: type: string nonce: type: number transaction_index: type: number from_address: type: string to_address: type: string value: type: string gas_price: type: string gas: type: number function_selector: type: string data: type: string max_fee_per_gas: type: string max_priority_fee_per_gas: type: string transaction_type: type: number r: type: string s: type: string v: type: string access_list_json: type: string authorization_list_json: type: string contract_address: type: string gas_used: type: number cumulative_gas_used: type: number effective_gas_price: type: string blob_gas_used: type: number blob_gas_price: type: string logs_bloom: type: string status: type: number decoded: type: object properties: name: type: string signature: type: string inputs: type: object additionalProperties: {} required: - name - signature required: - chain_id - block_number - block_hash - block_timestamp - hash - nonce - transaction_index - from_address - to_address - value - gas_price - gas - function_selector - data - max_fee_per_gas - max_priority_fee_per_gas - transaction_type - r - s - v aggregations: {} meta: type: object properties: chain_ids: type: array items: type: number address: type: string signature: type: string page: type: number limit_per_chain: type: number total_items: type: number total_pages: type: number required: - chain_ids - page - limit_per_chain - total_items - total_pages required: - meta '400': description: Bad request content: application/json: schema: type: object properties: error: type: string required: - error '500': description: Internal server error content: application/json: schema: type: object properties: error: type: string required: - error /insights/v1/transactions/{contractAddress}: get: description: Get contract transactions summary: Get contract transactions tags: - insights/transactions parameters: - $ref: '#/components/parameters/contractAddress' - name: chain in: query required: false deprecated: true description: Use chain_id instead schema: type: array example: - 20 - 56 - 1 items: type: number - name: chain_id in: query required: false description: The chain ID(s) to request the data for. You can specify multiple chain IDs, up to a maximum of 55. Use repeated query parameters, e.g., `?chain_id=20&chain_id=56`. Optional, because a single chain can as well be specified as a subdomain schema: type: array example: - 20 - 56 - 1 items: type: number - $ref: '#/components/parameters/filterBlockNumber' - $ref: '#/components/parameters/filterBlockNumberGte' - $ref: '#/components/parameters/filterBlockNumberGt' - $ref: '#/components/parameters/filterBlockNumberLte' - $ref: '#/components/parameters/filterBlockNumberLt' - $ref: '#/components/parameters/filterBlockHash' - $ref: '#/components/parameters/filterBlockTimestamp' - $ref: '#/components/parameters/filterBlockTimestampGte' - $ref: '#/components/parameters/filterBlockTimestampGt' - $ref: '#/components/parameters/filterBlockTimestampLte' - $ref: '#/components/parameters/filterBlockTimestampLt' - $ref: '#/components/parameters/sortBy' - $ref: '#/components/parameters/sortOrder' - $ref: '#/components/parameters/groupBy' - $ref: '#/components/parameters/aggregate' - $ref: '#/components/parameters/filterTransactionIndex' - $ref: '#/components/parameters/filterTransactionIndexGte' - $ref: '#/components/parameters/filterTransactionIndexGt' - $ref: '#/components/parameters/filterTransactionIndexLte' - $ref: '#/components/parameters/filterTransactionIndexLt' - $ref: '#/components/parameters/decode' - $ref: '#/components/parameters/filterHash' - $ref: '#/components/parameters/filterFromAddress' - $ref: '#/components/parameters/filterValue' - $ref: '#/components/parameters/filterValueGte' - $ref: '#/components/parameters/filterValueGt' - $ref: '#/components/parameters/filterValueLte' - $ref: '#/components/parameters/filterValueLt' - $ref: '#/components/parameters/filterGasPrice' - $ref: '#/components/parameters/filterGasPriceGte' - $ref: '#/components/parameters/filterGasPriceGt' - $ref: '#/components/parameters/filterGasPriceLte' - $ref: '#/components/parameters/filterGasPriceLt' - $ref: '#/components/parameters/filterGas' - $ref: '#/components/parameters/filterGasGte' - $ref: '#/components/parameters/filterGasGt' - $ref: '#/components/parameters/filterGasLte' - $ref: '#/components/parameters/filterGasLt' - $ref: '#/components/parameters/filterFunctionSelector' - $ref: '#/components/parameters/limit' - $ref: '#/components/parameters/page' responses: '200': description: Successful response content: application/json: schema: type: object properties: data: type: array items: type: object properties: chain_id: type: string block_number: type: number block_hash: type: string block_timestamp: type: number hash: type: string nonce: type: number transaction_index: type: number from_address: type: string to_address: type: string value: type: string gas_price: type: string gas: type: number function_selector: type: string data: type: string max_fee_per_gas: type: string max_priority_fee_per_gas: type: string transaction_type: type: number r: type: string s: type: string v: type: string access_list_json: type: string authorization_list_json: type: string contract_address: type: string gas_used: type: number cumulative_gas_used: type: number effective_gas_price: type: string blob_gas_used: type: number blob_gas_price: type: string logs_bloom: type: string status: type: number required: - chain_id - block_number - block_hash - block_timestamp - hash - nonce - transaction_index - from_address - to_address - value - gas_price - gas - function_selector - data - max_fee_per_gas - max_priority_fee_per_gas - transaction_type - r - s - v aggregations: {} meta: type: object properties: chain_ids: type: array items: type: number address: type: string signature: type: string page: type: number limit_per_chain: type: number total_items: type: number total_pages: type: number required: - chain_ids - page - limit_per_chain - total_items - total_pages required: - meta '400': description: Bad request content: application/json: schema: type: object properties: error: type: string required: - error '500': description: Internal server error content: application/json: schema: type: object properties: error: type: string required: - error /insights/v1/transactions/{contractAddress}/{signature}: get: description: Get specific contract transactions summary: Get contract transactions with specific signature tags: - insights/transactions parameters: - $ref: '#/components/parameters/contractAddress' - $ref: '#/components/parameters/signature' - name: chain in: query required: false deprecated: true description: Use chain_id instead schema: type: array example: - 20 - 56 - 1 items: type: number - name: chain_id in: query required: false description: The chain ID(s) to request the data for. You can specify multiple chain IDs, up to a maximum of 55. Use repeated query parameters, e.g., `?chain_id=20&chain_id=56`. Optional, because a single chain can as well be specified as a subdomain schema: type: array example: - 20 - 56 - 1 items: type: number - $ref: '#/components/parameters/filterBlockNumber' - $ref: '#/components/parameters/filterBlockNumberGte' - $ref: '#/components/parameters/filterBlockNumberGt' - $ref: '#/components/parameters/filterBlockNumberLte' - $ref: '#/components/parameters/filterBlockNumberLt' - $ref: '#/components/parameters/filterBlockHash' - $ref: '#/components/parameters/filterBlockTimestamp' - $ref: '#/components/parameters/filterBlockTimestampGte' - $ref: '#/components/parameters/filterBlockTimestampGt' - $ref: '#/components/parameters/filterBlockTimestampLte' - $ref: '#/components/parameters/filterBlockTimestampLt' - $ref: '#/components/parameters/sortBy' - $ref: '#/components/parameters/sortOrder' - $ref: '#/components/parameters/groupBy' - $ref: '#/components/parameters/aggregate' - $ref: '#/components/parameters/filterTransactionIndex' - $ref: '#/components/parameters/filterTransactionIndexGte' - $ref: '#/components/parameters/filterTransactionIndexGt' - $ref: '#/components/parameters/filterTransactionIndexLte' - $ref: '#/components/parameters/filterTransactionIndexLt' - $ref: '#/components/parameters/decode' - $ref: '#/components/parameters/filterHash' - $ref: '#/components/parameters/filterFromAddress' - $ref: '#/components/parameters/filterValue' - $ref: '#/components/parameters/filterValueGte' - $ref: '#/components/parameters/filterValueGt' - $ref: '#/components/parameters/filterValueLte' - $ref: '#/components/parameters/filterValueLt' - $ref: '#/components/parameters/filterGasPrice' - $ref: '#/components/parameters/filterGasPriceGte' - $ref: '#/components/parameters/filterGasPriceGt' - $ref: '#/components/parameters/filterGasPriceLte' - $ref: '#/components/parameters/filterGasPriceLt' - $ref: '#/components/parameters/filterGas' - $ref: '#/components/parameters/filterGasGte' - $ref: '#/components/parameters/filterGasGt' - $ref: '#/components/parameters/filterGasLte' - $ref: '#/components/parameters/filterGasLt' - $ref: '#/components/parameters/limit' - $ref: '#/components/parameters/page' responses: '200': description: Successful response content: application/json: schema: type: object properties: data: type: array items: type: object properties: chain_id: type: string block_number: type: number block_hash: type: string block_timestamp: type: number hash: type: string nonce: type: number transaction_index: type: number from_address: type: string to_address: type: string value: type: string gas_price: type: string gas: type: number function_selector: type: string data: type: string max_fee_per_gas: type: string max_priority_fee_per_gas: type: string transaction_type: type: number r: type: string s: type: string v: type: string access_list_json: type: string authorization_list_json: type: string contract_address: type: string gas_used: type: number cumulative_gas_used: type: number effective_gas_price: type: string blob_gas_used: type: number blob_gas_price: type: string logs_bloom: type: string status: type: number decoded: type: object properties: name: type: string signature: type: string inputs: type: object additionalProperties: {} required: - name - signature required: - chain_id - block_number - block_hash - block_timestamp - hash - nonce - transaction_index - from_address - to_address - value - gas_price - gas - function_selector - data - max_fee_per_gas - max_priority_fee_per_gas - transaction_type - r - s - v aggregations: {} meta: type: object properties: chain_ids: type: array items: type: number address: type: string signature: type: string page: type: number limit_per_chain: type: number total_items: type: number total_pages: type: number required: - chain_ids - page - limit_per_chain - total_items - total_pages required: - meta '400': description: Bad request content: application/json: schema: type: object properties: error: type: string required: - error '500': description: Internal server error content: application/json: schema: type: object properties: error: type: string required: - error components: parameters: filterGasPriceLt: schema: type: - number - 'null' description: Filter by gas price less than example: 50000000000000 required: false name: filter_gas_price_lt in: query filterValue: schema: type: - number - 'null' description: Filter by value example: 21000000000000 required: false name: filter_value in: query page: schema: type: - integer - 'null' minimum: 0 default: 0 description: 'Page number (0-indexed). Maximum value depends on query parameters: 20 for regular queries, 500 when using aggregate or group_by parameters.' example: 0 required: false name: page in: query filterBlockHash: schema: type: string description: Filter by block hash example: '0x3a1fba5abd9d41457944e91ed097e039b7b12d3d7ba324a3f422db2277a48e28' required: false name: filter_block_hash in: query filterToAddress: schema: type: string description: Filter by to address title: address (hex or ENS) example: '0xa1e4380a3b1f749673e270229993ee55f35663b4' required: false name: filter_to_address in: query decode: schema: type: - boolean - 'null' description: Enable ABI decoding of the transactions/events data example: true required: false name: decode in: query filterBlockTimestampGte: schema: type: - number - 'null' description: Filter by block timestamp greater than or equal to example: 1715222400 required: false name: filter_block_timestamp_gte in: query limit: schema: type: integer maximum: 1000 default: 20 description: The number of items to return example: 20 exclusiveMinimum: 0 required: false name: limit in: query filterBlockNumberGt: schema: type: - number - 'null' description: Filter by block number greater than example: 1000000 required: false name: filter_block_number_gt in: query filterHash: schema: type: string description: Filter by transaction hash example: '0x218b632d932371478d1ae5a01620ebab1a2030f9dad6f8fba4a044ea6335a57e' required: false name: filter_hash in: query filterBlockNumberGte: schema: type: - number - 'null' description: Filter by block number greater than or equal to example: 1000000 required: false name: filter_block_number_gte in: query filterGasLt: schema: type: - number - 'null' description: Filter by gas less than example: 21000 required: false name: filter_gas_lt in: query filterFunctionSelector: schema: type: string description: Filter by function selector example: '0x095ea7b3' required: false name: filter_function_selector in: query filterBlockTimestamp: schema: type: - number - 'null' description: Filter by block timestamp example: 1715222400 required: false name: filter_block_timestamp in: query filterBlockNumberLte: schema: type: - number - 'null' description: Filter by block number less than or equal to example: 1000000 required: false name: filter_block_number_lte in: query contractAddress: schema: type: string title: address (hex or ENS) example: vitalik.eth required: true name: contract_address in: path filterGas: schema: type: - number - 'null' description: Filter by gas example: 21000 required: false name: filter_gas in: query filterGasGte: schema: type: - number - 'null' description: Filter by gas greater than or equal to example: 21000 required: false name: filter_gas_gte in: query filterGasPrice: schema: type: - number - 'null' description: Filter by gas price example: 50000000000000 required: false name: filter_gas_price in: query filterFromAddress: schema: type: string description: Filter by from address title: address (hex or ENS) example: '0xa1e4380a3b1f749673e270229993ee55f35663b4' required: false name: filter_from_address in: query filterGasPriceGt: schema: type: - number - 'null' description: Filter by gas price greater than example: 50000000000000 required: false name: filter_gas_price_gt in: query filterTransactionIndexGte: schema: type: - number - 'null' description: Filter by transaction index greater than or equal to example: 5 required: false name: filter_transaction_index_gte in: query signature: schema: type: string required: true name: signature in: path filterGasPriceLte: schema: type: - number - 'null' description: Filter by gas price less than or equal to example: 50000000000000 required: false name: filter_gas_price_lte in: query filterGasLte: schema: type: - number - 'null' description: Filter by gas less than or equal to example: 21000 required: false name: filter_gas_lte in: query filterBlockNumberLt: schema: type: - number - 'null' description: Filter by block number less than example: 1000000 required: false name: filter_block_number_lt in: query filterBlockNumber: schema: type: - number - 'null' description: Filter by block number example: 1000000 required: false name: filter_block_number in: query filterValueGte: schema: type: - number - 'null' description: Filter by value greater than or equal to example: 21000000000000 required: false name: filter_value_gte in: query filterTransactionIndexGt: schema: type: - number - 'null' description: Filter by transaction index greater than example: 5 required: false name: filter_transaction_index_gt in: query filterGasGt: schema: type: - number - 'null' description: Filter by gas greater than example: 21000 required: false name: filter_gas_gt in: query filterValueLte: schema: type: - number - 'null' description: Filter by value less than or equal to example: 21000000000000 required: false name: filter_value_lte in: query filterTransactionIndex: schema: type: - number - 'null' description: Filter by transaction index example: 5 required: false name: filter_transaction_index in: query filterBlockTimestampLte: schema: type: - number - 'null' description: Filter by block timestamp less than or equal to example: 1715222400 required: false name: filter_block_timestamp_lte in: query filterTransactionIndexLt: schema: type: - number - 'null' description: Filter by transaction index less than example: 5 required: false name: filter_transaction_index_lt in: query sortOrder: schema: type: string enum: - asc - desc description: Sort order (asc or desc) example: desc required: false name: sort_order in: query filterTransactionIndexLte: schema: type: - number - 'null' description: Filter by transaction index less than or equal to example: 5 required: false name: filter_transaction_index_lte in: query filterValueLt: schema: type: - number - 'null' description: Filter by value less than example: 21000000000000 required: false name: filter_value_lt in: query filterValueGt: schema: type: - number - 'null' description: Filter by value greater than example: 21000000000000 required: false name: filter_value_gt in: query filterBlockTimestampLt: schema: type: - number - 'null' description: Filter by block timestamp less than example: 1715222400 required: false name: filter_block_timestamp_lt in: query groupBy: schema: type: - string - 'null' description: Field(s) to group by. You can specify multiple with repeated query parameters, e.g., ?group_by=chain_id&group_by=block_number required: false name: group_by in: query aggregate: schema: type: - string - 'null' description: Aggregation(s). You can specify multiple with repeated query parameters, e.g., ?aggregate=count()&aggregate=sum(gas_used) example: count() as count required: false name: aggregate in: query sortBy: schema: anyOf: - type: string enum: - block_number title: constant - type: string title: string description: Field to sort results by example: block_number required: false name: sort_by in: query filterBlockTimestampGt: schema: type: - number - 'null' description: Filter by block timestamp greater than example: 1715222400 required: false name: filter_block_timestamp_gt in: query filterGasPriceGte: schema: type: - number - 'null' description: Filter by gas price greater than or equal to example: 50000000000000 required: false name: filter_gas_price_gte in: query securitySchemes: clientId: type: apiKey in: header name: x-client-id description: thirdweb client ID in headers secretKey: type: apiKey in: header name: x-secret-key description: thirdweb secret key in headers dashboard: type: http scheme: bearer bearerFormat: JWT description: thirdweb JWT + Client ID clientId-query: type: apiKey in: query name: clientId description: thirdweb client ID in query params x-proxy-info: supported-chains: - chainId: 243 name: Reach Testnet network: reach-testnet apiUrl: https://reach-testnet.explorer.caldera.xyz/api/v2 - chainId: 1993 name: B3 Testnet network: b3-testnet apiUrl: https://sepolia.explorer.b3.fun/api/v2 - chainId: 4224 name: Arpachain network: arpachain apiUrl: https://arpachain.calderaexplorer.xyz/api/v2 - chainId: 8333 name: B3 Mainnet network: b3 apiUrl: https://blockscout.b3.fun/api/v2 - chainId: 19934 name: B4 Testnet network: b4-testnet apiUrl: https://b4-testnet.explorer.caldera.xyz/api/v2 - chainId: 10211403 name: GLHF Testnet network: glhf-testnet apiUrl: https://glhf-testnet.explorer.caldera.xyz/api/v2 supported-services: - name: blockscout path: /blockscout/* description: Blockchain explorer API with multi-chain fallback - name: thirdweb-insights path: /insights/* description: ThirdWeb Insights API for chain analytics default-chain: 8333 cache-duration: 24 hours cache-strategy: KV store fallback-strategy: 'Blockscout: Query default chain first, then all chains in parallel if no results. ThirdWeb: Direct chain query only.'