Integration Flow
- Create a dedicated API key and role in Plato Console.
- Give the role
restaurant:order:createandrestaurant:order:changeStatus. - Map your item identifiers to Plato products when a mapping is available.
- Send each order to
POST /api/v1/aggregators/orders. - Save the returned Plato order
idandreferenceNumber. - Send later status changes to the Order Update webhook.
- Retry timeouts with the same
externalOrderIdandIdempotency-Key.
PENDING status and are broadcast to connected POS and KDS devices.
This endpoint is for trusted server-to-server integrations. Never put the API
key in a marketplace frontend, browser bundle, or mobile application.
Endpoints
Use
https://api.plato.ae as the production base URL or http://localhost:2024 for local testing.
Authentication
Send a dedicated Plato API key as a Bearer token:x-api-key header is also accepted. See Authentication for key safety guidance.
Aggregator Identifiers
Send the aggregator’s canonical Plato slug directly in thetype field:
These canonical values make the aggregator name and icon appear as the order source in Plato POS and KDS. Plato also accepts
noon, noon-food, or noonfood as aliases for noon_food, and careem, careem-eat, or careem-eats as aliases for careem_eat.
The selected aggregator app must already be installed in the API key’s workspace. If it is not installed, Plato returns 409 AGGREGATOR_APP_NOT_INSTALLED and does not create the order.
You only send
type: "talabat". Plato resolves it internally to type: "PICK_UP" and appSlug: "talabat". Do not send appSlug in the request.Order Identity
The pair oftype and externalOrderId identifies an order.
For example:
Idempotency-Key header provides a second retry guard and is strongly recommended.
Product Mapping
Each item may include aplatoProductId.
- When supplied,
platoProductIdis stored with the order item snapshot for correlation. - When omitted, Plato stores the item as an aggregator product snapshot using its external id, SKU, name, and price.
- Item details are stored from the submitted payload; the endpoint does not fetch menu products.
Money Rules
All money values are decimal major-unit amounts. For AED, send25.50, not 2550 fils.
Plato validates that:
- Every explicit item total equals
quantity × unitPrice. pricing.subtotalequals the sum of all item totals.pricing.totalmatches subtotal, delivery fee, charges, discount, and VAT.
0.05 or the equivalent amount in the selected currency.
Continue with Create An Order for the complete payload.