Get GOAT sneaker prices and resale listings with one API
The GOAT API returns live sneaker and streetwear resale data as clean JSON.
5 active endpoints. Every call is 1 credit.
- POST/goat/v1/search
- POST/goat/v1/suggest
- POST/goat/v1/product_detail
- POST/goat/v1/prices
- POST/goat/v1/related
What GOAT endpoints does ReefAPI ship?
5 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.
GOAT API
3 of 5 endpoints, ready to run
The per-size resale grid: the lowest live ask and how many pairs are listed at each size. This is the number people actually pay for.
// Press "Try it" and this pane shows exactly what the // live site returned this second — including an empty // result, if that is the truth. No key, no account.
How the GOAT API works
GOAT is a normal ReefAPI surface — the same four rules that hold for every other engine on the key.
No OAuth app, no request signing, no per-site account. One key covers all 185 engines.
Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.
Credits, not seats. Failed and blocked calls are never charged, and cache hits cost nothing.
One envelope everywhere. meta carries latency_ms, record_count and the endpoint that answered.
Two calls turn a shoe name into a price grid
Search resolves a name into a slug; prices turns that slug into every live ask by size. Two calls, and you have a size-by-size market for one shoe.
{"query": "air jordan 4", "limit": 5}Take results[0].slug — every other endpoint keys off it. Needed once per product.
{"slug": "...", "condition": "used", "country": "US"}One row per size that has a live ask: size, lowest_ask_usd, listing_count.
Two credits per shoe. Repeat the second call per slug to track a catalogue; the first is only needed once per product, because the slug does not change.
curl -X POST https://api.reefapi.com/goat/v1/prices \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"slug":"air-jordan-1-retro-high-og-chicago-555088-101","condition":"used"}'{
"ok": true,
"data": { … },
"meta": {
"api": "goat",
"endpoint": "prices",
"mode": "live",
"latency_ms": …,
"record_count": …
},
"error": null
}Reading GOAT prices: units, size scale and the condition flags
Resale APIs commonly return integer cents. This one does not: every figure is a decimal dollar amount. The rows below were read from live calls on the Air Jordan 1 Retro High OG 'Chicago' 2015 (product_id 14741) on 2026-08-27 with the default condition=used and country=US.
| Field | What it is | Measured value |
|---|---|---|
| lowest_ask_usd / price_usd | Live lowest ask as a decimal number of US dollars. Not cents. | 257.0 for size 8.5, meaning $257 and not $2.57 |
| display_price_usd | GOAT's retail display price for the model, not a resale ask. | 160.0, while the cheapest used pair asked 257.0 |
| size / size_unit | US sizing, half sizes as .5 decimals. | size_unit "us", size_range 7 through 18 (23 values) |
| condition | Only two values exist: used and new_no_defects. | used returned 15 priced sizes; new_no_defects size 10 in GB returned none |
| box_condition | Per-listing box state. | no_original_box, good_condition |
| defects | Free-text defect summary, or null. | "Discoloration, Scuffs" |
| sale_status / instant_ship / is_goat_clean | Listing state and GOAT's own fulfilment flags. | "active", false, false |
| min_offer_usd / max_offer_usd | The offer floor and ceiling GOAT accepts on this product. | 25.0 / 4000.0, with is_offerable true |
| sku | Manufacturer style code, space-separated rather than hyphenated. | "555088 101" |
| product_id | Integer on product_detail and prices, string in search rows. | 14741 (integer) vs "1567309" (string) |
The prices action probes every size and returns only the ones with a live ask: meta.sizes_probed said 23 while meta.record_count said 15, and the eight missing sizes are dropped rather than returned at zero. Separately, display_price_local is not pinned by the `country` parameter. The same product came back as USD 160.00 on one call and EUR 139.00 on another minutes later, so compute on the *_usd fields and treat the local block as display-only.
Reading GOAT prices: units, size scale and the country trap
Measured against the live site on 2026-08-27 for the Air Jordan 1 'Chicago' 2015. Two of these go against us; they are here because a wrong unit costs more than a missing feature.
Decimal dollars, not cents. 257.0 means $257 — dividing by 100 puts you out by two orders of magnitude.
Only sizes with a live ask come back: 15 of 23 probed on our run. An unpriced size is omitted, not returned as null — join product_detail.size_range if you need the gaps marked.
Against us: the local block is NOT pinned by the country parameter — the same product answered USD 160.00 and then EUR 139.00 minutes apart. Compute on the *_usd fields and treat local as display-only.
Two values only: used and new_no_defects. used is the deep pool; new_no_defects is often empty in smaller markets.
What people build with GOAT
The jobs this data is most often used for.
endpoints
credit per call
Resale-price tools call search then prices to track a sneaker's market value across sizes.
Sneaker apps use product_detail to show live GOAT listings alongside other marketplaces.
Resellers use related and suggest to discover trending models and comparable products.
What GOAT data costs
The cheapest call here is 1 credit, so $15/mo (Pro) buys 10,000 of them — $1.50 per 1,000 credits. Credits roll over and never expire, and failed or blocked calls are not charged.
Full pricing →- 1,000 free credits on signup, no card
- One key, all 185 APIs, one credit pool
- Failed and blocked calls are never charged
- Credits roll over and never expire
Call it in two lines
Sign up, get 1,000 credits and one key that works on every engine. Then this is the whole protocol.
curl -X POST https://api.reefapi.com/goat/v1/prices \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"slug":"air-jordan-1-retro-high-og-chicago-555088-101","condition":"used"}'import requests
r = requests.post(
"https://api.reefapi.com/goat/v1/prices",
headers={"x-api-key": REEF_KEY},
json={
"slug": "air-jordan-1-retro-high-og-chicago-555088-101",
"condition": "used"
},
)
print(r.json()["data"])Have a question? We got answers.
The questions people actually ask before wiring up GOAT.
Get a free key →Are GOAT prices in cents?▾
No, they are decimal US dollars. A live per-size grid returned lowest_ask_usd values of 893.0, 1709.0, 428.0 and 257.0, and the cheapest listing on that shoe was $257. The same holds for price_usd on individual listings, display_price_usd, min_offer_usd and max_offer_usd. Dividing by 100 will put you off by two orders of magnitude.
Why does the price grid return fewer sizes than the shoe is made in?▾
Because a size with no live ask is omitted rather than returned with a null price. On the Chicago 2015 the response carried meta.sizes_probed 23 and meta.record_count 15: eight sizes had nothing listed in that condition and market at that moment. The full manufactured run is in product_detail's size_range, so join the two if you need a complete grid with the gaps marked.
Which size scale are the prices keyed by?▾
US. product_detail returns size_unit "us" and a size_range of decimals from 7 to 18, with half sizes as 7.5, 8.5 and so on, and the prices grid uses the same numbers. Changing `country` changes the market you are pricing, not the size scale, so a call with country=GB is still asking for a US 10 rather than a UK 10.
What does the country parameter actually change?▾
It selects which market's asks GOAT quotes. Twelve countries are accepted: US, GB, DE, FR, IT, CA, AU, JP, KR, HK, NL and ES. It does not reliably relabel the currency. A live call with country=JP for size 9 returned 20 listings whose price_local block still read USD, alongside price_usd 458.10. Treat the *_usd fields as the number and country as a market selector.
What is the difference between display_price_usd and the price grid?▾
display_price_usd is GOAT's retail reference for the model; the grid is what people are asking today. On the Chicago 2015 those were 160.0 and 257.0, a roughly 60 percent resale premium on the cheapest available pair. Do not read display_price_usd as a current market price, and do not compare it against sold data.
Why did my prices call return ok:true with an empty list?▾
Because nothing is listed for that exact combination, and the response is honest-empty rather than an error. A live call for slug plus condition new_no_defects plus size 10 plus country GB came back with listings [], lowest null, record_count 0 and meta.stop_reason "empty_page", while still returning the product block so you know the lookup itself worked. Widen it by dropping `size`, switching condition to used, or trying country US.
What do box_condition, defects and is_goat_clean tell me?▾
They separate two pairs sitting at the same price. In one live size-9 grid, a $597.80 listing had box_condition no_original_box with defects null, and another at exactly $597.80 had box_condition good_condition but defects "Discoloration, Scuffs". is_goat_clean marks GOAT's own cleaning programme and came back false on every listing measured. instant_ship marks stock already held in a GOAT warehouse, which ships faster than a seller-fulfilled pair.
Should I pass slug or product_id?▾
Either, with `url` as a third option. Search returns both, but watch the type: search rows return product_id as a string such as "1567309", while product_detail and prices return it as an integer such as 14741. Slug is the safer key to store. It is the last path segment of goat.com/sneakers/<slug> and it embeds the SKU, for example air-jordan-1-retro-high-og-chicago-555088-101.
What is the GOAT API?▾
GOAT API is a ReefAPI endpoint group for goat It returns live JSON through POST requests under /goat/v1.
Is the GOAT API free to try?▾
Yes. ReefAPI starts with 1,000 free credits, no card required. GOAT calls use the same shared credit balance as every other ReefAPI engine.
Do I need a GOAT login or account?▾
No login to GOAT is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.
How fresh is the GOAT data?▾
The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.
How many credits does the GOAT API use?▾
GOAT actions currently cost 1 credit per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.
Can I call GOAT from an AI assistant or MCP client?▾
Yes. Connect ReefAPI once through MCP and your assistant can call goat actions with the same key, credit pool and JSON envelope used by normal REST requests.
37 E-commerce & Marketplaces APIs on the same key
One key, one credit pool, one response envelope. If you are pulling GOAT, you are one call away from the rest of the category — no second contract, no second integration.
Try it on your own data before you pay anything
The call above is the real endpoint, not a recording. A free key gives you 1,000 credits, the other 184 APIs, and the same envelope everywhere.
Endpoints, parameters and credit costs on this page are read from the live catalog and cannot drift from what the API accepts. Field notes were captured on 2026-08-27.