# Fixed reference example. Playground inputs do not update this sample.
curl --request GET \
--url 'https://api.aisa.one/apis/v1/polymarket/activity?user=0x56687bf447db6ffa42ffe2204a05edaa20f55839' \
--header 'Authorization: Bearer <token>'curl --request GET \
--url https://api.aisa.one/apis/v1/polymarket/activity \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.aisa.one/apis/v1/polymarket/activity"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.aisa.one/apis/v1/polymarket/activity', 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://api.aisa.one/apis/v1/polymarket/activity",
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: Bearer <token>"
],
]);
$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://api.aisa.one/apis/v1/polymarket/activity"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.aisa.one/apis/v1/polymarket/activity")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.aisa.one/apis/v1/polymarket/activity")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body[
{
"proxyWallet": "0x56687bf447db6ffa42ffe2204a05edaa20f55839",
"timestamp": 123,
"conditionId": "0xdd22472e552920b8438158ea7238bfadfa4f736aa4cee91a6b86c39ead110917",
"type": "TRADE",
"size": 123,
"usdcSize": 123,
"transactionHash": "<string>",
"price": 123,
"asset": "<string>",
"side": "BUY",
"outcomeIndex": 123,
"title": "<string>",
"slug": "<string>",
"icon": "<string>",
"eventSlug": "<string>",
"outcome": "<string>",
"name": "<string>",
"pseudonym": "<string>",
"bio": "<string>",
"profileImage": "<string>",
"profileImageOptimized": "<string>",
"isCombo": true
}
]Get user activity
Get one wallet’s on-chain Polymarket activity — a per-address lookup, not a market-wide trade feed.
# Fixed reference example. Playground inputs do not update this sample.
curl --request GET \
--url 'https://api.aisa.one/apis/v1/polymarket/activity?user=0x56687bf447db6ffa42ffe2204a05edaa20f55839' \
--header 'Authorization: Bearer <token>'curl --request GET \
--url https://api.aisa.one/apis/v1/polymarket/activity \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.aisa.one/apis/v1/polymarket/activity"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.aisa.one/apis/v1/polymarket/activity', 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://api.aisa.one/apis/v1/polymarket/activity",
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: Bearer <token>"
],
]);
$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://api.aisa.one/apis/v1/polymarket/activity"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.aisa.one/apis/v1/polymarket/activity")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.aisa.one/apis/v1/polymarket/activity")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body[
{
"proxyWallet": "0x56687bf447db6ffa42ffe2204a05edaa20f55839",
"timestamp": 123,
"conditionId": "0xdd22472e552920b8438158ea7238bfadfa4f736aa4cee91a6b86c39ead110917",
"type": "TRADE",
"size": 123,
"usdcSize": 123,
"transactionHash": "<string>",
"price": 123,
"asset": "<string>",
"side": "BUY",
"outcomeIndex": 123,
"title": "<string>",
"slug": "<string>",
"icon": "<string>",
"eventSlug": "<string>",
"outcome": "<string>",
"name": "<string>",
"pseudonym": "<string>",
"bio": "<string>",
"profileImage": "<string>",
"profileImageOptimized": "<string>",
"isCombo": true
}
]user parameter is required. Use it to reconstruct what a specific trader did — position splits, merges and redemptions, with size, price, and the transaction that settled them; narrow further with market_slug, condition_id, and the start_time / end_time Unix-second range.
Returns activities[] with side (MERGE / SPLIT / REDEEM), market_slug, condition_id, shares, price, timestamp, and tx_hash, plus a pagination object whose key you pass back as pagination_key.
For market-wide prices rather than one wallet’s history, use get_polymarket_markets.
https://mcp.aisa.one/mcp — Claude
Code, Codex, Cursor, VS Code and the rest. Authorization is OAuth: the client
opens a browser, you click Allow once, and there is no key to paste. Your
agent then reaches every endpoint through five tools: search,
list_categories and get_details are free, use and batch_use are
billed per call. Setup per client is in
Connect via MCP; the live tool list and what each call
costs are on aisa.one/mcp.Cost and request rules
Published reference values are not an account-specific quote or a settled charge. For endpoints supporting X-AISA-Cost-Mode: quote, obtain a free quote for your exact request before execution; reconcile the settled cost with response metadata and Usage Logs. USD amounts use 1,000,000 integer micro-USD per dollar.- Default request reference estimate (USD): 0.012
- Cost contract: fixed_success
- Settlement evidence source: request_snapshot
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Query Parameters
Upper-bound timestamp (epoch seconds) for the activity window. Omit for the default (current time); rows newer than end are excluded.
x >= 0Comma-separated list of event IDs. Mutually exclusive with market.
x >= 1Excludes deposit and withdrawal records. The default true applies even when type requests those records, so to get deposits and withdrawals you must pass false.
Page size. Values above the maximum are clamped to 500.
0 <= x <= 500Comma-separated list of condition IDs. Mutually exclusive with eventId.
0x-prefixed 64-hex string
^0x[a-fA-F0-9]{64}$Starting index for pagination. Requests past the cap are rejected with a 400 (never silently clamped). To read history deeper than offset 5000, page inside start/end windows — each window has its own offset budget.
0 <= x <= 5000BUY, SELL TIMESTAMP, TOKENS, CASH DESC (default) returns the newest rows first; ASC the oldest first. Both orders are stable — the same query returns the same rows at any limit/offset, so pages compose without gaps or repeats.
ASC, DESC Lower-bound timestamp (epoch seconds) for the activity window. Omit or pass 0 for the default window (most recent ~3 years); pass a positive epoch (e.g. 1) to retrieve full history. With sortDirection=ASC, omitting start already reads from the beginning of the account's history (no default window).
x >= 0Comma-separated list of activity types to include. DEPOSIT and WITHDRAWAL records also require excludeDepositsWithdrawals=false.
TRADE, SPLIT, MERGE, REDEEM, REWARD, CONVERSION, DEPOSIT, WITHDRAWAL, YIELD, MAKER_REBATE, TAKER_REBATE, REFERRAL_REWARD User Profile Address (0x-prefixed, 40 hex chars)
^0x[a-fA-F0-9]{40}$"0x56687bf447db6ffa42ffe2204a05edaa20f55839"
Response
Success
User Profile Address (0x-prefixed, 40 hex chars)
^0x[a-fA-F0-9]{40}$"0x56687bf447db6ffa42ffe2204a05edaa20f55839"
0x-prefixed 64-hex string
^0x[a-fA-F0-9]{64}$"0xdd22472e552920b8438158ea7238bfadfa4f736aa4cee91a6b86c39ead110917"
TRADE, SPLIT, MERGE, REDEEM, REWARD, CONVERSION, DEPOSIT, WITHDRAWAL, YIELD, MAKER_REBATE, TAKER_REBATE, REFERRAL_REWARD Token amount for this row. On REDEEM rows it is the number of tokens burned for this row's outcome, so redeeming both sides of a market returns one row per outcome instead of a single combined row.
USDC amount for this row. On REDEEM rows it is the payout for this row's outcome and is 0 for a losing outcome; the rows of one redemption sum to the total payout.
Token ID this row refers to. Populated on REDEEM rows with the token that row settles. Empty when the row is not token-specific.
BUY, SELL Zero-based index of this row's outcome in the market's outcomes array, so outcome always equals outcomes[outcomeIndex]. On REDEEM rows it identifies the outcome the row settles, not the market's winning outcome. 999 means the outcome could not be determined, in which case outcome is empty.
Market artwork. Falls back to the market image, then to the parent event's icon and image, when the market has no icon of its own. Empty on CONVERSION rows.
True when this row is part of a combinatorial (multi-market) position. Flag only — combo detail is not embedded here. The row's conditionId equals the combo's combo_condition_id; pass it to /v1/activity/combos or /v1/positions/combos via market_id to fetch legs and detail. Omitted on non-combo rows.