---
title: "Get Current Position Fills"
method: GET
path: "/v1/info/position-fills"
---

# Get Current Position Fills

`GET /v1/info/position-fills`

Get every fill in a registered account's current open position cycle for
one instrument. A cycle begins when the position opens from flat or flips
direction. For a flip, every fill from the flipping engine event belongs
to the new cycle so a fill is never split between cycles.

Returns an empty page when the account has no open position for the
instrument. Maximum of 100 entries returned per request. Results are
ordered by time; use `sort` to choose newest-first (`desc`, default) or
oldest-first (`asc`). To page through more than 100 fills, pass the opaque
`cursor` returned by the previous page and keep `sort` unchanged. Each page
verifies that the cursor still describes the account's current position
cycle. If that position changes while pagination is in progress, the
cursor returns `400` and pagination must restart from the first page.

Cycle discovery for a position inherited from a gateway snapshot is
limited to 250,000 account-history rows. A cycle older than that bound
returns `413` rather than allowing a public request to run an unbounded
ClickHouse scan. Positions opened or flipped after gateway startup carry
their cycle boundary directly and do not use this discovery scan.

## Query parameters

- `address` string, required — Address
- `instrument_id` integer, required — Instrument ID
- `cursor` string — Opaque keyset pagination cursor for the next page of fills. Present while `more` is true; pass it as `cursor` on the next request, keeping the other parameters the same across pages.
- `sort` 'desc' | 'asc' — Time sort direction. `desc` (default) returns newest fills first; `asc` returns oldest first.

## Response `200`

Current position fills response.

- AccountTrades
  - `data` AccountTradeData[], required — Account's trade history
    - `trade_id` integer, required — Trade ID
    - `order_id` integer, required — Order ID
    - `instrument_id` integer, required — Instrument ID
    - `side` 'long' | 'short', required — Side
    - `price` string, required — Price
    - `quantity` string, required — Quantity in no. of contracts
    - `taker` boolean, required — Whether this side was the taker
    - `fee` string, required — Fee amount for this trade side
    - `fee_asset` string, required — Fee asset name
    - `previous_size` string, required — Position size before the fill
    - `previous_entry_price` string, required — Position entry price before the fill
    - `pnl` string, required — PnL in USD
    - `liquidation` boolean, required — Whether this fill was part of a liquidation of the account's position — true on forced closes and on any fill executed while the account was under liquidation on the instrument, maker or taker. False on the counterparty leg of an auto-deleveraging or backstop match — its fill is part of someone else's liquidation, flagged by `adl` where applicable
    - `adl` boolean, required — Whether the fill came from auto-deleveraging
    - `timestamp` integer, required — Request timestamp. Unix milliseconds for most operations; Unix seconds for withdrawals (must match the on-chain EIP-712 struct verified against block.timestamp).
    - `hash` string, required — On-chain transaction hash, "0x" if not yet mined
  - `more` boolean, required — More data available
  - `cursor` string — Opaque keyset pagination cursor for the next page of fills. Present while `more` is true; pass it as `cursor` on the next request, keeping the other parameters the same across pages.

## Other responses

- `400` — Bad request — the request was malformed or failed validation (bad query parameters, unparseable body, invalid signature, or a domain pre-check). The `error` field is a human-readable validation detail.
- `408` — Request Timeout — the request body was not delivered within the gateway's read deadline. Protects against slow uploads holding connections open; send the complete body promptly and retry. `error` is `request_body_timeout`.
- `413` — Content Too Large — the request body exceeds the gateway's size cap, judged on the declared `Content-Length` or the actual stream. Split oversized batches into smaller requests. `error` is `payload_too_large`.
- `429` — Too Many Requests. `error` distinguishes the limit that was hit: `ip_rate_limited` (per-IP token bucket), `action_rate_limited` (per-account action rate), or `open_orders_limit` (resting open-order cap).
- `500` — Internal server error. `error` is `internal_error`.

---

[API](https://skmtc.net/polymarket/apis/polymarket-perps-http-api.md) · [All operations](https://skmtc.net/polymarket/apis/polymarket-perps-http-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/polymarket/polymarket-perps-http-api/revisions/76e4e47cf3aa/schema)
