Skip to main content
POST
Create An Aggregator Order
Creates one order in the API key workspace and broadcasts it to Plato POS and KDS.

Request

Top-Level Fields

Item Fields

unitPrice should already include any modifier amount represented in the line total. Modifiers are stored as a preparation snapshot and are not added to pricing.subtotal a second time.

Optional Customer Information

The entire customer object is optional. This is valid for orders where the aggregator does not share customer details. If customer is included, provide at least one of name, phone, or email. Plato uses phone or email to match an existing customer when available. deliveryAddress is separate from customer and remains required for DELIVERY orders.

Noon Food Pickup Example

This smaller request creates a pickup order without customer information:

Pricing Fields

Created Response

A new order returns 201 Created:
The response includes:
  • X-Request-Id, which echoes your request id or contains one generated by Plato.
  • meta.idempotentReplay, which is false for a new order and true for a safe retry.

What Plato Creates

Plato creates the order and item snapshots using the submitted pricing and aggregator metadata. When customer information is provided, Plato finds or creates the customer and connects it to the order. When paymentStatus is PAID, Plato also creates a succeeded IN payment linked to the order. Its amount and total equal pricing.total, its currency matches pricing.currency, and its method is OTHER for an externally collected aggregator payment. Safe retries return the same payment instead of creating another one. For aggregator types, Plato saves PICK_UP as the POS fulfillment type and sets the matching appSlug automatically. The POS therefore displays the aggregator name and icon. If the app is not installed in the workspace, Plato returns an error without creating the order. The order always starts as PENDING; an aggregator cannot inject an accepted or completed order through this endpoint.