---
title: "Get Notifications"
method: GET
path: "/v1/account/notifications"
---

# Get Notifications

`GET /v1/account/notifications`

Get the authenticated account's notifications, newest first.

Results come in pages. Pass the cursor returned by the previous page to
fetch the next, older one. If your WebSocket connection dropped or you
received a resync frame, pass since_seq to backfill anything you may have
missed; the same notification can show up again at the edges of the
window, so deduplicate by id. While paging through a backfill, keep
sending the same since_seq with each cursor so every page stays inside
the same window.

The response also includes your unread count and durable_source_seq, which
tells you how far the notification store has caught up. If a backfill has
not yet reached your target sequence, wait briefly and retry with the same
since_seq.

## Query parameters

- `cursor` string, nullable — Opaque pagination cursor. Pass the next_cursor value from the previous page to fetch the next, older page. Null when there are no more pages.
- `since_seq` integer — Backfill anchor for gap recovery. Pass the sequence number (sq) of the last notifications data frame you processed before the gap, never the sq of a resync frame. The bound is inclusive, so the response repeats the boundary event in full; deduplicate by notification id.
- `limit` integer — Maximum number of entries to return

## Response `200`

Notifications page.

- NotificationsResponse
  - `items` NotificationItem[], required
    - `notification` object, required — The notification payload. Fields vary by notification type; see the [Notifications channel](/api-reference/wss/perps-notifications) for the per-type shapes.
    - `read_at` integer, nullable, required — When the recipient marked this notification read, Unix milliseconds; null if unread.
    - `ts` 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).
  - `unread` integer, required — Count of the authenticated owner's unread notifications within the retention window.
  - `durable_source_seq` integer, required — Highest notification sequence the store has persisted for your account. If it is still below the sequence you are catching up to, the store is lagging; retry the backfill until it catches up.
  - `has_more` boolean, required — Whether older notifications exist beyond this page.
  - `next_cursor` string, nullable, required — Opaque pagination cursor. Pass the next_cursor value from the previous page to fetch the next, older page. Null when there are no more 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.
- `401` — Unauthorized — missing or invalid `POLYMARKET-PROXY` / `POLYMARKET-SECRET` credentials. `error` is `unauthorized`.
- `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)
