Skip to content

Collections

Documentation / API Reference / Collections

Endpoint https://api.aradia.app

3 endpoints in this section: GET /v1/collections, HEAD /v1/collections, GET /v1/collections/{address}.

List Astar NFT collections

Newest first, ordered by indexing time. Collections whose metadata is recorded as empty are omitted, so this list is narrower than the full set of contracts the indexer has seen. Fetch a single collection by address with GET /v1/collections/{address}, which applies no such filter.

Authorization

Send a bearer credential with the scope read:collections.

Parameters

limitintegerqueryoptional
How many items to return per page. Defaults to 20, maximum 100.
min: 1, max: 100, default: 20
before_timestampintegerqueryoptional
Page boundary: return rows older than this instant, expressed as a Unix timestamp in microseconds. Copy the value from next_page_params. Must be sent together with before_id.
min: 1
before_idintegerqueryoptional
Page boundary tie-break: the row id from next_page_params. Timestamps repeat heavily, so the id is required to place the boundary exactly. Must be sent together with before_timestamp.
min: 1
networkastarqueryoptional
Chain to query. Only Astar mainnet is indexed today.
default: astar
searchstringqueryoptional
Case-insensitive substring match on collection name and symbol. A full contract address is treated as an exact lookup on that collection.
maxLength: 200

Request Code Samples

GET/v1/collections
Terminal window
curl -sS -X GET \
-H "Authorization: Bearer $ARADIA_API_TOKEN" \
"https://api.aradia.app/v1/collections"
Responses
200Collection page
application/json

Collection page

Body application/json
dataarray[object]required
contract_addressstringrequired
Lowercase EVM address.
networkastarrequired
namestringrequired
symbolstring | nulloptional
descriptionstring | nulloptional
image_urlstring (uri) | nulloptional
Collection image. The contract's own collection image when it declares one, otherwise the image of its first NFT by ascending token_id. Stable across calls, because the source is the lowest token id and never an arbitrary one, so the value can be cached. Null when neither exists.
contract_typestringrequired
Token standard
total_supplystringrequired
Tokens observed for this contract. Decimal string, so a uint256 survives the round trip.
unique_holdersstringrequired
Distinct current owners. Decimal string.
total_transfersstringrequired
Transfer events observed. Decimal string.
creator_addressstringoptional
Lowercase EVM address.
deploy_tx_hashstring | nulloptional
Deployment transaction
created_atstring (date-time)required
When the collection was first indexed.
paginationobjectrequired
Keyset pagination. When has_more is true, next_page_params holds the query parameters that return the following page: copy each key and value into the next request, keeping the other filters unchanged. The keys vary by endpoint, because each one pages on its own ordering.
limitintegerrequired
Example: 20
has_morebooleanrequired
Example: True
next_page_paramsobject | nulloptional
Absent when has_more is false. Time-ordered feeds return before_timestamp and before_id; token listings return after_token_id and after_id, plus after_collection on the owner holdings endpoint.
coverageobjectrequired
Whether the indexed window behind this response is complete. It is a property of the query, not of any single row, so it is reported once per response rather than repeated on every item.
statusunknown | partial | completerequired
Example: unknown
start_blockstring | nulloptional
First block covered, when known. Decimal string.
Example
{
"data": [
{
"contract_address": "0x0000000000000000000000000000000000000001",
"network": "astar",
"name": "Example Collection",
"symbol": "EXCOL",
"image_url": "https://wsrv.nl/?url=https%3A%2F%2Fipfs.io%2Fipfs%2FQmExample%2F1.png",
"contract_type": "ERC721",
"total_supply": "10000",
"unique_holders": "2799",
"total_transfers": "11163",
"creator_address": "0x00000000000000000000000000000000000000c7",
"deploy_tx_hash": "0x0000000000000000000000000000000000000000000000000000000000000abc",
"created_at": "2026-08-01T00:00:00Z"
}
],
"pagination": {
"limit": 20,
"has_more": true,
"next_page_params": {
"before_timestamp": 1780245600123456,
"before_id": 26228
}
},
"coverage": {
"status": "unknown"
}
}
400Invalid parameter or cursor
application/json

Invalid parameter or cursor

Body application/json
errorobjectrequired
codeINVALID_ARGUMENT | UNAUTHORIZED | FORBIDDEN | NOT_FOUND | RATE_LIMITED | RATE_LIMITER_UNAVAILABLE | SERVICE_UNAVAILABLE | INTERNAL_ERRORrequired
Example: INVALID_ARGUMENT
messagestringrequired
Example: One or more request parameters are invalid.
request_idstringoptional
Example
{
"error": {
"code": "INVALID_ARGUMENT",
"message": "One or more request parameters are invalid."
}
}
401Missing or invalid bearer credential
application/json

Missing or invalid bearer credential

Body application/json
errorobjectrequired
codeINVALID_ARGUMENT | UNAUTHORIZED | FORBIDDEN | NOT_FOUND | RATE_LIMITED | RATE_LIMITER_UNAVAILABLE | SERVICE_UNAVAILABLE | INTERNAL_ERRORrequired
Example: UNAUTHORIZED
messagestringrequired
Example: Authentication is required.
request_idstringoptional
Example
{
"error": {
"code": "UNAUTHORIZED",
"message": "Authentication is required."
}
}
403Credential lacks the required read-only scope
application/json

Credential lacks the required read-only scope

Body application/json
errorobjectrequired
codeINVALID_ARGUMENT | UNAUTHORIZED | FORBIDDEN | NOT_FOUND | RATE_LIMITED | RATE_LIMITER_UNAVAILABLE | SERVICE_UNAVAILABLE | INTERNAL_ERRORrequired
Example: FORBIDDEN
messagestringrequired
Example: The API key does not have the required scope.
request_idstringoptional
Example
{
"error": {
"code": "FORBIDDEN",
"message": "The API key does not have the required scope."
}
}
429Request rate limit exceeded
application/json

Request rate limit exceeded

Headers: RateLimit-Reset, Retry-After

Body application/json
errorobjectrequired
codeINVALID_ARGUMENT | UNAUTHORIZED | FORBIDDEN | NOT_FOUND | RATE_LIMITED | RATE_LIMITER_UNAVAILABLE | SERVICE_UNAVAILABLE | INTERNAL_ERRORrequired
Example: RATE_LIMITED
messagestringrequired
Example: Request rate limit exceeded.
request_idstringoptional
Example
{
"error": {
"code": "RATE_LIMITED",
"message": "Request rate limit exceeded."
}
}
503Temporary dependency failure
application/json

Temporary dependency failure

Body application/json
errorobjectrequired
codeINVALID_ARGUMENT | UNAUTHORIZED | FORBIDDEN | NOT_FOUND | RATE_LIMITED | RATE_LIMITER_UNAVAILABLE | SERVICE_UNAVAILABLE | INTERNAL_ERRORrequired
Example: SERVICE_UNAVAILABLE
messagestringrequired
Example: The data service is temporarily unavailable.
request_idstringoptional
Example
{
"error": {
"code": "SERVICE_UNAVAILABLE",
"message": "The data service is temporarily unavailable."
}
}
Try itDemo token included
GET/v1/collections
RequestJSON
What each field does
  • limit integeroptionalmin: 1, max: 100, default: 20
    How many items to return per page. Defaults to 20, maximum 100.
  • before_timestamp integeroptionalmin: 1
    Page boundary: return rows older than this instant, expressed as a Unix timestamp in microseconds. Copy the value from next_page_params. Must be sent together with before_id.
  • before_id integeroptionalmin: 1
    Page boundary tie-break: the row id from next_page_params. Timestamps repeat heavily, so the id is required to place the boundary exactly. Must be sent together with before_timestamp.
  • network astaroptionaldefault: astar
    Chain to query. Only Astar mainnet is indexed today.
  • search stringoptionalmaxLength: 200
    Case-insensitive substring match on collection name and symbol. A full contract address is treated as an exact lookup on that collection.
Response
Response appears here.

Inspect collection-list availability without a response body

Authorization

Send a bearer credential with the scope read:collections.

Parameters

limitintegerqueryoptional
How many items to return per page. Defaults to 20, maximum 100.
min: 1, max: 100, default: 20
before_timestampintegerqueryoptional
Page boundary: return rows older than this instant, expressed as a Unix timestamp in microseconds. Copy the value from next_page_params. Must be sent together with before_id.
min: 1
before_idintegerqueryoptional
Page boundary tie-break: the row id from next_page_params. Timestamps repeat heavily, so the id is required to place the boundary exactly. Must be sent together with before_timestamp.
min: 1
networkastarqueryoptional
Chain to query. Only Astar mainnet is indexed today.
default: astar
searchstringqueryoptional
Case-insensitive substring match on collection name and symbol. A full contract address is treated as an exact lookup on that collection.
maxLength: 200

Request Code Samples

HEAD/v1/collections
Terminal window
curl -sS -X HEAD \
-H "Authorization: Bearer $ARADIA_API_TOKEN" \
"https://api.aradia.app/v1/collections"
Responses
200Collection endpoint is available
application/json

Collection endpoint is available

Body application/json

No response body.

Example

This status returns no body.

400Invalid parameter or cursor
application/json

Invalid parameter or cursor

Body application/json
errorobjectrequired
codeINVALID_ARGUMENT | UNAUTHORIZED | FORBIDDEN | NOT_FOUND | RATE_LIMITED | RATE_LIMITER_UNAVAILABLE | SERVICE_UNAVAILABLE | INTERNAL_ERRORrequired
Example: INVALID_ARGUMENT
messagestringrequired
Example: One or more request parameters are invalid.
request_idstringoptional
Example
{
"error": {
"code": "INVALID_ARGUMENT",
"message": "One or more request parameters are invalid."
}
}
401Missing or invalid bearer credential
application/json

Missing or invalid bearer credential

Body application/json
errorobjectrequired
codeINVALID_ARGUMENT | UNAUTHORIZED | FORBIDDEN | NOT_FOUND | RATE_LIMITED | RATE_LIMITER_UNAVAILABLE | SERVICE_UNAVAILABLE | INTERNAL_ERRORrequired
Example: UNAUTHORIZED
messagestringrequired
Example: Authentication is required.
request_idstringoptional
Example
{
"error": {
"code": "UNAUTHORIZED",
"message": "Authentication is required."
}
}
403Credential lacks the required read-only scope
application/json

Credential lacks the required read-only scope

Body application/json
errorobjectrequired
codeINVALID_ARGUMENT | UNAUTHORIZED | FORBIDDEN | NOT_FOUND | RATE_LIMITED | RATE_LIMITER_UNAVAILABLE | SERVICE_UNAVAILABLE | INTERNAL_ERRORrequired
Example: FORBIDDEN
messagestringrequired
Example: The API key does not have the required scope.
request_idstringoptional
Example
{
"error": {
"code": "FORBIDDEN",
"message": "The API key does not have the required scope."
}
}
429Request rate limit exceeded
application/json

Request rate limit exceeded

Headers: RateLimit-Reset, Retry-After

Body application/json
errorobjectrequired
codeINVALID_ARGUMENT | UNAUTHORIZED | FORBIDDEN | NOT_FOUND | RATE_LIMITED | RATE_LIMITER_UNAVAILABLE | SERVICE_UNAVAILABLE | INTERNAL_ERRORrequired
Example: RATE_LIMITED
messagestringrequired
Example: Request rate limit exceeded.
request_idstringoptional
Example
{
"error": {
"code": "RATE_LIMITED",
"message": "Request rate limit exceeded."
}
}
503Temporary dependency failure
application/json

Temporary dependency failure

Body application/json
errorobjectrequired
codeINVALID_ARGUMENT | UNAUTHORIZED | FORBIDDEN | NOT_FOUND | RATE_LIMITED | RATE_LIMITER_UNAVAILABLE | SERVICE_UNAVAILABLE | INTERNAL_ERRORrequired
Example: SERVICE_UNAVAILABLE
messagestringrequired
Example: The data service is temporarily unavailable.
request_idstringoptional
Example
{
"error": {
"code": "SERVICE_UNAVAILABLE",
"message": "The data service is temporarily unavailable."
}
}
Try itDemo token included
HEAD/v1/collections
RequestJSON
What each field does
  • limit integeroptionalmin: 1, max: 100, default: 20
    How many items to return per page. Defaults to 20, maximum 100.
  • before_timestamp integeroptionalmin: 1
    Page boundary: return rows older than this instant, expressed as a Unix timestamp in microseconds. Copy the value from next_page_params. Must be sent together with before_id.
  • before_id integeroptionalmin: 1
    Page boundary tie-break: the row id from next_page_params. Timestamps repeat heavily, so the id is required to place the boundary exactly. Must be sent together with before_timestamp.
  • network astaroptionaldefault: astar
    Chain to query. Only Astar mainnet is indexed today.
  • search stringoptionalmaxLength: 200
    Case-insensitive substring match on collection name and symbol. A full contract address is treated as an exact lookup on that collection.
Response
Response appears here.

Get one collection

Authorization

Send a bearer credential with the scope read:collections.

Parameters

addressstringpathrequired
Collection contract address, lowercase hex with the 0x prefix.
pattern: ^0x[0-9a-f]{40}$
networkastarqueryoptional
Chain to query. Only Astar mainnet is indexed today.
default: astar

Request Code Samples

GET/v1/collections/{address}
Terminal window
curl -sS -X GET \
-H "Authorization: Bearer $ARADIA_API_TOKEN" \
"https://api.aradia.app/v1/collections/0x0000000000000000000000000000000000000001"
Responses
200Collection
application/json

Collection

Body application/json
dataobjectrequired
contract_addressstringrequired
Lowercase EVM address.
Example: 0x0000000000000000000000000000000000000001
networkastarrequired
Example: astar
namestringrequired
Example: Example Collection
symbolstring | nulloptional
descriptionstring | nulloptional
image_urlstring (uri) | nulloptional
Collection image. The contract's own collection image when it declares one, otherwise the image of its first NFT by ascending token_id. Stable across calls, because the source is the lowest token id and never an arbitrary one, so the value can be cached. Null when neither exists.
contract_typestringrequired
Token standard
Example: ERC721
total_supplystringrequired
Tokens observed for this contract. Decimal string, so a uint256 survives the round trip.
Example: 10000
unique_holdersstringrequired
Distinct current owners. Decimal string.
Example: 2799
total_transfersstringrequired
Transfer events observed. Decimal string.
Example: 11163
creator_addressstringoptional
Lowercase EVM address.
Example: 0x00000000000000000000000000000000000000c7
deploy_tx_hashstring | nulloptional
Deployment transaction
Example: 0x0000000000000000000000000000000000000000000000000000000000000abc
created_atstring (date-time)required
When the collection was first indexed.
Example: 2026-08-01T00:00:00Z
Example
{
"data": {
"contract_address": "0x0000000000000000000000000000000000000001",
"network": "astar",
"name": "Example Collection",
"image_url": "https://wsrv.nl/?url=https%3A%2F%2Fipfs.io%2Fipfs%2FQmExample%2F1.png",
"contract_type": "ERC721",
"total_supply": "10000",
"unique_holders": "2799",
"total_transfers": "11163",
"creator_address": "0x00000000000000000000000000000000000000c7",
"deploy_tx_hash": "0x0000000000000000000000000000000000000000000000000000000000000abc",
"created_at": "2026-08-01T00:00:00Z"
}
}
400Invalid parameter or cursor
application/json

Invalid parameter or cursor

Body application/json
errorobjectrequired
codeINVALID_ARGUMENT | UNAUTHORIZED | FORBIDDEN | NOT_FOUND | RATE_LIMITED | RATE_LIMITER_UNAVAILABLE | SERVICE_UNAVAILABLE | INTERNAL_ERRORrequired
Example: INVALID_ARGUMENT
messagestringrequired
Example: One or more request parameters are invalid.
request_idstringoptional
Example
{
"error": {
"code": "INVALID_ARGUMENT",
"message": "One or more request parameters are invalid."
}
}
401Missing or invalid bearer credential
application/json

Missing or invalid bearer credential

Body application/json
errorobjectrequired
codeINVALID_ARGUMENT | UNAUTHORIZED | FORBIDDEN | NOT_FOUND | RATE_LIMITED | RATE_LIMITER_UNAVAILABLE | SERVICE_UNAVAILABLE | INTERNAL_ERRORrequired
Example: UNAUTHORIZED
messagestringrequired
Example: Authentication is required.
request_idstringoptional
Example
{
"error": {
"code": "UNAUTHORIZED",
"message": "Authentication is required."
}
}
403Credential lacks the required read-only scope
application/json

Credential lacks the required read-only scope

Body application/json
errorobjectrequired
codeINVALID_ARGUMENT | UNAUTHORIZED | FORBIDDEN | NOT_FOUND | RATE_LIMITED | RATE_LIMITER_UNAVAILABLE | SERVICE_UNAVAILABLE | INTERNAL_ERRORrequired
Example: FORBIDDEN
messagestringrequired
Example: The API key does not have the required scope.
request_idstringoptional
Example
{
"error": {
"code": "FORBIDDEN",
"message": "The API key does not have the required scope."
}
}
404Resource not found
application/json

Resource not found

Body application/json
errorobjectrequired
codeINVALID_ARGUMENT | UNAUTHORIZED | FORBIDDEN | NOT_FOUND | RATE_LIMITED | RATE_LIMITER_UNAVAILABLE | SERVICE_UNAVAILABLE | INTERNAL_ERRORrequired
Example: NOT_FOUND
messagestringrequired
Example: The requested resource was not found.
request_idstringoptional
Example
{
"error": {
"code": "NOT_FOUND",
"message": "The requested resource was not found."
}
}
429Request rate limit exceeded
application/json

Request rate limit exceeded

Headers: RateLimit-Reset, Retry-After

Body application/json
errorobjectrequired
codeINVALID_ARGUMENT | UNAUTHORIZED | FORBIDDEN | NOT_FOUND | RATE_LIMITED | RATE_LIMITER_UNAVAILABLE | SERVICE_UNAVAILABLE | INTERNAL_ERRORrequired
Example: RATE_LIMITED
messagestringrequired
Example: Request rate limit exceeded.
request_idstringoptional
Example
{
"error": {
"code": "RATE_LIMITED",
"message": "Request rate limit exceeded."
}
}
503Temporary dependency failure
application/json

Temporary dependency failure

Body application/json
errorobjectrequired
codeINVALID_ARGUMENT | UNAUTHORIZED | FORBIDDEN | NOT_FOUND | RATE_LIMITED | RATE_LIMITER_UNAVAILABLE | SERVICE_UNAVAILABLE | INTERNAL_ERRORrequired
Example: SERVICE_UNAVAILABLE
messagestringrequired
Example: The data service is temporarily unavailable.
request_idstringoptional
Example
{
"error": {
"code": "SERVICE_UNAVAILABLE",
"message": "The data service is temporarily unavailable."
}
}
Try itDemo token included
GET/v1/collections/{address}
RequestJSON
What each field does
  • address stringrequiredpattern: ^0x[0-9a-f]{40}$
    Collection contract address, lowercase hex with the 0x prefix.
  • network astaroptionaldefault: astar
    Chain to query. Only Astar mainnet is indexed today.
Response
Response appears here.