Skip to content

Asset Holders

GET /v1/assets/:asset/holders

Get addresses holding a specific asset with their quantities (paginated).

Parameters:

ParameterTypeDescription
assetstringAsset identifier in format {policy_id}.{asset_name}

Query Parameters:

ParameterTypeDefaultDescription
limitinteger100Results per page (1-500)
offsetinteger0Number of results to skip
orderstringdescSort order: asc or desc (by quantity)

Example Request:

bash
# Top 10 IAG holders
curl -X GET "https://api.insight.iagon.com/v1/assets/5d16cc1a177b5d9ba9cfa9793b07e60f1fb70fea1f8aef064415d114.494147/holders?limit=10" \
  -H "Authorization: Bearer YOUR_API_KEY"

# Smallest holders first
curl -X GET "https://api.insight.iagon.com/v1/assets/5d16cc1a177b5d9ba9cfa9793b07e60f1fb70fea1f8aef064415d114.494147/holders?order=asc&limit=10" \
  -H "Authorization: Bearer YOUR_API_KEY"

Response:

Content-Type: application/json;charset=utf-8

json
{
  "success": true,
  "data": [
    {
      "address": "addr1qx...",
      "stake_address": "stake1u9...",
      "quantity": "50000000000000"
    },
    {
      "address": "addr1qy...",
      "stake_address": "stake1u8...",
      "quantity": "25000000000000"
    }
  ],
  "pagination": {
    "limit": 10,
    "offset": 0,
    "hasMore": true
  },
  "last_updated": {
    "slot_no": 123456789,
    "block_hash": "abc123...",
    "block_time": "2024-01-15T10:30:00Z"
  }
}

Content-Type: application/json;charset=utf-8

json
{
  "success": false,
  "error": "Invalid asset identifier format. Expected: {policy_id}.{asset_name} where policy_id is 56 hex characters"
}

Response Fields:

FieldTypeDescription
addressstringBech32 payment address holding the asset
stake_addressstring | nullAssociated stake address (if any)
quantitystringAmount held (as string to handle large numbers)

Performance Note

Holder queries aggregate UTXOs across many addresses and can be slow for popular assets with thousands of holders. Consider using smaller page sizes and caching results.