# GOAT API — live sneaker & streetwear resale data scraper: product search, full catalogue detail (name, brand, SKU, colorway, designer, release date, sizes, images), GOAT display price and the live per-size resale price grid (lowest ask, condition, instant-ship) from goat.com — no API key, no login

> Search GOAT for products by keyword. Returns matching products (name, slug, brand image, category) plus related curated collections. Resolves the `slug`/`product_id` you feed into product_detail and prices. `limit` caps results.
> ReefAPI engine `goat` · 5 endpoints · clean JSON, no scraping or browsers to manage.

## How to call
- **Endpoint:** `POST https://api.reefapi.com/goat/v1/<action>` with a JSON body.
- **Auth:** header `x-api-key: <YOUR_REEFAPI_KEY>` — create one free (1,000 credits, no card): https://reefapi.com/signup
- **Response (every call):** `{ ok: boolean, data: ..., meta: { record_count, credits, ... }, error: { code, message } }` — branch on `ok`. Failed or blocked calls are free.
- **One key + one shared credit pool** across every ReefAPI API. Per-call credits are listed on each endpoint below.
- **Use it from an AI agent (MCP):** connect `https://api.reefapi.com/mcp` (remote streamable-http, `Authorization: Bearer <key>`) and your assistant can call these actions directly.

## Endpoints

### POST /goat/v1/search — 1 credit
Search GOAT for products by keyword. Returns matching products (name, slug, brand image, category) plus related curated collections. Resolves the `slug`/`product_id` you feed into product_detail and prices. `limit` caps results.

**Parameters:**
- `query` (string, required) — What to search for — a sneaker/streetwear name, model, brand or SKU ('air jordan 4', 'nike dunk low', 'new balance 550', 'yeezy').
- `limit` (integer, optional, default 25) — Max products to return (1-50).

**Returns:** results[]{product_id, slug, url, name, image, category} + collections[]{record_id, title, slug, subtype}

**Example request body:**
```json
{
  "query": "air jordan 4"
}
```

### POST /goat/v1/suggest — 1 credit
Autocomplete suggestions for a partial query — quick product + collection name matches as the customer types. Lighter than search.

**Parameters:**
- `query` (string, required) — Partial search text to complete.

**Returns:** products[]{product_id, slug, name, image} + collections[]{title, slug}

**Example request body:**
```json
{
  "query": "jordan"
}
```

### POST /goat/v1/product_detail — 1 credit
Full catalogue record for one product by `slug` / `url` / `product_id`: name, nickname, brand, SKU, colorway, designer, gender, silhouette, release date, season, materials, size range, taxonomy, images, the GOAT display price and the offer floor/ceiling. Pair with `prices` for the live per-size resale grid.

**Parameters:**
- `slug` (string, optional) — Product slug from a GOAT URL (goat.com/sneakers/<slug>) — copy it from search results. Provide slug OR url.
- `url` (string, optional) — Full GOAT product URL — alternative to slug.
- `product_id` (integer, optional) — GOAT productTemplateId (the numeric id from a search/detail result). Provide product_id OR slug OR url.

**Returns:** product{product_id, slug, url, name, nickname, brand, sku, color, designer, gender, silhouette, release_date, size_range, taxonomy, images, display_price_usd, min_offer_usd, max_offer_usd}

**Example request body:**
```json
{
  "slug": "air-jordan-1-retro-high-og-chicago-555088-101"
}
```

### POST /goat/v1/prices — 1 credit
Live per-size resale price grid for a product (the market-data moat). For each size of the given `condition` it returns the lowest live ask + listing count, plus the cheapest listing overall. Accepts `slug`/`url`/`product_id`. `condition` (used/new_no_defects), `country` set the market. Optional `size` narrows to one size (returns every live listing for it). Honest-empty when nothing is listed.

**Parameters:**
- `slug` (string, optional) — Product slug from a GOAT URL (goat.com/sneakers/<slug>) — copy it from search results. Provide slug OR url.
- `url` (string, optional) — Full GOAT product URL — alternative to slug.
- `product_id` (integer, optional) — GOAT productTemplateId (the numeric id from a search/detail result). Provide product_id OR slug OR url.
- `condition` (enum, optional, default "used") — Listing condition for the live price grid. 'used' is the deep public resale pool; 'new_no_defects' covers brand-new pairs. [one of: used, new_no_defects]
- `country` (enum, optional, default "US") — Market/country the prices are quoted for (affects asks + FX). [one of: US, GB, DE, FR, IT, CA, AU, JP, KR, HK, NL, ES]
- `size` (string, optional) — Optional single size (e.g. 10, 10.5) — returns every live listing for just that size instead of the whole grid.

**Returns:** sizes[]{size, lowest_ask_usd, listing_count} + lowest{size, price_usd} + listings[]{listing_id, size, price_usd, shoe_condition, box_condition, instant_ship, sale_status} (when `size` given) + product reference

**Example request body:**
```json
{
  "slug": "air-jordan-1-retro-high-og-chicago-555088-101",
  "condition": "used"
}
```

### POST /goat/v1/related — 1 credit
Products related to one product by `slug`/`url`: GOAT's recommended products plus the brand / category / silhouette grids GOAT surfaces on the page. Catalogue discovery from any starting product.

**Parameters:**
- `slug` (string, optional) — Product slug from a GOAT URL (goat.com/sneakers/<slug>) — copy it from search results. Provide slug OR url.
- `url` (string, optional) — Full GOAT product URL — alternative to slug.

**Returns:** recommended[]{product_id, slug, url, name, image, brand} + brand_products[] + category_products[] + silhouette_products[]

**Example request body:**
```json
{
  "slug": "air-jordan-1-retro-high-og-chicago-555088-101"
}
```

## More
- Try it live, no code: https://reefapi.com/playground?engine=goat
- Human docs page: https://reefapi.com/docs/goat
- Every ReefAPI API in one file (for your AI): https://reefapi.com/llms-full.txt
