Wallet fees paid
curl --request GET \
--url https://api.polynode.dev/v3/wallets/{address}/fees-paid \
--header 'x-api-key: <api-key>'import requests
url = "https://api.polynode.dev/v3/wallets/{address}/fees-paid"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.polynode.dev/v3/wallets/{address}/fees-paid', 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.polynode.dev/v3/wallets/{address}/fees-paid",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <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://api.polynode.dev/v3/wallets/{address}/fees-paid"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<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://api.polynode.dev/v3/wallets/{address}/fees-paid")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.polynode.dev/v3/wallets/{address}/fees-paid")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"wallets": [
{
"wallet": "<string>",
"type": "eoa"
}
],
"fees": [
{
"wallet": "<string>"
}
]
}Wallet Activity
Wallet Fees Paid
Get fee-bearing order fills for a wallet.
GET
/
v3
/
wallets
/
{address}
/
fees-paid
Wallet fees paid
curl --request GET \
--url https://api.polynode.dev/v3/wallets/{address}/fees-paid \
--header 'x-api-key: <api-key>'import requests
url = "https://api.polynode.dev/v3/wallets/{address}/fees-paid"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.polynode.dev/v3/wallets/{address}/fees-paid', 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.polynode.dev/v3/wallets/{address}/fees-paid",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <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://api.polynode.dev/v3/wallets/{address}/fees-paid"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<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://api.polynode.dev/v3/wallets/{address}/fees-paid")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.polynode.dev/v3/wallets/{address}/fees-paid")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"wallets": [
{
"wallet": "<string>",
"type": "eoa"
}
],
"fees": [
{
"wallet": "<string>"
}
]
}Returns fills where the wallet was the order owner and
The fill objects also include standard trade fields such as
OrderFilled.fee was greater than zero. Each row is enriched with the same market context used by wallet trade history.
This is fees paid by the trader on executed order fills. It is not the same as maker rebates, LP rewards, or builder payouts.
page_total_fees_paid is the sum for the returned page only. For the exact all-time fee total, use GET /v3/wallets/{address}?include_accounting_summary=true and read accounting_summary.fees_paid.amount.Owner addresses. Pass an owner EOA as the wallet address and the response combines the EOA’s Polymarket wallets (Safe, proxy, deposit wallets) that have data for this endpoint. Passing a Safe, proxy or deposit wallet returns just that wallet, as before. Combined responses list the combined wallets in
wallets. See Owner addresses.Request
GET /v3/wallets/{address}/fees-paid
Query parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
after | integer | 0 | Start of time range (Unix seconds, inclusive) |
before | integer | 9999999999 | End of time range (Unix seconds, inclusive) |
order | string | desc | asc or desc |
limit | integer | 100 | Max 300 |
offset | integer | 0 | Pagination offset |
Example
curl "https://api.polynode.dev/v3/wallets/0xbddf61af533ff524d27154e589d2d7a81510c684/fees-paid?limit=1&after=1779700000"
{
"address": "0xbddf61af533ff524d27154e589d2d7a81510c684",
"fees": [
{
"id": "0x4f8447fda6ed5b200d876ffc677fedd853d524c9a2751d055d7578c1575124dc_847",
"maker": "0xbddf61af533ff524d27154e589d2d7a81510c684",
"taker": "0xe111180000d2663c0091e4f400237545b87b996b",
"fee": 352.774,
"fee_paid": 352.774,
"fee_paid_raw": "352774000",
"price": 0.45,
"size": 47511.65,
"direction": "BUY",
"market": "Spread: Thunder (-2.5)",
"slug": "nba-sas-okc-2026-05-26-spread-home-2pt5",
"condition_id": "0x7bcc428d368834c6dfbb4925f699079f65925fef69ad259274b88c5671aaa29e",
"timestamp": "1779839786",
"source": "wallet_fees_paid"
}
],
"rows_returned": 1,
"has_more": true,
"page_total_fees_paid": 352.774,
"fee_semantics": "Trader-paid fees on executed order fills where this wallet was the order owner. Includes supported Polymarket exchange versions.",
"elapsed_ms": 14
}
Response fields
| Field | Type | Description |
|---|---|---|
address | string | Wallet address, lowercased |
fees | array | Fee-bearing fill rows |
fees[].fee | number | Fee in USD |
fees[].fee_paid | number | Same value as fee, included for category-breakdown clarity |
fees[].fee_paid_raw | string | Raw 6-decimal fee amount |
fees[].source | string | Dataset label |
rows_returned | integer | Number of rows returned |
has_more | boolean | Whether another page exists |
offset | integer | Offset used for this page |
limit | integer | Limit used for this page |
page_total_fees_paid | number | Sum of fee_paid for this page only. Use wallet summary include_accounting_summary=true for the all-time total. |
page_total_fees_paid_raw_note | string | Reminder that the total is page-scoped |
fee_semantics | string | Attribution note |
after | string | Applied start timestamp |
before | string | Applied end timestamp |
elapsed_ms | integer | Server-side query time in milliseconds |
maker_asset_id, taker_asset_id, maker_amount, taker_amount, token_id, asset, amount, amount_usd, transaction_hash, order_hash, builder, side, role, outcome, outcome_index, and image when available.
Owner address fields
Present only when you pass an owner EOA. See Owner addresses.| Field | Type | Description |
|---|---|---|
wallets | array | The combined wallets, in a fixed order, each {wallet, type} with type one of eoa, safe, proxy, or deposit_wallet |
fees[].wallet | string | The wallet this row belongs to |
page_total_fees_paid covers the combined page.
Errors
| HTTP | When |
|---|---|
400 | Invalid wallet address |
400 | Invalid order value |
401 | Missing or invalid PolyNode API key |
Authorizations
Path Parameters
Wallet address, or an owner EOA to combine every Polymarket wallet it owns
Query Parameters
Unix timestamp lower bound
Unix timestamp upper bound
Sort order
Available options:
asc, desc Max results, clamped to 300
Pagination offset

