curl --request GET \
--url https://data.gravia.trade/api/v1/users/activities \
--header 'Authorization: <api-key>'import requests
url = "https://data.gravia.trade/api/v1/users/activities"
headers = {"Authorization": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<api-key>'}};
fetch('https://data.gravia.trade/api/v1/users/activities', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://data.gravia.trade/api/v1/users/activities",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://data.gravia.trade/api/v1/users/activities"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://data.gravia.trade/api/v1/users/activities")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://data.gravia.trade/api/v1/users/activities")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"user_address": "0x00000000000000000000000000000000000000ab",
"activities": [
{
"id": "act_wvYmqmI0t7nA1xK9z4zQGkQe",
"type": "trade",
"timestamp": "2026-07-15T06:12:34.123Z",
"transaction_hash": "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"market": {
"id": "42",
"condition_id": "0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"slug": "sample-market",
"question": "Will the sample event happen?"
},
"outcome": {
"token_id": "123456789",
"name": "Yes"
},
"side": "buy",
"quantity": 25,
"price": 0.4,
"value_usdc": 10,
"fee_usdc": 0.02
}
],
"page": {
"has_more": false
}
}{
"error": {
"code": "invalid_request",
"message": "user is required",
"request_id": "01f6c90f31d24db3a25c7dba6ca071ee"
}
}{
"error": {
"code": "invalid_request",
"message": "user is required",
"request_id": "01f6c90f31d24db3a25c7dba6ca071ee"
}
}{
"error": {
"code": "invalid_request",
"message": "user is required",
"request_id": "01f6c90f31d24db3a25c7dba6ca071ee"
}
}{
"error": {
"code": "rate_limit_exceeded",
"message": "rate limit exceeded",
"request_id": "01f6c90f31d24db3a25c7dba6ca071ee"
}
}{
"error": {
"code": "invalid_request",
"message": "user is required",
"request_id": "01f6c90f31d24db3a25c7dba6ca071ee"
}
}{
"error": {
"code": "invalid_request",
"message": "user is required",
"request_id": "01f6c90f31d24db3a25c7dba6ca071ee"
}
}Get a user's trades and on-chain activities
Resolves a wallet address or Polymarket username and returns a curated, newest-first feed of trades, split/merge/redeem events, and grouped NegRisk conversions.
curl --request GET \
--url https://data.gravia.trade/api/v1/users/activities \
--header 'Authorization: <api-key>'import requests
url = "https://data.gravia.trade/api/v1/users/activities"
headers = {"Authorization": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<api-key>'}};
fetch('https://data.gravia.trade/api/v1/users/activities', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://data.gravia.trade/api/v1/users/activities",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://data.gravia.trade/api/v1/users/activities"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://data.gravia.trade/api/v1/users/activities")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://data.gravia.trade/api/v1/users/activities")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"user_address": "0x00000000000000000000000000000000000000ab",
"activities": [
{
"id": "act_wvYmqmI0t7nA1xK9z4zQGkQe",
"type": "trade",
"timestamp": "2026-07-15T06:12:34.123Z",
"transaction_hash": "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"market": {
"id": "42",
"condition_id": "0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"slug": "sample-market",
"question": "Will the sample event happen?"
},
"outcome": {
"token_id": "123456789",
"name": "Yes"
},
"side": "buy",
"quantity": 25,
"price": 0.4,
"value_usdc": 10,
"fee_usdc": 0.02
}
],
"page": {
"has_more": false
}
}{
"error": {
"code": "invalid_request",
"message": "user is required",
"request_id": "01f6c90f31d24db3a25c7dba6ca071ee"
}
}{
"error": {
"code": "invalid_request",
"message": "user is required",
"request_id": "01f6c90f31d24db3a25c7dba6ca071ee"
}
}{
"error": {
"code": "invalid_request",
"message": "user is required",
"request_id": "01f6c90f31d24db3a25c7dba6ca071ee"
}
}{
"error": {
"code": "rate_limit_exceeded",
"message": "rate limit exceeded",
"request_id": "01f6c90f31d24db3a25c7dba6ca071ee"
}
}{
"error": {
"code": "invalid_request",
"message": "user is required",
"request_id": "01f6c90f31d24db3a25c7dba6ca071ee"
}
}{
"error": {
"code": "invalid_request",
"message": "user is required",
"request_id": "01f6c90f31d24db3a25c7dba6ca071ee"
}
}Authorizations
Raw database-backed API key.
Query Parameters
A 20-byte 0x wallet address, @username, or bare Polymarket username.
1 - 255Comma-separated activity types. Omit to include every supported type.
Supported types are trade, split, merge, redeem, conversion
^(trade|split|merge|redeem|conversion)(,(trade|split|merge|redeem|conversion))*$Restrict results by up to 20 comma-separated selectors: market
slugs, 0x-prefixed condition IDs, decimal outcome token IDs, or
category:<dotted-slug>. Mixed selectors are ORed. Exact market
identifiers do not expand to grouped markets; category parents
include descendants through inherited category membership.
5299Restrict results to one decimal outcome token ID.
^[0-9]+$Inclusive RFC3339 activity timestamp lower bound.
Exclusive RFC3339 activity timestamp upper bound. Must be after from when both are supplied.
1 <= x <= 100Opaque cursor returned by the previous page.