Skip to main content
Use the menu products API to render product lists outside Plato.
GET /api/public/menu/products
This endpoint currently expects the API key in the query string.

Example

curl "https://api.plato.ae/api/public/menu/products?apiKey=$PLATO_API_KEY&limit=20&page=1"

Query Parameters

ParameterTypeDefaultNotes
apiKeystringrequiredPlato API key.
searchstringnoneSearch product names.
qstringnoneAlternative search parameter.
categoryIdstringnoneFilter by category id.
categorySlugstringnoneFilter by one category slug.
categorySlugscomma listnoneFilter by multiple category slugs.
publishedbooleantrueUse false to fetch unpublished products when allowed.
soldoutbooleannoneFilter sold-out state.
minPricenumbernoneFilter by price options.
maxPricenumbernoneFilter by price options.
slugstringnoneFetch by exact product slug.
idscomma listnoneFetch specific product ids.
sortBystringcreatedAtname, createdAt, updatedAt, or slug.
sortOrderstringdescasc or desc.
pagenumber1Page number.
limitnumber20Minimum 1, maximum 100.
includeCmsDatabooleantrueInclude CMS entries related to products.

Response

{
  "data": [
    {
      "id": "product_123",
      "slug": "classic-burger",
      "barcode": null,
      "name": {
        "en": "Classic Burger"
      },
      "intro": null,
      "description": null,
      "priceOptions": [
        {
          "id": "regular",
          "price": 38
        }
      ],
      "thumbnail": null,
      "images": [],
      "published": true,
      "soldout": false,
      "preparationTime": null,
      "nutritionFacts": null,
      "suggestions": [],
      "category": {
        "id": "category_123",
        "slug": "burgers",
        "name": {
          "en": "Burgers"
        }
      },
      "optionSets": [],
      "cmsData": {},
      "createdAt": "2026-06-17T08:20:00.000Z",
      "updatedAt": "2026-06-17T09:15:00.000Z"
    }
  ],
  "pagination": {
    "page": 1,
    "limit": 20,
    "total": 42,
    "totalPages": 3,
    "hasMore": true
  }
}

CMS Data

When includeCmsData=true, Plato looks for CMS entries related to MenuProduct. The cmsData object is grouped by CMS database identifier:
{
  "cmsData": {
    "product_badges": [
      {
        "id": "entry_123",
        "label": {
          "en": "Popular"
        }
      }
    ]
  }
}
Set includeCmsData=false when you only need the core product fields.

Notes

  • Products default to published=true.
  • Price filtering is applied against product price options.
  • Use slug for product detail pages.
  • Use ids when another system already knows the product ids.