Activity
Endpoint https://api.aradia.app
1 endpoint in this section: GET /v1/activity.
GET /v1/activity
Section titled “GET /v1/activity”List global transfer activity
Newest first. Only canonical rows are returned: transfers invalidated by a chain reorganisation are excluded. event_type is derived consistently for both filtering and output, where a transfer from the zero address is a mint and one to the zero address is a burn.
Authorization
Send a bearer credential with the scope read:activity.
Parameters
limitintegerqueryoptionalHow many items to return per page. Defaults to 20, maximum 100.
before_timestampintegerqueryoptionalPage 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_idintegerqueryoptionalPage 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.
networkastarqueryoptionalChain to query. Only Astar mainnet is indexed today.
collectionstringqueryoptionalevent_typemint | transfer | burnqueryoptionalRequest Code Samples
GET
/v1/activitycurl -sS -X GET \ -H "Authorization: Bearer $ARADIA_API_TOKEN" \ "https://api.aradia.app/v1/activity"const token = process.env.ARADIA_API_TOKEN;
const response = await fetch("https://api.aradia.app/v1/activity", { 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/activity", 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/activity", 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/activity', 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/activity")) .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/activity')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/activity") .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/activity");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/activity' ` -Headers $headers
$response | ConvertTo-Json -Depth 6Responses
200Activity page
application/json
Activity page
Body application/json
dataarray[object]required
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:
20has_morebooleanrequired
Example:
Truenext_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:
unknownstart_blockstring | nulloptional
First block covered, when known. Decimal string.
Example
{ "data": [ { "collection_address": "0x0000000000000000000000000000000000000001", "collection_name": "Example Collection", "token_id": "1", "network": "astar", "from_address": "0x0000000000000000000000000000000000000000", "to_address": "0x0000000000000000000000000000000000000002", "event_type": "mint", "block_number": "7654321", "log_index": 4, "transaction_hash": "0x1111111111111111111111111111111111111111111111111111111111111111", "block_timestamp": "2026-08-01T12:00:00Z", "confirmations": 1284 } ], "pagination": { "limit": 20, "has_more": true, "next_page_params": { "before_timestamp": 1780245600123456, "before_id": 2017853 } }, "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_ARGUMENTmessagestringrequired
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:
UNAUTHORIZEDmessagestringrequired
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:
FORBIDDENmessagestringrequired
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_LIMITEDmessagestringrequired
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_UNAVAILABLEmessagestringrequired
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
RequestJSON
What each field does
limitintegeroptionalmin: 1, max: 100, default: 20How many items to return per page. Defaults to 20, maximum 100.before_timestampintegeroptionalmin: 1Page 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_idintegeroptionalmin: 1Page 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.networkastaroptionaldefault: astarChain to query. Only Astar mainnet is indexed today.collectionstringoptionalpattern: ^0x[0-9a-f]{40}$event_typemint | transfer | burnoptional
Response
Response appears here.
