Glovo API endpoint
Returns one store's products grouped into sections, each with a name, description, price, currency, display price, image URL, stock flag and its option groups (sizes, sides, toppings with price impact). Pass collection to return only one menu collection. limit caps the total products across sections (default 200, maximum 500); truncated reports whether more existed. When address_id is omitted the store's own default location is looked up first, which costs one extra upstream call.
/glovo/store/productsReturns one store's products grouped into sections. Each product has id, external_id, name, description, price, currency, display_price, image_url, out_of_stock and its option groups (option_groups[] with min, max, multiple_selection and attributes[] carrying price_impact).
Query parameters: country (required), city (required), store_id (required), address_id (optional), collection (optional), limit (optional), language (optional, default en).
Scope: catalog data a visitor sees. Baskets, orders, accounts and couriers are never read.
| Field | Filled in, of 5 checked | Values in the sample |
|---|---|---|
| title | 5 | “Promotions” and 4 other values |
| slug | 5 | |
| products | 5 | median 10 entries |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| country | string | Yes | Two-letter country code, from /glovo/cities. | es | |
| city | string | Yes | City slug (madrid) or city code (mad), from /glovo/cities. | madrid | |
| store_id | integer | Yes | Store id, from /glovo/stores' id field. | 2066 | |
| address_id | integer | No | Optional store location id, from /glovo/stores' address_id field. | 182787 | |
| collection | string | No | Optional menu collection slug, from /glovo/store/menu, to return only that collection. | top-sellers-ts | |
| limit | integer | No | 200 | Max products returned across all sections. Defaults to 200, maximum 500. | 200 |
| language | string | No | en | Optional two-letter response language; defaults to en. A city's supported languages are in /glovo/city's supported_languages. | en |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/glovo/store/products?country=es&city=madrid&store_id=2066&limit=10&language=en" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"store_id": 2066,
"address_id": 182787,
"collection": "top-sellers-ts",
"returned": 1,
"truncated": false,
"sections": [
{
"title": "Top sellers",
"slug": "top-sellers-ts",
"products": [
{
"id": 42373267559,
"external_id": "ESMNTCN12B03",
"name": "Menú 100M",
"description": "Elige 5 Montaditos y 1 Bebida",
"price": 9.9,
"currency": "EUR",
"display_price": "9,90 €",
"out_of_stock": false,
"option_groups": [
{
"name": "Elige tus Montaditos",
"min": 5,
"max": 5,
"multiple_selection": true,
"attributes": [
{
"name": "1. Jamón Gran Reserva con aceite de oliva"
}
]
}
]
}
]
}
]
}
}Request schema
No body schema
Response schema
#/definitions/glovo.productsResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | Code is the HTTP status code or a custom code used to indicate the result of the request @example 200 | |||
| data | glovo.ProductsResponse | No | ||||
| data.address_id | integer | No | ||||
| data.collection | string | No | ||||
| data.returned | integer | No | ||||
| data.sections | array | No | ||||
| data.sections[].products | array | No | ||||
| data.sections[].products[].currency | string | No | ||||
| data.sections[].products[].description | string | No | ||||
| data.sections[].products[].display_price | string | No | ||||
| data.sections[].products[].external_id | string | No | ||||
| data.sections[].products[].id | integer | No | ||||
| data.sections[].products[].image_url | string | No | ||||
| data.sections[].products[].name | string | No | ||||
| data.sections[].products[].option_groups | array | No | ||||
| data.sections[].products[].option_groups[].attributes | array | No | ||||
| data.sections[].products[].option_groups[].attributes[].name | string | No | ||||
| data.sections[].products[].option_groups[].attributes[].price_impact | number | No | ||||
| data.sections[].products[].option_groups[].max | integer | No | ||||
| data.sections[].products[].option_groups[].min | integer | No | ||||
| data.sections[].products[].option_groups[].multiple_selection | boolean | No | ||||
| data.sections[].products[].option_groups[].name | string | No | ||||
| data.sections[].products[].out_of_stock | boolean | No | ||||
| data.sections[].products[].price | number | No | ||||
| data.sections[].slug | string | No | ||||
| data.sections[].title | string | No | ||||
| data.store_id | integer | No | ||||
| data.truncated | boolean | No | ||||
| msg | unknown | No | Msg is the message that describes the result of the request @example "Request successful" |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 404 | Not Found | #/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/glovo/store/products?country=es&city=madrid&store_id=2066&limit=10&language=en" \
-H "x-api-key: $CRAWLORA_API_KEY"