NFTs
Endpoint https://api.aradia.app
3 endpoints in this section: GET /v1/collections/{address}/nfts, GET /v1/nfts/{address}/{tokenId}, GET /v1/owners/{address}/nfts.
GET /v1/collections/{address}/nfts
Section titled “GET /v1/collections/{address}/nfts”List NFTs in a collection
Authorization
Send a bearer credential with the scope read:nfts.
Parameters
addressstringpathrequiredlimitintegerqueryoptionalafter_token_idstringqueryoptionalafter_idintegerqueryoptionalinclude_burnedbooleanqueryoptionalRequest Code Samples
/v1/collections/{address}/nftscurl -sS -X GET \ -H "Authorization: Bearer $ARADIA_API_TOKEN" \ "https://api.aradia.app/v1/collections/0x0000000000000000000000000000000000000001/nfts"const token = process.env.ARADIA_API_TOKEN;
const response = await fetch("https://api.aradia.app/v1/collections/0x0000000000000000000000000000000000000001/nfts", { method: "GET", headers: { Authorization: `Bearer ${token}` },});
if (!response.ok) { throw new Error(`Aradia API error ${response.status}`);}const data = await response.json();console.log(data);import osimport requests
token = os.environ["ARADIA_API_TOKEN"]
response = requests.request( "GET", "https://api.aradia.app/v1/collections/0x0000000000000000000000000000000000000001/nfts", headers={"Authorization": f"Bearer {token}"}, timeout=30,)response.raise_for_status()print(response.json())package main
import ( "fmt" "io" "net/http" "os")
func main() { request, err := http.NewRequest("GET", "https://api.aradia.app/v1/collections/0x0000000000000000000000000000000000000001/nfts", nil) if err != nil { panic(err) } request.Header.Set("Authorization", "Bearer "+os.Getenv("ARADIA_API_TOKEN"))
response, err := http.DefaultClient.Do(request) if err != nil { panic(err) } defer response.Body.Close()
body, err := io.ReadAll(response.Body) if err != nil { panic(err) } fmt.Println(string(body))}<?php$token = getenv('ARADIA_API_TOKEN');
$context = stream_context_create([ 'http' => [ 'method' => 'GET', 'header' => "Authorization: Bearer $token\r\n", ],]);
$body = file_get_contents('https://api.aradia.app/v1/collections/0x0000000000000000000000000000000000000001/nfts', false, $context);echo $body;import java.net.URI;import java.net.http.*;
var client = HttpClient.newHttpClient();var request = HttpRequest.newBuilder() .uri(URI.create("https://api.aradia.app/v1/collections/0x0000000000000000000000000000000000000001/nfts")) .header("Authorization", "Bearer " + System.getenv("ARADIA_API_TOKEN")) .method("GET", HttpRequest.BodyPublishers.noBody()) .build();
var response = client.send(request, HttpResponse.BodyHandlers.ofString());System.out.println(response.body());require 'net/http'require 'uri'
uri = URI('https://api.aradia.app/v1/collections/0x0000000000000000000000000000000000000001/nfts')request = Net::HTTP::Get.new(uri)request['Authorization'] = "Bearer #{ENV.fetch('ARADIA_API_TOKEN')}"
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http| http.request(request)endputs response.body// cargo add reqwest --features blockingfn main() -> Result<(), Box<dyn std::error::Error>> { let token = std::env::var("ARADIA_API_TOKEN")?; let client = reqwest::blocking::Client::new(); let response = client .get("https://api.aradia.app/v1/collections/0x0000000000000000000000000000000000000001/nfts") .bearer_auth(token) .send()?;
println!("{}", response.text()?); Ok(())}using System.Net.Http;using System.Net.Http.Headers;
using var client = new HttpClient();client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", Environment.GetEnvironmentVariable("ARADIA_API_TOKEN"));
using var request = new HttpRequestMessage(new HttpMethod("GET"), "https://api.aradia.app/v1/collections/0x0000000000000000000000000000000000000001/nfts");var response = await client.SendAsync(request);Console.WriteLine(await response.Content.ReadAsStringAsync());$headers = @{ Authorization = "Bearer $env:ARADIA_API_TOKEN" }
$response = Invoke-RestMethod -Method GET ` -Uri 'https://api.aradia.app/v1/collections/0x0000000000000000000000000000000000000001/nfts' ` -Headers $headers
$response | ConvertTo-Json -Depth 6200NFT page
NFT page
Body application/json
20TrueunknownExample
{ "data": [ { "collection_address": "0x0000000000000000000000000000000000000001", "token_id": "1", "network": "astar", "current_owner": "0x0000000000000000000000000000000000000002", "is_burned": false, "transfer_count": 3, "metadata_uri": "ipfs://bafkreiexampleexampleexampleexample/1.json", "image_url": "ipfs://bafkreiexampleexampleexampleexample/1.png", "media_url": "https://api.aradia.app/v1/media?url=ipfs%3A%2F%2Fbafkreiexampleexampleexampleexample%2F1.png", "collection_name": "Example Collection", "collection_symbol": "EXCOL" } ], "pagination": { "limit": 20, "has_more": true, "next_page_params": { "after_token_id": "1", "after_id": 91422 } }, "coverage": { "status": "unknown" }}400Invalid parameter or cursor
Invalid parameter or cursor
Body application/json
INVALID_ARGUMENTOne or more request parameters are invalid.Example
{ "error": { "code": "INVALID_ARGUMENT", "message": "One or more request parameters are invalid." }}401Missing or invalid bearer credential
Missing or invalid bearer credential
Body application/json
UNAUTHORIZEDAuthentication is required.Example
{ "error": { "code": "UNAUTHORIZED", "message": "Authentication is required." }}403Credential lacks the required read-only scope
Credential lacks the required read-only scope
Body application/json
FORBIDDENThe API key does not have the required scope.Example
{ "error": { "code": "FORBIDDEN", "message": "The API key does not have the required scope." }}429Request rate limit exceeded
Request rate limit exceeded
Headers: RateLimit-Reset, Retry-After
Body application/json
RATE_LIMITEDRequest rate limit exceeded.Example
{ "error": { "code": "RATE_LIMITED", "message": "Request rate limit exceeded." }}503Temporary dependency failure
Temporary dependency failure
Body application/json
SERVICE_UNAVAILABLEThe data service is temporarily unavailable.Example
{ "error": { "code": "SERVICE_UNAVAILABLE", "message": "The data service is temporarily unavailable." }}Try itDemo token included
What each field does
addressstringrequiredpattern: ^0x[0-9a-f]{40}$Collection contract address, lowercase hex with the 0x prefix.limitintegeroptionalmin: 1, max: 100, default: 20How many items to return per page. Defaults to 20, maximum 100.after_token_idstringoptionalpattern: ^[0-9]{1,78}$Page boundary for token listings: return tokens after this id. Copy the value from next_page_params. Must be sent together with after_id.after_idintegeroptionalmin: 1Page boundary tie-break for token listings: the row id from next_page_params. Must be sent together with after_token_id.include_burnedbooleanoptionaldefault: False
Response appears here.
GET /v1/nfts/{address}/{tokenId}
Section titled “GET /v1/nfts/{address}/{tokenId}”Get one NFT
Authorization
Send a bearer credential with the scope read:nfts.
Parameters
addressstringpathrequiredtokenIdstringpathrequiredRequest Code Samples
/v1/nfts/{address}/{tokenId}curl -sS -X GET \ -H "Authorization: Bearer $ARADIA_API_TOKEN" \ "https://api.aradia.app/v1/nfts/0x0000000000000000000000000000000000000001/1"const token = process.env.ARADIA_API_TOKEN;
const response = await fetch("https://api.aradia.app/v1/nfts/0x0000000000000000000000000000000000000001/1", { method: "GET", headers: { Authorization: `Bearer ${token}` },});
if (!response.ok) { throw new Error(`Aradia API error ${response.status}`);}const data = await response.json();console.log(data);import osimport requests
token = os.environ["ARADIA_API_TOKEN"]
response = requests.request( "GET", "https://api.aradia.app/v1/nfts/0x0000000000000000000000000000000000000001/1", headers={"Authorization": f"Bearer {token}"}, timeout=30,)response.raise_for_status()print(response.json())package main
import ( "fmt" "io" "net/http" "os")
func main() { request, err := http.NewRequest("GET", "https://api.aradia.app/v1/nfts/0x0000000000000000000000000000000000000001/1", nil) if err != nil { panic(err) } request.Header.Set("Authorization", "Bearer "+os.Getenv("ARADIA_API_TOKEN"))
response, err := http.DefaultClient.Do(request) if err != nil { panic(err) } defer response.Body.Close()
body, err := io.ReadAll(response.Body) if err != nil { panic(err) } fmt.Println(string(body))}<?php$token = getenv('ARADIA_API_TOKEN');
$context = stream_context_create([ 'http' => [ 'method' => 'GET', 'header' => "Authorization: Bearer $token\r\n", ],]);
$body = file_get_contents('https://api.aradia.app/v1/nfts/0x0000000000000000000000000000000000000001/1', false, $context);echo $body;import java.net.URI;import java.net.http.*;
var client = HttpClient.newHttpClient();var request = HttpRequest.newBuilder() .uri(URI.create("https://api.aradia.app/v1/nfts/0x0000000000000000000000000000000000000001/1")) .header("Authorization", "Bearer " + System.getenv("ARADIA_API_TOKEN")) .method("GET", HttpRequest.BodyPublishers.noBody()) .build();
var response = client.send(request, HttpResponse.BodyHandlers.ofString());System.out.println(response.body());require 'net/http'require 'uri'
uri = URI('https://api.aradia.app/v1/nfts/0x0000000000000000000000000000000000000001/1')request = Net::HTTP::Get.new(uri)request['Authorization'] = "Bearer #{ENV.fetch('ARADIA_API_TOKEN')}"
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http| http.request(request)endputs response.body// cargo add reqwest --features blockingfn main() -> Result<(), Box<dyn std::error::Error>> { let token = std::env::var("ARADIA_API_TOKEN")?; let client = reqwest::blocking::Client::new(); let response = client .get("https://api.aradia.app/v1/nfts/0x0000000000000000000000000000000000000001/1") .bearer_auth(token) .send()?;
println!("{}", response.text()?); Ok(())}using System.Net.Http;using System.Net.Http.Headers;
using var client = new HttpClient();client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", Environment.GetEnvironmentVariable("ARADIA_API_TOKEN"));
using var request = new HttpRequestMessage(new HttpMethod("GET"), "https://api.aradia.app/v1/nfts/0x0000000000000000000000000000000000000001/1");var response = await client.SendAsync(request);Console.WriteLine(await response.Content.ReadAsStringAsync());$headers = @{ Authorization = "Bearer $env:ARADIA_API_TOKEN" }
$response = Invoke-RestMethod -Method GET ` -Uri 'https://api.aradia.app/v1/nfts/0x0000000000000000000000000000000000000001/1' ` -Headers $headers
$response | ConvertTo-Json -Depth 6200NFT
NFT
Body application/json
0x00000000000000000000000000000000000000011astar0x0000000000000000000000000000000000000002Example CollectionEXCOLFalse1Example
{ "data": { "collection_address": "0x0000000000000000000000000000000000000001", "token_id": "1", "network": "astar", "current_owner": "0x0000000000000000000000000000000000000002", "is_burned": false, "transfer_count": 1, "collection_name": "Example Collection", "collection_symbol": "EXCOL" }}400Invalid parameter or cursor
Invalid parameter or cursor
Body application/json
INVALID_ARGUMENTOne or more request parameters are invalid.Example
{ "error": { "code": "INVALID_ARGUMENT", "message": "One or more request parameters are invalid." }}401Missing or invalid bearer credential
Missing or invalid bearer credential
Body application/json
UNAUTHORIZEDAuthentication is required.Example
{ "error": { "code": "UNAUTHORIZED", "message": "Authentication is required." }}403Credential lacks the required read-only scope
Credential lacks the required read-only scope
Body application/json
FORBIDDENThe API key does not have the required scope.Example
{ "error": { "code": "FORBIDDEN", "message": "The API key does not have the required scope." }}404Resource not found
Resource not found
Body application/json
NOT_FOUNDThe requested resource was not found.Example
{ "error": { "code": "NOT_FOUND", "message": "The requested resource was not found." }}429Request rate limit exceeded
Request rate limit exceeded
Headers: RateLimit-Reset, Retry-After
Body application/json
RATE_LIMITEDRequest rate limit exceeded.Example
{ "error": { "code": "RATE_LIMITED", "message": "Request rate limit exceeded." }}503Temporary dependency failure
Temporary dependency failure
Body application/json
SERVICE_UNAVAILABLEThe data service is temporarily unavailable.Example
{ "error": { "code": "SERVICE_UNAVAILABLE", "message": "The data service is temporarily unavailable." }}Try itDemo token included
What each field does
addressstringrequiredpattern: ^0x[0-9a-f]{40}$Collection contract address, lowercase hex with the 0x prefix.tokenIdstringrequiredpattern: ^[0-9]{1,78}$Token id as a decimal string, so very large ids keep full precision.
Response appears here.
GET /v1/owners/{address}/nfts
Section titled “GET /v1/owners/{address}/nfts”List NFTs currently owned by an address
Authorization
Send a bearer credential with the scope read:owners.
Parameters
addressstringpathrequiredlimitintegerqueryoptionalafter_collectionstringqueryoptionalafter_token_idstringqueryoptionalafter_idintegerqueryoptionalRequest Code Samples
/v1/owners/{address}/nftscurl -sS -X GET \ -H "Authorization: Bearer $ARADIA_API_TOKEN" \ "https://api.aradia.app/v1/owners/0x0000000000000000000000000000000000000001/nfts"const token = process.env.ARADIA_API_TOKEN;
const response = await fetch("https://api.aradia.app/v1/owners/0x0000000000000000000000000000000000000001/nfts", { method: "GET", headers: { Authorization: `Bearer ${token}` },});
if (!response.ok) { throw new Error(`Aradia API error ${response.status}`);}const data = await response.json();console.log(data);import osimport requests
token = os.environ["ARADIA_API_TOKEN"]
response = requests.request( "GET", "https://api.aradia.app/v1/owners/0x0000000000000000000000000000000000000001/nfts", headers={"Authorization": f"Bearer {token}"}, timeout=30,)response.raise_for_status()print(response.json())package main
import ( "fmt" "io" "net/http" "os")
func main() { request, err := http.NewRequest("GET", "https://api.aradia.app/v1/owners/0x0000000000000000000000000000000000000001/nfts", nil) if err != nil { panic(err) } request.Header.Set("Authorization", "Bearer "+os.Getenv("ARADIA_API_TOKEN"))
response, err := http.DefaultClient.Do(request) if err != nil { panic(err) } defer response.Body.Close()
body, err := io.ReadAll(response.Body) if err != nil { panic(err) } fmt.Println(string(body))}<?php$token = getenv('ARADIA_API_TOKEN');
$context = stream_context_create([ 'http' => [ 'method' => 'GET', 'header' => "Authorization: Bearer $token\r\n", ],]);
$body = file_get_contents('https://api.aradia.app/v1/owners/0x0000000000000000000000000000000000000001/nfts', false, $context);echo $body;import java.net.URI;import java.net.http.*;
var client = HttpClient.newHttpClient();var request = HttpRequest.newBuilder() .uri(URI.create("https://api.aradia.app/v1/owners/0x0000000000000000000000000000000000000001/nfts")) .header("Authorization", "Bearer " + System.getenv("ARADIA_API_TOKEN")) .method("GET", HttpRequest.BodyPublishers.noBody()) .build();
var response = client.send(request, HttpResponse.BodyHandlers.ofString());System.out.println(response.body());require 'net/http'require 'uri'
uri = URI('https://api.aradia.app/v1/owners/0x0000000000000000000000000000000000000001/nfts')request = Net::HTTP::Get.new(uri)request['Authorization'] = "Bearer #{ENV.fetch('ARADIA_API_TOKEN')}"
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http| http.request(request)endputs response.body// cargo add reqwest --features blockingfn main() -> Result<(), Box<dyn std::error::Error>> { let token = std::env::var("ARADIA_API_TOKEN")?; let client = reqwest::blocking::Client::new(); let response = client .get("https://api.aradia.app/v1/owners/0x0000000000000000000000000000000000000001/nfts") .bearer_auth(token) .send()?;
println!("{}", response.text()?); Ok(())}using System.Net.Http;using System.Net.Http.Headers;
using var client = new HttpClient();client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", Environment.GetEnvironmentVariable("ARADIA_API_TOKEN"));
using var request = new HttpRequestMessage(new HttpMethod("GET"), "https://api.aradia.app/v1/owners/0x0000000000000000000000000000000000000001/nfts");var response = await client.SendAsync(request);Console.WriteLine(await response.Content.ReadAsStringAsync());$headers = @{ Authorization = "Bearer $env:ARADIA_API_TOKEN" }
$response = Invoke-RestMethod -Method GET ` -Uri 'https://api.aradia.app/v1/owners/0x0000000000000000000000000000000000000001/nfts' ` -Headers $headers
$response | ConvertTo-Json -Depth 6200NFT page
NFT page
Body application/json
20TrueunknownExample
{ "data": [ { "collection_address": "0x0000000000000000000000000000000000000001", "token_id": "1", "network": "astar", "current_owner": "0x0000000000000000000000000000000000000002", "is_burned": false, "transfer_count": 3, "metadata_uri": "ipfs://bafkreiexampleexampleexampleexample/1.json", "image_url": "ipfs://bafkreiexampleexampleexampleexample/1.png", "media_url": "https://api.aradia.app/v1/media?url=ipfs%3A%2F%2Fbafkreiexampleexampleexampleexample%2F1.png", "collection_name": "Example Collection", "collection_symbol": "EXCOL" } ], "pagination": { "limit": 20, "has_more": true, "next_page_params": { "after_token_id": "1", "after_id": 91422 } }, "coverage": { "status": "unknown" }}400Invalid parameter or cursor
Invalid parameter or cursor
Body application/json
INVALID_ARGUMENTOne or more request parameters are invalid.Example
{ "error": { "code": "INVALID_ARGUMENT", "message": "One or more request parameters are invalid." }}401Missing or invalid bearer credential
Missing or invalid bearer credential
Body application/json
UNAUTHORIZEDAuthentication is required.Example
{ "error": { "code": "UNAUTHORIZED", "message": "Authentication is required." }}403Credential lacks the required read-only scope
Credential lacks the required read-only scope
Body application/json
FORBIDDENThe API key does not have the required scope.Example
{ "error": { "code": "FORBIDDEN", "message": "The API key does not have the required scope." }}429Request rate limit exceeded
Request rate limit exceeded
Headers: RateLimit-Reset, Retry-After
Body application/json
RATE_LIMITEDRequest rate limit exceeded.Example
{ "error": { "code": "RATE_LIMITED", "message": "Request rate limit exceeded." }}503Temporary dependency failure
Temporary dependency failure
Body application/json
SERVICE_UNAVAILABLEThe data service is temporarily unavailable.Example
{ "error": { "code": "SERVICE_UNAVAILABLE", "message": "The data service is temporarily unavailable." }}Try itDemo token included
What each field does
addressstringrequiredpattern: ^0x[0-9a-f]{40}$limitintegeroptionalmin: 1, max: 100, default: 20How many items to return per page. Defaults to 20, maximum 100.after_collectionstringoptionalpattern: ^0x[0-9a-f]{40}$Page boundary for owner holdings, which are ordered across collections. Required alongside after_token_id and after_id on that endpoint only.after_token_idstringoptionalpattern: ^[0-9]{1,78}$Page boundary for token listings: return tokens after this id. Copy the value from next_page_params. Must be sent together with after_id.after_idintegeroptionalmin: 1Page boundary tie-break for token listings: the row id from next_page_params. Must be sent together with after_token_id.
Response appears here.
