Create order
curl --request POST \
--url https://api.atlas.kitchen/storefronts/v1/cart/order \
--header 'X-Channel-Id: <api-key>' \
--header 'X-Session-Id: <api-key>'import requests
url = "https://api.atlas.kitchen/storefronts/v1/cart/order"
headers = {
"X-Channel-Id": "<api-key>",
"X-Session-Id": "<api-key>"
}
response = requests.post(url, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-Channel-Id': '<api-key>', 'X-Session-Id': '<api-key>'}
};
fetch('https://api.atlas.kitchen/storefronts/v1/cart/order', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.atlas.kitchen/storefronts/v1/cart/order",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"X-Channel-Id: <api-key>",
"X-Session-Id: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.atlas.kitchen/storefronts/v1/cart/order"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("X-Channel-Id", "<api-key>")
req.Header.Add("X-Session-Id", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.atlas.kitchen/storefronts/v1/cart/order")
.header("X-Channel-Id", "<api-key>")
.header("X-Session-Id", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.atlas.kitchen/storefronts/v1/cart/order")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Channel-Id"] = '<api-key>'
request["X-Session-Id"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"id": 1,
"identifier": "3",
"channel_id": 1,
"outlet_id": 1,
"brand_id": 1,
"brand": {
"name": "Aviato Burger"
},
"fulfilment_type": "delivery",
"state": "confirmed",
"call_number": null,
"notes": null,
"serving_date": "2026-04-17",
"timeslot_start": 34200,
"timeslot_end": 36000,
"timeslot_range": "9:30AM–10:00AM",
"timeslot_type": "available_timeslots",
"contact_name": "Jane Doe",
"contact_email": "jane@example.com",
"contact_number": "+6591234567",
"address_line1": "123 Orchard Road",
"address_line2": "#04-56",
"address_latitude": 1.3021,
"address_longitude": 103.8198,
"postal_code": "238858",
"is_cutlery_required": false,
"is_contactless": false,
"is_asap": false,
"is_gift": false,
"recipient_name": null,
"recipient_contact_number": null,
"recipient_organisation_name": null,
"gift_message": null,
"is_paid": true,
"promo_code": null,
"confirmation_custom_message": null,
"payment_breakdown": {
"minimum_order_value": null,
"donation_amount": 0,
"cash_vouchers_amount": 0,
"service_charge": 0,
"delivery_fee": 600,
"amount_to_free_delivery": null,
"amount_to_next_delivery_fee": null,
"delivery_fee_waiver_cart_subtotal": null,
"surcharge": 0,
"surcharge_label": null,
"use_points": false,
"points_amount": 0,
"points_value": 0,
"discount": 0,
"admin_discount": 0,
"subtotal": 1890,
"total": 2490,
"total_including_tax": 2490,
"tax": 0,
"tax_inclusive_prices": false,
"amount_paid": 2490,
"amount_unpaid": 0,
"is_post_tax_discount": false
},
"claim_token_url": null,
"eligible_points": 0,
"eligible_points_value": 0,
"created_at": 1776534900,
"updated_at": 1776534901,
"cancelled_at": null,
"completed_at": null,
"order_items": [
{
"id": 1,
"item_id": 1,
"name": "Scrambled Eggs Bowl",
"quantity": 1,
"currency": "SGD",
"price_cents": 790,
"discount": 0,
"calculated_subtotal": 840,
"per_unit_quantity": 1,
"unit_label": null,
"notes": "Extra napkins please",
"cart_item_id": 1,
"item_modifier_group_id": null,
"modifier_id": null,
"sub_items": [
{
"id": 2,
"item_id": 2,
"name": "Mild",
"quantity": 1,
"currency": "SGD",
"price_cents": 0,
"discount": 0,
"calculated_subtotal": 0,
"per_unit_quantity": 1,
"unit_label": null,
"notes": null,
"cart_item_id": 2,
"item_modifier_group_id": 1,
"modifier_id": 1,
"sub_items": []
},
{
"id": 3,
"item_id": 4,
"name": "Bacon",
"quantity": 1,
"currency": "SGD",
"price_cents": 0,
"discount": 0,
"calculated_subtotal": 0,
"per_unit_quantity": 1,
"unit_label": null,
"notes": null,
"cart_item_id": 3,
"item_modifier_group_id": 2,
"modifier_id": 3,
"sub_items": []
},
{
"id": 4,
"item_id": 13,
"name": "Extra Cheese",
"quantity": 1,
"currency": "SGD",
"price_cents": 50,
"discount": 0,
"calculated_subtotal": 50,
"per_unit_quantity": 1,
"unit_label": null,
"notes": null,
"cart_item_id": 4,
"item_modifier_group_id": 4,
"modifier_id": 12,
"sub_items": []
}
]
},
{
"id": 5,
"item_id": 17,
"name": "Corn Chips",
"quantity": 2,
"currency": "SGD",
"price_cents": 400,
"discount": 0,
"calculated_subtotal": 800,
"per_unit_quantity": 1,
"unit_label": null,
"notes": null,
"cart_item_id": 5,
"item_modifier_group_id": null,
"modifier_id": null,
"sub_items": []
},
{
"id": 6,
"item_id": 22,
"name": "Water",
"quantity": 1,
"currency": "SGD",
"price_cents": 250,
"discount": 0,
"calculated_subtotal": 250,
"per_unit_quantity": 1,
"unit_label": null,
"notes": null,
"cart_item_id": 6,
"item_modifier_group_id": null,
"modifier_id": null,
"sub_items": []
}
],
"order_payments": [
{
"id": 1,
"capture_id": "ab2c8505-c7bc-40ea-9f54-97774ce347b5",
"is_captured": true,
"capture_type": "atlas_pay",
"payment_type_id": 2,
"amount": 2490
}
]
}Create order
Call this after the diner completes payment and is redirected back.
This endpoint does three things in sequence:
- Validates the cart (items, timeslot, minimum order, etc.)
- Checks payment status in real-time against the payment processor (does NOT depend on webhooks — makes a synchronous call to verify)
- If fully paid, converts the cart to a confirmed order
Returns the full order object on success, or 422 with specific errors
if the cart is invalid or payment hasn’t completed yet.
If the order was already created (e.g. duplicate call), returns the existing order.
After success, the session automatically gets a new empty cart.
POST
/
cart
/
order
Create order
curl --request POST \
--url https://api.atlas.kitchen/storefronts/v1/cart/order \
--header 'X-Channel-Id: <api-key>' \
--header 'X-Session-Id: <api-key>'import requests
url = "https://api.atlas.kitchen/storefronts/v1/cart/order"
headers = {
"X-Channel-Id": "<api-key>",
"X-Session-Id": "<api-key>"
}
response = requests.post(url, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-Channel-Id': '<api-key>', 'X-Session-Id': '<api-key>'}
};
fetch('https://api.atlas.kitchen/storefronts/v1/cart/order', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.atlas.kitchen/storefronts/v1/cart/order",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"X-Channel-Id: <api-key>",
"X-Session-Id: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.atlas.kitchen/storefronts/v1/cart/order"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("X-Channel-Id", "<api-key>")
req.Header.Add("X-Session-Id", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.atlas.kitchen/storefronts/v1/cart/order")
.header("X-Channel-Id", "<api-key>")
.header("X-Session-Id", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.atlas.kitchen/storefronts/v1/cart/order")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Channel-Id"] = '<api-key>'
request["X-Session-Id"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"id": 1,
"identifier": "3",
"channel_id": 1,
"outlet_id": 1,
"brand_id": 1,
"brand": {
"name": "Aviato Burger"
},
"fulfilment_type": "delivery",
"state": "confirmed",
"call_number": null,
"notes": null,
"serving_date": "2026-04-17",
"timeslot_start": 34200,
"timeslot_end": 36000,
"timeslot_range": "9:30AM–10:00AM",
"timeslot_type": "available_timeslots",
"contact_name": "Jane Doe",
"contact_email": "jane@example.com",
"contact_number": "+6591234567",
"address_line1": "123 Orchard Road",
"address_line2": "#04-56",
"address_latitude": 1.3021,
"address_longitude": 103.8198,
"postal_code": "238858",
"is_cutlery_required": false,
"is_contactless": false,
"is_asap": false,
"is_gift": false,
"recipient_name": null,
"recipient_contact_number": null,
"recipient_organisation_name": null,
"gift_message": null,
"is_paid": true,
"promo_code": null,
"confirmation_custom_message": null,
"payment_breakdown": {
"minimum_order_value": null,
"donation_amount": 0,
"cash_vouchers_amount": 0,
"service_charge": 0,
"delivery_fee": 600,
"amount_to_free_delivery": null,
"amount_to_next_delivery_fee": null,
"delivery_fee_waiver_cart_subtotal": null,
"surcharge": 0,
"surcharge_label": null,
"use_points": false,
"points_amount": 0,
"points_value": 0,
"discount": 0,
"admin_discount": 0,
"subtotal": 1890,
"total": 2490,
"total_including_tax": 2490,
"tax": 0,
"tax_inclusive_prices": false,
"amount_paid": 2490,
"amount_unpaid": 0,
"is_post_tax_discount": false
},
"claim_token_url": null,
"eligible_points": 0,
"eligible_points_value": 0,
"created_at": 1776534900,
"updated_at": 1776534901,
"cancelled_at": null,
"completed_at": null,
"order_items": [
{
"id": 1,
"item_id": 1,
"name": "Scrambled Eggs Bowl",
"quantity": 1,
"currency": "SGD",
"price_cents": 790,
"discount": 0,
"calculated_subtotal": 840,
"per_unit_quantity": 1,
"unit_label": null,
"notes": "Extra napkins please",
"cart_item_id": 1,
"item_modifier_group_id": null,
"modifier_id": null,
"sub_items": [
{
"id": 2,
"item_id": 2,
"name": "Mild",
"quantity": 1,
"currency": "SGD",
"price_cents": 0,
"discount": 0,
"calculated_subtotal": 0,
"per_unit_quantity": 1,
"unit_label": null,
"notes": null,
"cart_item_id": 2,
"item_modifier_group_id": 1,
"modifier_id": 1,
"sub_items": []
},
{
"id": 3,
"item_id": 4,
"name": "Bacon",
"quantity": 1,
"currency": "SGD",
"price_cents": 0,
"discount": 0,
"calculated_subtotal": 0,
"per_unit_quantity": 1,
"unit_label": null,
"notes": null,
"cart_item_id": 3,
"item_modifier_group_id": 2,
"modifier_id": 3,
"sub_items": []
},
{
"id": 4,
"item_id": 13,
"name": "Extra Cheese",
"quantity": 1,
"currency": "SGD",
"price_cents": 50,
"discount": 0,
"calculated_subtotal": 50,
"per_unit_quantity": 1,
"unit_label": null,
"notes": null,
"cart_item_id": 4,
"item_modifier_group_id": 4,
"modifier_id": 12,
"sub_items": []
}
]
},
{
"id": 5,
"item_id": 17,
"name": "Corn Chips",
"quantity": 2,
"currency": "SGD",
"price_cents": 400,
"discount": 0,
"calculated_subtotal": 800,
"per_unit_quantity": 1,
"unit_label": null,
"notes": null,
"cart_item_id": 5,
"item_modifier_group_id": null,
"modifier_id": null,
"sub_items": []
},
{
"id": 6,
"item_id": 22,
"name": "Water",
"quantity": 1,
"currency": "SGD",
"price_cents": 250,
"discount": 0,
"calculated_subtotal": 250,
"per_unit_quantity": 1,
"unit_label": null,
"notes": null,
"cart_item_id": 6,
"item_modifier_group_id": null,
"modifier_id": null,
"sub_items": []
}
],
"order_payments": [
{
"id": 1,
"capture_id": "ab2c8505-c7bc-40ea-9f54-97774ce347b5",
"is_captured": true,
"capture_type": "atlas_pay",
"payment_type_id": 2,
"amount": 2490
}
]
}Authorizations
Merchant storefront identifier. Provided during onboarding.
Diner session identifier. Created by GET /channel and returned in the X-Session-Id response header.
Response
Order created successfully
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Unix timestamp
Unix timestamp
Unix timestamp
Unix timestamp
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Was this page helpful?
⌘I