GOAT API endpoint
Returns the shelf of editorially curated links GOAT is currently promoting in its own search box: seasonal collections, specific product searches, and browse-all entry points. Every link is actionable against this API -- a collection link carries a value for GET /goat/collection, a search link carries a query for GET /goat/search.
/goat/curatedNo parameters.
Response fields:
links[].title — the label GOAT displays for the shelflinks[].type — how to act on the link. Allowed values: collection,
search, browselinks[].collection_slug — set when type is collectionlinks[].query — set when type is searchlinks[].filter_key, links[].filter_value — set when type is
browsetotal — number of links returnedNotable response behavior:
collection link's
collection_slug goes to GET /goat/collection (or GET /goat/search's
collection_slug); a search link's query goes to
GET /goat/search's query.collection_slug carries GOAT's own identifier, and not every value
resolves. Readable slugs such as back-to-school-2026 work on
GET /goat/collection (verified 2026-09-07: 470 products). GOAT also
emits bare numeric internal ids (e.g. 31841) in the same field, and
those return no results on GET /goat/collection — they are an
internal id space that endpoint does not accept. Check whether the value
is numeric before following it, and expect an empty collection if you
pass one through anyway.browse links are catch-all shelves ("Shop All Items") described by a
filter_key/filter_value pair from GOAT's own merchandising config.
They have no direct equivalent parameter on GET /goat/search; use an
unfiltered search to browse the whole catalog instead.Example response (truncated for brevity):
{
"code": 200,
"msg": "OK",
"data": {
"links": [
{
"title": "Back To School",
"type": "collection",
"collection_slug": "back-to-school-2026"
},
{
"title": "Awake NY x Air Jordan 6",
"type": "search",
"query": "Awake NY x Air Jordan 6"
},
{
"title": "Shop All Items",
"type": "browse",
"filter_key": "group_id",
"filter_value": "all"
}
],
"total": 10
}
}
| Field | Filled in, of 10 checked | Values in the sample |
|---|---|---|
| title | 10 | “Pokemon 30th Anniversary” and 9 other values |
| type | 10 | search (6), collection (3), browse (1) |
| collection_slug | 3 | |
| query | 6 | “Air Jordan 12 Retro 'Bucks'” and 5 other values |
| filter_key | 1 | |
| filter_value | 1 | “all” |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/goat/curated" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"links": [
{
"title": "Back To School",
"type": "collection",
"collection_slug": "back-to-school-2026"
},
{
"title": "Awake NY x Air Jordan 6",
"type": "search",
"query": "Awake NY x Air Jordan 6"
},
{
"title": "Shop All Items",
"type": "browse",
"filter_key": "group_id",
"filter_value": "all"
}
],
"total": 10
}
}Request schema
No body schema
Response schema
#/definitions/goat.curatedResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | goat.CuratedResponse | No | ||||
| data.links | array | No | ||||
| data.links[].collection_slug | string | No | back-to-school-2026 | CollectionSlug is GOAT's own collection identifier. A readable slug works on GET /goat/collection; a bare numeric id (which GOAT also emits here) belongs to an internal id space that endpoint does not accept and returns no results. Confirmed live 2026-09-07 -- back-to-school-2026 returns 470 products, 31841 returns none. | ||
| data.links[].filter_key | string | No | group_id | |||
| data.links[].filter_value | string | No | all | |||
| data.links[].query | string | No | Awake NY x Air Jordan 6 | |||
| data.links[].title | string | No | Back To School | |||
| data.links[].type | string | No | collection, search, browse | collection | ||
| data.total | integer | No | 10 | |||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 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/curated" \
-H "x-api-key: $CRAWLORA_API_KEY"