Ava Labs Looking Glass API
Looking Glass is a tool that allows users to look up information for future airdrops.
Looking Glass is a tool that allows users to look up information for future airdrops.
openapi: 3.1.0
info:
title: Data AVAX Supply Looking Glass API
description: The Data API provides web3 application developers with multi-chain data related to Avalanche's primary network, Avalanche subnets, and Ethereum. With Data API, you can easily build products that leverage real-time and historical transaction and transfer history, native and token balances, and various types of token metadata. The API is in Beta and may be subject to change.</br></br>If you have feedback or feature requests for the API, please submit them <a href="https://portal.productboard.com/dndv9ahlkdfye4opdm8ksafi/tabs/4-glacier-api">here</a>. Bug reports can be submitted <a href="https://docs.google.com/forms/d/e/1FAIpQLSeJQrcp7QoNiqozMDKrVJGX5wpU827d3cVTgF8qa7t_J1Pb-g/viewform">here</a>, and any potential security issues can be reported <a href="https://immunefi.com/bounty/avalabs">here</a>.
version: 1.0.0
contact: {}
servers:
- url: https://glacier-api.avax.network
security:
- apiKey: []
- {}
tags:
- name: Looking Glass
description: Looking Glass is a tool that allows users to look up information for future airdrops.
paths:
/v2/chains/{chainId}/contracts/{address}/nfts:listHolders:
get:
operationId: getNftHoldersByContractAddress
x-execution-weight: large
x-speakeasy-group: metrics.chains
x-speakeasy-name-override: listNftHolders
x-speakeasy-pagination:
type: cursor
inputs:
- name: pageToken
in: parameters
type: cursor
outputs:
nextCursor: $.nextPageToken
x-codeSamples:
- lang: javascript
label: JavaScript
source: "import { Avalanche } from \"@avalanche-sdk/chainkit\";\n\nconst avalanche = new Avalanche({\n chainId: \"43114\",\n});\n\nasync function run() {\n const result = await avalanche.metrics.chains.listNftHolders({\n pageSize: 10,\n address: \"0x7a420AEFF902AAa2c85a190D7B91Ce8BEFffFE14\",\n });\n\n for await (const page of result) {\n console.log(page);\n }\n}\n\nrun();"
summary: Get NFT holders by contract address
description: Get list of NFT holders and number of NFTs held by contract address.
parameters:
- name: pageToken
required: false
in: query
description: A page token, received from a previous list call. Provide this to retrieve the subsequent page.
schema:
type: string
- name: pageSize
required: false
in: query
description: The maximum number of items to return. The minimum page size is 1. The maximum pageSize is 5000.
schema:
type: integer
default: 1000
minimum: 1
maximum: 5000
example: '10'
- name: chainId
required: true
in: path
description: A supported evm chain id. Use the `/chains` endpoint to get a list of supported chain ids.
example: '43114'
schema:
type: string
- name: address
required: true
in: path
description: Contract address on the relevant chain.
example: '0x7a420AEFF902AAa2c85a190D7B91Ce8BEFffFE14'
schema:
type: string
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/NftHoldersResponse'
'400':
description: "Bad requests generally mean the client has passed invalid \n or malformed parameters. Error messages in the response could help in \n evaluating the error."
content:
application/json:
schema:
$ref: '#/components/schemas/BadRequest'
'401':
description: "When a client attempts to access resources that require \n authorization credentials but the client lacks proper authentication \n in the request, the server responds with 401."
content:
application/json:
schema:
$ref: '#/components/schemas/Unauthorized'
'403':
description: "When a client attempts to access resources with valid\n credentials but doesn't have the privilege to perform that action, \n the server responds with 403."
content:
application/json:
schema:
$ref: '#/components/schemas/Forbidden'
'404':
description: "The error is mostly returned when the client requests\n with either mistyped URL, or the passed resource is moved or deleted, \n or the resource doesn't exist."
content:
application/json:
schema:
$ref: '#/components/schemas/NotFound'
'429':
description: "This error is returned when the client has sent too many,\n and has hit the rate limit."
content:
application/json:
schema:
$ref: '#/components/schemas/TooManyRequests'
'500':
description: "The error is a generic server side error that is \n returned for any uncaught and unexpected issues on the server side. \n This should be very rare, and you may reach out to us if the problem \n persists for a longer duration."
content:
application/json:
schema:
$ref: '#/components/schemas/InternalServerError'
'502':
description: "This is an internal error indicating invalid response \n received by the client-facing proxy or gateway from the upstream server."
content:
application/json:
schema:
$ref: '#/components/schemas/BadGateway'
'503':
description: "The error is returned for certain routes on a particular\n Subnet. This indicates an internal problem with our Subnet node, and may \n not necessarily mean the Subnet is down or affected."
content:
application/json:
schema:
$ref: '#/components/schemas/ServiceUnavailable'
tags:
- Looking Glass
/v2/chains/{chainId}/contracts/{address}/balances:
get:
operationId: getAddressesByBalanceOverTime
x-execution-weight: xl
x-speakeasy-group: metrics.chains
x-speakeasy-name-override: listTokenHoldersAboveThreshold
x-speakeasy-pagination:
type: cursor
inputs:
- name: pageToken
in: parameters
type: cursor
outputs:
nextCursor: $.nextPageToken
x-codeSamples:
- lang: javascript
label: JavaScript
source: "import { Avalanche } from \"@avalanche-sdk/chainkit\";\n\nconst avalanche = new Avalanche({\n chainId: \"43114\",\n});\n\nasync function run() {\n const result = await avalanche.metrics.chains.listTokenHoldersAboveThreshold({\n threshold: \"1000000\",\n startTimestamp: 1689541049,\n endTimestamp: 1689800249,\n pageSize: 10,\n address: \"0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E\",\n });\n\n for await (const page of result) {\n console.log(page);\n }\n}\n\nrun();"
summary: Get addresses by balance over time
description: Get list of addresses and their latest balances that have held more than a certain threshold of a given token during the specified time frame.
parameters:
- name: threshold
required: true
in: query
description: The minimum balance for which addresses should be considered.
example: '1000000'
schema:
type: string
- name: startTimestamp
required: false
in: query
description: Query param for retrieving items after a specific timestamp.
example: 1689541049
schema:
minimum: 0
type: integer
- name: endTimestamp
required: false
in: query
description: Query param for retrieving items before a specific timestamp.
example: 1689800249
schema:
minimum: 0
type: integer
- name: pageToken
required: false
in: query
description: A page token, received from a previous list call. Provide this to retrieve the subsequent page.
schema:
type: string
- name: pageSize
required: false
in: query
description: The maximum number of items to return. The minimum page size is 1. The maximum pageSize is 5000.
schema:
type: integer
default: 1000
minimum: 1
maximum: 5000
example: '10'
- name: chainId
required: true
in: path
description: A supported evm chain id. Use the `/chains` endpoint to get a list of supported chain ids.
example: '43114'
schema:
type: string
- name: address
required: true
in: path
description: Contract address on the relevant chain.
example: '0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E'
schema:
type: string
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/LookingGlassResponse'
'400':
description: "Bad requests generally mean the client has passed invalid \n or malformed parameters. Error messages in the response could help in \n evaluating the error."
content:
application/json:
schema:
$ref: '#/components/schemas/BadRequest'
'401':
description: "When a client attempts to access resources that require \n authorization credentials but the client lacks proper authentication \n in the request, the server responds with 401."
content:
application/json:
schema:
$ref: '#/components/schemas/Unauthorized'
'403':
description: "When a client attempts to access resources with valid\n credentials but doesn't have the privilege to perform that action, \n the server responds with 403."
content:
application/json:
schema:
$ref: '#/components/schemas/Forbidden'
'404':
description: "The error is mostly returned when the client requests\n with either mistyped URL, or the passed resource is moved or deleted, \n or the resource doesn't exist."
content:
application/json:
schema:
$ref: '#/components/schemas/NotFound'
'429':
description: "This error is returned when the client has sent too many,\n and has hit the rate limit."
content:
application/json:
schema:
$ref: '#/components/schemas/TooManyRequests'
'500':
description: "The error is a generic server side error that is \n returned for any uncaught and unexpected issues on the server side. \n This should be very rare, and you may reach out to us if the problem \n persists for a longer duration."
content:
application/json:
schema:
$ref: '#/components/schemas/InternalServerError'
'502':
description: "This is an internal error indicating invalid response \n received by the client-facing proxy or gateway from the upstream server."
content:
application/json:
schema:
$ref: '#/components/schemas/BadGateway'
'503':
description: "The error is returned for certain routes on a particular\n Subnet. This indicates an internal problem with our Subnet node, and may \n not necessarily mean the Subnet is down or affected."
content:
application/json:
schema:
$ref: '#/components/schemas/ServiceUnavailable'
tags:
- Looking Glass
/v2/chains/43114/btcb/bridged:getAddresses:
get:
operationId: getAddressesByBtcbBridged
x-execution-weight: large
x-speakeasy-group: metrics.chains
x-speakeasy-name-override: listBTCbBridgersAboveThreshold
x-speakeasy-pagination:
type: cursor
inputs:
- name: pageToken
in: parameters
type: cursor
outputs:
nextCursor: $.nextPageToken
x-codeSamples:
- lang: javascript
label: JavaScript
source: "import { Avalanche } from \"@avalanche-sdk/chainkit\";\n\nconst avalanche = new Avalanche();\n\nasync function run() {\n const result = await avalanche.metrics.chains.listBTCbBridgersAboveThreshold({\n threshold: \"1000000\",\n pageSize: 10,\n });\n\n for await (const page of result) {\n console.log(page);\n }\n}\n\nrun();"
summary: Get addresses by BTCb bridged balance
description: Get list of addresses and their net bridged amounts that have bridged more than a certain threshold.
parameters:
- name: threshold
required: true
in: query
description: The minimum balance for which addresses should be considered.
example: '1000000'
schema:
type: string
- name: pageToken
required: false
in: query
description: A page token, received from a previous list call. Provide this to retrieve the subsequent page.
schema:
type: string
- name: pageSize
required: false
in: query
description: The maximum number of items to return. The minimum page size is 1. The maximum pageSize is 5000.
schema:
type: integer
default: 1000
minimum: 1
maximum: 5000
example: '10'
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/LookingGlassResponse'
'400':
description: "Bad requests generally mean the client has passed invalid \n or malformed parameters. Error messages in the response could help in \n evaluating the error."
content:
application/json:
schema:
$ref: '#/components/schemas/BadRequest'
'401':
description: "When a client attempts to access resources that require \n authorization credentials but the client lacks proper authentication \n in the request, the server responds with 401."
content:
application/json:
schema:
$ref: '#/components/schemas/Unauthorized'
'403':
description: "When a client attempts to access resources with valid\n credentials but doesn't have the privilege to perform that action, \n the server responds with 403."
content:
application/json:
schema:
$ref: '#/components/schemas/Forbidden'
'404':
description: "The error is mostly returned when the client requests\n with either mistyped URL, or the passed resource is moved or deleted, \n or the resource doesn't exist."
content:
application/json:
schema:
$ref: '#/components/schemas/NotFound'
'429':
description: "This error is returned when the client has sent too many,\n and has hit the rate limit."
content:
application/json:
schema:
$ref: '#/components/schemas/TooManyRequests'
'500':
description: "The error is a generic server side error that is \n returned for any uncaught and unexpected issues on the server side. \n This should be very rare, and you may reach out to us if the problem \n persists for a longer duration."
content:
application/json:
schema:
$ref: '#/components/schemas/InternalServerError'
'502':
description: "This is an internal error indicating invalid response \n received by the client-facing proxy or gateway from the upstream server."
content:
application/json:
schema:
$ref: '#/components/schemas/BadGateway'
'503':
description: "The error is returned for certain routes on a particular\n Subnet. This indicates an internal problem with our Subnet node, and may \n not necessarily mean the Subnet is down or affected."
content:
application/json:
schema:
$ref: '#/components/schemas/ServiceUnavailable'
tags:
- Looking Glass
/v2/subnets/{subnetId}/validators:getAddresses:
get:
operationId: getValidatorsByDateRange
x-execution-weight: large
x-speakeasy-group: metrics.subnets
x-speakeasy-name-override: getValidators
x-speakeasy-pagination:
type: cursor
inputs:
- name: pageToken
in: parameters
type: cursor
outputs:
nextCursor: $.nextPageToken
x-codeSamples:
- lang: javascript
label: JavaScript
source: "import { Avalanche } from \"@avalanche-sdk/chainkit\";\n\nconst avalanche = new Avalanche();\n\nasync function run() {\n const result = await avalanche.metrics.subnets.getValidators({\n startTimestamp: 1689541049,\n endTimestamp: 1689800249,\n pageSize: 10,\n subnetId: \"11111111111111111111111111111111LpoYY\",\n network: \"mainnet\",\n });\n\n for await (const page of result) {\n console.log(page);\n }\n}\n\nrun();"
summary: Get addresses running validators during a given time frame
description: Get list of addresses and AddValidatorTx timestamps set to receive awards for validation periods during the specified time frame.
parameters:
- name: startTimestamp
required: false
in: query
description: Query param for retrieving items after a specific timestamp.
example: 1689541049
schema:
minimum: 0
type: integer
- name: endTimestamp
required: false
in: query
description: Query param for retrieving items before a specific timestamp.
example: 1689800249
schema:
minimum: 0
type: integer
- name: pageToken
required: false
in: query
description: A page token, received from a previous list call. Provide this to retrieve the subsequent page.
schema:
type: string
- name: pageSize
required: false
in: query
description: The maximum number of items to return. The minimum page size is 1. The maximum pageSize is 5000.
schema:
type: integer
default: 1000
minimum: 1
maximum: 5000
example: '10'
- name: subnetId
required: true
in: path
description: The subnet ID to filter by.
example: 11111111111111111111111111111111LpoYY
schema:
type: string
- name: network
required: false
in: query
description: Either mainnet or testnet/fuji.
example: mainnet
schema:
$ref: '#/components/schemas/Network'
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/PChainLookingGlassResponse'
'400':
description: "Bad requests generally mean the client has passed invalid \n or malformed parameters. Error messages in the response could help in \n evaluating the error."
content:
application/json:
schema:
$ref: '#/components/schemas/BadRequest'
'401':
description: "When a client attempts to access resources that require \n authorization credentials but the client lacks proper authentication \n in the request, the server responds with 401."
content:
application/json:
schema:
$ref: '#/components/schemas/Unauthorized'
'403':
description: "When a client attempts to access resources with valid\n credentials but doesn't have the privilege to perform that action, \n the server responds with 403."
content:
application/json:
schema:
$ref: '#/components/schemas/Forbidden'
'404':
description: "The error is mostly returned when the client requests\n with either mistyped URL, or the passed resource is moved or deleted, \n or the resource doesn't exist."
content:
application/json:
schema:
$ref: '#/components/schemas/NotFound'
'429':
description: "This error is returned when the client has sent too many,\n and has hit the rate limit."
content:
application/json:
schema:
$ref: '#/components/schemas/TooManyRequests'
'500':
description: "The error is a generic server side error that is \n returned for any uncaught and unexpected issues on the server side. \n This should be very rare, and you may reach out to us if the problem \n persists for a longer duration."
content:
application/json:
schema:
$ref: '#/components/schemas/InternalServerError'
'502':
description: "This is an internal error indicating invalid response \n received by the client-facing proxy or gateway from the upstream server."
content:
application/json:
schema:
$ref: '#/components/schemas/BadGateway'
'503':
description: "The error is returned for certain routes on a particular\n Subnet. This indicates an internal problem with our Subnet node, and may \n not necessarily mean the Subnet is down or affected."
content:
application/json:
schema:
$ref: '#/components/schemas/ServiceUnavailable'
tags:
- Looking Glass
/v1/lookingGlass/compositeQuery:
post:
operationId: compositeQueryV1
x-execution-weight: xxl
x-speakeasy-ignore: true
summary: Composite query
description: Composite query to get list of addresses from multiple subqueries.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CompositeQueryRequestDto'
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/CompositeQueryResponse'
'400':
description: "Bad requests generally mean the client has passed invalid \n or malformed parameters. Error messages in the response could help in \n evaluating the error."
content:
application/json:
schema:
$ref: '#/components/schemas/BadRequest'
'401':
description: "When a client attempts to access resources that require \n authorization credentials but the client lacks proper authentication \n in the request, the server responds with 401."
content:
application/json:
schema:
$ref: '#/components/schemas/Unauthorized'
'403':
description: "When a client attempts to access resources with valid\n credentials but doesn't have the privilege to perform that action, \n the server responds with 403."
content:
application/json:
schema:
$ref: '#/components/schemas/Forbidden'
'404':
description: "The error is mostly returned when the client requests\n with either mistyped URL, or the passed resource is moved or deleted, \n or the resource doesn't exist."
content:
application/json:
schema:
$ref: '#/components/schemas/NotFound'
'429':
description: "This error is returned when the client has sent too many,\n and has hit the rate limit."
content:
application/json:
schema:
$ref: '#/components/schemas/TooManyRequests'
'500':
description: "The error is a generic server side error that is \n returned for any uncaught and unexpected issues on the server side. \n This should be very rare, and you may reach out to us if the problem \n persists for a longer duration."
content:
application/json:
schema:
$ref: '#/components/schemas/InternalServerError'
'502':
description: "This is an internal error indicating invalid response \n received by the client-facing proxy or gateway from the upstream server."
content:
application/json:
schema:
$ref: '#/components/schemas/BadGateway'
'503':
description: "The error is returned for certain routes on a particular\n Subnet. This indicates an internal problem with our Subnet node, and may \n not necessarily mean the Subnet is down or affected."
content:
application/json:
schema:
$ref: '#/components/schemas/ServiceUnavailable'
tags:
- Looking Glass
/v2/lookingGlass/compositeQuery:
post:
operationId: compositeQueryV2
x-execution-weight: xxl
x-speakeasy-name-override: compositeQuery
x-speakeasy-pagination:
type: cursor
inputs:
- name: pageToken
in: requestBody
type: cursor
outputs:
nextCursor: $.nextPageToken
summary: Composite query
description: Composite query to get list of addresses from multiple subqueries.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CompositeQueryRequestDto'
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/CompositeQueryResponse'
'400':
description: "Bad requests generally mean the client has passed invalid \n or malformed parameters. Error messages in the response could help in \n evaluating the error."
content:
application/json:
schema:
$ref: '#/components/schemas/BadRequest'
'401':
description: "When a client attempts to access resources that require \n authorization credentials but the client lacks proper authentication \n in the request, the server responds with 401."
content:
application/json:
schema:
$ref: '#/components/schemas/Unauthorized'
'403':
description: "When a client attempts to access resources with valid\n credentials but doesn't have the privilege to perform that action, \n the server responds with 403."
content:
application/json:
schema:
$ref: '#/components/schemas/Forbidden'
'404':
description: "The error is mostly returned when the client requests\n with either mistyped URL, or the passed resource is moved or deleted, \n or the resource doesn't exist."
content:
application/json:
schema:
$ref: '#/components/schemas/NotFound'
'429':
description: "This error is returned when the client has sent too many,\n and has hit the rate limit."
content:
application/json:
schema:
$ref: '#/components/schemas/TooManyRequests'
'500':
description: "The error is a generic server side error that is \n returned for any uncaught and unexpected issues on the server side. \n This should be very rare, and you may reach out to us if the problem \n persists for a longer duration."
content:
application/json:
schema:
$ref: '#/components/schemas/InternalServerError'
'502':
description: "This is an internal error indicating invalid response \n received by the client-facing proxy or gateway from the upstream server."
content:
application/json:
schema:
$ref: '#/components/schemas/BadGateway'
'503':
description: "The error is returned for certain routes on a particular\n Subnet. This indicates an internal problem with our Subnet node, and may \n not necessarily mean the Subnet is down or affected."
content:
application/json:
schema:
$ref: '#/components/schemas/ServiceUnavailable'
tags:
- Looking Glass
components:
schemas:
LatestBalanceQueryDto:
type: object
properties:
id:
type: string
type:
type: string
enum:
- LatestBalance
params:
$ref: '#/components/schemas/LatestBalanceParams'
required:
- id
- type
- params
DateRangeErc20MinBalanceParam:
type: object
properties:
firstDate:
type: string
lastDate:
type: string
minBalance:
type: string
evmChainId:
type: string
contractAddress:
type: string
required:
- firstDate
- lastDate
- minBalance
- evmChainId
- contractAddress
BadRequest:
type: object
properties:
message:
description: The error message describing the reason for the exception
oneOf:
- type: string
- type: array
items:
type: string
statusCode:
type: number
description: The HTTP status code of the response
examples:
- 400
error:
type: string
description: The type of error
examples:
- Bad Request
required:
- message
- statusCode
- error
Operator:
type: string
enum:
- AND
- OR
LatestBalanceParams:
type: object
properties:
minBalance:
type: string
evmChainId:
type: string
tokenType:
$ref: '#/components/schemas/TokenType'
contractAddress:
type: string
required:
- minBalance
- evmChainId
- tokenType
TokenType:
type: string
enum:
- ERC20
- NATIVE
CompositeQueryResponse:
type: object
properties:
nextPageToken:
type: string
description: A token, which can be sent as `pageToken` to retrieve the next page. If this field is omitted or empty, there are no subsequent pages.
subQueryCounts:
type: object
additionalProperties:
type: number
examples:
- '1': 1
'2': 2
'3': 2
description: The number of results for each subquery by query id.
totalCount:
type: number
examples:
- 2
description: The total number of addresses returned by the composite query.
addresses:
type: array
items:
type: string
examples:
- '0x1234567890abcdef1234567890abcdef123456789'
required:
- subQueryCounts
- totalCount
- addresses
PChainLookingGlassResponse:
type: object
properties:
nextPageToken:
type: string
description: A token, which can be sent as `pageToken` to retrieve the next page. If this field is omitted or empty, there are no subsequent pages.
addresses:
description: List of addresses that match provided criteria.
type: array
items:
$ref: '#/components/schemas/PChainAddressDetails'
required:
- addresses
LookingGlassResponse:
type: object
properties:
nextPageToken:
type: string
description: A token, which can be sent as `pageToken` to retrieve the next page. If this field is omitted or empty, there are no subsequent pages.
addresses:
# --- truncated at 32 KB (46 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/ava-labs/refs/heads/main/openapi/ava-labs-looking-glass-api-openapi.yml