openapi: 3.1.0 info: title: Footprint Analytics Data Chain Token API description: 'Footprint Analytics is a blockchain data analytics platform providing unified REST and SQL APIs for querying DeFi protocol metrics, NFT market data, token analytics, GameFi economics, and on-chain activity across 30+ chains including Ethereum, Bitcoin, Solana, BNB Chain, Polygon, Arbitrum, Optimism, and Sui. The platform indexes 30,000+ protocols, 100M+ tokens, 2M+ NFT collections, and 3,000+ blockchain games. Authentication is via API key passed as a query parameter or request header. ' version: 1.0.0 contact: name: Footprint Analytics Support url: https://www.footprint.network/ license: name: Proprietary url: https://www.footprint.network/ servers: - url: https://api.footprint.network description: Footprint Analytics production API - url: https://fp-api.readme.io description: Footprint Analytics documentation API security: - ApiKeyHeader: [] - ApiKeyQuery: [] tags: - name: Token description: Token price, supply, and holder analytics paths: /api/v1/tokens/{token_address}: get: operationId: getTokenInfo summary: Get token information description: 'Returns token metadata, price, market cap, supply, and holder analytics for a specific token contract address on the specified chain. ' tags: - Token parameters: - name: token_address in: path required: true description: Contract address of the token schema: type: string example: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2' - $ref: '#/components/parameters/Chain' responses: '200': description: Token information content: application/json: schema: $ref: '#/components/schemas/TokenInfo' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' /api/v1/tokens/{token_address}/holders: get: operationId: getTokenHolders summary: Get token holders description: 'Returns a ranked list of token holders with wallet addresses and balances for the specified token contract. Useful for verifying holder eligibility in campaigns and quests. ' tags: - Token parameters: - name: token_address in: path required: true description: Contract address of the token schema: type: string - $ref: '#/components/parameters/Chain' - $ref: '#/components/parameters/Limit' - $ref: '#/components/parameters/Offset' - name: min_balance in: query description: Minimum token balance filter schema: type: number format: double responses: '200': description: Token holder list content: application/json: schema: $ref: '#/components/schemas/TokenHolderListResponse' '401': $ref: '#/components/responses/Unauthorized' /api/v1/wallet/{wallet_address}/eligibility/token: get: operationId: checkTokenHolderEligibility summary: Verify token holder eligibility description: 'Checks whether a given wallet address holds at least a minimum balance of a specific token. Used for verifying token-gated campaign or quest eligibility. ' tags: - Token parameters: - name: wallet_address in: path required: true description: Wallet address to check schema: type: string - name: token_address in: query required: true description: Token contract address to check balance for schema: type: string - $ref: '#/components/parameters/Chain' - name: min_balance in: query description: Minimum token balance required for eligibility schema: type: number format: double default: 0 responses: '200': description: Token holder eligibility result content: application/json: schema: $ref: '#/components/schemas/EligibilityResult' '401': $ref: '#/components/responses/Unauthorized' components: parameters: Chain: name: chain in: query description: Blockchain network to query schema: $ref: '#/components/schemas/ChainEnum' Offset: name: offset in: query description: Number of results to skip for pagination schema: type: integer minimum: 0 default: 0 Limit: name: limit in: query description: Maximum number of results to return schema: type: integer minimum: 1 maximum: 1000 default: 20 schemas: EligibilityResult: type: object properties: wallet_address: type: string eligible: type: boolean description: Whether the wallet meets the eligibility criteria current_balance: type: number format: double description: Current balance or count for the checked asset required_balance: type: number format: double description: Minimum balance required for eligibility checked_at: type: string format: date-time TokenInfo: type: object properties: token_address: type: string description: Contract address of the token token_symbol: type: string description: Token ticker symbol token_name: type: string description: Full name of the token chain: $ref: '#/components/schemas/ChainEnum' price_usd: type: number format: double description: Current price in USD market_cap_usd: type: number format: double description: Market capitalization in USD total_supply: type: number format: double description: Total token supply circulating_supply: type: number format: double description: Circulating token supply holder_count: type: integer description: Number of unique token holders updated_at: type: string format: date-time ErrorResponse: type: object properties: error: type: object properties: code: type: string description: Machine-readable error code message: type: string description: Human-readable error message details: type: object additionalProperties: true TokenHolderListResponse: type: object properties: token_address: type: string chain: $ref: '#/components/schemas/ChainEnum' data: type: array items: $ref: '#/components/schemas/TokenHolder' total: type: integer TokenHolder: type: object properties: wallet_address: type: string description: Address of the token holder balance: type: number format: double description: Token balance held balance_usd: type: number format: double description: Token balance value in USD rank: type: integer description: Rank by balance (1 = largest holder) percentage: type: number format: double description: Percentage of total supply held ChainEnum: type: string description: Supported blockchain network identifier enum: - ethereum - bnb - polygon - arbitrum - optimism - avalanche - fantom - solana - bitcoin - sui - starknet - zksync - celo - cronos - ronin - moonbeam - moonriver - base - linea - scroll example: ethereum responses: NotFound: description: Requested resource not found content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' Unauthorized: description: Missing or invalid API key content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' securitySchemes: ApiKeyHeader: type: apiKey in: header name: X-API-KEY description: Footprint Analytics API key passed as a request header ApiKeyQuery: type: apiKey in: query name: apiKey description: Footprint Analytics API key passed as a query parameter