REST APIAccount
Get account activity by address
Get a paginated list of the conversions, merges, splits, redemptions
and refunds of any wallet address. Order events are not included. The
fills of an address are available from GET /v1/orders/matches with
signerAddress. An address with no account returns an empty list.
The occurredAfter and occurredBefore filters are unix timestamps in
milliseconds and both bounds are exclusive: only events that occurred
strictly after occurredAfter and strictly before occurredBefore are
returned.
ApiKeyAuthx-api-key<token>API key authentication via the x-api-key header.
address*stringThe wallet's address. For a Predict account, use the account's address.
first?integerPage size, from 1 to 150. Defaults to 50. A value outside that range is clamped.
int32after?stringThe cursor from the previous page, to get the next one.
length <= 1024eventTypes?array<>Filter by event types (comma-separated or repeated)
occurredAfter?integerOnly include events that occurred strictly after this unix timestamp (milliseconds)
int64occurredBefore?integerOnly include events that occurred strictly before this unix timestamp (milliseconds)
int64application/json; charset=utf-8- response
Response for GET /v1/account/activity and GET /v1/account/{address}/activity
success*booleancursor?stringdata*array<>curl -X GET 'https://api.predict.fun/v1/account/string/activity'{ "success": true, "cursor": "string", "data": [ { "name": "CREATE", "createdAt": "string", "transactionHash": "string", "amountFilled": "string", "priceExecuted": "string", "order": { "quoteType": "Ask", "amount": "string", "price": "string", "fee": { "amount": "string", "type": "COLLATERAL" } }, "market": { "id": 0, "imageUrl": "string", "title": "string", "question": "string", "description": "string", "tradingStatus": "OPEN", "status": "REGISTERED", "isVisible": true, "isNegRisk": true, "isYieldBearing": true, "feeRateBps": 0, "makerFeeBps": 0, "resolution": { "name": "string", "indexSet": 0, "onChainId": "string", "status": "WON", "bestBid": { "price": 0.1, "size": 0.1 }, "bestAsk": { "price": 0.1, "size": 0.1 }, "team": { "id": 0, "name": "string", "abbreviation": "string", "alias": "string", "league": "string" }, "variantData": { "type": "ESPORTS_DOTA2", "provider": "PREDICT_SPORTS", "team": { "id": 0, "name": "string", "abbreviation": "string", "providerTeamId": "string", "isHome": true, "record": { "wins": 0, "losses": 0, "draws": 0, "overtimeLosses": 0 }, "color": "string" } }, "variantDetails": { "sports": { "provider": "PREDICT_SPORTS", "team": { "id": 0, "name": "string", "abbreviation": "string", "providerTeamId": "string", "isHome": true, "record": { "wins": 0, "losses": 0, "draws": 0, "overtimeLosses": 0 }, "color": "string" } } } }, "oracleQuestionId": "string", "conditionId": "string", "resolverAddress": "string", "outcomes": [ { "name": "string", "indexSet": 0, "onChainId": "string", "status": "WON", "bestBid": { "price": 0.1, "size": 0.1 }, "bestAsk": { "price": 0.1, "size": 0.1 }, "team": { "id": 0, "name": "string", "abbreviation": "string", "alias": "string", "league": "string" }, "variantData": { "type": "ESPORTS_DOTA2", "provider": "PREDICT_SPORTS", "team": { "id": 0, "name": "string", "abbreviation": "string", "providerTeamId": "string", "isHome": true, "record": { "wins": 0, "losses": 0, "draws": 0, "overtimeLosses": 0 }, "color": "string" } }, "variantDetails": { "sports": { "provider": "PREDICT_SPORTS", "team": { "id": 0, "name": "string", "abbreviation": "string", "providerTeamId": "string", "isHome": true, "record": { "wins": 0, "losses": 0, "draws": 0, "overtimeLosses": 0 }, "color": "string" } } } } ], "questionIndex": 0, "spreadThreshold": 0.1, "shareThreshold": 0, "isBoosted": true, "boostStartsAt": "string", "boostEndsAt": "string", "polymarketConditionIds": [ "string" ], "kalshiMarketTicker": "string", "categorySlug": "string", "seriesSlug": "string", "createdAt": "string", "decimalPrecision": 0, "marketVariant": "DEFAULT", "variantData": { "type": "CRYPTO_UP_DOWN", "priceFeedProvider": "PYTH", "startPrice": 0.1, "endPrice": 0.1, "priceFeedId": "string", "priceFeedSymbol": "string" }, "variantDetails": { "sports": { "provider": "PREDICT_SPORTS", "team": { "id": 0, "name": "string", "abbreviation": "string", "providerTeamId": "string", "isHome": true, "record": { "wins": 0, "losses": 0, "draws": 0, "overtimeLosses": 0 }, "color": "string" }, "line": 0.1, "gameNumber": 0 } }, "team": { "id": 0, "name": "string", "abbreviation": "string", "alias": "string", "league": "string" }, "marketType": "SPORTS_MONEYLINE", "rewards": { "current": { "hourlyRate": 0, "startsAt": "string", "endsAt": "string" }, "schedule": [ { "hourlyRate": 0, "startsAt": "string", "endsAt": "string" } ] } }, "outcome": { "name": "string", "indexSet": 0, "onChainId": "string", "status": "WON", "bestBid": { "price": 0.1, "size": 0.1 }, "bestAsk": { "price": 0.1, "size": 0.1 }, "team": { "id": 0, "name": "string", "abbreviation": "string", "alias": "string", "league": "string" }, "variantData": { "type": "ESPORTS_DOTA2", "provider": "PREDICT_SPORTS", "team": { "id": 0, "name": "string", "abbreviation": "string", "providerTeamId": "string", "isHome": true, "record": { "wins": 0, "losses": 0, "draws": 0, "overtimeLosses": 0 }, "color": "string" } }, "variantDetails": { "sports": { "provider": "PREDICT_SPORTS", "team": { "id": 0, "name": "string", "abbreviation": "string", "providerTeamId": "string", "isHome": true, "record": { "wins": 0, "losses": 0, "draws": 0, "overtimeLosses": 0 }, "color": "string" } } } } } ]}Get account by address GET
Get the public profile of any wallet address: its display name, its profile image once it has passed moderation, and its leaderboard points and rank. A wallet that never set up a profile has a null name. An address with no wallet returns 404.
Get PnL history by address GET
Cumulative profit and loss in USD for any wallet, the series the predict.fun profile chart shows. period picks the window and with it the spacing: hourly points for 1d, daily for 7d and 30d, and the whole history for all (the default). The latest point is the current PnL. The whole series comes back in one response, so there is no cursor. Results are cached for up to 30 seconds, so polling faster than that returns the same series. An address with no account returns an empty series.