# StockX API for agents

> API for Agents · https://apiforagents.dev/platforms/stockx · HTML twin: https://apiforagents.dev/platforms/stockx

Market prices, listings and last sales from StockX.

Endpoint: `POST https://apiforagents.dev/v1/stockx`. One op per call. Quote first with `"estimateOnly": true`.

## Prices (USD per record, pay as you go)

| Record | Per record |
|---|---|
| products | $0.0009 |

## Operations

### products

Full detail with live market data for up to ten StockX products. Last sale, 90-day and 12-month averages, sales counts, bids, and every size's ask/bid/last sale.

| Field | Required | Type | Meaning |
|---|---|---|---|
| subjects | yes | list of string (1-10 items) |  |
| country | no | string (ISO alpha-2) |  |

Response fields (each row of data; every field present, null when the source had nothing):

| Field | Type |
|---|---|
| slug | string |
| productId | string |
| productUrl | string |
| primaryTitle | string |
| secondaryTitle | string |
| brand | string |
| model | string |
| colorway | string |
| styleId | string |
| category | string |
| subCategory | string |
| categoryPath | string |
| contentGroup | string |
| gender | string |
| condition | string |
| sizeConvention | string |
| retailPrice | number |
| releaseDate | string |
| description | string |
| tags | list of string |
| lastSale | number |
| sales72Hours | integer |
| averagePrice90Days | number |
| sales90Days | integer |
| priceVolatility | number |
| sales12Months | integer |
| averagePrice12Months | number |
| bids | integer |
| askInventoryType | string |
| expressAskCount | integer |
| expressShipLowestAsk | number |
| expressDeliveryDate | string |
| expressLatestDeliveryDate | string |
| images | list of string |
| sizes | any |
| attributes | any |
| lowestAsk | number |
| highestBid | number |
| details | object |

`details` is always the last field: everything else the source sent for that row, under our own field names. Its keys depend on the source that answered, so read them defensively; it is `{}` when there is nothing more.

Example request:

```bash
curl -X POST https://apiforagents.dev/v1/stockx \
  -H "Authorization: Bearer $AFA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"op":"products","subjects":["https://stockx.com/nike-dunk-low-retro-white-black-2021"],"country":"US"}'
```

Example response rows (made-up names, real field names; a live row carries every field above):

```json
[
  {
    "primaryTitle": "Stride Runner 90",
    "brand": "Stride",
    "colorway": "Sea Salt/White",
    "category": "sneakers",
    "retailPrice": 130,
    "lastSale": 176,
    "lowestAsk": 182,
    "highestBid": 160,
    "sales72Hours": 48,
    "averagePrice12Months": 153,
    "slug": "stride-runner-90",
    "productId": "366477383",
    "productUrl": "https://stockx.com/stride-runner-90-1000",
    "styleId": "3684041094",
    "releaseDate": "2026-10-05",
    "expressDeliveryDate": "2026-10-13",
    "expressLatestDeliveryDate": "2026-10-09",
    "images": [
      "https://img.stockx.com/stride-runner-90.jpg"
    ],
    "details": {}
  },
  {
    "primaryTitle": "Corvo Court Classic Low",
    "brand": "Corvo",
    "colorway": "Black/Black",
    "category": "sneakers",
    "retailPrice": 110,
    "lastSale": 99,
    "lowestAsk": 96,
    "highestBid": 84,
    "sales72Hours": 21,
    "averagePrice12Months": 104,
    "slug": "corvo-court-classic-low",
    "productId": "726332240",
    "productUrl": "https://stockx.com/corvo-court-classic-low-1001",
    "styleId": "3562676303",
    "releaseDate": "2026-10-04",
    "expressDeliveryDate": "2026-10-12",
    "expressLatestDeliveryDate": "2026-10-07",
    "images": [
      "https://img.stockx.com/corvo-court-classic-low.jpg"
    ],
    "details": {}
  }
]
```

Try it in the playground: https://apiforagents.dev/dashboard/run?platform=stockx&op=products (sign in first).

### search

Keyword search on StockX. Every hit a full product card.

| Field | Required | Type | Meaning |
|---|---|---|---|
| query | yes | string (≤300 chars) |  |
| country | no | string (ISO alpha-2) |  |
| limit | no | integer (1-100) |  |

Response fields (each row of data; every field present, null when the source had nothing):

| Field | Type |
|---|---|
| slug | string |
| productId | string |
| productUrl | string |
| primaryTitle | string |
| secondaryTitle | string |
| brand | string |
| model | string |
| colorway | string |
| styleId | string |
| category | string |
| subCategory | string |
| categoryPath | string |
| contentGroup | string |
| gender | string |
| condition | string |
| sizeConvention | string |
| retailPrice | number |
| releaseDate | string |
| description | string |
| tags | list of string |
| lastSale | number |
| sales72Hours | integer |
| averagePrice90Days | number |
| sales90Days | integer |
| priceVolatility | number |
| sales12Months | integer |
| averagePrice12Months | number |
| bids | integer |
| askInventoryType | string |
| expressAskCount | integer |
| expressShipLowestAsk | number |
| expressDeliveryDate | string |
| expressLatestDeliveryDate | string |
| images | list of string |
| sizes | any |
| attributes | any |
| lowestAsk | number |
| highestBid | number |
| details | object |

`details` is always the last field: everything else the source sent for that row, under our own field names. Its keys depend on the source that answered, so read them defensively; it is `{}` when there is nothing more.

Example request:

```bash
curl -X POST https://apiforagents.dev/v1/stockx \
  -H "Authorization: Bearer $AFA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"op":"search","query":"Air Jordan 1","country":"US","limit":20}'
```

Example response rows (made-up names, real field names; a live row carries every field above):

```json
[
  {
    "primaryTitle": "Stride Trail Pro GTX",
    "brand": "Stride",
    "colorway": "Moss/Grey",
    "category": "sneakers",
    "retailPrice": 170,
    "lastSale": 221,
    "lowestAsk": 215,
    "highestBid": 189,
    "sales72Hours": 9,
    "averagePrice12Months": 196,
    "slug": "stride-trail-pro-gtx",
    "productId": "1566781872",
    "productUrl": "https://stockx.com/stride-trail-pro-gtx-1000",
    "styleId": "3003996386",
    "releaseDate": "2026-10-06",
    "expressDeliveryDate": "2026-10-14",
    "expressLatestDeliveryDate": "2026-10-08",
    "images": [
      "https://img.stockx.com/stride-trail-pro-gtx.jpg"
    ],
    "details": {}
  },
  {
    "primaryTitle": "Stride Trail Pro GTX",
    "brand": "Stride",
    "colorway": "Black/Orange",
    "category": "sneakers",
    "retailPrice": 170,
    "lastSale": 198,
    "lowestAsk": 205,
    "highestBid": 180,
    "sales72Hours": 14,
    "averagePrice12Months": 184,
    "slug": "stride-trail-pro-gtx",
    "productId": "2674647671",
    "productUrl": "https://stockx.com/stride-trail-pro-gtx-1001",
    "styleId": "2303690539",
    "releaseDate": "2026-10-02",
    "expressDeliveryDate": "2026-10-04",
    "expressLatestDeliveryDate": "2026-10-10",
    "images": [
      "https://img.stockx.com/stride-trail-pro-gtx.jpg"
    ],
    "details": {}
  }
]
```

Try it in the playground: https://apiforagents.dev/dashboard/run?platform=stockx&op=search (sign in first).

### listing

A brand or category page URL. Its products in page order.

| Field | Required | Type | Meaning |
|---|---|---|---|
| subject | yes | string (≤400 chars) | The listing page URL. |
| country | no | string (ISO alpha-2) |  |
| limit | no | integer (1-100) |  |

Response fields (each row of data; every field present, null when the source had nothing):

| Field | Type |
|---|---|
| slug | string |
| productId | string |
| productUrl | string |
| primaryTitle | string |
| secondaryTitle | string |
| brand | string |
| model | string |
| colorway | string |
| styleId | string |
| category | string |
| subCategory | string |
| categoryPath | string |
| contentGroup | string |
| gender | string |
| condition | string |
| sizeConvention | string |
| retailPrice | number |
| releaseDate | string |
| description | string |
| tags | list of string |
| lastSale | number |
| sales72Hours | integer |
| averagePrice90Days | number |
| sales90Days | integer |
| priceVolatility | number |
| sales12Months | integer |
| averagePrice12Months | number |
| bids | integer |
| askInventoryType | string |
| expressAskCount | integer |
| expressShipLowestAsk | number |
| expressDeliveryDate | string |
| expressLatestDeliveryDate | string |
| images | list of string |
| sizes | any |
| attributes | any |
| lowestAsk | number |
| highestBid | number |
| details | object |

`details` is always the last field: everything else the source sent for that row, under our own field names. Its keys depend on the source that answered, so read them defensively; it is `{}` when there is nothing more.

Example request:

```bash
curl -X POST https://apiforagents.dev/v1/stockx \
  -H "Authorization: Bearer $AFA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"op":"listing","subject":"https://stockx.com/brands/nike","country":"US","limit":20}'
```

Example response rows (made-up names, real field names; a live row carries every field above):

```json
[
  {
    "primaryTitle": "Sonora Studio Headphones",
    "brand": "Sonora",
    "colorway": "Matte Black",
    "category": "electronics",
    "retailPrice": 349,
    "lastSale": 310,
    "lowestAsk": 299,
    "highestBid": 263,
    "sales72Hours": 12,
    "averagePrice12Months": 330,
    "slug": "sonora-studio-headphones",
    "productId": "163904352",
    "productUrl": "https://stockx.com/sonora-studio-headphones-1000",
    "styleId": "895962177",
    "releaseDate": "2026-10-12",
    "expressDeliveryDate": "2026-10-08",
    "expressLatestDeliveryDate": "2026-10-14",
    "images": [
      "https://img.stockx.com/sonora-studio-headphones.jpg"
    ],
    "details": {}
  },
  {
    "primaryTitle": "Sonora Buds Pro",
    "brand": "Sonora",
    "colorway": "White",
    "category": "electronics",
    "retailPrice": 199,
    "lastSale": 168,
    "lowestAsk": 162,
    "highestBid": 143,
    "sales72Hours": 31,
    "averagePrice12Months": 184,
    "slug": "sonora-buds-pro",
    "productId": "579672626",
    "productUrl": "https://stockx.com/sonora-buds-pro-1001",
    "styleId": "3844220973",
    "releaseDate": "2026-10-13",
    "expressDeliveryDate": "2026-10-13",
    "expressLatestDeliveryDate": "2026-10-10",
    "images": [
      "https://img.stockx.com/sonora-buds-pro.jpg"
    ],
    "details": {}
  }
]
```

Try it in the playground: https://apiforagents.dev/dashboard/run?platform=stockx&op=listing (sign in first).

### history (free)

Stored market series of products already held. Free.

| Field | Required | Type | Meaning |
|---|---|---|---|
| subjects | yes | list of string (1-10 items) |  |
| metric | no | enum |  Values: last_sale, lowest_ask, highest_bid, average_price_90_days, sales_90_days, sales_72_hours, average_price_12_months, sales_12_months, bids, price_volatility. |
| days | no | integer (1-730) |  |

Request shape:

```json
{
  "op": "history",
  "subjects": [
    "example"
  ]
}
```

Try it in the playground: https://apiforagents.dev/dashboard/run?platform=stockx&op=history (sign in first).

## Notes for the agent

Measured StockX market data, one operation per call. Products are named by product URL or its slug. Every fetch adds last sale, lowest ask, highest bid, averages, sales counts and bids to the product's market history. ops: products (full detail for up to ten products. Last sale, 90-day and 12-month average price and sales, 72-hour sales, volatility, bids, express-ship asks, every size with its ask/bid/last sale, retail price, release date), search (keyword search, full cards), listing (a brand or category page URL, its products in order), history (stored market series for products already held, free). `country` (ISO-2, upper) prices in that region. Ops are independent. Issue several as PARALLEL tool calls. Fresh fetches are charged per record; your own answer is free while fresh.
