# Polymarket User Activity

> Polymarket User Activity is a paid API for AI agents from AIsa MPP Data APIs at api.aisa.one, paid per call via MPP, $0.012/call, status unknown (last checked 2026-10-18).

Returns paginated, filterable on-chain activity history (trades, deposits, rewards, redemptions, etc.) for a Polymarket user address.

## Facts

- Endpoint: GET https://api.aisa.one/apis/v1/polymarket/activity?utm_source=zero.xyz
- Price: $0.012/call
- Payment: MPP
- Status: unknown
- Last checked: 2026-10-18
- Activations on Zero: 0
- Provider: AIsa MPP Data APIs
- Website: https://aisa.one
- Tags: web-search, financial-data, prediction-markets, weather, travel, data, search
- Canonical page: https://www.zero.xyz/c/aisa-mpp-data-apis-polymarket-user-activity-f7460dd1
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_6y9nJ59IcKUgp1o4tYtNe

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability aisa-mpp-data-apis-polymarket-user-activity-f7460dd1
```

Example prompt: Pull the last 50 trades for Polymarket wallet 0x56687bf447db6ffa42ffe2204a05edaa20f55839, filtering to only BUY activity, sorted by timestamp descending.

## When to prefer this

Use this endpoint when you need historical on-chain activity for a specific Polymarket user wallet, with rich filtering by activity type, market, event, side, and timestamp. Prefer this over positions endpoints when you need a chronological audit trail rather than current open/closed positions.

## Known failure modes

- 400 error if offset exceeds 5000 — must use start/end windowing for deeper history
- 400 error if both market and eventId are provided (mutually exclusive)
- Invalid 0x address format returns validation error
- Deposits/withdrawals not returned unless excludeDepositsWithdrawals=false is explicitly set
- Empty array returned if user has no activity matching filters

## How this service works

Returns user activity with pagination and filtering.

<!-- aisa-pricing:start -->
Published reference price: $0.012 USD per successful request. Account-specific pricing and final settlement may differ.
<!-- aisa-pricing:end -->

## Output

Returns an array of activity objects, each containing the activity type (TRADE, REDEEM, DEPOSIT, etc.), side (BUY/SELL), token amount, USDC amount, price, market title, outcome, condition ID, timestamp, market icon, event slug, and combo flags. Paginatable via offset and windowed by start/end timestamps.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "required": [
  "user"
 ],
 "properties": {
  "end": {
   "type": "integer",
   "minimum": 0,
   "description": "Upper-bound timestamp (epoch seconds) for the activity window. Omit for the default (current time); rows newer than `end` are excluded."
  },
  "side": {
   "enum": [
    "BUY",
    "SELL"
   ],
   "type": "string"
  },
  "type": {
   "type": "array",
   "items": {
    "enum": [
     "TRADE",
     "SPLIT",
     "MERGE",
     "REDEEM",
     "REWARD",
     "CONVERSION",
     "DEPOSIT",
     "WITHDRAWAL",
     "YIELD",
     "MAKER_REBATE",
     "TAKER_REBATE",
     "REFERRAL_REWARD"
    ],
    "type": "string"
   },
   "description": "Comma-separated list of activity types to include. DEPOSIT and WITHDRAWAL records also require `excludeDepositsWithdrawals=false`."
  },
  "user": {
   "type": "string",
   "example": "0x56687bf447db6ffa42ffe2204a05edaa20f55839",
   "pattern": "^0x[a-fA-F0-9]{40}$",
   "description": "User Profile Address (0x-prefixed, 40 hex chars)"
  },
  "limit": {
   "type": "integer",
   "default": 100,
   "maximum": 500,
   "minimum": 0,
   "description": "Page size. Values above the maximum are clamped to 500."
  },
  "start": {
   "type": "integer",
   "minimum": 0,
   "description": "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)."
  },
  "market": {
   "type": "array",
   "items": {
    "type": "string",
    "example": "0xdd22472e552920b8438158ea7238bfadfa4f736aa4cee91a6b86c39ead110917",
    "pattern": "^0x[a-fA-F0-9]{64}$",
    "description": "0x-prefixed 64-hex string"
   },
   "description": "Comma-separated list of condition IDs. Mutually exclusive with eventId."
  },
  "offset": {
   "type": "integer",
   "default": 0,
   "maximum": 5000,
   "minimum": 0,
   "description": "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."
  },
  "sortBy": {
   "enum": [
    "TIMESTAMP",
    "TOKENS",
    "CASH"
   ],
   "type": "string",
   "default": "TIMESTAMP"
  },
  "eventId": {
   "type": "array",
   "items": {
    "type": "integer",
    "minimum": 1
   },
   "description": "Comma-separa
… (truncated)
```

## Response schema (JSON Schema)

```json
{
 "type": "array",
 "items": {
  "type": "object",
  "properties": {
   "bio": {
    "type": "string"
   },
   "icon": {
    "type": "string",
    "description": "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."
   },
   "name": {
    "type": "string"
   },
   "side": {
    "enum": [
     "BUY",
     "SELL"
    ],
    "type": "string"
   },
   "size": {
    "type": "number",
    "description": "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."
   },
   "slug": {
    "type": "string"
   },
   "type": {
    "enum": [
     "TRADE",
     "SPLIT",
     "MERGE",
     "REDEEM",
     "REWARD",
     "CONVERSION",
     "DEPOSIT",
     "WITHDRAWAL",
     "YIELD",
     "MAKER_REBATE",
     "TAKER_REBATE",
     "REFERRAL_REWARD"
    ],
    "type": "string"
   },
   "asset": {
    "type": "string",
    "description": "Token ID this row refers to. Populated on `REDEEM` rows with the token that row settles. Empty when the row is not token-specific."
   },
   "price": {
    "type": "number"
   },
   "title": {
    "type": "string"
   },
   "isCombo": {
    "type": "boolean",
    "description": "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."
   },
   "outcome": {
    "type": "string"
   },
   "usdcSize": {
    "type": "number",
    "description": "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."
   },
   "eventSlug": {
    "type": "string"
   },
   "pseudonym": {
    "type": "string"
   },
   "timestamp": {
    "type": "integer",
    "format": "int64"
   },
   "conditionId": {
    "type": "string",
    "example": "0xdd22472e552920b8438158ea7238bfadfa4f736aa4cee91a6b86c39ead110917",
    "pattern": "^0x[a-fA-F0-9]{64}$",
    "description": "0x-prefixed 64-hex string"
   },
   "proxyWallet": {
    "type": "string",
    "example": "0x56687bf447db6ffa42ffe2204a05edaa20f55839",
    "pattern": "^0x[a-fA-F0-9]{40}$",
    "description": "User Profile Addres
… (truncated)
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/aisa-mpp-data-apis-polymarket-user-activity-f7460dd1/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from api.aisa.one](https://www.zero.xyz/host/api.aisa.one/llms.txt)
