---
title: "Browse marketplace (aftermarket) domain listings"
method: GET
path: "/api/market/listings"
---

# Browse marketplace (aftermarket) domain listings

`GET /api/market/listings`

## Request

- Base URL: `https://name.ai`
- URL: `https://name.ai/api/market/listings`
- Auth: one of:
  - none
  - OAuth 2 (authorization code, authorization URL `https://name.ai/oauth/authorize`, token URL `https://name.ai/api/oauth/token`, scopes: `pricing:read`)

Public. Cursor- or offset-paginated (see the Page schema; cursor is preferred for walking the whole list). Buy-now/floor prices are null unless the caller sends a Bearer token with scope pricing:read (see /auth.md).

## Query parameters

- `limit` integer
- `offset` integer
- `cursor` string
- `q` string
- `tld` string
- `max` number
- `sort` 'newest' | 'price_asc' | 'price_desc'

## Response `200`

One page of listings. Deprecation/Sunset/Link headers appear only once the operation is deprecated (see x-deprecation-policy).

- object
  - `items` MarketListing[], required
    - `id` string, uuid
    - `domain` string
    - `tld` string
    - `price` object
      - `bin` number, nullable: Buy-now price in USD. null when the caller is not authenticated with pricing:read.
      - `floor` number, nullable
      - `currency` string
    - `approved` boolean
    - `marketplace_visible` boolean
    - `created_at` string, date-time
  - `page` Page, required: Pagination. Two ways to walk a list and they interoperate: follow page.next_cursor until it is null (preferred — a cursor names the row you stopped at, so rows inserted or removed while you page cannot shift the window under you), or add limit to offset until offset >= total. next_cursor is returned on offset pages too, so you can switch part-way through.
    - `limit` integer, required
    - `offset` integer, required: Offset applied to this request. 0 on a page fetched with a cursor, where no offset was used.
    - `total` integer, required: Total matching items across all pages.
    - `has_more` boolean, required: Whether a further page exists. Exact — not inferred from the page being full.
    - `next_cursor` string, nullable, required: Opaque cursor for the next page, or null on the last one. Valid only for the filters and sort order it was issued with; reusing it with different ones returns 400 invalid_cursor rather than a wrong window.

## Other responses

- `400`: Malformed or invalid request.

---

[API](https://skmtc.dev/name/apis/name-ai-api-public-rest-api-openapi-3-1.md) · [All operations](https://skmtc.dev/name/apis/name-ai-api-public-rest-api-openapi-3-1/llms.txt) · [OpenAPI document](https://skmtc.dev/name/apis/name-ai-api-public-rest-api-openapi-3-1/revisions/e04300069786?raw)
