GOAT API endpoint
Returns GOAT's own search-box autocomplete for a partial query: matching curated collections and matching products. The collections carry the slug values accepted by GET /goat/collection and by GET /goat/search's collection_slug parameter, making this the way to discover collection slugs.
/goat/suggestQuery parameters:
query (required) — partial search text to autocomplete, e.g. the first
few characters a user has typed.limit (optional) — maximum curated collections to return. Defaults to
8, maximum 20. It does not affect the product count, which
upstream fixes at 25.Response fields:
collections[].slug — collection slug, accepted by
GET /goat/collection and by GET /goat/search's collection_slugcollections[].title — collection name as GOAT displays itcollections[].type — GOAT's collection kind, e.g. StaticCollectioncollections[].id — GOAT's internal collection UUIDproducts[].slug — product slug, accepted by
GET /goat/product/{slug}products[].title, products[].image_url, products[].category,
products[].source_urlNotable response behavior:
GET /goat/collection's slug and
GET /goat/search's collection_slug otherwise have to be copied by
hand off a live GOAT page. Autocompleting a brand or model name returns
the curated collections GOAT associates with it, slugs included.200 with empty collections and
products arrays, not 404 — no matches is a normal autocomplete
answer.limit bounds collections only. There is no upstream control over the
number of products.Example response (truncated for brevity):
{
"code": 200,
"msg": "OK",
"data": {
"query": "jord",
"collections": [
{
"id": "2fbf8b62-8899-4323-89ab-efdbc672d9d0",
"title": "Michael Jordan",
"slug": "michael-jordan",
"type": "StaticCollection"
},
{
"id": "13079529-6136-4ece-8d8d-9c7469356d71",
"title": "Jordan Grape Shoes",
"slug": "color-grape",
"type": "StaticCollection"
}
],
"products": [
{
"id": "1403298",
"title": "Air Jordan 5 Retro OG 'Black Metallic Reimagined'",
"slug": "air-jordan-5-og-metallic-2025-hf3975-001",
"image_url": "https://image.goat.com/attachments/product_template_pictures/images/106/958/856/original/1403298_00.png.png",
"category": "shoes",
"source_url": "https://www.goat.com/sneakers/air-jordan-5-og-metallic-2025-hf3975-001"
}
]
}
}
| Field | Filled in, of 25 checked | Values in the sample |
|---|---|---|
| id | 25 | |
| title | 25 | “Air Jordan 5 Retro OG 'Black Metallic Reimagined'” and 24 other values |
| slug | 25 | |
| image_url | 17 | image.goat.com |
| category | 25 | shoes in all 25 |
| source_url | 25 | goat.com |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| x-api-key (header) | string | Yes | API key required | ||
| query | string | Yes | Partial search text to autocomplete | jord | |
| limit | integer | No | 8 | Maximum curated collections to return. Defaults to 8, maximum 20. Does not affect the product count, which upstream fixes at 25 | 8 |
curl -X GET "https://api.crawlora.net/api/v1/goat/suggest?query=jord&limit=10" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"query": "jord",
"collections": [
{
"id": "2fbf8b62-8899-4323-89ab-efdbc672d9d0",
"title": "Michael Jordan",
"slug": "michael-jordan",
"type": "StaticCollection"
},
{
"id": "13079529-6136-4ece-8d8d-9c7469356d71",
"title": "Jordan Grape Shoes",
"slug": "color-grape",
"type": "StaticCollection"
}
],
"products": [
{
"id": "1403298",
"title": "Air Jordan 5 Retro OG 'Black Metallic Reimagined'",
"slug": "air-jordan-5-og-metallic-2025-hf3975-001",
"image_url": "https://image.goat.com/attachments/product_template_pictures/images/106/958/856/original/1403298_00.png.png",
"category": "shoes",
"source_url": "https://www.goat.com/sneakers/air-jordan-5-og-metallic-2025-hf3975-001"
}
]
}
}Request schema
No body schema
Response schema
#/definitions/goat.suggestResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | goat.SuggestResponse | No | ||||
| data.collections | array | No | ||||
| data.collections[].id | string | No | 2fbf8b62-8899-4323-89ab-efdbc672d9d0 | |||
| data.collections[].slug | string | No | michael-jordan | |||
| data.collections[].title | string | No | Michael Jordan | |||
| data.collections[].type | string | No | StaticCollection | |||
| data.products | array | No | ||||
| data.products[].category | string | No | shoes | |||
| data.products[].id | string | No | 1403298 | |||
| data.products[].image_url | string | No | ||||
| data.products[].slug | string | No | air-jordan-5-og-metallic-2025-hf3975-001 | |||
| data.products[].source_url | string | No | https://www.goat.com/sneakers/air-jordan-5-og-metallic-2025-hf3975-001 | |||
| data.products[].title | string | No | Air Jordan 5 Retro OG 'Black Metallic Reimagined' | |||
| data.query | string | No | jord | |||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 500 | Internal Server Error | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/goat/suggest?query=jord&limit=10" \
-H "x-api-key: $CRAWLORA_API_KEY"