---
title: "List your trades"
method: GET
path: "/portfolio/trades"
tags: ["Portfolio"]
---

# List your trades

`GET /portfolio/trades`

## Request

- Base URL: `https://arena-predictions.com/api/v1`
- URL: `https://arena-predictions.com/api/v1/portfolio/trades`
- Auth: HTTP bearer

A page of the key owner's own trades, newest first, with the result of each settled one. Private picks included. With no X-Arena-Org header this is the personal account. With the header it is that organization's paper sandbox, not the personal trade list, and organization.slug is set when the sandbox named one. Not cached.

## Query parameters

- `status` 'open' | 'settled' | 'sold' | 'void' | 'all'
- `since` string, date-time
- `until` string, date-time
- `limit` integer
- `cursor` string

## Headers

- `X-Arena-Org` string

## Response `200`

A page of trades.

- TradePage
  - `trades` Trade[], required
    - `tradeId` string, uuid, required
    - `instrumentId` string, nullable, required: The Arena instrument the market lists; null when not mapped.
    - `instrumentLabel` string, nullable, required: The instrument's YES side in words.
    - `instrumentSide` 'yes' | 'no' | 'null', nullable, required: The side of the instrument held.
    - `boughtSide` 'yes' | 'no' | 'null', nullable, required: The side of the market bought.
    - `contracts` integer, required
    - `costDollars` number, required: Paper dollars paid.
    - `statedProbPct` integer, nullable, required: The probability you stated when placing, if any.
    - `placedVia` string, nullable, required
    - `placedPrivate` boolean, required
    - `parlayId` string, uuid, nullable, required
    - `fillVenue` string, required
    - `openedAt` string, date-time, nullable, required
    - `marketTicker` string, nullable: Only while the venue-data switch is on.
    - `entryCents` number, nullable: Only while the venue-data switch is on.
    - `status` 'open' | 'won' | 'lost' | 'settled_push' | 'cancelled' | 'sold' | 'null', nullable, required
    - `closedAt` string, date-time, nullable, required
    - `closeReason` string, nullable, required
    - `pnlDollars` number, nullable, required
    - `resolvedOutcome` 'yes' | 'no' | 'push' | 'void' | 'null', nullable, required: The instrument's result.
  - `count` integer, required
  - `nextCursor` string, nullable, required
  - `venueData` boolean, required
  - `mode` 'paper', required
  - `organization` object: Present when X-Arena-Org selected an organization sandbox. Absent on the personal account.
    - `id` string, uuid, required
    - `slug` string, nullable: The organization's slug. Null when the sandbox did not name one.

## Other responses

- `400`: invalid_request, or X-Arena-Org is not an organization id.
- `401`: Missing, malformed, unknown, revoked or expired key. Carries a WWW-Authenticate: Bearer challenge.
- `403`: insufficient_scope: the key does not carry portfolio:read. organization_forbidden: X-Arena-Org names an organization this key cannot use. The personal account is not read.
- `404`: organization_not_found: no organization matches X-Arena-Org. The personal account is not read.
- `429`: rate_limited (over the plan's minute limit) or quota_exceeded (over the month). Only while the limits are enforced; until then requests are counted and the headers set, and nothing is refused. error.retryAfterSeconds equals Retry-After.
- `503`: The key could not be verified, or the data could not be read, right now. Retry after the Retry-After seconds.

---

[API](https://skmtc.dev/arena-predictions/apis/arena-api.md) · [All operations](https://skmtc.dev/arena-predictions/apis/arena-api/llms.txt) · [OpenAPI document](https://skmtc.dev/arena-predictions/apis/arena-api/revisions/9d89d166dae6?raw)
