# iFood API — live iFood Brazil data: restaurants, iFood Mercado supermarkets, pharmacies, drink shops and pet shops delivering to an address with delivery fee, delivery time, rating and distance; a store's full menu or grocery catalogue with prices, struck-through prices, promotions, EAN and availability; and product search across every store nearby or inside one store. BRL. No login.

> Stores that deliver to a location in Brazil, in iFood's own feed order for one tab (restaurants, groceries, pharmacy, drinks, pets, shopping): delivery fee, delivery time range, rating, distance, open now, category, super-restaurant / new / exclusive flags, link. 36 per page, next page through the feed's own cursor.
> ReefAPI engine `ifood` · 3 endpoints · clean JSON, no scraping or browsers to manage.

## How to call
- **Endpoint:** `POST https://api.reefapi.com/ifood/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 calls are free except verified SHEIN NOT_FOUND on product/detail and price (4 credits).
- **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). Send the key as `Authorization: Bearer <key>`, or put it in the URL (`?key=<key>`) when the client has no header field, as ChatGPT does.

## Endpoints

### POST https://api.reefapi.com/ifood/v1/stores — 3 credits
Stores that deliver to a location in Brazil, in iFood's own feed order for one tab (restaurants, groceries, pharmacy, drinks, pets, shopping): delivery fee, delivery time range, rating, distance, open now, category, super-restaurant / new / exclusive flags, link. 36 per page, next page through the feed's own cursor.

**Parameters:**
- `latitude` (number, required) — Delivery location latitude in Brazil (e.g. -23.5613 = Av. Paulista, São Paulo). Required: fees, delivery times and the stores shown depend on it; there is no default location.
- `longitude` (number, required) — Delivery location longitude (with latitude).
- `type` (enum, optional, default "restaurants") — iFood tab: restaurants (default), groceries (Mercados), pharmacy (Farmácias), drinks (Bebidas), pets, shopping. [one of: restaurants, groceries, pharmacy, drinks, pets, shopping]
- `cursor` (string, optional) — pagination.next_cursor of the previous page (same location and type).

**Returns:** data.stores[]: store_id, name, slug, url, main_category, super_category, open_now, delivery_type, delivery_fee_listed (BRL), delivery_estimate_min, delivery_estimate_max (minutes), rating_score (0-5), distance_km, currency, is_new, super_restaurant, ifood_delivery, exclusive, sponsored, image, summary_text; data.type; data.location {latitude, longitude}; data.pagination {page_size, has_more, next_cursor}.

**Example request body:**
```json
{
  "latitude": -23.5613,
  "longitude": -46.6565,
  "type": "groceries"
}
```

### POST https://api.reefapi.com/ifood/v1/store — 3 credits
One iFood store: details (legal name, CNPJ, address, opening hours, rating and count, price band, minimum order, open now, payment methods) and its menu / catalogue by section with price, struck-through price, discount %, 'from' price, promotional price, EAN, availability and photo. With category_id: that one aisle in full, page by page.

**Parameters:**
- `store_id` (string, required) — Store id (`store_id` of a stores or search row, a UUID) or the store's iFood URL (https://www.ifood.com.br/delivery/<city>/<store>/<id>).
- `latitude` (number, optional) — Optional delivery latitude (with longitude).
- `longitude` (number, optional) — Optional delivery longitude.
- `category_id` (string, optional) — Return ONE aisle/menu section in full, page by page (`category_id` from this store's `categories`). Grocery overviews show at most 16 items per aisle; use this for the rest (Imigrantes Bebidas beer aisle: 2,283 items, 23 pages of 100).
- `page` (integer, optional, default 1) — Page number (1-based).
- `limit` (integer, optional, default 100) — Items per aisle page (1-100).

**Returns:** data.store {store_id, short_id, name, legal_name, cnpj, slug, url, store_type, main_category, rating_score, rating_count, price_range, minimum_order, open_now, takeout_time_minutes, preparation_time_minutes, features[], payment_codes[], address {street, number, district, city, state, postal_code, country, latitude, longitude}, opening_hours[] {day, start, duration_minutes}, logo, currency}; data.categories[] {category_id, name, item_count_shown, items_truncated}; data.items[] {item_id, name, details, price, original_price, discount_pct, price_from, promotional_price, promotional_price_from, currency, available, availability, needs_choices, ean, plu_code, sold_by_weight, tags[], image, category_id, category_name}; with category_id: data.pagination {page, limit, total_items, total_pages, has_more}.

**Example request body:**
```json
{
  "store_id": "53854c59-edb9-4275-b9fe-3abac5f51e21"
}
```

### POST https://api.reefapi.com/ifood/v1/search — 2 credits
Search products and dishes by name across the stores delivering to a location, or inside one store: each row with price, struck-through price, discount, EAN, category and the store selling it (fee, delivery time, rating, rating count, distance, open now).

**Parameters:**
- `query` (string, required) — Product or dish to search, as typed in iFood's search box ('leite', 'dipirona', 'pizza', 'cerveja heineken').
- `latitude` (number, required) — Delivery location latitude in Brazil (e.g. -23.5613 = Av. Paulista, São Paulo). Required: fees, delivery times and the stores shown depend on it; there is no default location.
- `longitude` (number, required) — Delivery location longitude (with latitude).
- `store_id` (string, optional) — Search only inside this store (its `store_id`).
- `page` (integer, optional, default 1) — Page number (1-based).
- `limit` (integer, optional, default 36) — Rows per page (1-100).

**Returns:** data.items[]: item_id, name, details, price, original_price, discount_pct, price_from, currency, available, ean, category_name, taxonomy[], image, store {store_id, name, slug, url, main_category, open_now, delivery_fee_listed, delivery_fee_type, delivery_estimate_min, delivery_estimate_max, rating_score, rating_count, distance_km}, name_matches_query; data.matched_rows; data.pagination {page, limit, has_more}; data.query; data.location.

**Example request body:**
```json
{
  "query": "leite",
  "latitude": -23.5613,
  "longitude": -46.6565
}
```

## At scale
- **Volume:** 5M+ requests a day, measured at 60 requests a second across the fleet with no
  central bottleneck. Per-key limits are raised for high-volume accounts; volume pricing on request.
- **Missing a source:** tell us a site we do not cover and it becomes an engine. A customer asked
  for bestprice.gr on 21 Sep 2026 and it was in the catalog on 22 Sep.
- **Support:** 2 minute median time from a question in the live chat to the first answer. Setup
  help included, no support tier to buy.
- **One key, one credit pool** across every API. No per-site plans, no separate subscriptions.

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