For Agents & LLMs
Insight is a powerful tool that can be used to power AI agents and LLMs with blockchain data. To use the API in your AI agent you can use the llms.txt file bellow.
- llms.txt file
- For developers who prefer working with OpenAPI specifications, our complete API documentation is available in OpenAPI format here.
If you prefer to use the API in an LLM prompt, the schema below can be copied and pasted into the AI assistant of your choice. Feed this to your assistant, then ask your assistant to construct Insight queries on your behalf, asking it for certain onchain information.
# ATTENTION LLMs - API Usage Instructions## API URL```typescriptconst baseUrl = `https://{{chainId}}.insight.thirdweb.com`;```## AuthenticationThe API supports three authentication methods:```typescript// 1. Header Authenticationconst headers = {"x-client-id": "{{clientId}}", // thirdweb Client ID};// 2. Query Parameterconst url = "https://{{chainId}}.insight.thirdweb.com/v1/events?clientId={{clientId}}";// 3. Bearer Tokenconst headers = {Authorization: "Bearer {{jwtToken}}",};// Example using fetch with header authasync function getEvents() {const response = await fetch("https://{{chainId}}.insight.thirdweb.com/v1/events", {headers: {"x-client-id": "{{clientId}}",},});return await response.json();}```## Core Concepts### Chain IDs```typescripttype ChainId = number; // Chain ID of the network you want to query (e.g., 1 for Ethereum mainnet)// Example: Using a specific chainconst chainId = 1; // Ethereum mainnetconst baseUrl = `https://${chainId}.insight.thirdweb.com`;```### Base Response Structure```typescriptinterface BaseResponse<T> {data: T[];meta: {chain_id: number; // Requiredpage: number; // Requiredlimit: number; // Requiredtotal_items: number; // Requiredtotal_pages: number; // Requiredaddress?: string; // Optionalsignature?: string; // Optional}}// Example response from getting events{"data": [{"chain_id": 1,"block_number": "{{blockNumber}}","transaction_hash": "{{transactionHash}}","address": "{{contractAddress}}","data": "{{data}}","topics": ["{{topic}}"]}],"meta": {"chain_id": 1,"page": 0,"limit": 20,"total_items": 150,"total_pages": 8}}```## API Examples### Events API```typescript// 1. Get All Eventsasync function getAllEvents() {const response = await fetch("https://{{chainId}}.insight.thirdweb.com/v1/events", {headers: { "x-client-id": "{{clientId}}" },});return await response.json();}// 2. Get Contract Events with Filteringasync function getContractEvents(contractAddress: string) {const params = new URLSearchParams({filter_block_number_gte: blockNumber,sort_by: "block_timestamp",sort_order: "desc",limit: "{{limit}}",});const url = `https://{{chainId}}.insight.thirdweb.com/v1/events/{{contractAddress}}?${params}`;const response = await fetch(url, {headers: { "x-client-id": "{{clientId}}" },});return await response.json();}```### Token Balance API```typescript// 1. Get ERC20 Balancesasync function getERC20Balances(ownerAddress: string) {const response = await fetch(`https://{{chainId}}.insight.thirdweb.com/v1/tokens/erc20/${ownerAddress}`,{ headers: { "x-client-id": "{{clientId}}" } },);const data = await response.json();// Example response:// {// "data": [// {// "tokenAddress": "0x123...",// "balance": "1000000000000000000"// }// ]// }return data;}// 2. Get NFT Balancesasync function getNFTBalances(ownerAddress: string) {const response = await fetch(`https://{{chainId}}.insight.thirdweb.com/v1/tokens/erc721/${ownerAddress}`,{ headers: { "x-client-id": "{{clientId}}" } },);const data = await response.json();// Example response:// {// "data": [// {// "collectionAddress": "0x456...",// "tokenId": "1",// "balance": "1"// }// ]// }return data;}```### Using Filters```typescript// Example: Get events with complex filteringasync function getFilteredEvents() {const params = new URLSearchParams({// Block filtersfilter_block_number_gte: blockNumberStart,filter_block_number_lte: blockNumberEnd,// Time filtersfilter_block_timestamp_gte: "{{timestamp}}",// Transaction filtersfilter_from_address: "{{fromAddress}}",filter_value_gte: "{{value}}", // 1 ETH// Paginationpage: "{{page}}",limit: "{{limit}}",// Sortingsort_by: "{{sortBy}}",sort_order: "{{sortOrder}}",});const response = await fetch(`https://{{chainId}}.insight.thirdweb.com/v1/events?${params}`,{ headers: { "x-client-id": "{{clientId}}" } },);return await response.json();}```### Error Handling```typescriptasync function safeApiCall() {try {const response = await fetch("https://{{chainId}}.insight.thirdweb.com/v1/events", {headers: { "x-client-id": "{{clientId}}" },});if (!response.ok) {const errorData = await response.json();// Example error response:// { "error": "Invalid client ID" }throw new Error(errorData.error);}return await response.json();} catch (error) {console.error("API Error:", error.message);throw error;}}```## API Reference### Events API1. **Get All Events**```typescriptGET /v1/eventsinterface EventsResponse {data: Event[];meta: MetaData;}```2. **Get Contract Events**```typescriptGET /v1/events/:contractAddress```3. **Get Specific Event Type**```typescriptGET /v1/events/:contractAddress/:signature```### Transactions API1. **Get All Transactions**```typescriptGET /v1/transactions```2. **Get Contract Transactions**```typescriptGET /v1/transactions/:contractAddress```3. **Get Specific Transaction Type**```typescriptGET /v1/transactions/:contractAddress/:signature```### Token Balance API1. **ERC20 Balances**```typescriptGET /v1/tokens/erc20/:ownerAddressinterface ERC20Response {data: {tokenAddress: string; // Requiredbalance: string; // Required}[];}```2. **ERC721 & ERC1155 Balances**```typescriptGET /v1/tokens/erc721/:ownerAddressGET /v1/tokens/erc1155/:ownerAddressinterface TokenBalanceResponse {data: {collectionAddress: string; // RequiredtokenId: string; // Requiredbalance: string; // Required}[];}```## Query Parameters### Common Parameters```typescriptinterface CommonQueryParams {page?: number; // Default: 0limit?: number; // Default: 20, must be > 0sort_by?: "block_number" | "block_timestamp" | "transaction_index";sort_order?: "asc" | "desc";group_by?: string; // Group results by a specific fieldaggregate?: string[]; // Apply aggregate functions (count, sum, avg, etc.) to grouped results}```### Filter Types1. **Block Filters**```typescriptinterface BlockFilters {filter_block_number?: number; // Example: 1000000filter_block_number_gte?: number; // Example: 1000000filter_block_number_gt?: number; // Example: 1000000filter_block_number_lte?: number; // Example: 1000000filter_block_number_lt?: number; // Example: 1000000filter_block_hash?: string; // Example: "0x3a1fba5..."}```2. **Time Filters**```typescriptinterface TimeFilters {filter_block_timestamp?: number; // Example: 1715222400filter_block_timestamp_gte?: number; // Example: 1715222400filter_block_timestamp_gt?: number; // Example: 1715222400filter_block_timestamp_lte?: number; // Example: 1715222400filter_block_timestamp_lt?: number; // Example: 1715222400}```3. **Transaction Filters**```typescriptinterface TransactionFilters {filter_transaction_index?: number;filter_transaction_hash?: string;filter_from_address?: string;filter_value?: string; // Value in wei (e.g., "1000000000000000000" for 1 ETH)filter_value_gte?: string;filter_value_gt?: string;filter_value_lte?: string;filter_value_lt?: string;filter_gas_price?: number;filter_gas?: number;// Additional gte, gt, lte, lt variants for numeric fields}```## Error HandlingAll endpoints return standard error responses for 400 and 500 status codes:```typescript// 400 Bad Request// 500 Internal Server Errorinterface ErrorResponse {error: string; // Required}```