# Authentication
Source: https://help.atlas.kitchen/connect/admin-api/authentication
Every request requires two headers. Generate an API token from your [Atlas merchant portal](https://portal.atlas.kitchen/atlas-connect/api-tokens) and pass it as the `X-Api-Key` value:
| Header | Value |
| - | - |
| `X-Api-Key` | Your Atlas API token |
| `X-Merchant-Id` | Tells Atlas which merchant the request is for |
## Example
```bash theme={null}
curl https://api.atlas.kitchen/admin/v1/menus \
-H "X-Api-Key: your-api-token" \
-H "X-Merchant-Id: your-merchant-id"
```
## Token security
* The portal shows the token plaintext only once at creation — copy it somewhere safe before closing the dialog
* Don't share API tokens in public code, screenshots, or client-side code
* Store tokens in environment variables or a secret manager
* If a token is compromised, revoke it from the portal and generate a new one
## Error response
Invalid or missing API token returns `401 Unauthorized`:
```json theme={null}
{
"type": "Unauthorized",
"message": "You did not provide valid credentials for this request",
"error_hash": {
"api_key": "Check if the API Key is set correctly in the X-Api-Key header"
}
}
```
# Brand details
Source: https://help.atlas.kitchen/connect/admin-api/brands/brand-details
get /brands/{id}
# Brand list
Source: https://help.atlas.kitchen/connect/admin-api/brands/brand-list
get /brands
Returns all brands for the merchant, including archived brands.
# Create cart
Source: https://help.atlas.kitchen/connect/admin-api/carts/create-cart
post /carts
Creates a dine-in cart for a table with optional upfront payment.
Always uses POS platform with DINE_IN fulfilment.
# Cash voucher details
Source: https://help.atlas.kitchen/connect/admin-api/cash-vouchers/cash-voucher-details
get /cash_vouchers/{id}
# Cash voucher list
Source: https://help.atlas.kitchen/connect/admin-api/cash-vouchers/cash-voucher-list
get /cash_vouchers
Lists cash vouchers for the merchant. Use `status` to filter active, expired, or redeemed vouchers, and `code` to search by voucher code.
Cash voucher values are monetary amounts in minor currency units (cents). For example, `5000` means $50.00.
Redemption happens through the existing POS cash voucher flow. This endpoint does not register redemption webhooks.
# Create cash voucher
Source: https://help.atlas.kitchen/connect/admin-api/cash-vouchers/create-cash-voucher
post /cash_vouchers
Creates a prepaid cash voucher that staff can redeem through the existing POS cash voucher flow.
Cash voucher values are monetary amounts in minor currency units (cents). For example, `5000` means $50.00. Voucher codes are normalized by Atlas before storage.
`outlet_ids` controls which outlet pickers show the voucher. It does not block redemption at other outlets when staff enter the voucher code manually.
Atlas does not emit a standalone cash voucher redemption webhook from this endpoint. External issuers that need close-the-loop redemption callbacks should use a future dedicated redemption event or an order webhook payload that explicitly includes voucher payment details.
# Menu create or update
Source: https://help.atlas.kitchen/connect/admin-api/menus/menu-create-or-update
post /menus
Upserts a menu by `identifier`. Creates a new menu if the identifier doesn't exist, or updates the existing one. The full hierarchy (sections, items, modifiers) is synced — orphaned records are removed.
# Menu details
Source: https://help.atlas.kitchen/connect/admin-api/menus/menu-details
get /menus/{id}
Returns full menu hierarchy with sections, items, modifier groups, and modifiers.
# Menu list
Source: https://help.atlas.kitchen/connect/admin-api/menus/menu-list
get /menus
# Create order
Source: https://help.atlas.kitchen/connect/admin-api/orders/create-order
post /outlets/{outlet_id}/channels/{channel_id}/orders
Creates a new order for the given outlet and channel.
Use [Outlet timeslots](/connect/admin-api/timeslots/get-timeslots) to find pickup and delivery timeslots for this outlet and channel.
Supports 3-level item nesting, multiple payments, and admin overrides for payment breakdown fields.
# Order details
Source: https://help.atlas.kitchen/connect/admin-api/orders/order-details
get /orders/{id}
Returns an order created through the Admin API.
# Order details (with identifier)
Source: https://help.atlas.kitchen/connect/admin-api/orders/order-details-identifier
get /orders/identifier/{identifier}
Returns an order created through the Admin API.
# Update order
Source: https://help.atlas.kitchen/connect/admin-api/orders/update-order
patch /orders/{id}
Updates an order created through the Admin API. Orders created through other Atlas workflows cannot be updated with this endpoint.
Supports `order_items_update_mode` and `order_payments_update_mode` for merge/replace behaviour.
# Outlet details
Source: https://help.atlas.kitchen/connect/admin-api/outlets/outlet-details
get /outlets/{id}
# Outlet list
Source: https://help.atlas.kitchen/connect/admin-api/outlets/outlet-list
get /outlets
Returns all outlets for the merchant, including archived outlets.
# Outlet stocks
Source: https://help.atlas.kitchen/connect/admin-api/stocks/outlet-stocks
specs/admin-v1.yaml GET /outlets/{outlet_id}/serving_dates/{serving_date}/stocks
Returns available quantity per item for the outlet on the given date.
# Tables
Source: https://help.atlas.kitchen/connect/admin-api/tables/tables
get /outlets/{outlet_id}/tables
Returns active tables for the outlet.
# Outlet timeslots
Source: https://help.atlas.kitchen/connect/admin-api/timeslots/get-timeslots
specs/admin-v1.yaml GET /outlets/{outlet_id}/channels/{channel_id}/timeslots
Returns pickup and delivery timeslots for the outlet and channel on the given date.
# User sync
Source: https://help.atlas.kitchen/connect/admin-api/users/user-sync
post /users/sync
Upserts a user by email or mobile number. For non-guests, creates an Account and UserAccount relationship.
External user links are immutable once created.
# Run Atlas from your AI assistant
Source: https://help.atlas.kitchen/connect/mcp/overview
Connect Atlas to Claude or ChatGPT and manage your restaurant in plain language.
**Who is this for?**
* Owners and managers who want to check numbers or update menus without opening the Merchant Portal
* Any Atlas merchant with AI assistant access turned on
## What this does
Atlas plugs into Claude and ChatGPT through the [Model Context Protocol (MCP)](https://modelcontextprotocol.io), the standard way assistants talk to outside services.
Once connected, you ask your assistant a question and it reads or changes your live Atlas data. No exports, no copy-paste.
## What you can ask for
* "How did each outlet do yesterday?"
* "86 the laksa at Tanjong Pagar until tomorrow."
* "Raise all drink prices by 5% on the delivery menu."
* "Which items have no cost set, so I can't see margin?"
* "Tag every dish that contains shellfish."
Your assistant can also build a live dashboard you keep coming back to. See [Quickstart](/connect/mcp/recipes) for prompts that do this.
## What you need first
Ask your Atlas account manager to turn on AI assistant access for your merchant. Setup will fail without it.
Claude, ChatGPT, Claude Code and Codex all work. Claude is the best fit if you want live dashboards that write back to Atlas.
Follow [Set up Atlas in your assistant](/connect/mcp/setup). It takes about two minutes.
## What your assistant can see
Your assistant only sees the one merchant you choose when you sign in. It cannot see other merchants on Atlas.
Everything it does runs as you, with your permissions. Disconnect at any time from your assistant's connector settings.
Your assistant can change live data — prices, stock, orders. Ask it to show you a plan first, then approve. The [example prompts](/connect/mcp/recipes) are written this way.
## Staying up to date
New Atlas tools appear in your assistant automatically as we ship them. There is nothing to install or update on your side.
**Connector URL:** `https://mcp.atlas.kitchen`
## What should happen
Once connected, ask: **"Using Atlas, how many orders did we do yesterday?"**
You get a real number from your outlet within a few seconds. Your assistant shows you when it calls an Atlas tool.
## If it doesn't work
1. Check AI assistant access is on for your merchant. Ask your account manager if you're not sure — this is the most common cause.
2. Check Atlas is switched on for that chat. Your assistant ignores Atlas until you turn it on.
3. Check you picked the right merchant when you signed in. The wrong one gives you the wrong outlet's numbers.
4. Reconnect Atlas from your assistant's connector settings. Sign-ins expire.
[Setup](/connect/mcp/setup) covers each of these in detail. If it still doesn't work, contact support at [hello@atlas.kitchen](mailto:hello@atlas.kitchen).
## Next steps
Two-minute setup for Claude, ChatGPT, Claude Code and Codex
Copy-paste prompts for costs, allergens, cross-sells and modifiers
# Quickstart
Source: https://help.atlas.kitchen/connect/mcp/recipes
Copy-paste prompts that put your AI assistant to work on costs, allergens, cross-sells and modifiers.
**Who is this for?**
* Owners and managers who have already [connected Atlas to their assistant](/connect/mcp/setup)
* Anyone who wants a result without writing the prompt themselves
## What this does
Each example prompt below is a full prompt. Copy it, paste it into a new chat, and your assistant does the rest against your live Atlas data.
Copy the Claude version or the ChatGPT version to match the assistant you connected. They are not interchangeable — each one is written around what that assistant can do.
These example prompts read and change live data. Every prompt asks the assistant to show you a plan first. Read it before you approve.
## Example prompt 1: Manage item costs
Add and edit the cost of your products from the chat. Changes save straight to the Atlas Merchant Portal.
**What your assistant does:**
* Builds a live table of your products with cost, price, margin in dollars and margin %
* Flags every item with no cost set, so you can see where margin is hiding
* Saves your edits back to Atlas rather than keeping them in the chat
* Sets up a daily check that tells you when a product is missing a cost
```text wrap theme={null}
I want a persisted artifact or interactive UI in chat to manage product cost live using the Atlas connector.
Here's what I need it to do:
- Shows my product catalogue, with a way to switch between outlets/menus (I likely have more than one, and the combined catalogue may be large).
- Lets me view and edit each product's cost/COGS, with price, margin $, and margin % calculated automatically, and flags anything missing a cost.
- Pushes my edits back to Atlas directly rather than just storing them locally in the artifact.
- Comes with a daily automated check that alerts me if any product is missing a COGS value.
Before building, verify your assumptions against my actual data and tools rather than guessing — check the real shape of tool responses, confirm which items are genuine products versus modifiers/options, and reconcile any counts you pull. Ask me if anything about my setup is ambiguous.
```
```text wrap theme={null}
I have the Atlas plugin connected. Set up a reusable Product Cost / COGS Manager workflow for my Atlas account.
What I need:
- Start by listing my outlets and menus from Atlas. Ask me which outlet/menu to manage if the correct scope is unclear.
- Inspect the actual tool responses before designing the workflow. Do not assume the documented schema exactly matches the backend.
- Reconcile catalogue counts across the selected outlet and menu.
- Treat products placed directly inside menu sections or subsections as genuine sellable menu products.
- Exclude modifier choices, options and components—even if they also appear as item or product records.
- Flag outlet-linked products that are not actually present on the selected menu separately.
For each genuine menu product, show:
- Product name
- SKU
- Atlas product ID
- Menu section
- Selling price
- Current COGS/cost
- Margin amount: price minus COGS
- Margin percentage: margin divided by price
- Status: current, missing COGS or pending change
Editing and syncing:
- Let me provide COGS edits individually or as a batch in this conversation.
- Interpret monetary values in the product's currency and convert them to minor currency units for Atlas.
- Before writing, show a concise change summary with old cost, new cost, new margin amount and new margin percentage.
- After I approve, update each product in Atlas using update_product with cost_cents.
- Important: if cost_cents is absent from the published update_product schema, do not immediately conclude that writes are unsupported. The Atlas backend may still accept it. Safely verify this using a no-op write of an existing cost value before reporting a limitation.
- Never change price, tags, modifier groups or other product fields when only updating COGS.
- After every write, read the products again from Atlas and verify the stored values.
- Report any partial failures clearly and do not claim a product was updated unless verification succeeds.
Interface:
- Present the catalogue as a compact, searchable table in ChatGPT.
- Allow filtering by menu section, missing COGS and pending changes.
- If you create a persisted visual interface, do not imply that its buttons can call Atlas directly unless the interface genuinely has authenticated connector access.
- If direct connector access is unavailable inside the interface, keep edits in a pending queue and generate a structured sync request that I can submit through this ChatGPT conversation.
Automated check:
- Ask me what time and timezone the daily check should run.
- Create a daily automation that reads the selected Atlas menu, excludes modifiers/options/components, and checks genuine menu products for missing cost_cents.
- Notify me only when at least one genuine menu product is missing COGS.
- In an alert, include outlet, menu, total genuine products checked, number missing, product name, SKU, product ID, section and selling price.
- If no genuine product is missing COGS, do not notify me.
Before building or changing anything, verify the outlet, menu, product-versus-modifier rules, catalogue counts, cost read shape and cost write behaviour against my actual Atlas data and tools.
```
## Example prompt 2: Manage allergen and dietary tags
Tag allergens and dietary flags across your menu without opening each product. Changes save straight to the Atlas Merchant Portal.
**What your assistant does:**
* Bulk-tags products across 14 allergen and dietary flags, including gluten, dairy and alcohol
* Keeps your existing tag names consistent instead of inventing new ones
* Leaves unrelated tags on the product untouched
* Lets you search for items that do — or do not — carry a flag
Once your menu is tagged, servers can use Ask Atlas in the Merchant Portal during service to check whether a dish suits a diner, or list every suitable dish on the menu.
```text wrap theme={null}
I want a tool to manage allergen and dietary flags for my menu items in Atlas.
Here's what I need it to do:
- Show me all the products on any of my menus in one place. If my outlet has more than one menu, let me switch between them without starting over.
- Let me mark which allergens (gluten, dairy, shellfish, etc.) and other flags like alcohol apply to each item.
- Check for existing allergen tags and ensure that new tag additions are formatted consistently.
- Save my changes straight back into Atlas as product tags the moment I make them.
- Let me search or filter to quickly find items that do (or don't) have a specific flag.
I want this to be something I can reopen anytime and it should always show my current menu data, not a snapshot from when it was built.
```
```text wrap theme={null}
Act as my live Atlas Allergen & Dietary Flag Manager inside ChatGPT.
Use the connected Atlas plugin as the source of truth. Do not build or redirect me to a standalone website—the workflow must remain in ChatGPT so reads and writes use my authenticated Atlas connection.
Start by:
1. Listing my Atlas menus.
2. Asking which menu I want to manage, unless I already named one.
3. Fetching every product on that menu, handling pagination if necessary.
4. Showing a compact, readable view containing:
- Product name
- Product ID or SKU
- Current allergen and dietary product tags
- Items with no managed flags
Support natural-language requests such as:
- "Refresh"
- "Show products with gluten"
- "Show products without any allergen flags"
- "Add crustacean to Shrimp aglio olio"
- "Remove fish from Chicken teriyaki skewers"
- "Switch to another menu"
When I ask to add or remove a flag:
1. Resolve the exact product. Ask me to choose if the name is ambiguous.
2. Re-fetch that product immediately before writing.
3. Read its complete current product_tags list.
4. Add or remove only the requested tag.
5. Preserve every unrelated product tag.
6. Call the Atlas product-update action with the complete updated product_tags list.
7. Re-fetch the product after writing.
8. Report whether the saved Atlas value was verified.
Never overwrite the entire tag list using only the allergen tags shown in the conversation. Tags such as cake, promotional tags, or other operational tags must be preserved.
Use Atlas's existing exact tag names whenever they already exist. Display friendly labels, but write the canonical value. Examples:
- Gluten → allergen-gluten
- Milk/dairy → allergen-milk
- Egg → allergen-egg
- Fish → allergen-fish
- Crustacean → allergen-crustacean
- Shellfish → allergen-shellfish, only if this is actually the merchant's established tag
- Peanut → allergen-peanut
- Tree nuts → allergen-tree-nuts
- Soy → allergen-soy
- Sesame → allergen-sesame
- Alcohol → allergen-alcohol
- Vegetarian → dietary-vegetarian
- Vegan → dietary-vegan
Do not silently treat "crustacean" and "shellfish" as interchangeable. If the requested label does not have an established Atlas tag, ask me which canonical tag to use before writing.
Do not infer or add allergens from product names, descriptions, or ingredients unless I explicitly ask you to review and suggest possible missing flags. Suggestions must be presented for approval and must not be written automatically.
If an Atlas response is plain text rather than structured JSON, parse it carefully and continue; do not assume the action failed solely because the response format differs from its description.
A refresh must always make a new Atlas read. Never present cached or embedded data as current.
After each successful edit, respond concisely in this format:
Updated and verified in Atlas.
[Product name] now has:
- [tag]
- [tag]
If the write or verification fails, clearly distinguish:
- Write failed
- Write succeeded but verification failed
- Product could not be resolved
Do not claim an update succeeded unless the post-write Atlas read confirms it.
```
## Example prompt 3: Manage cross-sell groups
Set up [cross-sell](/merchant-portal/cross-sell) rules that suggest the right item at the right moment, to lift average order value.
**What your assistant does:**
* Shows every cross-sell group: what triggers it, what it promotes, and whether it is live
* Flags menu items that trigger no active group, so nothing gets left out
* Moves items between groups without you looking up any IDs
* Creates new groups from a searchable list of your products
```text wrap theme={null}
I want to be able to manage my cross-sell rules across my menus in Atlas and clearly identify products that do not trigger a cross-sell.
Here's what I want it to do:
- Show me every existing cross-sell group at a glance: what triggers it, what it promotes, and whether it's active, filtered by menu. If my outlet has more than one menu, let me switch between them.
- Flag any item on my menu that isn't currently triggering an active cross-sell group, so nothing gets missed.
- Let me reassign an item from one group to another (or unassign it) by dragging and dropping it, without me having to look up IDs myself.
- Let me create a brand-new group by picking which items should trigger it and which items it should promote.
- Let me activate or deactivate a group. If there's no delete tool available for this, deactivating is the right substitute — don't try to force a hard delete.
A few things to watch for while building this:
- Probe each tool once in chat and look at the actual response shape before wiring it into the artifact — don't assume it matches the schema description word for word.
- If a call ever returns plain text instead of clean JSON (e.g. it looks like a raw object dump rather than JSON), write a small parser for that format instead of assuming JSON.parse will work.
- Make tool calls one at a time rather than firing several at once, and retry a couple of times on failure. Backends like this can be flaky under concurrent requests and throw unrelated-looking errors when hit with parallel calls — spacing calls out avoids most of that.
- Keep it as a persisted, live artifact rather than a static one-time render, since group membership changes over time and I'll want to check back on it.
```
```text wrap theme={null}
I have the Atlas plugin connected. Help me manage cross-sell rules across my Atlas menus.
Start by reading my actual Atlas setup. Do not assume outlet, menu, product, or cross-sell IDs.
What I need:
- Let me choose an outlet and menu.
- Show every cross-sell group relevant to that menu.
- For each group, show: its internal group name, whether it is active, the products that trigger it, and the products it promotes.
- Clearly identify menu products that do not trigger any active cross-sell group.
- Let me search and filter products, especially uncovered products.
- Let me draft these operations without manually finding IDs: move a triggering product between groups, unassign a triggering product, activate or deactivate a group, create a new group by selecting triggering and promoted products.
- Cross-sell group names are internal identifiers. Do not describe or treat them as customer-facing labels. Customers see the promoted products, not the group name.
- Do not hard-delete groups. If no supported deletion tool exists, deactivate them.
Tool-handling requirements:
1. Probe each required Atlas read tool once and inspect its real response before building the workflow.
2. Atlas may return Ruby-style object dumps such as {:key=>value} instead of valid JSON. If that happens, parse the returned format rather than using JSON.parse directly.
3. Make Atlas calls sequentially, not concurrently.
4. Retry failed read or idempotent update calls up to two times with a short delay.
5. Do not automatically retry a non-idempotent group-creation call if the result is uncertain, because that could create a duplicate.
6. Resolve all product and group IDs internally from their names.
7. When changing a group's triggering or promoted products, remember that the Atlas update tool may treat those arrays as full replacements. Preserve every existing member that should remain.
8. After applying changes, re-read the affected groups from Atlas and report exactly what was verified.
Artifact and editing workflow:
- If ChatGPT can create an interactive artifact that directly calls the Atlas tools, use it.
- If a hosted website cannot call the Atlas connector, do not pretend its controls save to Atlas.
- In that case, create a draft-mode cross-sell planner: initialise it using the latest Atlas data retrieved in chat; allow local drag-and-drop reassignment, unassignment, activation changes, and new-group drafting; keep the draft in browser storage so it survives a refresh on that device; maintain a consolidated pending-change list; provide a reliable "Copy changes for ChatGPT" button; also display the generated instruction as selectable text in case clipboard access is blocked; clearly label the site as draft mode and state that Atlas has not changed yet.
- The copied instruction must include the outlet, menu, internal group names, product names, and all intended operations—never require the user to copy IDs.
When I paste a change list back into the conversation:
1. Parse the complete list.
2. Show me a concise summary of what will change.
3. Ask for confirmation only if the instruction is ambiguous, destructive, or conflicts with current Atlas data.
4. Otherwise, apply the changes sequentially.
5. Re-read Atlas and verify the final trigger membership, promoted products, and active status.
6. Clearly distinguish successful changes, skipped changes, and failures.
Begin by listing my available outlets and menus, then open the most likely active menu while still giving me a menu selector.
```
## Example prompt 4: Plan and build modifiers
Design meal deals, add-ons and drink pairings, then build them on your live menu. Your assistant advises first, rather than just doing as it is told.
**What your assistant does:**
* Reads your menu and suggests upsells that fit it, with pricing that still makes margin
* Walks you through the trade-offs — flat or tiered price, optional or required, bundle or full price
* Shows the diner-facing flow before anything changes
* Builds the modifier groups on your menu only after you approve them
```text wrap theme={null}
I want help planning and setting up modifiers across my menu — things like meal deals, add-ons, "make it a meal" upgrades, sides, extras, or drink pairings. I may not know exactly what's best, so I'd like you to advise, not just execute.
What I'm looking for from you:
- Understand my menu first, then suggest add-on ideas that fit it — where there's a natural upsell, what to pair, and roughly how to price it so it feels like value for diners and stays profitable.
- Ask me about my goals (higher average order value, moving slow items, simplifying choices, etc.) and tailor recommendations to them.
- Walk me through the trade-offs — flat price vs tiered, required vs optional, discounted bundle vs full price — and recommend a default.
How I want to work:
1. Ask me what you need to know before proposing anything.
2. Create an artifact or visualise the UI in chat with your proposed add-ons: the diner flow, the options, and the pricing — so I can see it before anything changes.
3. Let me react and adjust in the artifact or UI in chat, and refine the plan with me.
4. Once I'm happy, apply it to my live menu and tidy up any existing messy or inconsistent setups so everything stays clean.
5. Keep the artifact in sync with what's actually live, and flag anything I should check on the diner-facing menu afterwards.
Don't change anything on my menu until I've reviewed and confirmed.
```
```text wrap theme={null}
I have the Atlas plugin connected. Help me plan, review, and implement modifiers across my menu.
My goal is to increase basket size and average order value through sensible upsells such as meal upgrades, sides, extras, desserts, drink pairings, and bundles. I may not know what will work best, so advise me rather than asking me to define every pairing.
Follow this workflow:
1. Understand my goals
Ask which outlet or menu to work on and what I want to optimise for, such as: increasing average order value, increasing the number of items per order, improving cross-sell uptake, moving slower-selling items, promoting particular products, or simplifying ordering.
Also ask whether I prefer full-price add-ons, discounted bundles, or for you to recommend the best approach.
2. Inspect Atlas before recommending anything
Use the Atlas tools to read: outlets and menus, current products and prices, existing modifier and cross-sell groups, active and inactive rules, relevant order history, products commonly purchased together, and current average order value and items per order, where available.
Probe the relevant tools and examine their actual response shapes instead of relying solely on their schema descriptions.
Keep outlet-specific products separate from merchant-wide test, legacy, or unrelated configurations.
3. Identify the strongest basket-building opportunities
Look for natural ordering moments such as: main → side, main → drink, coffee → dessert, cocktail → sharing snack, single item → meal upgrade, multiple complementary items → bundle, checkout → final add-on.
Prioritise pairings that: feel relevant to the diner's current selection, add another item to the basket with little decision friction, have evidence of being purchased together, use existing products where possible, avoid presenting too many choices, and are likely to produce a meaningful increase in basket value.
Do not recommend add-ons merely because the products exist. Explain why each one is likely to increase uptake or order value.
4. Recommend a plan
For each proposal, show: triggering products, exact diner-facing prompt, promoted products, current item prices, potential basket-value increase, whether the choice is optional or required, minimum and maximum selections, whether pricing is full price, discounted, or tiered, why the pairing should increase basket size, and the Atlas configuration required.
Where historical data is available, include: current attachment or co-purchase signals, typical basket-value increase, relevant product popularity, and a reasonable uptake hypothesis.
Clearly distinguish measured results from estimates or hypotheses.
5. Explain the commercial trade-offs
Walk me through: flat versus tiered pricing, optional versus required selections, full-price convenience versus discounted bundles, one strong recommendation versus several choices, product-page prompts versus checkout prompts, and higher add-on value versus lower-friction entry pricing.
Recommend a default based on my stated AOV goal.
6. Create a review artifact before changing Atlas
Present the proposal as a simple planning artifact, not a marketing website. Prefer: expandable drill-downs for each trigger, a plain pricing and basket-impact table, a list of proposed Atlas changes, and a clear "Draft — nothing live has changed" status.
Show the literal prompts and choices diners would encounter so I can visualise the real ordering experience.
Let me request changes in ordinary language and keep refining the artifact.
7. Require approval
Do not create, update, activate, deactivate, or reassign anything in Atlas until I explicitly say something equivalent to: "Approve and apply." Reviewing the artifact alone does not count as approval.
8. Apply the approved plan
After approval: re-read the affected Atlas records to avoid overwriting newer changes, update suitable existing groups instead of creating duplicates, create new groups only when necessary, activate or deactivate groups as approved, preserve unrelated groups and products, and do not hard-delete anything unless Atlas supports it and I explicitly request deletion.
For non-idempotent creation calls, check for an existing matching group before creating anything. Do not blindly retry after an uncertain response.
9. Verify and synchronise
After writing: read every affected group back from Atlas; verify its label, active state, triggers, promoted products and descriptions; report exactly what succeeded or failed; update the artifact from "Draft" to "Live"; keep the artifact consistent with the verified Atlas configuration; flag anything I should check on the diner-facing menu; and suggest which AOV and attachment metrics to review after launch.
Clearly state which sales channels support the cross-sells. Do not imply that Atlas-owned cross-sells automatically appear on third-party platforms such as GrabFood or Foodpanda. GrabFood also does not support deep nested modifiers.
Start by asking only the questions that would materially change your recommendation. Do not make any menu changes yet.
```
## What should happen
Your assistant reads your Atlas data first, then shows you what it found or what it plans to change. Nothing on your menu changes until you approve it.
Check the result in the [Atlas Merchant Portal](https://portal.atlas.kitchen). Costs, tags and groups appear there within a few seconds of the assistant saving them.
## If it doesn't work
* Turn Atlas on for that chat before pasting the example prompt.
* Tell it which outlet and menu to use. Merchants with several menus need this.
Ask it to list your menus, name the one you meant, then run the example prompt again. Ask it to undo the earlier change first.
Ask it to refresh from Atlas. Some dashboards hold a snapshot from when they were built.
Ask it to read the product back from Atlas and confirm. If they still differ, contact support with the product name.
If an example prompt keeps failing, contact support at [hello@atlas.kitchen](mailto:hello@atlas.kitchen) with the prompt you used.
## Next steps
Connect Atlas to Claude, ChatGPT, Claude Code or Codex
How cross-sell groups work in the Merchant Portal
# Set up Atlas in your assistant
Source: https://help.atlas.kitchen/connect/mcp/setup
Connect Atlas to Claude, ChatGPT, Claude Code or Codex in about two minutes.
## What this does
This connects your assistant to your live Atlas data. After it's done, you can ask about sales, edit menus, or 86 an item in plain language.
Pick your assistant below and follow the steps to connect Atlas.
Go to [Claude connector settings](https://claude.ai/customize/connectors) and select **Add custom connector**.
```
Name: Atlas
Remote MCP server URL: https://mcp.atlas.kitchen
OAuth Client ID: F-9hyHU9Or0O59Zf9w9pSZ2UHf8Zo9Aoi5oq1CWtV-k
Client Secret: leave empty
```
Click **Add**, then select **Connect** on the new Atlas row.
Sign in with your Atlas Merchant Portal account, not a personal account. Choose the merchant you want Claude to see, then approve the connection.
Start a new chat. Select the **+** button below the message box, then switch on **Atlas**.
You only connect once. The connector follows your Claude account, so it works in the browser, the desktop app, the mobile app and Claude Code.
Go to [Atlas in ChatGPT](https://chatgpt.com/plugins/plugin_asdk_app_69fc453d9f388191b28b287ff7624643). One tap, nothing to copy.
Follow the prompts to sign in. Choose the merchant you want ChatGPT to see, then approve the connection.
Start a new chat and add **Atlas** from the tools menu. Then ask away.
ChatGPT reads and writes Atlas data through the chat itself. Its canvases and apps can't call Atlas directly, so you confirm each change in the conversation. Use Claude if you want a dashboard that saves to Atlas as you edit it.
If you sign in to Claude Code with the same Claude account, connect Atlas once from [Claude connector settings](https://claude.ai/customize/connectors) and it appears here automatically. Run `/mcp` to check for **claude.ai Atlas**.
Otherwise, add it from your terminal:
```bash theme={null}
claude mcp add-json --scope user atlas \
'{"type":"http","url":"https://mcp.atlas.kitchen","oauth":{"clientId":"F-9hyHU9Or0O59Zf9w9pSZ2UHf8Zo9Aoi5oq1CWtV-k","callbackPort":48321,"scopes":"mcp"}}'
```
Then run `/mcp`, select Atlas and sign in. Choose a merchant, then approve the connection.
Add Atlas to `~/.codex/config.toml`:
```toml theme={null}
[mcp_servers.atlas]
url = "https://mcp.atlas.kitchen"
[mcp_servers.atlas.oauth]
client_id = "F-9hyHU9Or0O59Zf9w9pSZ2UHf8Zo9Aoi5oq1CWtV-k"
```
Then sign in:
```bash theme={null}
codex mcp login atlas --scopes mcp
```
Codex opens Atlas in your browser. Sign in, choose a merchant, then approve the connection.
## What should happen
Ask your assistant: **"Using Atlas, how many orders did we do yesterday?"**
You should get a real number from your outlet within a few seconds, not a general answer about restaurants. The assistant shows you when it calls an Atlas tool.
## If it doesn't work
* Sign in with your Atlas Merchant Portal account, not a personal account.
* Turn Atlas on for that chat. In Claude, select the **+** button and switch on **Atlas**. In ChatGPT, add **Atlas** from the tools menu.
* Start the request with "Using Atlas, …" so the assistant reaches for the connector.
You picked a different merchant when you signed in. Reconnect and choose the right one — see [Switch merchants](#switch-merchants) below.
* Open your connector settings and check Atlas is still connected. Reconnect if it shows an error.
* Sign-ins expire. Reconnecting fixes most one-off failures.
Refresh the Merchant Portal page. If it's still missing, ask the assistant to read the item back from Atlas. It will tell you whether the change actually saved.
If it still doesn't work, contact support at [hello@atlas.kitchen](mailto:hello@atlas.kitchen). Tell us which assistant you used and what you asked for.
## Switch merchants
You connect to one merchant at a time. To change:
* **Claude:** Reconnect Atlas from [Claude's connector settings](https://claude.ai/customize/connectors)
* **ChatGPT:** Reconnect Atlas from ChatGPT's app settings
* **Claude Code:** Run `/mcp`, select Atlas, then **Clear authentication**. Sign in again and choose another merchant
* **Codex:** Run `codex mcp logout atlas`, then `codex mcp login atlas --scopes mcp`. Sign in again and choose another merchant
## Other clients
Any MCP-capable client can connect:
| Setting | Value |
| - | - |
| **URL** | `https://mcp.atlas.kitchen` |
| **Transport** | Streamable HTTP |
| **Headers** | `X-Api-Key`, `X-Merchant-Id` |
Need an API token? Follow the [API authentication guide](/connect/admin-api/authentication). The same token works with the MCP headers above.
## Next steps
Copy-paste prompts for costs, allergens, cross-sells and modifiers
What your assistant can see and change
# Introducing Atlas Connect
Source: https://help.atlas.kitchen/connect/overview
Atlas Connect is a set of **Open APIs** that expose Atlas application data and functionality to external apps and developers
These APIs enable you to build custom ordering experiences and sync data with merchant operations
## APIs
Browse menus, manage carts, accept payments, confirm orders
Sync menus, create orders, manage users, query inventory
## Common use cases
Menu, cart, payment, order confirmation
Create orders from custom channels
Sections, items, modifiers in a single call
# Authentication
Source: https://help.atlas.kitchen/connect/storefront-api/authentication
## Channel ID
Every request must include an `X-Channel-Id` header. This identifies which merchant's storefront you're accessing — it determines the outlets, menus, branding, and payment configuration the diner sees
You receive the channel ID when a merchant is onboarded to Atlas. It is a fixed identifier, not a secret
## Sessions
Start by calling `GET /channel` with your channel ID. This creates a session and returns it in the `X-Session-Id` response header
```bash theme={null}
curl -sD - https://api.atlas.kitchen/storefronts/v1/channel \
-H "X-Channel-Id: your-channel-id"
```
```
# Response header — save this
X-Session-Id: b7ac755d301dc5d23c790ccd7bb6dadf
```
Include both headers on all subsequent requests:
| Header | What it is | Where it comes from |
| - | - | - |
| `X-Channel-Id` | Merchant's storefront identifier | Provided during onboarding |
| `X-Session-Id` | Diner's session (tracks cart) | Returned by `GET /channel` |
`GET /channel` is the only endpoint that creates a session. All other endpoints require a valid `X-Session-Id` header — calling them without one returns `401 Unauthorized`
Read-only endpoints (menus, stocks, timeslots, availabilities, announcements, banners, popups) work with just `X-Channel-Id` — no session needed
## Session lifecycle
A session holds a reference to the diner's active cart. There's always exactly one active cart per session at any time.
* **Creation**: the first `GET /channel` call creates a session and returns `X-Session-Id`
* **Reuse**: pass the same `X-Session-Id` on subsequent `GET /channel` calls to keep the same session (and cart). Send no session, and a new one is minted
* **After checkout**: when `POST /cart/order` succeeds, the session's active cart is marked `is_checked_out: true` and a fresh empty cart is created for the same session. The session ID stays valid — reuse it for the diner's next order
Persist `X-Session-Id` in local storage. As long as it's valid, returning diners keep their cart across page reloads.
# Add item
Source: https://help.atlas.kitchen/connect/storefront-api/cart/add-item
post /cart/items
Add a menu item with optional modifiers (sub_items). Validates stock and modifier group constraints.
# Apply promo
Source: https://help.atlas.kitchen/connect/storefront-api/cart/apply-promo
put /cart/promo
Validates and applies a promotion to the cart. Only one promo per cart.
# Clear promo
Source: https://help.atlas.kitchen/connect/storefront-api/cart/clear-promo
delete /cart/promo
# Create cart
Source: https://help.atlas.kitchen/connect/storefront-api/cart/create-cart
post /cart
Creates a new cart for the session or returns the existing active cart. Cart starts without outlet or items.
# Delivery outlets
Source: https://help.atlas.kitchen/connect/storefront-api/cart/delivery-outlets
get /cart/delivery_outlets
Only available when cart fulfilment_type is delivery.
# Payment breakdown
Source: https://help.atlas.kitchen/connect/storefront-api/cart/payment-breakdown
get /cart/payment_breakdown
Returns itemized charges including subtotal, tax, delivery fee, discounts, service charge, and points value.
# Remove item
Source: https://help.atlas.kitchen/connect/storefront-api/cart/remove-item
delete /cart/items/{id}
# Toggle points
Source: https://help.atlas.kitchen/connect/storefront-api/cart/toggle-points
put /cart/points
# Update cart
Source: https://help.atlas.kitchen/connect/storefront-api/cart/update-cart
patch /cart
Set outlet, fulfilment type, timeslot, contact info, delivery address, gifting details.
When you set `outlet_id`, the API auto-derives `brand_id` from the outlet's branded `ChannelLink` configuration — you don't need to (and shouldn't) set `brand_id` manually.
# Update item
Source: https://help.atlas.kitchen/connect/storefront-api/cart/update-item
patch /cart/items/{id}
Update quantity or notes. Cannot set quantity to 0 — use DELETE instead.
# Validate cart
Source: https://help.atlas.kitchen/connect/storefront-api/cart/validate-cart
post /cart/validation
Validates stock, timeslots, minimum order value, etc. Returns a token for duplicate payment prevention.
# Get channel
Source: https://help.atlas.kitchen/connect/storefront-api/channel/get-channel
get /channel
Returns merchant config, outlets with service hours, referral program, and point program. Creates a new session if `X-Session-Id` is not provided.
# Checkout flow
Source: https://help.atlas.kitchen/connect/storefront-api/checkout-flow
The complete ordering flow from menu to confirmed order:
## After payment
After creating a payment intent, direct the diner to the `atlas_pay_url` to complete payment. Then poll `POST /cart/order` to confirm:
```
1. POST /payment_intents → get atlas_pay_url
2. Direct diner to atlas_pay_url
3. Poll POST /cart/order
- 422 → payment not yet complete, keep polling
- 200 → order confirmed, stop polling
```
`POST /cart/order` validates the payment **in real-time** against the payment processor. It does **not** depend on webhooks
* **Payment succeeded** → cart converts to a confirmed order, full order object returned
* **Payment not completed** → `422` with `"Insufficient payment made to the cart"`
`POST /cart/order` is idempotent — if called after the order is already created, it returns the existing order. Safe to retry
# Get availabilities
Source: https://help.atlas.kitchen/connect/storefront-api/menu/get-availabilities
get /outlets/{outlet_id}/serving_dates/{serving_date}/availabilities
Returns hidden/disabled state for sections and items based on timeslot and fulfilment type.
# Get menus
Source: https://help.atlas.kitchen/connect/storefront-api/menu/get-menus
get /outlets/{outlet_id}/serving_dates/{serving_date}/menus
Returns published menus with sections, products, and modifier groups.
# Get stocks
Source: https://help.atlas.kitchen/connect/storefront-api/menu/get-stocks
specs/storefront-v1.yaml GET /outlets/{outlet_id}/serving_dates/{serving_date}/stocks
Returns available quantity per item for the outlet on the given date. Empty items object means unlimited stock.
# Get timeslots
Source: https://help.atlas.kitchen/connect/storefront-api/menu/get-timeslots
get /outlets/{outlet_id}/serving_dates/{serving_date}/timeslots
# Create order
Source: https://help.atlas.kitchen/connect/storefront-api/order/create-order
post /cart/order
**Call this after the diner completes payment and is redirected back.**
This endpoint does three things in sequence:
1. Validates the cart (items, timeslot, minimum order, etc.)
2. Checks payment status **in real-time** against the payment processor
(does NOT depend on webhooks — makes a synchronous call to verify)
3. 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.
# Create payment intent
Source: https://help.atlas.kitchen/connect/storefront-api/payment/create-payment-intent
post /payment_intents
Validates the cart and creates a payment intent with the payment processor.
Returns an `atlas_pay_url` — redirect the diner there to complete payment.
If a pending intent already exists for the same amount, it is returned instead
of creating a duplicate.
**After payment:** Once the diner completes payment on the hosted page,
they are redirected back to your application. At that point, call
`POST /cart/order` to validate the payment and convert the cart to an order.
Do NOT wait for webhooks — `POST /cart/order` checks payment status in real-time.
# Cart events
Source: https://help.atlas.kitchen/connect/webhooks/cart-events
Cart webhook payloads.
Cart events describe a POS dine-in cart during service, before the bill is paid.
Cart event money fields are sent as decimal major currency units for most currencies. For example, Singapore dollars are sent as dollars, not cents.
## Event types
| Event type | Trigger |
| - | - |
| `cart.items_fired` | Staff send items to the kitchen on a POS dine-in cart. |
| `cart.archived` | A POS cart is archived. |
## `cart.items_fired` payload
Each payload carries the full current state of the cart, not a delta. The latest payload replaces everything you stored from earlier ones, so a missed delivery is healed by the next one.
This event fires only for staff-attended POS carts. Self-service carts (QR ordering, kiosk, online) do not fire it. A cart whose order has closed stops firing.
```json theme={null}
{
"id": 48213,
"status": "open",
"identifier": "P48213",
"fulfilment_type": "dine_in",
"notes": "Birthday table",
"pax": 4,
"subtotal": 44.5,
"total_including_tax": 48.51,
"reservation_id": "resv-8zk2fm",
"outlet": {
"id": 31,
"name": "Atlas Cafe Raffles Place"
},
"user": null,
"table": {
"id": 512,
"outlet_id": 31,
"name": "A4",
"created_at": 1749794130,
"updated_at": 1749794130
},
"cart_items": [
{
"id": 991,
"item_id": 1204,
"item_sku": "laksa-classic",
"name": "Laksa",
"quantity": 2,
"currency": "SGD",
"unit_price": 18,
"item_total": 36,
"type": "Product",
"status": "sent",
"voided": false,
"sub_items": [
{
"id": 992,
"item_id": 1310,
"item_sku": "extra-cockles",
"name": "Extra cockles",
"quantity": 1,
"currency": "SGD",
"unit_price": 2,
"item_total": 2,
"type": "Product",
"status": "sent",
"voided": false,
"sub_items": []
}
]
},
{
"id": 995,
"item_id": 1287,
"item_sku": "kaya-toast",
"name": "Kaya toast",
"quantity": 1,
"currency": "SGD",
"unit_price": 6.5,
"item_total": 6.5,
"type": "Product",
"status": "held",
"voided": false,
"sub_items": []
}
]
}
```
| Field | Type | Description |
| - | - | - |
| `id` | integer | Cart ID. Equals `cart_id` on the [order payload](/connect/webhooks/order-events) for the same visit. |
| `status` | string | `open` while the bill is unpaid. Cart events stop once the order closes. |
| `identifier` | string | Human-readable check reference. Matches the order payload's `identifier` once an order exists. |
| `fulfilment_type` | string | Fulfilment type of the cart, such as `dine_in`. |
| `notes` | string \| null | Cart notes entered by staff. |
| `pax` | integer \| null | Party size. |
| `subtotal` | number | Running subtotal of the current items. |
| `total_including_tax` | number | Running total including tax. Final amounts arrive on the closing order event. |
| `reservation_id` | string \| null | External reservation reference, when the cart came from a reservation. |
| `outlet` | object \| null | The outlet the cart belongs to: `id` and `name`. |
| `user` | object \| null | Customer identity when known: `id`, `name`, and `external_user_links`. Often `null` before payment — do not key on it. |
| `table` | object \| null | The table the cart is open on. |
| `cart_items` | array | Every current top-level item. See below. |
`cart_items[].status` is `sent` once the item has been fired to the kitchen, or `held` while it waits. `voided: true` marks a removed item. `sub_items` nests modifiers, using the same fields as a top-level item.
### Handling deliveries
Delivery is at-least-once and unordered. Payloads carry no ordering token. Apply these rules:
1. Match cart events and [order events](/connect/webhooks/order-events) for the same visit on the cart `id`. It equals the order payload's `cart_id`.
2. Treat each payload as the full cart state. Replace what you stored for that cart. A stale or duplicate delivery is corrected by the next kitchen send.
3. Discard `status: "open"` payloads for a cart whose closing order event you have already processed.
## `cart.archived` payload
```json theme={null}
{
"cart_id": 12345,
"is_archived": true
}
```
# Customer events
Source: https://help.atlas.kitchen/connect/webhooks/customer-events
Customer webhook payloads.
## Event types
| Event type | Trigger |
| - | - |
| `user.created` | A non-guest, non-system user is created. |
| `user.updated` | A non-guest, non-system user is updated. |
Atlas does not send `user.created` or `user.updated` for guest users or system users.
## Payload
```json theme={null}
{
"id": 321,
"email": "jane@example.com",
"mobile_number": "+6591234567",
"name": "Jane Tan",
"date_of_birth": "1990-01-01",
"marketing_consent": true,
"title": "Ms",
"external_user_links": [
{
"external_user_id": "customer-123",
"external_user_type": "loyalty_integration"
}
]
}
```
# Events
Source: https://help.atlas.kitchen/connect/webhooks/events
Event payloads sent by Atlas Connect webhooks.
Events let your system react when something changes in Atlas.
When a subscribed event occurs, Atlas creates an event payload and sends it to your configured webhook URL.
## Event payload
```json theme={null}
{
"id": "6f2b65d9-54dc-4c1d-a7da-71f0d7b6a10a",
"event_type": "order.created",
"data": {},
"created_at": "2026-06-18T10:15:30.000+08:00",
"updated_at": "2026-06-18T10:15:30.000+08:00"
}
```
| Attribute | Type | Description |
| - | - | - |
| `id` | string | Unique event ID. Store this to prevent duplicate processing. |
| `event_type` | string | The event that occurred, such as `order.created`. Use this to route webhook handling. |
| `data` | object | Event-specific data. |
| `created_at` | string | Time when Atlas created the event payload. |
| `updated_at` | string | Time when Atlas last updated the event payload. |
## Event types
| Event type | Trigger | `data` payload |
| - | - | - |
| `order.created` | An order is created. | [Order payload](/connect/webhooks/order-events) |
| `order.updated` | An order is updated. | [Order payload](/connect/webhooks/order-events) |
| `order.cancelled` | An order changes to `cancelled`. | [Order payload](/connect/webhooks/order-events) |
| `order.confirmed` | An order changes to `confirmed`. | [Order payload](/connect/webhooks/order-events) |
| `order.completed` | An order changes to `completed`. | [Order payload](/connect/webhooks/order-events) |
| `order.dispatched` | An order changes to `dispatched`. | [Order payload](/connect/webhooks/order-events) |
| `user.created` | A non-guest, non-system user is created. | [Customer payload](/connect/webhooks/customer-events) |
| `user.updated` | A non-guest, non-system user is updated. | [Customer payload](/connect/webhooks/customer-events) |
| `outlet.created` | An outlet is created. | [Outlet payload](/connect/webhooks/outlet-events) |
| `outlet.updated` | An outlet is updated. | [Outlet payload](/connect/webhooks/outlet-events) |
| `stock.updated` | Item availability changes for an outlet. | [Stock payload](/connect/webhooks/stock-events) |
| `cart.items_fired` | Staff send items to the kitchen on a POS dine-in cart. | [Cart payload](/connect/webhooks/cart-events) |
| `cart.archived` | A POS cart is archived. | [Cart payload](/connect/webhooks/cart-events) |
| `menu.updated` | A menu is updated. | [Menu payload](/connect/webhooks/menu-events) |
# Menu events
Source: https://help.atlas.kitchen/connect/webhooks/menu-events
Menu webhook payloads.
## Event types
| Event type | Trigger |
| - | - |
| `menu.updated` | A menu is updated. |
## Payload
```json theme={null}
{
"event": "menu.updated",
"menu_id": 789
}
```
Atlas sends only the menu ID for `menu.updated`.
Fetch the full menu through the Admin API if your system needs the updated menu hierarchy.
# Order events
Source: https://help.atlas.kitchen/connect/webhooks/order-events
Order webhook payloads.
Order events use the same `data` shape.
Order event money fields are sent as decimal major currency units for most currencies. For example, Singapore dollars are sent as dollars, not cents.
## Event types
| Event type | Trigger |
| - | - |
| `order.created` | An order is created. |
| `order.updated` | An order is updated. |
| `order.cancelled` | An order changes to `cancelled`. |
| `order.confirmed` | An order changes to `confirmed`. |
| `order.completed` | An order changes to `completed`. |
| `order.dispatched` | An order changes to `dispatched`. |
## Payload
```json theme={null}
{
"order_id": 98765,
"id": 98765,
"cart_id": 48213,
"identifier": "A123",
"state": "confirmed",
"serving_date": "2026-06-18",
"subtotal": 28.5,
"surcharge": 0,
"delivery_fee": 4,
"discount": 0,
"admin_discount": 0,
"total": 32.5,
"tax": 2.92,
"total_including_tax": 35.42,
"created_at": "2026-06-18T10:15:30+08:00",
"cancelled_at": null,
"completed_at": null,
"promotion_level": null,
"barcode_identifier": "ATLAS123456",
"donation": 0,
"contact_name": "Jane Tan",
"fulfilment_type": "delivery",
"timeslot_range": "12:00 PM - 12:30 PM",
"table": {
"id": 12,
"name": "T12"
},
"user": {
"id": 321,
"email": "jane@example.com",
"mobile_number": "+6591234567",
"external_id": "customer-123"
},
"outlet": {
"id": 45,
"label": "Atlas Cafe",
"description": "Main outlet",
"address": "1 Example Street",
"archived": false
},
"promotion": {
"id": 10,
"label": "Lunch promo",
"type": "Promotion",
"description": "Lunch discount",
"code": "LUNCH"
},
"order_source": {
"id": 7,
"source_label": "website",
"source_type": "Website"
},
"payment_type": {
"id": 3,
"label": "Credit Card"
},
"order_items": [
{
"id": 111,
"item_id": 222,
"item_sku": "SKU-001",
"order_item_id": null,
"modifier_id": null,
"name": "Chicken bowl",
"quantity": 1,
"currency": "SGD",
"unit_price": 12.5,
"unit_modifier_price": 2,
"unit_component_price": 0,
"type": "Product",
"order_id": 98765,
"barcode_identifier": "ATLAS123456",
"item_total": 14.5,
"item_discount": 0,
"tags": ["lunch"],
"product_tags": ["lunch"],
"kitchen_tags": ["hot"],
"report_category": "Mains",
"voided": false,
"brand": {
"id": 55,
"label": "Atlas Cafe",
"description": "All-day dining"
},
"sections": [
{
"id": 66,
"label": "Bowls",
"description": "Rice and salad bowls"
}
],
"sub_items": [
{
"id": 112,
"item_id": 223,
"item_sku": "SKU-001-MOD",
"order_item_id": 111,
"modifier_id": 333,
"name": "Add avocado",
"quantity": 1,
"currency": "SGD",
"unit_price": 2,
"unit_modifier_price": 0,
"unit_component_price": 0,
"type": "Product",
"order_id": 98765,
"barcode_identifier": "ATLAS123456",
"item_total": 2,
"item_discount": 0,
"tags": ["addon"],
"product_tags": ["addon"],
"kitchen_tags": [],
"report_category": "Modifiers",
"voided": false,
"brand": {
"id": 55,
"label": "Atlas Cafe",
"description": "All-day dining"
},
"sections": [],
"sub_items": []
}
]
}
]
}
```
`cart_id` is the cart the order was created from. It is `null` when the order has no cart. It equals `id` on [cart events](/connect/webhooks/cart-events) for the same visit, so both event streams resolve to one check.
`order_items` contains top-level items only.
`sub_items` contains modifiers and nested components attached to a parent item. A sub-item uses the same fields as a top-level order item. The `order_item_id` field points to the parent order item, and `modifier_id` is present when the sub-item came from a modifier.
# Outlet events
Source: https://help.atlas.kitchen/connect/webhooks/outlet-events
Outlet webhook payloads.
## Event types
| Event type | Trigger |
| - | - |
| `outlet.created` | An outlet is created. |
| `outlet.updated` | An outlet is updated. |
## Payload
```json theme={null}
{
"id": 45,
"identifier": "main-outlet",
"label": "Atlas Cafe",
"address": "1 Example Street",
"description": "Main outlet",
"contact_number": "+6561234567",
"created_at": "2026-06-18T10:00:00.000+08:00",
"updated_at": "2026-06-18T10:15:30.000+08:00",
"email": "outlet@example.com",
"archived": false
}
```
# Set up webhooks
Source: https://help.atlas.kitchen/connect/webhooks/setup
Add an Atlas Connect webhook endpoint.
Atlas sends selected events to an HTTPS endpoint that you control.
## Add a webhook
Admins can manage webhook endpoints in the [Atlas Merchant Portal](https://portal.atlas.kitchen/atlas-connect/webhooks).
1. Go to **Atlas Connect > Webhooks**.
2. Click **Add webhook**.
3. Enter a **Name**.
4. Enter an **Endpoint URL**. The URL must start with `https://`.
5. Choose whether the webhook is **Enabled**.
6. Select the **Events** this endpoint should receive.
7. Choose **Authentication**:
* **Bearer token** — Atlas sends `Authorization: Bearer `.
* **Custom header** — Atlas sends the header name and value you provide.
8. Save the webhook.
Disabled webhooks stay saved but do not receive events until re-enabled.
Secrets are stored for delivery and are not shown again after saving.
## Delivery
Atlas sends a `POST` request with a JSON event payload.
Return any `2xx` response to acknowledge receipt.
Process events idempotently. Atlas queues webhook delivery asynchronously, and your endpoint may receive the same event more than once.
# Stock events
Source: https://help.atlas.kitchen/connect/webhooks/stock-events
Stock webhook payloads.
## Event types
| Event type | Trigger |
| - | - |
| `stock.updated` | Item availability changes for an outlet. |
Atlas sends `stock.updated` when item availability changes for an outlet.
It can also be sent when an order sells out an item and Atlas marks the item unavailable.
## Payload
```json theme={null}
{
"item_id": 222,
"outlet_id": 45,
"is_available": false
}
```
# Update diners' phone number
Source: https://help.atlas.kitchen/customer-guides/diners-phone-update
Guide for diners to update phone numbers on Atlas Online. Log in, recover access via email, update profile details, and verify changes.
**Who is this article for?**
* Customers that have an Atlas ID account on your restaurant's Atlas Online website.
## Updating a phone number on the restaurant's website
Customers can follow these steps to update their phone number:
1. **Log in to the restaurant's website:**
* Click the **user icon** in the top-right corner.
* Click **Log in**.
2. **Enter login credentials:**
* On the **Log in** page, enter the registered email address.
* Click **Log in**.
3. **Recover access if the phone number is unavailable:**
* If access to the registered phone number is lost, select **Send code to email instead**.
* Enter the access code received via email.
4. **Navigate to the profile page:**
* After logging in, the page will redirect to the **landing page**.
* Click the **user icon** in the top-right corner.
* Select **Profile**.
5. **Update the phone number:**
* Click the **Mobile number** field.
* Enter the new phone number.
* Click **Update your profile**.
6. **Verify the update:**
* The phone number should now be updated.
* If any issues persist, diners can email [**hello@atlas.kitchen**](mailto:hello@atlas.kitchen) for further assistance.
# Install Atlas Merchant Portal
Source: https://help.atlas.kitchen/get-started/installing-atlas
Add Atlas Merchant Portal as a home screen shortcut on your tablet for faster access. Works on Chrome and Safari browsers.
Atlas Merchant Portal can be accessed from any device at [https://portal.atlas.kitchen](https://portal.atlas.kitchen) and a valid login.
For the best experience on your tablet, install an Atlas screen shortcut on your device:
1. Open Atlas Merchant Portal ([https://portal.atlas.kitchen](https://portal.atlas.kitchen)) in Google Chrome or Safari.
2. Tap the menu icon (three dots on Chrome, share button on Safari).
3. Select "Add to Home Screen".
4. Rename it to Atlas and tap Add.
5. Open the new desktop app, and log in with your credentials.
## What should happen
After completing the steps above:
* An "Atlas" icon appears on your device's home screen
* Tapping the icon opens Atlas Merchant Portal in a standalone app window (no browser toolbar)
* You can log in with your existing Atlas credentials
* The app works just like the browser version but launches faster
## If it doesn't work
1. Make sure you're using Chrome (Android) or Safari (iOS) — other browsers may not support this feature
2. On Chrome: Tap the three-dot menu, then scroll down to find "Add to Home Screen"
3. On Safari: Tap the share icon (square with arrow), then scroll down to "Add to Home Screen"
4. On some devices, this option appears as "Install app" instead
1. Check your home screen pages — the icon may be on a different page
2. Check your app drawer or library (Android)
3. Try adding again — sometimes the first attempt fails silently
4. Restart your device and try again
1. Check your internet connection
2. Clear the app cache: Delete the shortcut, clear browser cache, and add again
3. Try logging in through the regular browser first to confirm your account works
1. Check that you're using the correct email and password
2. Try logging in through the browser version first
3. If you forgot your password, use "Forgot password" on the login page
4. Contact support at [hello@atlas.kitchen](mailto:hello@atlas.kitchen) if you're locked out
## Next steps
* [Set up your outlet](/merchant-portal/operating-hours) — Configure your restaurant hours
* [Connect your printer](/hardware/printers) — Set up receipt printing
* [Explore the dashboard](https://portal.atlas.kitchen) — Start using Atlas Merchant Portal
# Onboarding process
Source: https://help.atlas.kitchen/get-started/onboarding
Get started with Atlas onboarding. Learn the setup process, hardware requirements, WiFi specs, and best practices for a smooth restaurant launch.
**Who is this article for?**
* New restaurants in the process of onboarding Atlas.
Getting started with Atlas is simple. We handle the heavy lifting so you can focus on running your business. From setting up menus to installing hardware, we take care of the details, and let you focus on what matters - your restaurant launch.
Here's a general breakdown on the Atlas onboarding process:
1. **Gathering information**. We collect the necessary details to configure your Atlas setup.
2. **Designing and confirming ordering flows**. We'll work with you to make sure the setup matches your operations.
3. **Getting Atlas ready.** We take care of this while you prepare for launch (this includes menus, diner-interface websites design, setting up products, operating hours, etc.).
4. **Installation and training.** We meet you in person to set up hardware, test it, and train your team. This usually happens within the same day, a few days before your launch.
5. **Go-live**. Once everything is in place, you're ready to start taking orders. Ensure your onboarder knows this date so they can be on standby to provide support.
6. **Account management.** We will keep ironing out the details after you go live. Some of our plans might not work, so we will use this week to keep training you and calibrating ops.
### What hardware to buy
Atlas runs smoothly on most modern tablets, but these are some recommendations based on our experience. If you have any doubts, it's best to install Atlas on your tablet to see if it performs well.
Minimum specs:
* Android 10+ or iPadOS 14+
* 4GB RAM
* Quad-core processor
* 32GB storage
Recommended tablets:
* Android -> Xiaomi Pad Pro or similar specs
* iOS -> iPad 9th Gen or newer
### Importance of WiFi
Atlas is a cloud-based system accessed from a browser, so it requires a strong, stable WiFi connection to run smoothly.
We recommend using business-grade routers like Ubiquiti UniFi Dream Machine UDM-US or ASUS ZenWiFi AX (XT8) for the best performance.
If you prefer to source your own, this is some of the criteria to consider:
* Strong antenna and good range. Your router should provide at least 30m of range, assuming signal loss through one wall.
* Dual-band or tri-band with WiFi 6. Ensures better load management and future-proofing.
* Must have 2.4GHz support. Best for receipt printer compatibility.
* Handles multiple devices. Should support 16-32 connected clients.
* Nice to have: Dual WAN and/or 4G backup support. Helps maintain connectivity if one network fails.
If possible, avoid 4G-based routers. They tend to have slower speeds and a limited number of supported devices. Low-spec home routers may also have limitations and struggle to handle multiple devices, potentially causing lag.
Atlas printers can connect to your network via wireless WiFi and LAN cable. We recommend using a LAN cable connected to your main network, and wireless connection with your back up network.
# Set up Atlas to earn more
Source: https://help.atlas.kitchen/get-started/sell-more
Boost restaurant revenue with aggregator integrations, loyalty rewards, cross-selling, and menu engineering best practices in Atlas.
**Who is this article for?**
* New restaurants in the process of onboarding Atlas.
* Existing Atlas merchants that want to optimise their setup and menus to sell more.
* To access all the features mentioned you need Admin permissions. Set permissions from **Settings > Team members**.
Atlas is more than just an operating system — it's a tool to grow your revenue. With the proper setup, Atlas will help you increase sales, give your customers a better experience, and keep them coming back.
## Leverage Atlas to earn more
Here are a few best practices we have noticed not to leave money on the table:
* **Make sure you're listed on Foodpanda, GrabFood, and Deliveroo aggregators.** Atlas Aggregator lets you manage all these platforms in one place. More platforms > more visibility > more customers that get to know you.
* **Redirect customers to order directly from you.** Now that your customers know you, encourage them to order through Atlas Online instead of aggregators to save on commission fees. Offer exclusive discounts for your website, exclusive bundles, loyalty rewards, etc.
* **Keep customers coming back with loyalty rewards.** Atlas Loyalty makes repeat visits more likely with points-based rewards, targeted promotions, marketing campaigns, EDM blasts, and exclusive discounts for regulars.
* **Use cross-selling features to increase order value.** Customers are already ordering, so help them add more with smart suggestions. Set cross-selling groups in Scan to Order, Kiosk, and Online from the beginning and iterate to perfect them.
* **Design menus that encourage more spending.** We will break this down in the following next section.
Atlas helps you sell more, earn more, and keep customers coming back — make sure you're using it to its full potential. If you need help understanding how to do this, please contact us in our dedicated WhatsApp group.
## Set up your menus for success
Menu engineering is about structuring your menu to drive higher spending. With Atlas, you have powerful tools to increase your Average Order Value (AOV) while making it seamless for customers to order more.
Here are some best practices we've noticed:
* **Highlight high-margin items in Atlas Scan to Order, Kiosk and Online.** Re-arrange products on your menu to feature best-sellers, chef's specials, and high-margin dishes at the top
of your sections. You can explore adding “Recommended” promotional labels to guide customer choices.
* **Descriptions & photos are essential.** Instead of “Spaghetti with tomato sauce,” try “Slow-simmered tomato sauce over hand-crafted pasta.” Adding pictures to Atlas Online and Kiosk can boost sales by up to 30%.
* **Create combos and bundles.** Increase AOV by offering meal deals. You can create easy-to-add combos (e.g. burger + fries + drink) at a slightly discounted rate, increasing overall spend while giving customers value. Make sure to create delivery bundles that also serve a specific number of pax.
* **Create modifier groups to upsell.** With Atlas Kiosk and Scan to Order, customers should always see suggestions for add-ons, sides, or drinks when adding products.
* **Optimise pricing presentation.** Set up your more pricey and premium items or choices first to anchor prices.
If you want to implement any of these and don't know how, please contact us in our dedicated WhatsApp group. to get things started.
# Using SMS with Atlas and Customer.io
Source: https://help.atlas.kitchen/guides/sms-with-customerio
Connect your own Twilio sender to Customer.io to send loyalty SMS, order confirmations, and one-time passcodes to your customers.
**Who is this for?**
* Atlas merchants who use Customer.io for marketing
* Merchants who want to reach customers by SMS
## What this does
This connects your Twilio account to Customer.io. Your customers receive SMS messages sent from your own Twilio sender.
Use this for loyalty messages, order confirmations, and one-time passcodes.
## When to use this
* You want to send loyalty SMS to customers who have opted in
* You need to send order confirmations or one-time passcodes by text
* You are setting up or already have a Twilio account
## Steps
Go to [twilio.com](https://www.twilio.com/en-us) and sign up for a paid account.
Once your account is active, buy a sender. You have two options:
* **Phone number**: Buy a local number from Twilio.
* **Alphanumeric Sender ID**: Use your brand name as the sender (for example, `ATLAS`). Not available in all countries.
**Singapore merchants using an Alphanumeric Sender ID**: You must register your sender ID with the SGNIC SMS Sender ID Registry (SSIR) before sending. Without registration, your messages may appear as "Likely-SCAM" on recipients' phones. Register at [sgnic.sg/faq/sms-sender-id-registry](https://www.sgnic.sg/faq/sms-sender-id-registry).
In the Twilio Console, go to your account settings and copy your **live** Account SID and Auth Token. Do not use test credentials — they do not send real messages.
In Customer.io, go to **Workspace Settings**, then click **SMS**.
Enter your Twilio credentials in the fields provided:
```plaintext theme={null}
Account SID: ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Auth Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
```
Enter your sender phone number or Alphanumeric Sender ID.
Click **Save**.
Choose how you want to send SMS in Customer.io:
* **Campaign workflow**: Drag an SMS action into a workflow. Use this for automated loyalty messages triggered by a customer action.
* **SMS newsletter**: Create a one-time broadcast to a segment of customers. Use this for promotions and announcements.
* **Transactional SMS**: Send order confirmations or one-time passcodes. Use this for time-sensitive messages.
## What should happen
* Customers receive SMS messages from your Twilio sender.
* Loyalty messages arrive within seconds of being triggered in Customer.io.
* Customer.io shows a delivery status for each message sent.
## If it doesn't work
1. Check that you entered your **live** Account SID and Auth Token. Test credentials do not send real messages.
2. Confirm your Twilio account is paid and active, not on a trial.
3. Open the Twilio Console and check for error codes on failed messages.
4. Make sure your sender number or Alphanumeric Sender ID is active in Twilio.
Register your Alphanumeric Sender ID with the SGNIC SMS Sender ID Registry before sending. See Step 1 above for the registration link.
1. Confirm customers have opted in to SMS communications.
2. Check that each customer's phone number includes the correct country code.
3. Review the delivery log in Customer.io for failed deliveries.
If the issue persists, contact support at [hello@atlas.kitchen](mailto:hello@atlas.kitchen).
## What's next
* [Set up your loyalty programme](/merchant-portal/loyalty-signup)
* [Manage your customer data](/merchant-portal/customers-data)
# Connect Atlas printer to WiFi
Source: https://help.atlas.kitchen/hardware/printers
Connect Atlas receipt printers to WiFi network. Choose manual browser pairing or QR pairing with WeChat for wireless printer setup.
Atlas printers can be connected to WiFi wirelessly using one of these two methods:
* Mode A: QR pairing with WeChat.
* Mode B: Manual pairing via browser (recommended).
Follow these steps to pair your printer using WeChat:
1. Connect to the outlet's WiFi network (must be 2.4GHz).
2. Download WeChat and create an account.
3. Locate the small black button at the back of the printer.
4. Press and hold the button for 2 seconds and release → A receipt will print.
5. Repeat step 4 → A receipt will print with a QR code.
6. Open WeChat and scan the QR code.
* Note: This connects the printer to WiFi.
7. Enter your WiFi password and confirm.
* Note: Ensure Bluetooth and Local Network access are enabled if needed.
8. On the next screen, select the Printer network and tap Connect.
9. Wait for the printer to connect and print a success receipt.
10. If the connection failed receipt prints, repeat the steps or check your WiFi stability.
This enters Mode B: Manual WiFi pairing mode (lasts 5-10 minutes)
Wait until your device is connected. This network has no internet access, but that's fine for this setup.
You can change the language (Mandarin or English) from the top-right corner.
A prompt saying the password is empty will come up. Just press ok, and move to the next step.
Within a few minutes, a successful connection receipt should print. *This may take up to 10 minutes in some cases.*
If a connection failed receipt prints instead, go through the guide again and ensure all steps were followed correctly. Also, check your WiFi stability.
## What should happen
After completing the WiFi setup:
* The printer prints a "Connection Successful" receipt showing it's connected to your WiFi network
* The printer appears in Atlas Merchant Portal under your outlet's printer settings
* You can send test prints from Atlas POS or the Merchant Portal
## If it doesn't work
1. Verify your WiFi password is correct — re-enter it carefully
2. Check that your WiFi network is 2.4GHz (not 5GHz) — the printer only supports 2.4GHz
3. Move the printer closer to your WiFi router
4. Check if your WiFi network has a captive portal (login page) — the printer cannot connect to networks requiring browser login
5. Restart your WiFi router and try again
1. Make sure you're in Mode B (manual pairing mode) — press and hold the button until the second receipt prints
2. The printer's WiFi mode only lasts 5-10 minutes. If it timed out, press the button again to re-enter pairing mode
3. Check that your phone/tablet WiFi is turned on
4. If "Printer" doesn't appear in your WiFi list, restart the printer and try again
1. Make sure you're connected to the "Printer" WiFi network (not your regular WiFi)
2. Wait 10-15 seconds after connecting before opening the browser
3. Type the address exactly: `10.10.100.254` — no "http\://" or "www"
4. Try a different browser if the first one doesn't work
5. Disable any VPN on your device
1. Try lowercase `admin` for both username and password
2. If the printer was previously configured, it may have a different password. Factory reset the printer and try again
3. Check your printer documentation for default credentials
1. Wait 10-15 seconds and tap SCAN again
2. Check that your WiFi router is powered on and broadcasting
3. Move the printer closer to the router
4. Your WiFi may be set to "hidden" — you'll need to enter the network name manually
1. In Atlas Merchant Portal, go to **Settings > Printers** and verify the printer is listed
2. Check that the printer is assigned to the correct outlet and station
3. Send a test print from Atlas to verify the connection
4. Restart the printer and check if it reconnects
5. Contact support at [hello@atlas.kitchen](mailto:hello@atlas.kitchen) if the printer still doesn't appear
## Next steps
* [Set up Atlas POS](/get-started/installing-atlas) — Install Atlas on your tablet
* [Configure your outlet](/merchant-portal/operating-hours) — Set operating hours and menu
* [Start taking orders](/merchant-portal/admin-orders) — Create your first order
# Troubleshooting Atlas Pay terminals
Source: https://help.atlas.kitchen/hardware/terminal-troubleshooting
Fix an Atlas Pay card terminal that is frozen, not showing the payment amount, or has lost connection to the POS.
**Who is this article for?**
* Atlas merchants using an Atlas Pay card terminal.
* Staff taking payments at the counter or kiosk.
Atlas Pay card terminals occasionally lose connection, freeze, or fail to show the payment amount. This guide is organised by the problem you are seeing. Find your issue below and work through the fixes in order.
## The terminal won't connect or show the payment amount
If the terminal shows "no signal", nothing appears when you tap Charge, or you see **"Error occurred while initiating payment"**, work through these in order.
The error is often a one-off. Re-select the payment method and tap **Charge** again.
If it keeps happening, the cause is usually WiFi instability. The terminal has a built-in 4G backup that is more reliable during service.
On the terminal, go to **Settings > Network** and turn off **WiFi**. The terminal switches to 4G automatically. Go back to the POS and tap **Charge** again.
Press and hold the power button on the side of the terminal until the power options appear, then tap **Restart**. Once it is back on the home screen, close and reopen the Atlas POS app on the tablet, then try the charge again.
Create a small test order, tap **Charge**, select **Credit Card**, and confirm the amount appears on the terminal.
Take payment with a manual method for now, then contact support (see [The terminal is faulty or won't power on](#the-terminal-is-faulty-or-wont-power-on)).
**What should happen:** the terminal displays the order amount and is ready for the customer to tap, insert, or scan.
## The customer paid but the order didn't complete
If the terminal or POS dropped connection mid-payment, the customer's card may have gone through while the order stays open on the POS. Before charging again, confirm whether the payment actually went through.
### Check the payment on the terminal
1. On the terminal, go to **Transactions > History**.
2. Enter the terminal password.
3. Find the transaction by time and amount, and tap it to open the details.
The **Merchant reference** field shows the last digits of the Atlas order ID. Use it to match the transaction to the order. A successful payment shows **"Approved"** with a green tick.
### Force checkout
When the POS can't confirm a payment, it shows a force checkout screen asking you to verify manually.
* **If the terminal shows "Approved":** the customer paid. Tap **"I understand, force checkout"** to close the order.
* **If it does not show Approved:** the payment did not go through. Do not force checkout, and take payment again.
Do not force checkout without verifying the terminal. If the payment failed but you force checkout, the order is marked as paid and the customer could walk away without paying.
## The terminal is frozen or the screen is black
1. Press and hold the power button on the side of the terminal for about 15 seconds to force a restart. Wait for the home screen to load, then try the charge again.
2. If the terminal does not respond to the power button at all, remove the cover on the back, unplug the battery, and wait about 10 seconds. Reconnect the battery, replace the cover, and power the terminal back on.
If the screen stays black, or the terminal keeps freezing after these steps, the unit likely needs replacing. See [The terminal is faulty or won't power on](#the-terminal-is-faulty-or-wont-power-on) below.
## The terminal is faulty or won't power on
Restarting won't fix a faulty unit. Contact support for a replacement if:
* The terminal won't power on, even when plugged in.
* The battery drains in under 2 hours, or won't charge.
* The casing or battery looks swollen or deformed.
* The card slot or tap reader is physically damaged.
* The same issue recurs across service periods despite restarting.
When you contact [hello@atlas.kitchen](mailto:hello@atlas.kitchen), include:
* The terminal **serial number** (on the back of the terminal, beside the barcode sticker).
* The **date and time** of the issue.
* The **affected order number**, if any.
* A **photo** of the terminal screen.
* **What you have already tried** (e.g. switched to 4G, restarted).
To request a **loaner terminal** while yours is being replaced, say so and include your outlet name and preferred delivery date.
## Other terminal errors
The terminal is usually still on a previous session. Restart the terminal. If the wrong amount appears for a specific order, void that order in Atlas POS and re-create it before charging.
Check that PayNow is enabled in the Merchant Portal under **Settings > Payment types**. If it is on, restart the terminal and try again. If the QR still doesn't appear, contact support.
The POS station does not have a terminal assigned to it. This is a back-end setting, so contact support at [hello@atlas.kitchen](mailto:hello@atlas.kitchen).
## Next steps
* [Using Atlas POS](/stations/pos) — charging orders, force checkout, and splitting bills.
* [Refunds](/merchant-portal/refunds) — refund or recharge an order.
# Connect OpenTable to Atlas
Source: https://help.atlas.kitchen/integrations/opentable
Link OpenTable reservations to Atlas POS. Carts open automatically when guests are seated, and OpenTable receives live order and bill data.
**Who is this article for?**
Restaurant operators who use Atlas POS and take reservations through OpenTable.
## What this does
Your OpenTable reservations appear on Atlas POS automatically. There is no need to re-enter bookings by hand.
When a guest is seated on OpenTable, Atlas opens a cart on the matching table. The cart includes the party size and any reservation notes. The guest's name is recorded on the reservation.
Order data also flows back to OpenTable. When staff hold or fire items to the kitchen, OpenTable shows the order as an open ticket. When the bill is paid, OpenTable receives the final total and payment details.
This builds spend history on your OpenTable guest profiles. You can see what each guest ordered and spent on past visits.
## When to use this
Use this integration if you take reservations on OpenTable and run service on Atlas POS. It removes the manual step of opening a cart when guests arrive.
## Before you start
You request the connection from your OpenTable account. The Atlas team completes the setup and enables the integration — the settings are not visible in your Atlas dashboard. The integration is part of Atlas Connect — your account manager will confirm pricing with you.
Table names in Atlas must match your OpenTable floor plan exactly. "Table 5" and "table 5" do not match. Check this before going live, or carts will not open automatically.
## Steps
Log in to your OpenTable account. Open the menu and click **Integrations**, under **Admin**.
Find **Atlas** in the point-of-sale list and click it. Fill in the short form and submit it.
Open your table layout on Atlas POS and compare each table name against your OpenTable floor plan. The names must match exactly, including capitalisation and spaces.
Rename tables in Atlas to match OpenTable where they differ. For example, if OpenTable uses "A4", the Atlas table must also be named "A4".
In OpenTable, table names are set in **Availability Planning** under **Floor plan**. Click a table to see its name.
In Atlas, open **Tables and areas** for your outlet. Click the table, then click its three-dot menu and click **Rename**.
OpenTable tells Atlas about your request. The Atlas team completes the setup and contacts you to agree a go-live date.
Have your table names matched before the go-live date. To pause or stop the integration later, contact Atlas support. Pausing also tells OpenTable your POS is offline.
## What should happen
* New, updated, and cancelled OpenTable reservations appear on Atlas within a few seconds.
* When a guest is seated on OpenTable, a cart opens on the matching Atlas table. The cart shows the party size and reservation notes.
* When staff hold or fire items to the kitchen, the order appears in OpenTable as an open ticket.
* When the bill is paid, OpenTable shows the final total and payment.
Atlas sends order and pricing updates to OpenTable straight away, but OpenTable can take up to two minutes to display them because it caches this data on its side. This is normal — the amounts are correct once they appear.
If OpenTable is ever unreachable, your POS keeps working normally. Service is never blocked by the integration.
## What you'll see during service
This is the full flow from seating to payment once the integration is live. Each stage shows what staff see on OpenTable, on Atlas POS, or both.
**Sync timing.** Seating and reservation changes from OpenTable usually reach Atlas POS within a few seconds. Atlas sends order details and pricing to OpenTable straight away, but OpenTable can take up to two minutes to display them because it caches this data on its side. The amounts are correct once they appear — this delay is on OpenTable, not Atlas.
### 1. A guest is seated on OpenTable
You seat the guest on OpenTable as normal — by seating a booking or adding a walk-in. The steps below show a walk-in. Atlas does the rest automatically in the next stage.
In OpenTable, click **Front of House** in the left menu. This is your live floor plan for the current shift.
Click the **walk-in** icon in the top right.
Choose the number of guests, or enter a custom party size. Click **Continue**.
Click **Seat now**. OpenTable shows how many tables are free for that party size.
Click a free table on the floor plan to seat the party there. Pick the table whose name matches the Atlas table you want the cart to open on — for example, A4.
The table turns to show it is occupied, and the party appears in the **Seated** list. The guest is now seated on OpenTable.
### 2. Atlas opens a table automatically
You do nothing on Atlas. Within a few seconds, the seating syncs across and Atlas opens a cart on the matching table — here, table **A4** to match the table you seated on OpenTable.
The table shows the party size and a timer since seating. It is marked **No orders** until staff add items.
### 3. Staff take the order on Atlas
Take the order on Atlas as usual. Add items to the table, then tap **Hold/fire** to hold or fire them to the kitchen. Firing items is what sends the order to OpenTable.
### 4. The order syncs to OpenTable
The order flows back to OpenTable on its own. The table total updates on the OpenTable floor plan, so front-of-house staff can see the table is now spending. Atlas sends this straight away, but OpenTable can take up to two minutes to display it because it caches this data on its side.
Open the table on OpenTable to see the full order. Each item, modifier, and the bill total match Atlas exactly.
### 5. The bill is paid on Atlas
Take payment on Atlas as usual. Tap **Charge**, choose the payment method, and charge the guest.
Atlas confirms the order is charged.
On Atlas, the table is freed and returns to the floor plan with no open orders.
### 6. The table is released on OpenTable
What happens next on OpenTable depends on your auto-finish setting.
**If auto-finish is on**, the payment syncs across and OpenTable finishes the table on its own. The party moves to the **Finished** list and the table is freed for the next seating.
Click a finished party to see its order details — the items and total match the Atlas bill.
**If auto-finish is off**, the table stays marked as paid until you finish it by hand. Click the table, then click **Finish** to release it.
To turn auto-finish on, see [Optional: release tables automatically](#optional-release-tables-automatically) below.
## Optional: release tables automatically
Once the integration is live, OpenTable can free up tables for the next seating on its own.
Turn on **Automatically finish tables after payment** in your OpenTable settings. When the bill is paid on Atlas POS, OpenTable marks the table as finished and releases it after a set time. Staff can still finish a table manually at any time.
## If it doesn't work
**A cart didn't open when a guest was seated**
1. Check the table name. It must match OpenTable exactly, including capitalisation and spaces.
2. Seat the reservation manually from the POS in the meantime — service is not blocked.
3. If table names match and it still fails, contact support with the reservation time and table name. Support can check whether the integration is enabled for your outlet.
**Reservations are not appearing in Atlas**
1. Confirm the reservation exists in OpenTable for the correct restaurant location.
2. If it does, contact support with the guest name and reservation time. Support can check whether the integration is enabled for your outlet.
**Orders or bills are not showing in OpenTable**
1. Wait up to two minutes. OpenTable caches order and pricing data on its side, so updates from Atlas take a short while to display. The delay is on OpenTable, not Atlas.
2. If your account was connected recently, the outlet may not be fully set up yet.
3. Contact support with the outlet name. Support can check the connection and outlet setup.
If the issue persists, contact support at [hello@atlas.kitchen](mailto:hello@atlas.kitchen).
## What's next
* [Set up your POS](/stations/pos)
* [Manage operating hours](/merchant-portal/operating-hours)
# Set up Revel POS integration
Source: https://help.atlas.kitchen/integrations/revel-setup
Integrate Atlas with Revel POS. Configure API keys, map menus and dining options, sync orders, and test the connection for seamless operations.
## Step 1 - Get API information
The Atlas team will use this information to set up the integration with Revel. These are the details we will need:
* **Revel account URL** (E.g. [https://restaurantname.revelup.com/](https://companyname.revelup.com/))
* **Establishment Number(s)** (if you have multiple locations, each location will have a unique number)
* **API key and API secret:**
* If you don't have this information, you can email to your Revel reseller something similar to this:
> Hi...,
> We will integrate Revel with Atlas, and we need our API KEY, API SECRET, Revel Account url and Establishment Number.
> Can you be able to provide me with that information?
> Cheers,
It might take a couple of days for them to share the above information. Share it with your Atlas onboarding manager once you receive it, and we will handle the rest.
## Step 2 - Configuration on Revel
### **2.1 - Set up menus**
Revels allow merchants to create custom menus that can be used for online orders (aka web orders). Atlas will pull these menus to use them for your delivery and dine-in channels.
Here's a quick view on how the mapping works. This is how the delivery menu is set up on Revel:
This is the same delivery menu on Atlas, when it's pulled from Revel:
For menus — if your dine-in and delivery menus are different (e.g. pricing, product names, SKUs), you will need to set up on Revel a menu for each of these channels, and check the Categories Atlas should pull.
For products — you will need to set each price variation as a different Product on Revel, and house it under the correct Sub-category > Category.
Your custom menus should have these values:
* Name: Enter something to easily identify the menu (e.g. Atlas Scan To Order).
* Application Type: `Mode`
* Mode / Station: `Online`
* Active: `Check`
* Click on Effective Dates/Time > Toggle Date Range & Everyday as `Open` > Set Date Range Start Date as a day in the past, leave End Date empty > Ensure Everyday is Open at 12:00AM & Close at 11:59PM > `Save`
Alternatively, check [Revel guide on how to create custom menus](https://support.revelsystems.com/s/article/Custom-Menus-1583150454200).
You will need to set 2 sets of SKUs on Revel, if you are using Atlas Aggregator and your third-platform menus (e.g. Grabfood, Deliveroo) have a different price.
### **2.2 - Set up dining options**
To set up the integration, we need to link Atlas order sources (e.g. Scan to order, Grabfood, etc.) to a corresponding Dining option(s) on Revel. More than one order source can point to the same Dining option too.
Create a dining option on Revel, and share with your Account Manager the mapping Atlas should follow. You can check [Revel's guide on how to set up a custom dining option](https://support.revelsystems.com/s/article/Adding-and-Removing-Dining-Options-1583149094555).
### **2.3 - Set up payment types**
To set up the integration, we need to link Atlas order sources (e.g. Scan to order, Grabfood, etc.) to a corresponding Payment types option(s) on Revel. More than one order source can point to the same Dining option too.
Usually, most merchants just point all Atlas orders to a single Payment option on Revel, called “Atlas”.
Create a payment type on Revel, and share with your Account Manager the mapping Atlas should follow. You can check [Revel's guide on how to create a custom payment option](https://support.revelsystems.com/s/article/Customizable-Payment-Methods).
### **2.4 - Set up discounts**
**Set up a dynamic discount on Atlas and share the barcode with Atlas.** Revel only supports dynamic discounts with online orders, so we will need to set that up.
Check [Revel's guide on how to set up a discount code](https://support.revelsystems.com/s/article/Setting-Up-Discounts-1583151657417).
### **2.5 - Set up dynamic service fee (for delivery fees)**
We will need to set up a dynamic service fee to capture the delivery fee on Revel too. When you create this, make sure the Alias is `deliveryfee`, all in small characters and single word.
Here an example of how your Dynamic delivery fee should look like:
Check [Revel's guide on how to set Dynamic service fees](https://support.revelsystems.com/s/article/Service-Fee-Guide-1583149941083).
If you don't see this option, reach out to your Revel reseller so that they enable it for you. Dynamic service can only enabled by the Revel support team.
### **2.6 - Enable the “Print online orders” option on the main POS station**
This option can only be enabled on one POS station per outlet. Usually, Revel recommends enabling this option at the central station at the outlet. To **enable Print Online orders**:
* Go to **Establishment** > **Stations >** Select your main or central station **>** Scroll down to Printing on the Details tab > Check the box Print Online Orders
If you don't see this option, reach out to your Revel reseller so that they enable it for you. Print Online orders can only enabled by the Revel support team. You might still not be able to see it, even after they enabled it for you.
After Atlas syncs your orders to Revel, any printing configuration within Revel needs to be configured directly on Revel (and cannot be set on Atlas).
## Step 3 - Configuration on Atlas
### **3.1 - Set up Revel sync lead time and Atlas print lead time**
When a new order flows in, we can help you set two types of triggers:
* Atlas print lead time → When you want orders to print on your Atlas hardware
* Revel sync lead time → When you want orders to sync to Revel POS. This is a lead time is counted from the serving time (and not preparation time).
Example:
* Atlas print lead time = 120 mins
* Revel sync lead time = 30 mins
If a delivery order is placed at 10am, for the serving time of 4:00pm - 4:30pm, this will happen:
* Order prints on your Atlas at 2:00pm.
* Order syncs to Revel (and print on your Revel printers) at 3:30pm.
Best practice: Print orders earlier on Atlas hardware (so that front of house is aware and can plan), and sync them to Revel only when the kitchen should start preparing them.
### **3.2- Set up table mapping between Atlas & Revel**
If your Revel establishment is using tables and you need that information for operations, we will need to:
1. Set up tables on Revel
2. Set up tables on Atlas
3. (Atlas team) Do a manual mapping for these 2 tables
4. (Atlas team) Enable feature flip `use_revel_table_integration` to send table information with each order
Reach out to your main point of contact on Atlas to get points 3 & 4 done, and if you need any help with point 2.
## Step 4 - Test the integration
**4.1 - Schedule testing time with the merchant to test the integration**
1. Verify menu sync (products, prices) on Atlas
2. Verify order sync on Revel\*\*\*\*
1. The order appears on POS stating as a closed order
2. The order appears with the correct dining option
3. The order appears with the correct payment option
4. The order appears with the correct payment breakdown
5. The order appears with the correct call name
6. The order appears on the order history report
7. (if using tables) The order appears with the correct table
## FAQs & other info
### Important considerations
* If this is not a brand-new integration, some of your existing Online pre-orders placed before the integration is set up will not sync to Revel.
* Atlas does not currently support Revel Combos / Product Group pricing. Aggregator stores (e.g. Grabfood, Foodpanda) usually have issues with this setup too.
### Settings FAQs
* API key
* API secret
* Account URL
* Establishment ID
* Permission to pull the web orders menu for a given establishment
* Permission to push the a web orders
* Permission to pull dining options
* Permission to pull payment options
Revel needs to turn on Print online orders option in order to listen to web orders
Atlas uses one of the payment methods listed on `/resources/CustomPaymentType` API (verify this with merchant)
Auto-closing orders is a setting that you can configure on Revel as a Revel user. It's located in the Revel management console, inside the settings tab. It should look like this:
This might happen if your newly created dining options (e.g. Atlas STO, Atlas Online, Grabfood, etc.) are not selected to be displayed on your KDS.
You can fix this by clicking “Filter by” on the top right corner of your Revel KDS, and making sure all these dining options are selected.
### Menu FAQs
Atlas uses web orders menu `weborders/menu/?establishment=${establishment}`
All the custom menus that are tagged as Online will be part of this menu
All the categories/products that are marked to be in an online menu will be part of the menu
# Accept ShopBack payments
Source: https://help.atlas.kitchen/integrations/shopback
Let customers pay with the ShopBack app at your POS and kiosk. They scan a QR code on your Atlas Pay terminal and earn cashback.
**Who is this article for?**
Restaurant operators who want to accept ShopBack payments on Atlas POS and Atlas Kiosk.
## What this does
ShopBack is a cashback and rewards app. Customers pay through the app using a linked card or wallet, and earn cashback at your store.
With this integration, ShopBack appears as a payment type on your Atlas POS and Kiosk. When ShopBack is selected at checkout, a QR code appears on your Atlas Pay terminal. The customer scans the code with the ShopBack app and pays. Atlas marks the order as paid automatically.
## Before you start
Enabling the payment type is only half the setup. The Atlas team must also connect your account to ShopBack. Until both are done, ShopBack is greyed out on the POS and does not show on the kiosk.
ShopBack needs an Atlas Pay terminal, because the QR code is shown on the terminal screen. Stations without a terminal cannot take ShopBack payments.
## Turn on ShopBack
Two things must happen before ShopBack works at checkout. You enable the payment type, and the Atlas team completes your account setup.
In the merchant portal, go to **Settings** > **Payment types**.
In the **Terminal payment types** section, switch the **Enabled** toggle on next to **ShopBack**.
Email your account manager or [hello@atlas.kitchen](mailto:hello@atlas.kitchen). The Atlas team connects your account to ShopBack and confirms when it is live.
Once the Atlas team confirms, ShopBack appears in the payment method selection on your POS and Kiosk.
## Taking a ShopBack payment
Take the order as usual. Tap **Charge**, then select **ShopBack** as the payment method.
On the kiosk, the customer selects **ShopBack** on the payment screen themselves.
A QR code appears on the Atlas Pay terminal. It does not appear on the POS or kiosk screen.
The customer scans the code with the ShopBack app and confirms the payment in the app.
After the customer pays, the terminal takes a couple of seconds to show **Approved**. Atlas then marks the order as paid. Print receipts and fire the order as usual.
## What should happen
* The QR code appears on the terminal within a few seconds of selecting ShopBack.
* The terminal shows **Approved** a couple of seconds after the customer pays in the app.
* The order is marked as paid in Atlas.
* The customer sees a payment confirmation and their cashback in the ShopBack app.
## Good to know
* **Payment limits**: ShopBack accepts payments between \$0.10 and \$9,999. For totals outside this range, ShopBack cannot be selected at checkout.
* **Where it works**: ShopBack is available on Atlas POS and Kiosk only. It is not available on Atlas Online or Scan to Order.
* **Refunds**: Refund the order in Atlas as usual. The refund is triggered on ShopBack automatically. See [Issue refunds](/merchant-portal/refunds).
* **Payouts**: ShopBack pays you directly, under your ShopBack agreement. ShopBack payments are not included in your Atlas payouts, and Atlas does not deduct a payment processing fee on them.
* **ShopBack discounts and cashback**: These are handled inside the ShopBack app. They do not appear on the POS and do not change the order total in Atlas.
## Turn off ShopBack at one outlet
If some of your outlets take ShopBack and others do not, limit it per outlet.
If an outlet has no POS payment types selected, it uses all your globally enabled payment types, including ShopBack. To exclude ShopBack, you must select every payment type the outlet does accept.
In the merchant portal, go to **Outlet settings** > **Outlets**. Click **Edit** next to the outlet, then find the **Payments** section.
Under **POS payment types**, select all the payment types this outlet accepts, and leave ShopBack out.
Click **Update outlet**. ShopBack no longer appears at checkout for this outlet.
## If it doesn't work
1. Check the order total. ShopBack cannot be selected below \$0.10 or above \$9,999.
2. Check ShopBack is switched on under **Settings** > **Payment types**, in the **Terminal payment types** section.
3. Check the outlet's **POS payment types** under **Outlet settings** > **Outlets**. If payment types are selected there, ShopBack must be one of them.
4. Check the station has an Atlas Pay terminal.
5. If ShopBack is still greyed out on the POS, or missing on the kiosk, the Atlas setup may not be complete. Contact support.
1. Wait a few seconds. The terminal takes a moment to confirm the payment.
2. Check your ShopBack merchant dashboard to verify whether the payment went through.
3. Ask the customer to show the **Payment details** screen in their ShopBack app.
4. If the payment went through but the order isn't marked as paid, follow the steps in the next section.
1. Check the terminal is switched on and connected.
2. Cancel the payment and select **ShopBack** again.
3. If the terminal is unresponsive, see [Terminal troubleshooting](/hardware/terminal-troubleshooting).
4. Take another payment method in the meantime. Service is not blocked.
The customer's ShopBack app is the source of truth for the payment.
1. Ask the customer to open the payment in the ShopBack app and show the **Payment details** screen.
2. Take a photo or screenshot of that screen.
3. If a screenshot isn't possible, note down the ShopBack Order ID (e.g. 260819-5594-NLZU), the date and time, the amount, and the store name.
4. Send this to support at [hello@atlas.kitchen](mailto:hello@atlas.kitchen) so the team can reconcile the payment.
If the issue persists, contact support at [hello@atlas.kitchen](mailto:hello@atlas.kitchen).
## What's next
* [Add or remove payment types](/merchant-portal/payment-methods)
* [Issue refunds](/merchant-portal/refunds)
* [Terminal troubleshooting](/hardware/terminal-troubleshooting)
# Set up and sync aggregator menus
Source: https://help.atlas.kitchen/menu-builder/aggregator-menus
Run one Atlas menu across GrabFood and Foodpanda, keep it in sync, and avoid the changes that break a sync.
Atlas builds your GrabFood and Foodpanda menus from your Atlas menu. You manage one menu in Atlas, and it serves every platform and every outlet, so you don't keep a separate menu for each app or location.
This guide is about your **menu** on the delivery apps. To first connect your GrabFood or Foodpanda account, see the integration setup under **Integrations**.
## Manage your menus from Atlas
Once your menu is on the apps, make every change in Atlas, not in the GrabFood or Foodpanda merchant portals. Atlas is the source of truth, and the next sync overwrites whatever is on the app.
Don't remove an item from your Atlas menu while it's still live on an aggregator. If a customer orders that item on GrabFood or Foodpanda and it no longer exists in Atlas, Atlas can't convert the order and it fails. Remove the item from the menu, then sync so it comes off the app too.
## Sync your menu
Atlas syncs your menus to the aggregators automatically once a day, at 2pm. To turn the automatic sync off, contact support.
The automatic sync is not enough on its own. After any menu change, a new item, a price change, a renamed item, or a new availability condition, sync the menu yourself. Sync from the menu's options in **Menu builder** > **Menus** (**Sync to GrabFood** or **Sync to Foodpanda**). Changes usually take 5 to 10 minutes to show on the app, depending on the platform.
After a sync, check the warnings. See [Sync warnings](#sync-warnings) below for which ones matter.
## One menu, or one per platform
By default, one menu covers every platform and outlet. Most merchants only need this. Mark the one menu for both **GrabFood** and **Foodpanda**, and it serves both apps.
If you want a different menu on each app, create two menus and mark one for **GrabFood** and one for **Foodpanda**. Reuse the same sections across both, so you still edit your items in one place.
To run a platform-only item, reuse all your sections in both menus, then add one extra section, for example **GrabFood exclusives**, and pin it to the top of the GrabFood menu. Only that menu's exclusive section goes to GrabFood, and everything else stays shared.
## Take a menu off an app
To stop serving a menu on GrabFood or Foodpanda, unmark the platform and sync again.
1. Open the menu in **Menu builder** > **Menus**.
2. Under **External menus**, unmark the platform (e.g. **GrabFood**).
3. Save the menu, then sync it to that platform.
Unmarking does not sync on its own — always sync after. The menu comes off the app within 5 to 10 minutes. Your Atlas menu stays unchanged, so you can mark the platform again later to put it back.
## What the apps support
* **Nested modifiers are not supported.** If a product has a nested modifier group, the whole product fails to sync and is left off the app. Remove nested modifier groups from anything you sell on aggregators. See [How menus work](/menu-builder/overview) for what counts as a nested modifier group.
* **Availability conditions carry over.** Set them in Atlas and they apply on the apps too. Keep your Atlas operating hours matching the operating hours on each platform, because Atlas uses operating hours to build the synced menu around your availability conditions.
* **Images are handled for you.** Upload one image per the Atlas guidelines. Atlas crops and adjusts it for each platform, so you don't need separate images for GrabFood and Foodpanda.
* **Nutri-Grade is handled for you.** Atlas adds the Nutri-Grade score to the item photo automatically when it syncs.
## Sync warnings
A sync can succeed and still show warnings. The menu still syncs. The warnings just tell you what Atlas changed to meet the apps' rules. Tap **Click here to view the warnings** to read them. Most are harmless, but one is not.
Act on this one. The item has a nested modifier group, which the apps don't support, so it was left off the menu. Remove the nested modifier group, then sync again.
Safe to ignore. The apps limit how many options a modifier group can offer, so Atlas lowers the maximum to fit. The item still syncs.
Safe to ignore. The apps cap description length, so a long one is trimmed. The item still syncs.
If an item still isn't right after a sync, contact support at [hello@atlas.kitchen](mailto:hello@atlas.kitchen) with your outlet name, the platform, and the affected item.
## FAQs
No. GrabFood does not send group-order participant names through its partner API. Atlas cannot add them to item notes or show them against each item.
Open the order in GrabFood before packing. Match each item to the participant name shown there.
If the names are missing in GrabFood, contact GrabFood support.
## Next steps
* [Pricing rules](/menu-builder/pricing-rules): charge a different price on GrabFood and Foodpanda.
* [Update menu item prices](/menu-builder/draft-update-prices): change a single price or update many at once.
# Availability conditions
Source: https://help.atlas.kitchen/menu-builder/availability-conditions
Control when and where your menu sections and products are available across outlets, dates, times, and fulfilment types.
**Who is this article for?**
* Atlas users with Manager or above permissions. Set permissions from **Settings > Team members**.
* Users managing menu item visibility across times, dates, outlets, and fulfilment types.
## What this does
This feature allows you to control the availability of your menu sections and/or products automatically. You can restrict items based on time of day, calendar dates, specific outlets, or fulfilment types. This ensures customers can only order items when they are active.
## When to use this
Use availability conditions to show sections or products only when you want customers to order them. You can set conditions by:
* **Time of day**. For example, breakfast platters before 11am or lunch deals from 12–3pm.
* **Specific dates**. For one-off events, holidays, or seasonal menus that turn on and off automatically.
* **Outlet**. Show items only at certain outlets (for example, a bar menu only at your flagship location).
* **Fulfilment type**. Show items only for dine-in, pickup, or delivery (for example, hide sharing platters from delivery).
You can combine these conditions with **and** / **or** to get the exact result you want. For example: show a dish only at the Orchard outlet **and** only for dine-in between 6pm and 10pm.
## Steps
You can apply conditions to a whole **section** or to individual **products**. A condition set on a section applies to every product inside it, so the entire section appears or hides together.
### Open the Availability panel
Follow these steps to access the Availability panel:
Go to **Menu builder** > **Menus** on the [Atlas Merchant Portal](https://portal.atlas.kitchen).
Find the menu where your product or section lives. Tap the three-dot menu and select **Edit**.
Open the one you want to set conditions on:
* **For a section**. Tap the **Edit** button on the section header.
* **For a product**. Tap the three-dot menu on the product card and select **Edit**.
Scroll to the **Availability** section in the settings panel.
You have three ways to start:
* **Duplicate availability conditions from another section**. Copy conditions from a section that already has them set up.
* **Duplicate availability conditions from a product**. Copy conditions from a product that already has them set up.
* **Create availability condition group**. Start fresh and build your own conditions.
Use duplicate when several sections or products share the same conditions (for example, all breakfast items follow the same time and outlet condition).
### Fill in the availability fields
Once you create a condition group, fill in these fields:
* **Available if / Unavailable if**. Pick the logic that matches your goal:
* **Available if**. The item shows **only** when your conditions are met.
* **Unavailable if**. Hides the item when your conditions are met. Must be paired with an empty **Available if** group. See the warning below.
* **Only apply for a certain date range?**. Toggle on to run the condition only between specific dates (for example, a Christmas menu from 1 Dec to 31 Dec).
* **Hide item when unavailable?**. Toggle on to remove the item from the menu entirely when unavailable. Leave off to keep it visible but greyed out and not orderable.
* **Reason to display to customer for unavailability**. Required when **Hide item** is off. Write a short, clear message customers will see. Be specific so they understand why the item isn't available.
* Good: *Only available at McNair outlet, Monday to Friday.*
* Avoid: *Not available right now.*
If you pick **Unavailable if**, add a second condition group set to **Available if** and leave its conditions blank. Atlas needs an explicit "always available" baseline to fall back to.
Read the full condition as: "Unavailable when X, **and** available the rest of the time."
### Build your conditions
Add one or more conditions under **Available if** (or **Unavailable if**). Each condition has a **type** (Outlet, Fulfilment type, Serving day of week, time of day, and so on) and a **value**.
Combine conditions using two buttons:
* **+ And includes a new condition**. Adds a condition that must **also** be true. Use **and** when **every** condition in the group needs to be met (for example, outlet **is** McNair Rd **and** fulfilment **is** dine-in).
* **+ Or meets a new condition**. Adds a separate condition group joined by **or**. The item is available if **any** group is fully satisfied. Use **or** when you want alternative combinations to qualify.
The example above reads: "Available at McNair Rd for dine-in, **or** available at Mushu's dumplings on Monday–Friday."
### Save your changes
Tap **Save** to apply the conditions. Changes take effect immediately on POS and QR ordering. Connected aggregators (such as GrabFood and Foodpanda) may take a few minutes to sync.
## Common examples
**Goal:** show a "Happy Hour" section only Monday to Friday from 5pm to 7pm.
Apply the condition to the **section** so the whole section hides outside those hours.
* **Logic**. Available if
* **Hide item when unavailable?**. On
* **Conditions** (joined by **and**):
* Serving day of week **is** Monday, Tuesday, Wednesday, Thursday, Friday
* Serving time of day **is** between 5:00pm and 7:00pm
**Goal:** a "Mother's Day specials" section runs from 10 May to 16 May.
Apply the condition to the **section** containing the special items.
* **Logic**. Available if
* **Only apply for a certain date range?**. On. Set 10 May to 16 May.
* **Hide item when unavailable?**. On
* **Conditions**. Leave blank to make the section available throughout that window, or add a Serving day of week condition if you want to restrict further (for example, only the final weekend).
**Goal:** a "Specials" section shows at both your outlets, but one signature dish only shows at the McNair outlet.
Apply the condition to the **product**, not the section. Leave the section open to both outlets so the rest of the items still appear at both.
* **Logic**. Available if
* **Hide item when unavailable?**. On
* **Conditions**:
* Outlet **is** McNair Rd
**Goal:** one menu with a Lunch section (11:30am–3pm) and a Dinner section (5:30pm–10pm) that auto-swap.
Set conditions on each section separately.
**Lunch section**
* **Logic**. Available if
* **Hide item when unavailable?**. On
* **Conditions**. Serving time of day **is** between 11:30am and 3:00pm
**Dinner section**
* **Logic**. Available if
* **Hide item when unavailable?**. On
* **Conditions**. Serving time of day **is** between 5:30pm and 10:00pm
**Goal:** hide alcohol or fragile items from delivery orders, but keep them visible for dine-in and pickup.
Apply the condition to each **product** (or to a section if every item inside follows the same condition).
* **Logic**. Unavailable if
* **Hide item when unavailable?**. Off (so customers on dine-in or pickup still see it, and customers on delivery see a clear reason instead)
* **Reason to display**. *Not available for delivery. Please choose dine-in or pickup.*
* **Conditions**. Fulfilment type **is** Delivery
**Goal:** a "Weekend Brunch" section that only appears on Saturday and Sunday from 9am to 2pm.
Apply the condition to the **section**.
* **Logic**. Available if
* **Hide item when unavailable?**. On
* **Conditions** (joined by **and**):
* Serving day of week **is** Saturday, Sunday
* Serving time of day **is** between 9:00am and 2:00pm
**Goal:** a new menu section goes live on 1 July, not before.
Apply the condition to the **section**.
* **Logic**. Available if
* **Only apply for a certain date range?**. On. Set start date 1 July, leave end date open (or set far in the future).
* **Hide item when unavailable?**. On
**Goal:** show a product only to dine-in customers. For example, an optional "Serve later" modifier on desserts that only makes sense when the customer is eating in.
Apply the condition to the **product**.
* **Logic**. Available if
* **Hide item when unavailable?**. On
* **Conditions**: Fulfilment type **is** Dine-in
## What should happen
Once you save, the condition applies as follows:
* **Diner-facing storefronts (Kiosk, QR, Atlas Online)**. Fully sync to your conditions. Items appear, hide, or grey out exactly as configured.
* **POS (staff-facing)**. Conditions do **not** apply. Staff always see the item and decide whether to serve it on the spot. Use the POS for in-the-moment availability calls (for example, an item runs out mid-service).
* **Aggregators (GrabFood, Foodpanda, etc.)**. Only **time-based** conditions (such as serving time of day or day of week) sync to the aggregator. Outlet and fulfilment-type conditions are handled by the aggregator's own setup, not by Atlas conditions.
* **Stocks page**. When a condition makes an item unavailable, it's also hidden from the Stocks page during that period, so staff aren't shown items they can't actually toggle.
## If it doesn't work
Check the following common issues:
* **Menu not published**. If you configured conditions on a draft item, you must publish the menu changes before they take effect.
* **Timezone mismatch**. Ensure your outlet timezone is configured correctly under **Settings** > **Outlet settings**. Conditions use the local outlet timezone.
* **Inherited conditions**. Check if the section containing the product has a condition. Products inherit conditions from their parent section.
* **Aggregator sync delayed**. External channels like GrabFood and Foodpanda may take up to 10 minutes to sync and reflect changes.
No, this is expected. Availability conditions only apply to diner-facing storefronts (Kiosk, QR, Atlas Online). POS is staff-facing, so the item stays visible there and your team decides whether to serve it. If you want the item gone from POS too, archive the product or remove it from the menu instead.
Aggregators only sync **time-based** conditions (serving time of day, serving day of week, date ranges). Outlet and fulfilment-type conditions don't carry over. You need to configure those directly in the aggregator's dashboard.
This is expected. When a condition marks an item as unavailable, it's hidden from the Stocks page during that period so staff don't see items they can't toggle. The item will reappear automatically once it's back in its available window.
Walk through your condition one group at a time:
* **And** stacks conditions inside the **same group**. Every condition in that group must be true.
* **Or** creates a **separate group**. The item is available if any group is fully satisfied.
* If you mix them up, the condition may either be too strict (and-ed too much) or too loose (or-ed alternatives you didn't intend). Read each group out loud as a sentence to sanity-check it.
Duplicating only copies the conditions. You still need to:
* Review the copied conditions and adjust any outlet, time, or date values that should differ.
* Tap **Save** on the section or product. Duplicating doesn't auto-save.
Atlas blocks them from checking out. The diner sees a prompt that the item is no longer available and is asked to remove it before proceeding. This stops your kitchen from receiving orders for items it can't actually serve.
You're missing the paired **Available if** group. Atlas needs an explicit "always available" baseline; without it, the item has no default available state to fall back to.
Set it up as two condition groups:
* **Group 1**. Unavailable if \[your conditions]
* **Group 2**. Available if (leave conditions blank)
This reads as: "unavailable when X, **and** available the rest of the time."
No. Availability conditions only apply to **sections** and **products**. If you need a modifier or component to follow availability conditions, convert it into a standalone product first and apply the condition there.
If the issue persists, contact support at [hello@atlas.kitchen](mailto:hello@atlas.kitchen).
## Next steps
* [Create and configure menus](/menu-builder/create-menus)
* [Set up operating hours](/merchant-portal/operating-hours)
* [Configure POS layout](/menu-builder/pos-layout)
# Create and configure menus
Source: https://help.atlas.kitchen/menu-builder/create-menus
Build Atlas menus with sections, products, and modifiers. Configure pricing, images, and customisation options for POS, online, and kiosk ordering.
**Who is this article for?**
* Atlas users with Manager or above permissions. Set permissions from **Settings > Team members**.
* Users managing menus for Atlas POS, Scan to Order, Kiosk, Online, or Aggregator platforms.
## Before you begin
Menus in Atlas are designed to keep things organised and make ordering easy for both your team and your customers. Each menu consists of:
* **Sections.** Folders that organise products into logical groups (e.g., "Burgers," "Drinks").
* **Products.** Individual items available for purchase (e.g., "Cheeseburger," "Iced Latte").
* **Modifier Groups.** Customisation options applied to products (e.g., "Choice of Sides," "Extra Toppings").
* **Modifiers.** The specific selections within a modifier group (e.g., "Fries," "Extra Cheese").
This guide will cover how to:
* Create and configure new menus.
* Add sections, products, modifier groups and modifiers.
## Creating a new menu
Follow these steps to create a new menu:
You can leave the ID field blank, which will be auto-generated after saving. The rest of information is Required.
Once the first draft is saved, you can start adding sections, products, and modifier groups.
## Creating and adding sections to a menu
Folders that organise products into logical groups (e.g., "Burgers," "Drinks").
Best practice is to keep it short to \~6 sections. If you have more than 5-6 sections, having a "Highlights" section is recommended at the top.
Follow these steps to add a section:
In the next modal, choose to either create and add a new section to the menu, or add an existing one:
You can leave the ID field blank, which will be auto-generated after saving.
You can also manage sections later by editing your menu, rearranging sections for better navigation, or reusing existing sections across multiple menus.
## Adding products to a section
Individual items available for purchase (e.g., "Cheeseburger," "Iced Latte"). These are housed inside Sections for better organisation (e.g., "Burgers," "Drinks").
To add an existing product to a section, follow these steps:
Note that you can search and select more than 1 for existing products to add in batch to the section.
Tapping on "Create a new product" on the previous step will open the "Product details" page.
To add a new product, fill up the Product details modal and tap on save. The basic values are "Name", "Description", "Price" and "Brand". If you are creating a simple product, and you don't have complicated printing configurations, fill these up and Tap "Save" to create a simple product.
* **SKU.** This is an internal identifier that only you will see (and not diners). You can leave it blank, and one will be generated.
* **Internal name**. This is the label shown on your kitchen receipts, stickers and display screens. Diners will only see the product "Name". If left blank, your staff will see "Name" instead.
* **Exempt from service charge.** Toggle this configuration on for retail-specific products that are exempted from service charges.
* **Printer / KDS / Dispatch tags**. Use this field to tag products to be printed or displayed on the corresponding printers, KDS, or Dispatch screens.
* Tap on this field to see the available tags, or key in a new one and press enter to save it before saving the product.
* During onboarding, we will pre-set these up for you and guide you on how to use them.
* **Product tags.** Use this field to tag products for targeted discounts or segmenting. These tags can be selected and targeted when adding conditions to your discounts
* **Reporting category.** Reporting categories will be reflected in your reports. Only one is allowed per product.
* Tap on this field to see the available categories, or key in a new one and press enter to save it before saving the product.
* **Set daily stock.** Turn this on to give the product a fixed quantity available each day. **Stock per day** is prefilled with 0, so the item starts each day sold out until you add stock on the [Stocks page](/merchant-portal/stocks). Leave the switch off for unlimited stock. This applies across all outlets — a quantity set for a specific date on the Stocks page overrides it for that day. You can also set this on components.
* **Horizontal image**. This will be the image shown for your products.
* We recommend using square images with a minimum size of 800 x 800 pixels, keeping the subject centered, and ensuring the file size does not exceed 1-2 MB.
* Note that the edges of the images may be cropped automatically depending on where they are used across Atlas and the different platforms we integrate with. To avoid unintended cropping, leave some margin-safe space around the subject.
* You can upload it using 3 different methods:
1. Copy from another product
2. Upload from URL
3. Upload file from your device
## Adding promotional labels to a product
Promotional labels are diner-facing labels displayed on your products.
* Use them to highlight items (e.g., "Popular", "New") or add relevant information (e.g., "Discounted").
* You can select a colour that fits and stands out too.
* This is what they'll look like:
## Adding modifier groups to a product
Modifier groups are customisation options applied to products (e.g., "Choice of Sides," "Extra Toppings"). These will contain Modifiers, which are individual customisations or add-ons that can be selected within a product.
For example, a "Choice of Sides" modifier group might contain options (called modifiers) like Fries, Salad, or Coleslaw.
To add a modifier group to a product, follow these steps:
You can add as many modifier groups as you want to a product (best practice is to limit them to 5-6). Use the search bar to find specific ones, and the ID field to identify them internally. If you are creating a new modifier group, continue to the next steps.
## Creating new modifier groups
Tapping on "Create a new modifier group" will open the "Modifier group details" page. It will look like this:
Fill in the details and tap on save to create a new modifier group. Best practice is to create an empty modifier group without modifiers first, save it, and edit it to add all its modifiers.
Let's break it down:
* **Name (Required)**. Enter a name for the modifier group (e.g., "Choice of Sides").
* **ID.** System-generated or custom identifier for the modifier group.
* **Min selection required (Required)**. Set the minimum number of selections a customer must make. For example, if this is optional, set it to 0.
* **Max selection required (Required)**. Set the maximum number of selections a customer can make.
* **Max quantity per modifier**. Define how many times a single modifier can be selected.
* **Print on receipt**. Enable if the modifier group should be printed on customer receipts. It should be on by default.
* **Print large modifiers**. Enable if selected modifiers should appear larger on receipts.
* **Show thumbnails.** Enable if modifier thumbnails photo should display.
* **Select modifiers.** Add individual modifiers to this group (e.g., "Extra Cheese," "Spicy Level").
## Adding modifiers to a modifier group
A modifier is a single customisable component diners can select when ordering a product, that are housed inside Modifier groups. Modifiers can either be free (e.g., "No Onions") or paid (e.g., "Extra Cheese +\$1").
To add a modifier to a modifier group, follow these steps:
* "Price override" replaces the original item's price within the modifier group only. For example, selecting a drink inside a burger costs $2.90, instead of $3.90 when purchased a la carte.
* "Default quantity" assigns a pre-selected default quantity. For example, this is useful for bundles when a few items are included by default.
# Update item prices
Source: https://help.atlas.kitchen/menu-builder/draft-update-prices
Change a single item's price, apply a pricing rule, or update many prices at once with a CSV upload.
You can change a menu price in Atlas three ways, depending on how many items you need to update. This page covers each one.
* **Update a single item price.** The fastest way to change one product.
* **Apply a pricing rule.** Set a different price for a channel or outlet without editing each item.
* **Bulk update prices with a CSV.** Change many prices at once by exporting, editing, and re-uploading a file.
Most day-to-day changes only need the first one. Changing a price affects new orders only. Orders already placed keep the price they were ordered at.
## Update a single item price
A product's price lives on the product itself, so changing it updates the price everywhere that product appears. You can reach the product two ways.
Go to **Menu builder** > **Menus**. Open the brand folder, tap the three dots next to the menu, then tap **Edit**.
Find the product in the menu and tap on its product tile to open **Product details**.
In the **Price** field, enter the new price, then tap **Save**.
Go to **Menu builder** > **Products**.
Search for the product by name or SKU, then tap the edit (pencil) icon on its row.
In the **Price** field, enter the new price, then tap **Save**.
## Apply a pricing rule
When a price should differ by **channel** or **outlet**, for example a higher price on delivery aggregators than dine-in, use a **pricing rule** instead of editing each item. A rule sets the difference once and applies it automatically, so you don't keep two prices in sync by hand.
See the dedicated guide: **[Pricing rules](/menu-builder/pricing-rules)**.
## Bulk update prices with a CSV
Use a CSV when you need to change many prices at once. You export your products to a file, edit the prices in a spreadsheet, then upload the file back. For the full reference on the template columns and the import preview, see [Import products via CSV](/menu-builder/import-products-csv).
Go to **Menu builder** > **Menus**. Tap the three dots next to the menu, then tap **Export products to CSV**.
Open the file in Excel or Google Sheets. Change the values in the **Price** column, then save the file as a CSV.
Keep the **SKU** column exactly as it is. Atlas matches each row to a product by its SKU. If you change a SKU, Atlas treats the row as a new product and creates a duplicate instead of updating the original.
Go to **Menu builder** > **Products**. Tap the three dots in the top-right corner, then tap **Import CSV** and select your edited file.
Atlas shows a preview before anything changes. Check the **Updated products** tab to confirm the new prices look right, and that **New products** is `0` unless you meant to add items. When it looks correct, tap **Confirm import**.
If **New products** shows items you expected to update, a SKU was changed in the file. Cancel, fix the SKU, and import again.
## Troubleshooting
After a price change, you should see:
* The new price on your menu straight away, once you save or confirm the import.
* The new price on new orders. Orders already placed keep their old price.
* Aggregator menus (GrabFood, Foodpanda) update after you sync the menu. See [Aggregator menus](/menu-builder/aggregator-menus).
If something isn't right, check the matching scenario below.
Most import problems come from edits to the file beyond the prices. Open your exported file and check:
* **SKU column unchanged.** A changed SKU creates a duplicate product instead of updating the original.
* **S/N column is a clean ascending list** (1, 2, 3, and so on). A gap or out-of-order value can break the import.
* **Currency cells use a three-letter code** (for example `SGD`). Blank cells default to `SGD`.
* **No columns were deleted or renamed.** Atlas expects the full set of columns from the export.
* **No stray blank spaces** were added inside cells.
Best practice: export the file and change as little as you can. Edit only the prices you need and leave everything else alone.
A SKU was changed in the file, so Atlas created new products instead of updating the existing ones. Archive the duplicates, then re-import with the original SKUs in place.
Aggregator menus update after a sync. Sync the menu, then check again. See [Aggregator menus](/menu-builder/aggregator-menus).
If the issue persists, contact support at [hello@atlas.kitchen](mailto:hello@atlas.kitchen) with your outlet name and the item(s) affected.
## Next steps
* [How menus work](/menu-builder/overview): the building blocks, if you're new to menus.
* [Create and configure menus](/menu-builder/create-menus): add items and sections.
* [Set availability conditions](/menu-builder/availability-conditions): show or hide items by time or rule.
# Import products via CSV
Source: https://help.atlas.kitchen/menu-builder/import-products-csv
Add or update many products at once by uploading a CSV file.
**Who is this article for?**
* Merchants setting up a menu for the first time
* Anyone who needs to add or update many products at once
## What this does
Upload a CSV file to create or update products in bulk. Atlas matches each row to a product by its **SKU**.
* If the SKU already exists, Atlas updates that product.
* If the SKU is new, Atlas creates a new product.
Atlas shows you a preview before anything changes, so you can check the import first.
## When to use this
* Setting up a menu for the first time, instead of adding products one by one.
* Updating many products at once, such as prices, names, categories, tags, or archived state.
* Only changing prices? See [Update item prices](/menu-builder/draft-update-prices) for a quicker flow.
* Changing one product? Edit it on the **Products** page instead.
**Read this before you start.**
* **Do not change SKUs unless you mean to.** A changed SKU creates a new product instead of updating the old one. You end up with duplicates.
* **Always download the latest template.** Atlas checks the column order. An old or edited header row fails the import.
* **Create modifier groups first.** The CSV can attach modifier groups, but they must already exist on the **Modifier groups** page.
## Steps
Go to **Menu builder** > **Products**. Tap the three dots in the top-right corner.
* Tap **Download CSV template** for a blank file with the correct columns.
* Or tap **Export products to CSV** for a file prefilled with your current products. Atlas emails you a download link when it is ready.
Open the file in Excel or Google Sheets. Fill in one row per product.
See [Template columns](#template-columns) below for what each column does.
Some exported cells start with a single quote, such as `'size/spiciness`. Leave the quote in place. It stops your spreadsheet turning the value into a date. Atlas removes it during import.
Save the file as a CSV. Go to **Menu builder** > **Products**, tap the three dots, then tap **Import CSV** and select your file.
Atlas runs a preview before changing anything. The header shows what will happen, for example "Adding 1 product and updating 1 product".
* **New products** — rows with SKUs that do not exist yet.
* **Updated products** — rows matched to existing products by SKU.
* **Errors** — rows Atlas could not process, shown at the top of the modal.
If the **Errors** list shows problems, the **Confirm import** button stays disabled. Fix the file and import again.
When the preview looks right, tap **Confirm import**.
## Template columns
The template has 20 columns. Keep every column and keep them in order.
* **S/N** — the row number. Keep it sequential: 1, 2, 3, and so on.
* **Brand ID** — the number of the brand the product belongs to. Find it in the **Brand ID** column on the Products page or in an exported file.
* **Type** — `Product` for a normal sellable item, or `Component` for an item used inside a bundle. Components appear under the **Components** tab on the Products page.
* **Name** — the product name customers see on menus and receipts.
* **SKU** — the product's unique code. Atlas uses it to match each row to a product. SKUs are saved in lowercase with hyphens, so `Latte L` becomes `latte-l`.
* **Internal name** — the name staff see on kitchen dockets and internal lists. Customers never see it.
* **Description** — a short description shown on menus.
* **Story** — longer product text. Supports simple formatting.
* **Price** — the selling price as a decimal, such as `12.95`.
* **Cost** — what one unit costs you, used for margin reporting. Optional. Numbers only, or leave it blank.
* **Currency** — a three-letter currency code, such as `SGD`. Blank cells default to `SGD`.
* **Report category** — the category this product reports under. Atlas creates the category if it does not exist yet.
* **Report subcategory** — a category nested under the report category. Also created if new.
See [Reporting categories](/menu-builder/reporting-categories) for how categories work.
* **Daily default stock** — how many units are available each day. Leave blank for unlimited stock. You can also set this per product on the product details page with the **Set daily stock** switch.
* **Printer tags** — tags that route the product to a printer. Separate multiple tags with a forward slash, such as `kitchen/bar`.
* **Product tags** — tags for grouping products on the Products page. Separate multiple tags with a forward slash.
* **Section identifier** — the identifier of the menu section to add the product to. Products join the end of the section. Find section identifiers in an exported file.
* **Modifier group identifiers** — the modifier groups to attach, in the order they should appear. Separate identifiers with a forward slash, such as `'size/spiciness`. Each one must match the **Identifier** of an existing modifier group.
* **Archived** — `TRUE` archives the product and removes it from menus and POS layouts. `FALSE` keeps it active or unarchives it. Leave blank for no change.
* **BCRS** — `TRUE` marks the product for the container deposit scheme. `FALSE` removes the marking. Leave blank for no change. Only relevant if your outlet uses BCRS. See [BCRS](/merchant-portal/bcrs).
## What should happen
* Atlas shows an "Import successful" message.
* New products appear on the **Products** page. Updated products show their new values.
* Products with a **Section identifier** appear at the end of that section in your menu.
## If it doesn't work
The header row does not match the current template. Download a fresh template and move your data into it. Do not rename, reorder, or delete columns.
The file contains a character Atlas cannot read. Re-save the file as a UTF-8 CSV, then import again. In Excel, choose **CSV UTF-8** when saving.
The same SKU appears on more than one row. Each SKU can only appear once. Remove or fix the duplicate rows.
A modifier group identifier in the file does not exist in Atlas. Check the exact **Identifier** on the **Modifier groups** page, then fix the cell.
The Errors list names the row and the problem, such as a missing name or a bad price. Fix those rows in the file and import again. Valid rows still cannot be confirmed until every error is resolved.
A SKU was changed in the file, so Atlas created new products instead of updating the existing ones. Archive the duplicates, then re-import with the original SKUs in place.
If the issue persists, contact support at [hello@atlas.kitchen](mailto:hello@atlas.kitchen) with your outlet name and the file you tried to import.
## Next steps
* [Update item prices](/menu-builder/draft-update-prices): bulk price changes with an export-edit-import flow.
* [Create and configure menus](/menu-builder/create-menus): add your imported products to menus.
* [Reporting categories](/menu-builder/reporting-categories): organise products for reporting.
# Translate your menu
Source: https://help.atlas.kitchen/menu-builder/menu-translations
Show a language toggle on your online ordering, scan-to-order, and kiosk menus, and add Chinese translations with a CSV upload.
## What this does
Diners see a language toggle on your online ordering website, scan-to-order (STO), and kiosk menus. They can switch the menu between English and Chinese (中文).
You provide the Chinese text yourself. Download a translation sheet for your menu, fill in the Chinese columns, and upload it. Atlas shows the Chinese version when a diner picks 中文.
## Before you start
* You need a menu set up in Atlas. See [Create menus](/menu-builder/create-menus).
* The toggle appears on your **online ordering website**, **scan-to-order**, and **kiosk** channels. It does not appear on POS or printed receipts.
* The only supported second language is Chinese (Simplified).
## Part 1: Add Chinese translations to your menu
In the Merchant Portal, open **Menus**. Find the menu you want to translate.
Tap the actions menu (⋮) on that menu's row, then tap **Multi-language setup**.
Tap **Download**. You get a CSV file named after your menu (e.g. `Dinner_menu_translation.csv`). The modal also shows the date the sheet was last updated.
Open the CSV in Excel or Google Sheets. Every menu, section, item, and modifier group is a row.
* Fill in **Title (zh)** with the Chinese name.
* Fill in **Description (zh)** with the Chinese description, if the item has one.
* Leave a cell blank to keep showing the default (English) text for it.
Back in the same modal, drag the CSV into the upload area or tap to browse, then tap **Save**.
Do not change the **Source type** and **Source ID** columns. Atlas uses them to match each row back to the right item. Also leave **Title (default)** and **Description (default)** unchanged unless you mean to rename the item itself. These columns overwrite the item's real name and description everywhere, not just the translation.
## Part 2: Show the language toggle to diners
How you turn on the toggle depends on the channel.
**Online ordering website:** the toggle is switched on at the account level. Contact support at [hello@atlas.kitchen](mailto:hello@atlas.kitchen) to enable it.
**Scan-to-order and kiosk:** turn it on yourself in the channel link settings.
Go to **Scan to Order** or **Kiosks**, then open the channel link your menu is on for editing.
Scroll to **Enable language toggle** under General details and turn the switch on.
Choose **English** or **中文 (Chinese)**. This is the language diners see first when they open the menu.
Tap **Save**. The toggle appears on your menu within a few minutes.
## Next steps
* [Create menus](/menu-builder/create-menus) — build and edit your menus.
* [Change the portal language](/merchant-portal/language-switcher) — switch the Merchant Portal's own interface to Chinese.
# How menus work
Source: https://help.atlas.kitchen/menu-builder/overview
How Atlas organises menus, sections, products, and modifiers, and which parts can be shared across them.
Atlas uses a hierarchy to organise what you sell. Each level sits inside the one above it, from the menu a customer opens down to a single modifier. Learn the levels once and the rest of menu building follows.
## Menu hierarchy on Atlas
* **Menus** are the lists your customers order from, such as an All-day menu or a Dinner menu. A restaurant can run several. A product appears only on the menus you add it to.
* **Sections** are folders that group products inside a menu, such as Mains, Sides, or Drinks. A section holds either products or sub-sections, never both.
* **Sub-sections** split a section one level deeper, such as Burgers and Bowls inside Mains. Sub-sections go one level deep only.
* **Products** are the items you sell, such as Classic burger, Fries, or Root beer. The same product can sit in more than one section, and it can also act as a modifier.
* **Modifier groups** are the choices on a product, such as Burger add-ons or Choice of side. They set how many options a customer can pick.
* **Modifiers** are the options inside a group, such as Extra cheese or Fried egg. Every modifier is itself a product or component.
* **Nested modifier groups** are a modifier group attached to a modifier, such as Dressing on a Side salad. They work like any other modifier group, except their parent is a modifier instead of a product.
**Nested modifier groups have two limits:**
* They allow only one choice (a maximum selection of 1).
* Aggregator platforms such as GrabFood and Foodpanda do not support them.
## Sharing parts of the menu
Most parts of the hierarchy can be used in more than one place. You add an existing one instead of building a copy, so there is a single item to keep up to date.
* **A section can appear in more than one menu.** House Drinks can sit on both the All-day and Dinner menus.
* **A modifier group can be attached to more than one product.** Burger add-ons can apply to both the Classic burger and the Chicken burger.
* **A product can also be used as a modifier.** Fries can sell as a side and appear inside Choice of side.
Because it is the same item, editing it updates every place it appears. If you want a different price when a product is used as a modifier, set a **price override** on the modifier rather than creating a new product.
Products also carry **Printer / KDS / Dispatch tags**. These decide which printer or kitchen screen an item prints on. They do not change what the customer sees. See [Item routing and printers](/menu-builder/printer-routing).
## Where to go next
Build a menu from scratch with sections, products, and modifier groups.
Change a single price or update prices in bulk by CSV.
Set different prices by channel or outlet, such as higher prices on delivery apps.
Set up and sync your menu on GrabFood and Foodpanda.
Show or hide items by time, day, or other rules.
Group products so they roll up correctly in your reports.
Arrange how items appear on the POS screen for your staff.
Route each item to the right printer or kitchen screen using tags.
# Set up POS layouts
Source: https://help.atlas.kitchen/menu-builder/pos-layout
Create and customise Atlas POS layouts. Add pages, configure product and discount tiles, and assign layouts to specific outlets for efficient ordering.
**Who is this guide for?**
* Atlas users with Admin or Manager permissions. Set permissions from **Settings > Team members**.
* Users subscribed to Atlas POS.
## Before you begin
This guide will walk you through setting up and customising your POS layouts in Atlas. You'll learn how to create layouts, add pages, configure different tile types, and assign layouts to specific outlets.
## Creating a POS layout
A POS layout organises how your menu and ordering interface appear on Atlas POS. Creating a layout allows you to customise navigation and product placement for your team.
Follow these steps to set up a new layout:
## Adding pages to a POS layout
Pages help organise different sections of your POS layout, allowing for easy navigation and a structured menu.
Follow these steps to add new pages to your layout:
If there are too many pages, scroll horizontally to find it, as it will be at the end. You might resort the page by tapping and dragging it too.
You might start adding product or discount tiles in this new page (see next section).
## Adding tiles to your POS
Tiles represent products, discounts, or navigation folders within your POS layout.
Follow these steps to add new tiles to your layout:
If there are too many pages, scroll horizontally to find it, as it will be at the end. You might resort the page by tapping and dragging it too.
* **Page tile** creates an empty folder, for you to add items inside it. Click on it after you've created it to open it.
* **Product tile** links to an existing product. It's the most common one. An additional "Select" button will display to select the right product.
* **Discount tile** links to an existing discount. An additional "Select" button will display to select the discount.
Note you can also enter your own colour code, or tap on the colour to select a predefined one.
It's best to use darker colours for better visibility (text is white).
## Assigning POS layouts to different outlets
If you manage multiple outlets, you can assign specific POS layouts to each location to ensure the correct menu and configurations are in place.
Follow these steps to set up POS layout assignments:
# Pricing rules
Source: https://help.atlas.kitchen/menu-builder/pricing-rules
Set a different price for selected products on certain channels, without editing each item by hand.
Pricing rules change the price of selected products when a condition is met, without you editing each item or creating duplicate SKUs. A rule might add a markup on delivery apps, or set a flat promotional price. Find them at **Menu builder** > **Pricing rules**, or go straight to the [Pricing rules page](https://portal.atlas.kitchen/pricing-rules).
Rules are ranked. A rule higher in the list applies before the ones below it, which matters when more than one rule could touch the same item.
Pricing rules are still being expanded. Today they apply **by channel only**, and only **aggregator channels (GrabFood and Foodpanda)** can be selected. Support for all Atlas channels, individual outlets, time of day, and member pricing is on the way.
## Create a pricing rule
From **Menu builder** > **Pricing rules**, tap **Create new rule**, then fill in the form below.
Give the rule a clear name in **Rule name**, such as "Aggregator markup" or "\$2 drinks". This is the name you'll see in the rules list.
Under **Select item(s)**, search and add what the rule applies to. You can mix three kinds of selection:
* **Single products**, added one at a time.
* **Reporting categories**, to cover a whole category at once (for example, all Drinks).
* **Tags**, to cover every product carrying a given product tag or printing tag.
To apply the rule to the entire menu, tick **Apply to all items** instead.
If your items aren't grouped yet, set that up first, then come back. See [Reporting categories](/menu-builder/reporting-categories) to group products, or add **Product tags** on each product (see [Create and configure menus](/menu-builder/create-menus)).
Under **Applicable scope**, choose what the rule touches:
* **Top-level products and modifiers** applies to both.
* **Top-level products only** leaves modifier prices alone.
* **Modifiers only** changes only the modifier prices.
Under **Price modifier**, choose the **Adjustment type**:
* **Increase by** or **Decrease by** changes the current price. Set **Type** to **Value** for a fixed amount, or **Percentage** for a percentage.
* **Custom** sets an exact price, whatever the item's current price is. For example, set all drinks to a flat \$2 on GrabFood.
Enter the figure in **Amount**.
Under **Applies when** > **Channels**, add the aggregator channels the rule should run on, such as GrabFood or Foodpanda for a given brand. Channels are required, so a rule needs at least one.
Turn **Activate** on so the rule takes effect, then save. Leave it off to keep the rule as a draft.
### Stop a rule from stacking
By default, more than one rule can apply to the same item in rank order. Turn on **Do not stack with other rules** when a rule should be the final word. If it applies first, it blocks every rule below it. If a stackable rule already applied, this rule is skipped.
**Example.** You run a flat \$2 drinks price and a 10% aggregator markup, and both could land on the same coffee. To keep the coffee at \$2 and not mark it up, turn **Do not stack with other rules** on for the \$2 drinks rule and rank it above the markup. Once the \$2 price applies, the markup is skipped for that drink.
## Reorder and manage rules
All your rules sit in one list at **Menu builder** > **Pricing rules**. Drag a rule by its handle to change its rank. A rule higher in the list applies first. The list also shows each rule's price modifier, what it applies to, its scope, whether it's active, and whether it stacks.
## See which rules apply to an item
In the menu builder, a product that a rule touches shows a **Pricing rules apply** link by its price. Tap it to see which rules apply and on which channel, then tap **Modify** to open the rule.
## Troubleshooting
After you create a rule, you should see:
* The rule in the list at **Menu builder** > **Pricing rules**, marked **Active**.
* A **Pricing rules apply** link on each affected product in the menu builder.
* The adjusted price on the selected channels after you sync the menu. See [Aggregator menus](/menu-builder/aggregator-menus).
If something isn't right, check the matching scenario below.
1. Confirm **Activate** is on.
2. Confirm the item is in the rule, or that **Apply to all items** is ticked.
3. Confirm the **Applicable scope** covers the item. A product won't change under a Modifiers only rule.
4. Confirm the channel you're checking is in the rule's **Channels**.
Rank decides the order. A higher rule with **Do not stack with other rules** on blocks the rules below it. Drag the rule you want to win above the others, or adjust which rules stack.
Aggregator menus update after a sync. Sync the menu, then check again. See [Aggregator menus](/menu-builder/aggregator-menus).
If the issue persists, contact support at [hello@atlas.kitchen](mailto:hello@atlas.kitchen) with your outlet name and the rule affected.
## Next steps
* [Update menu item prices](/menu-builder/draft-update-prices): change a single price or update many at once.
* [Aggregator menus](/menu-builder/aggregator-menus): sync price changes to GrabFood and Foodpanda.
* [Reporting categories](/menu-builder/reporting-categories): group products so a rule can target a whole category.
# Set up item routing and printers
Source: https://help.atlas.kitchen/menu-builder/printer-routing
How Atlas decides which printer prints which item, how to set up your kitchen, bar, and counter printers, and how to fine-tune each receipt type.
Atlas sends each item on an order to the right printer using **Printer / KDS / Dispatch tags**. You add tags to your products. You add the same tags to your printers. When the tags match, that printer fires.
This page covers how routing works, walks through a simple setup end-to-end, then covers the additional settings you can use to fine-tune behaviour.
## How printing works in Atlas
Every item on your menu can carry one or more tags (for example `print_food`, `print_drinks`, `print_retail`). Every printer in an outlet is set to listen for one or more tags. When an order comes in, Atlas checks each item against each printer — every item prints on every printer where the tags match.
Three rules cover almost every setup:
* **Match = print.** If an item carries any tag the printer is listening for, that printer prints it. No match, no print.
* **A printer with no tags is a catch-all.** Leave the tag list blank and the printer will print every item on every order. This is how your customer receipt printer keeps the receipt complete.
* **One tag, three jobs.** The same tags drive your printers, your Kitchen Display Screens (KDS), and your delivery dispatch — that's why the field is called *Printer / KDS / Dispatch tags*. Set them once on the product, they work everywhere.
Tags are free text and **case-sensitive**: `print_drinks`, `Print_Drinks`, and `print-drinks` are three different tags. Use lowercase with underscores and apply the same convention across every outlet.
## A simple setup: Sunny Beans café
Sunny Beans runs three prep stations, each with its own Atlas printer:
| Station | What it prepares | Tag the printer listens for |
| - | - | - |
| Bar | Coffees and other drinks | `print_drinks` |
| Kitchen | Hot food and pastries | `print_food` |
| Counter | Retail and merch | `print_retail` |
Every product on Sunny Beans' menu carries exactly one tag — drinks get `print_drinks`, food gets `print_food`, retail gets `print_retail`. A customer orders a **latte, an avocado toast, and a tote bag**. Three items, three tags. Atlas sends each item to the station that prepares it:
**How to read the diagram:** the **order summary** on the left lists what the customer ordered, with each item's tag underneath. On the right are the three **printer setups** — each card shows the tags that printer is listening for (its *Included tags*) and the **receipt output** it actually prints. The arrows show how each item flows from the order to its matching printer.
The rest of this guide covers how to replicate this kind of setup, then the settings you can adjust once you outgrow the simple case.
**Running a setup like this and something isn't printing where you expect?** Most often the cause is a missing tag on the item — no station is listening for it. Open the product and check the **Printer / KDS / Dispatch tags** field first.
## Setting up a printer on Atlas
Decide one tag per printer destination. Use lowercase with underscores:
* `print_drinks` for the bar
* `print_food` for the kitchen
* `print_retail` for the counter
Tags are case-sensitive: `print_drinks` and `Print Drinks` won't match. Choose one convention and use it across every outlet.
Tags live on the product, not on the menu — once a product is tagged, the tag follows it onto every menu it appears in.
- Go to your menu and open the product. See the Create menus guide if you're new to editing products.
- On the Product details dialog, scroll down to the Printer / KDS / Dispatch tags field.
- Type the tag (or pick an existing one) and confirm. Repeat for additional tags if the item belongs on more than one printer.
- Save.
**Take note:** a product with no tag will only print on **catch-all** printers (printers whose tag list is empty). It will not reach any tagged printer. If your only kitchen printer is tagged, an untagged item won't print there at all.
Each outlet manages its own printers.
- Go to Outlet settings → Outlets and open the outlet you want to configure.
- Open the Printers & receipts tab from the left side menu.
- Click Create new printer.
- Fill in the brand, name (e.g. "Bar printer"), and serial number (printed on the back of the printer, usually below a QR code). See Connect Atlas printer to WiFi if you haven't connected the device yet.
- Toggle Print on POS checkout and/or Print on Online checkout depending on which channels should trigger this printer.
**Not seeing this page or the Create new printer button?** Printer settings are restricted by role. If you can't add or edit printers, ask an account owner to make the change — or reach out to [Atlas support](mailto:hello@atlas.kitchen).
Scroll to **Products to be printed**. Add the tag(s) this printer should listen for under **Tag list** and leave **Include/Exclude products** on **Include tagged products**.
Save. The other fields on this modal are for fine-tuning — see [Routing tags configuration](#routing-tags-configuration).
A single printer can produce more than one kind of receipt — a customer receipt, a kitchen prep ticket, etc. Toggle on the formats you need.
For a basic kitchen printer (bar, kitchen, or counter), enable **Print kitchen receipt**.
Each receipt type you enable gets its own settings panel below, where you can adjust font size, headers, item sorting, and what's shown on the slip. See [Receipt types and their settings](#receipt-types-and-their-settings).
Create a new test order, fire it or charge it with a manual payment, and verify the receipts. If nothing prints, fix the connection before going further.
## Routing tags configuration
The **Products to be printed** modal has five settings beyond the tag list. The tag list is what you need for the basic case; the rest are for layered or unusual setups.
### Tag list: include vs exclude
The toggle below the tag list flips how the tag list is read.
* **Include tagged products**: print only items whose tags match. Use this on every station printer (bar, kitchen, counter).
* **Exclude tagged products**: print everything *except* items whose tags match. Use this on catch-all printers that should print most items but skip one category.
**Example.** A back-office printer prints every order but should not print retail items (collected at the counter, not the back). On that printer, switch to **Exclude tagged products** and add `print_retail`. The printer prints everything except retail items.
**Exclude** mode prints anything that isn't tagged. A new product added without a tag will start printing on every exclude-mode printer immediately.
### Separate modifiers
Modifiers (the choices on a product — "add cheese", "extra hot", "add a milkshake") follow their parent item by default. If a modifier has no tag of its own, it prints indented under the parent — that's how most restaurants run, and you don't need to touch anything.
Turn **Separate modifiers** on only when a tagged modifier should print as its own line on this printer, typically because it's handled by a different station from its parent.
**Example.** A cheeseburger is tagged `print_food` and goes to the kitchen. One of its modifiers, "Add chocolate milkshake", is tagged `print_drinks`. With **Separate modifiers** turned on at the bar printer, the bar receives the milkshake as its own line. The kitchen still receives the burger ticket without it. If **Separate modifiers** wasn't turn on, nothing would print at the Bar printer, as only top level items are matched.
Untagged modifiers always stay with their parent. **Separate modifiers** only affects modifiers that carry a tag the printer is listening for.
**Before enabling, check your modifier tags in Menu builder.** Only modifiers prepped at a different station from their parent should carry a station tag. Every tagged modifier will fire separately.
### Exclude tagged modifiers
Modifiers carrying any tag listed here are **dropped** from this printer's receipts. Use this to keep noise off a printer that doesn't care about certain modifiers. Leave blank to print every modifier.
**Example.** A bar printer should show ice level and sugar level but not kitchen modifiers like "no onions". Add the kitchen-modifier tag(s) here and they will be stripped from bar tickets.
### Fulfilment types and area
Both fields narrow *which orders* fire this printer.
**Fulfilment types** restrict the printer to specific order types. Atlas supports:
* **Dine-in** — orders linked to a table.
* **Pickup / takeaway** — customer collects in-store.
* **Delivery** — your own delivery or third-party aggregators (foodpanda, Deliveroo, etc.).
Leave blank to print for all fulfilment types.
**Area** is dine-in only. Restrict the printer to specific table areas (for example "Patio", "Second floor", "Private dining"). Use this when one outlet has multiple kitchens or bars serving different parts of the venue.
**Example.** A two-floor restaurant with a downstairs bar and an upstairs bar routes patio orders to the patio bar printer and indoor orders to the main bar printer. A separate label printer set to **Pickup** and **Delivery** only labels bags, so dine-in plates do not get a sticker.
* Pickup and delivery orders bypass the Area filter — they aren't tied to a table.
## Receipt types and their settings
Each receipt type enabled on a printer has its own formatting panel: copies, sorting, fonts, what to show on the slip, and so on. These are independent of routing: routing decides *which items* reach a receipt; these settings decide *how the receipt looks*.
Enable a receipt type in **Receipts to be printed**, and the matching settings panel appears below it on the same page.
Options:
* **Number of copies**
* **Item sorting**: You can choose to sort: i) by when the item was added, ii) by how items are sorted in the menu, iii) by order of printing tags or iv) with configurable items to the end.
* **Show open item notes**: print free-text notes you add at checkout.
* **Show diner name on dine-in receipts**: useful for quick service restaurants calling diners by name.
* **Show server name**: adds the staff member who took the order.
Key options unique to delivery:
* **Print divider between items**: adds a horizontal line between items for legibility while packing.
* **Larger item / modifier / fulfilment type font**: easier to read at speed.
* **Optimise for chit holder**: adds space at the top so the slip can be clamped without obscuring text.
Key options unique to kitchen tickets:
* **Only print course header when firing**: for course-fired service, prints just the header line for the course rather than every item again.
* **Dine-in optimised headers**: strips delivery-only fields for restaurants without takeaway.
* **Optimise for chit holder**: adds space at the top so the slip can be clamped without obscuring text.
* **Larger item / modifier / fulfilment type font**: easier to read at speed.
* **Add line between tagging group**: when sorting by printing tags is selected, this option adds a line between each tagging group.
Key options unique to dockets:
* **Combine multiples in one docket**: three of the same drink print on one slip instead of three.
* **Indicate non-default modifiers with `**`**: flags any modifier the diner changed from the default, so prep staff can spot customisations at a glance.
* **Show order timing**: prints when the item was fired.
Key options:
* **Sticker label size**: 30×50mm (up to 4 modifiers per label) or 70×50mm (up to 14 modifiers).
* **Indicate non-default modifiers**: same convention as item dockets.
Stickers print only for items that explicitly carry a tag the printer is listening for. Untagged items never produce a sticker, even on a catch-all printer.
## Real-world setups
Four setups that combine several of the features above. Use them as templates if your operation looks similar.
### Bar station, kitchen station and runner station
Printing tags can be combined when multiple items must show on different places. Two common patterns:
* **Multiple tags on one printer.** A small kitchen with no separate bar can listen for `print_food` AND `print_drinks` on a single printer. Everything that needs preparation goes there.
* **A catch-all "runner" printer.** A printer with a blank tag list acts as a complete fallback and prints every item on every order. Useful as a backup at the pass, or while you're rolling out tags gradually.
### Combining different type of receipts
A restaurant runs a dedicated **salad station** (printing item dockets for every salad) and a **drinks station** (printing item sticker labels). Salads and drinks can be ordered standalone *or* as modifiers inside a main course (for example, a steak with "Add side salad" and "Add iced coffee"). The kitchen handles the hot mains. Salads and drinks should not show on the kitchen ticket because they are prepped elsewhere.
The salad and drinks station printers both turn **Separate modifiers** on, so tagged modifiers pull out as their own dockets and stickers. The kitchen printer pairs **Exclude tagged modifiers** with `print_salad` and `print_drinks`, so those same modifiers do not reprint under the steak on the kitchen ticket. Separate-on-the-station and exclude-from-the-kitchen always travel together.
### Cafe with receipts split by fulfilment type
A cafe needs different outputs depending on whether a coffee is being made for **takeaway** or **dine-in**. Takeaway orders get a **sticker label** on the cup plus a **delivery receipt** attached to the bag. Dine-in orders need only a **kitchen receipt** for the barista. The two receipt formats run on the same physical bar-side receipt printer.
The two bar receipt printer cards in the diagram are **two configs pointing at the same physical device**, differentiated by **Fulfilment types**. The first config has Takeaway selected and emits a delivery receipt; the second has Dine-in selected and emits a kitchen receipt. Atlas evaluates each config independently per order, so one bar-side printer ends up producing the right slip for each fulfilment type.
### Fine-dining restaurant with a 5-course menu
A fine-dining restaurant sells a **5-course menu** where each course is a modifier under one parent product. The kitchen needs every course to print as its **own top-level line on the kitchen ticket, in course order**. The diner's customer receipt should show only the parent ("1× Degustation menu"), with none of the courses underneath.
Three settings work together on the kitchen printer.
- Include sub items as a separate item is on, so each course modifier promotes to its own top-level line.
- Exclude tagged modifiers lists the same course tags — that strips them from being printed nested under the parent, so each course appears exactly once.
- Item sorting is set to By order of printing tags, which means the order of the tag list in the printer config is the order they print in.
print\_set first, then print\_1 → print\_5 in sequence.
The customer printer is the mirror image: **Separate modifiers** is off and the course tags appear in **Exclude tagged modifiers**, so the diner sees only "1× Degustation menu" without the course list. Same tag scheme, opposite intent.
## Behaviours to know
A few behaviours catch people out. Review these before going live.
A blank **Tag list** means "accept all items". This is intentional and is how the main customer receipt printer works. It also means a kitchen printer added without tags will print every item on every order.
The receipt given to the customer needs to show the full order. Leave that printer's tag list blank. Adding any tag turns the customer receipt into a filtered ticket, and the customer gets an incomplete receipt.
In Include mode, an untagged product goes nowhere — visible to the operator. In Exclude mode, an untagged product goes **everywhere** silently. Use Include mode unless you have a specific reason for the inverse.
The same tag system controls Kitchen Display Screens and delivery dispatch routing. That's why the field is *Printer / KDS / Dispatch tags*. You don't need separate tag schemes for KDS and printers.
## Troubleshooting
After setup, a working printer should:
* Show a **green status dot** in **Printers & receipts**.
* Output immediately on a test print.
* Receive only the items whose tags match in a live test order.
* Show the full order on the customer receipt; only matching items on station printers.
If something isn't behaving as expected, check the matching scenario below.
1. Confirm at least one receipt type is enabled in **Receipts to be printed**. A printer with no enabled receipts has nothing to output.
2. Check the tag list. In Include mode, the products you expect to print must carry at least one of the printer's tags.
3. Check **Print on POS checkout** and **Print on Online checkout**. If the channel the order came from is toggled off, the printer won't fire.
4. Check **Fulfilment types**. If you set this and the test order's type isn't in the list, nothing prints.
5. Send a test print from the printer's row in **Printers & receipts**. If the test slip prints, the connection is fine and the issue is routing.
6. Power-cycle the printer.
1. Open the product and check its tags. If it carries the printer's tag, it will print there.
2. If you're using **Exclude tagged products**, check the tag list. Exclude mode prints anything not tagged, so any new untagged product starts printing automatically.
3. Check **Separate modifiers**. If it's on, any modifier carrying a matching tag prints as its own line on this printer.
Symptom: a tagged modifier appears twice on the same printer's slip — once indented under its parent, and once as its own top-level line.
Cause: the parent product and the modifier share a tag the printer is listening for, and **Separate modifiers** is on. The modifier breaks out as a standalone line *and* still rides under the parent.
Fix one of two ways:
1. **If you don't need the modifier to appear separately**, remove the tag from the modifier. Untagged modifiers ride with their parent automatically.
2. **If you need the modifier to print separately** (typical for course-fired or station-routed modifiers), add that tag to **Exclude tagged modifiers** on this printer so the modifier doesn't also reprint under the parent. The [Degustation menu](#degustation-menu) example uses this pattern.
The most common cause is a tag in the customer receipt printer's tag list. Open that printer's settings and clear the **Tag list** field.
1. To stop a tagged modifier from appearing as its own line on the wrong printer, turn **Separate modifiers** off on that printer, or remove the tag from the modifier.
2. To strip a noisy modifier from a station printer (for example, kitchen modifiers showing up on the bar), add that modifier's tag to **Exclude tagged modifiers**.
Symptom: an item silently misroutes — it doesn't reach the station it's tagged for and only appears on catch-all printers (or doesn't print at all).
Cause: the tag on the product and the tag on the printer don't match character-for-character. `print_drinks`, `Print_Drinks`, `print-drinks`, and `print_drinks ` (with a trailing space) are four different tags.
Fix:
1. Open the product and the printer side by side. Compare the tags character by character.
2. Copy-paste rather than retyping. Tags are case-sensitive and whitespace-sensitive.
3. When typing a tag on a product, pick the exact existing suggestion from the dropdown rather than creating a new one by accident.
1. Confirm the order is **dine-in** with a table assigned. Pickup and delivery orders bypass the Area filter.
2. Confirm the table is assigned to one of the printer's listed areas.
3. If the printer is set as a station's primary printer, the Area filter is intentionally bypassed for that printer.
Email support at [hello@atlas.kitchen](mailto:hello@atlas.kitchen) with:
* Your outlet name.
* The printer name.
* A screenshot of the printer's **Products to be printed** panel.
* The order ID that misprinted (if any).
## Next steps
* [Connect Atlas printer to WiFi](/hardware/printers) — if you're setting up a new device.
* [Create menus](/menu-builder/create-menus) — for adding products and tagging them.
# Reporting categories
Source: https://help.atlas.kitchen/menu-builder/reporting-categories
Group products into categories to organise reports and target pricing rules.
## What reporting categories do
Reporting categories let you group products (e.g. "food", "drinks", "alcohol") so that:
* **Sales reports** break down revenue by category instead of listing every product individually.
* **Your team** can quickly filter products by category and sub-categories on the Products page.
Each product can have **one** reporting category. Categories are shared across all your outlets.
## When to use this
* You want to see sales broken down by different groups such as "food" vs. "drinks" in your reports.
* You want to sort, organise and filter products by category on the Products page.
## Managing reporting categories
Open the sidebar and tap **Menu builder > Reporting categories**, or go directly to [Reporting categories](https://portal.atlas.kitchen/report-categories).
The page shows:
* **Name** — the category name (always lowercase).
* **Item count** — how many products are assigned to this category. Tap the count to jump to the Products page filtered by that category.
* **Drag handles** — the dots on the left of each row let you drag categories to reorder them.
* **Three-dot menu** — tap for Edit, Remove, and Create subcategory options.
### Create a new category
Names are automatically converted to lowercase. Keep them short and descriptive (e.g. "food", "drinks", "alcohol", "desserts").
Leave as **No parent (top-level category)** to create a standalone category. Select an existing category to create a subcategory under it.
The new category appears in the list. You can now assign products to it.
### Edit a category
Renaming a category updates it everywhere — in products, reports, and pricing rules. You do not need to reassign products after renaming.
Find the three-dot icon on the right side of the category row.
Atlas automatically updates all products assigned to this category.
### Remove a category
Removing a category does **not** delete any products. It only removes the category label from those products. They will appear as "uncategorised" in reports.
Find the three-dot icon on the right side of the category row.
The category is removed from all assigned products.
### Create subcategories
You can nest categories by creating subcategories under a parent.
Find the three-dot icon on the right side of the category row.
The Create category modal opens with the parent already selected.
The subcategory appears nested under its parent in the list.
You can also set a parent category using the **Parent category** dropdown when creating or editing any category.
## Assign a reporting category to a product
You can assign a reporting category when creating or editing a product.
Go to **Menu builder > Products**, then tap the edit icon next to any product.
The dropdown lists all existing categories. Select **No category** to remove the current assignment.
If the selected category has subcategories, choose one from the **Reporting subcategory** dropdown.
The product now belongs to the selected reporting category.
You can also assign reporting categories when [importing products via CSV](/menu-builder/import-products-csv). The "Reporting category" column is included in the CSV export and import templates.
## View products by category
There are two ways to see which products belong to a category:
**From the Reporting categories page:**
Tap the item count badge (e.g. "27 items") next to any category. This opens the Products page filtered to show only products in that category.
**From the Products page:**
The **Category** column in the products table shows each product's reporting category. Tap the category name to filter the table by that category.
## How categories appear in reports
Reporting categories are used in several reports:
* [**Sales summary report**](/reports/sales/sales-summary-report) — breaks down sales by reporting category so you can see revenue for "food" vs. "drinks" at a glance.
* [**Product mix report**](/reports/product/product-mix-report) — colour-codes products by reporting category in the quantity vs. sales chart, and includes a **Product mix by reporting category** table where you can expand each category to see individual products, quantities, and sales breakdowns.
* [**Daily outlet report**](/reports/operations/daily-outlet-report) (Z-report) — groups products by category in the products sold section. Products without a category appear under "uncategorised".
Make sure all products have a reporting category assigned. This gives you meaningful breakdowns in reports.
## What should happen
* New categories appear immediately in the categories list and in product dropdowns.
* Assigning a category to a product updates the Category column on the Products page.
* Reports generated after assignment reflect the new category groupings.
* Renaming a category updates all references automatically.
## If it doesn't work
* Refresh the page and try again — newly created categories may take a moment to appear.
* Check that you created the category on the Reporting categories page, not just as a product tag.
* Verify products have a reporting category assigned (check the Category column on the Products page).
* Reports only reflect categories at the time orders were placed. Assigning a category now will not retroactively change past reports.
* The product does not have a reporting category assigned. Edit the product and select one from the Reporting category dropdown.
If the issue persists, contact support at [hello@atlas.kitchen](mailto:hello@atlas.kitchen).
## Next steps
* [Create and configure menus](/menu-builder/create-menus) — learn how to build menus with sections and products.
* [Sales summary report](/reports/sales/sales-summary-report) — see how category breakdowns appear in your sales data.
* [POS layouts](/menu-builder/pos-layout) — configure how products appear on your POS screen.
# Discounts
Source: https://help.atlas.kitchen/merchant-portal/add-discounts
Create and manage discounts and promo codes in Atlas to run promotions, reward loyal customers, and drive sales across all your ordering channels.
**Who is this article for?**
* Atlas users with Admin permissions. Set permissions from **Settings > Team members**.
* Atlas POS, Scan to order, Kiosk, Online and Aggregator users.
## Overview
Discounts let you reduce the price of an order or specific items. You can use discounts to run promotions ("20% off this weekend"), reward customers ("free delivery for members"), or handle service recovery ("complimentary dessert").
Once you create a discount, customers can apply it using a promo code at checkout, or your staff can apply it directly from the POS.
## Quick start
Open the sidebar menu and navigate to **Marketing Tools > Discounts**.
In the top-right corner, click **Add Discount**.
Select the type from the left panel. See [Discount types](#discount-types) below for guidance.
Fill in the name, value, and dates on the right panel.
Scroll to **Discount conditions** to specify who can use this discount and when.
Your discount is now active and ready to use.
To let staff apply this discount from the POS, [add it as a tile to your POS layout](/menu-builder/pos-layout#adding-tiles-to-your-pos).
## Discount types
Atlas offers several discount types. Choose based on what you want to discount and how you want to apply it.
### Order-level discounts
These discounts reduce the total price of an order.
* **Sub-total discount** is the most common choice. It reduces the order amount before delivery fees, surcharges, and taxes are added. Use this for most promotions like "\$5 off orders over \$30" or "15% off your order".
* **Total discount** reduces the order amount after fees and surcharges, but before tax. Use this when you want the discount to apply to surcharges too.
* **Cash voucher** reduces the final payable amount, including taxes. This works like a gift card — a \$20 voucher covers exactly \$20 of the final bill.
* **Delivery fee discount** reduces or removes the delivery fee. Use this for delivery promotions like "Free delivery for orders over \$25".
### Item-level discounts
These discounts reduce the price of specific items rather than the whole order.
* **Individual item discount** lets staff manually select which item to discount at the POS. Useful for service recovery when a manager wants to comp a guest's appetizer.
* **Per eligible item discount** automatically discounts all items that match your criteria. For example, "20% off all desserts" discounts every dessert in the cart.
* **Lowest eligible item discount** automatically discounts only the cheapest item that matches your criteria. For example, "Cheapest pizza free when you order 3 or more".
* **Discount last Y items every N items** is for buy-one-get-one promotions. Set Y=1 and N=2 to create a "Buy 1 beer, get 1 free" deal.
Note that **Per eligible** and **Lowest eligible** discounts must be paired with the condition "Cart items include either one of". And **Last Y every N** discounts must be paired with "User or product tags include". See [Discount conditions](#discount-conditions) for details.
### Stacking rules
Generally, you cannot stack multiple order-level discounts together. However, you can combine one order-level discount with one Individual item discount (applied only from the POS) on the same order.
## Configuration settings
When creating a discount, you'll configure these settings on the right panel.
### Name and description
The **Name** is shown to customers on receipts and at checkout. Use clear, promotional names like "Weekend Special 20% Off".
The **Description** is for internal notes only — your team can see it but customers can't. Use it to note campaign details like "Summer 2024 marketing campaign".
### Value
Choose a **Value type** of either **Fixed amount** (e.g., \$10 off) or **Percentage** (e.g., 20% off). Fixed amounts work well for vouchers, while percentages work better for promotions.
Enter the **Discount value** — the amount or percentage to discount.
For percentage discounts, set a **Value cap** to limit how much customers can save. For example, "20% off up to \$15" prevents large orders from getting excessive discounts.
### Dates
Set the **Redemption start date** to schedule when customers can start using this discount. This lets you set up future promotions in advance.
Set the **Redemption end date** to make the discount expire automatically. Always set an end date to avoid forgotten active discounts running indefinitely.
### Promo code
The **Promo code** is what customers enter to apply the discount. Use memorable codes like `WELCOME10` or `FREEDELIVERY`.
If you leave the promo code blank, the discount becomes POS-only — staff can apply it from a discount tile without needing a code. This is useful for manager discretion discounts or service recovery.
Leaving the promo code blank does **not** auto-apply the discount. A discount without a code can only be used on the POS — a staff member applies it by tapping a discount tile that you add to your [POS layout](/menu-builder/pos-layout#adding-tiles-to-your-pos). Atlas does not currently support automatic cart discounts on Online, Kiosk, or Scan to Order. To discount orders on those channels, give the discount a promo code for customers to enter at checkout.
### Show in diner promo wallet
Turn on **Show in diner promo wallet** to list this discount in eligible customers' promo wallets. Customers with an Atlas account see the discount in their wallet and can use it without typing in the code themselves.
* Only eligible customers see the discount in their wallet. Atlas checks your discount conditions (for example **User is registered** or **Number of orders is less than**) and the redemption dates. Expired discounts drop out of wallets automatically.
Turning this on makes the discount visible to customers. Do not turn it on for discounts that should stay usable by promo code but hidden from eligible customers' wallets, such as a code you only share with specific customers.
### Usage limits
**Maximum usage in total** limits how many times this discount can be redeemed across all customers. Use this for exclusive promotions like "First 100 customers only".
**Maximum usage per diner** limits how many times each customer can use this discount. Set to 1 for "one per customer" offers.
**Limit usage by mobile number** counts every order from the same mobile number against **Maximum usage per diner** — even across different accounts or guest checkouts. This stops a customer resetting a "one per customer" offer by signing up again with a new email.
This is turned **on** by default for new discounts. It also applies to bulk discount codes.
Turn it off for discounts where people share a number — for example a family on one phone number, or a customer who is assigned a recycled number that already used the code. With it off, Atlas counts usage per account instead.
With **Limit usage by mobile number** on, Atlas tracks per-customer usage by phone number, even for guests who don't log in. To tie usage to a logged-in account instead, add the **"User is registered"** condition.
### Advanced settings
**Assign payment type for full discounts** tags fully comped items (100% off) with a specific payment type. This helps with accurate reporting on complimentary items.
**Discount modifiers** determines whether add-ons and modifiers are included in the discount. Turn this OFF for promotions like "1-for-1 oysters" so premium toppings aren't free too.
**Max redemptions per use** limits how many times a "Last Y every N" discount triggers per order. Set to 1 to prevent "buy 10 get 5 free" — you probably just want one free item per order.
## Discount conditions
Conditions let you specify exactly who can use a discount, what needs to be in the cart, and when it's valid. Add conditions by clicking **"+ Add condition"** at the bottom of the discount form.
### Who can use it
* **User is registered** requires customers to log into their account before they can use the discount. This is required if you want to track usage per customer or limit redemptions per person.
* **User has an account** checks if the customer has an account with your loyalty program. Use this for member-exclusive discounts.
* **User's email domain contains** checks if the customer's email matches a specific domain. For example, use `@yourcompany.com` to create a staff discount that only employees can use.
* **Number of orders is less than** checks the customer's order history. Set this to 1 to create a "first order only" promotion — only customers who haven't ordered before can use it.
### What's in the cart
* **Cart items include either one of** requires at least one of the specified items to be in the cart. This is required for Per eligible and Lowest eligible item discounts.
* **Cart items include all of** requires all specified items to be in the cart. Use this for bundle deals like "Buy burger AND fries, get free drink".
* **Cart items exclude all of** blocks the discount if any of the specified items are in the cart. Use this to exclude alcohol from a general discount.
* **Cart total minimum spend** requires the order to meet a minimum value. Use this for promotions like "\$5 off when you spend \$30".
### Where it works
* **Website is** limits the discount to specific websites. Use this if you run multiple brands and want different promotions for each.
* **Outlet is** limits the discount to specific locations. Use this for grand opening promotions at a new outlet.
* **Fulfilment type is** limits the discount to specific order types (dine-in, takeaway, delivery). Use this for promotions like "Free delivery" that should only work for delivery orders.
### When it's valid
* **Serving date is between** makes the discount valid only during specific dates. Use this for holiday promotions like "Valid Dec 1-25".
* **Serving day of the week is** makes the discount valid only on specific days. Use this for promotions like "Monday Blues 20% Off".
* **Serving time is between** makes the discount valid only during specific hours. Use this for happy hour promotions like "5-8pm only".
* **Serving date (calendar month)** matches the customer's birth month. Use this for birthday rewards — the discount only works during the month of the customer's birthday.
### Using tags
* **User or product tags include** is the most flexible way to target discounts. Instead of selecting items one by one, tag your products in Menu Builder (e.g., "happy-hour", "alcoholic", "desserts"). Then use this condition to target all tagged items with a single discount.
This makes maintenance easier — when you add new drinks to happy hour, just add the tag instead of updating every discount.
## Where discounts work
Customers can use promo codes on **Atlas Online**, **Kiosk**, and **Scan to Order** by entering the code at checkout.
On **POS**, staff can either enter the promo code or tap a discount tile (if you've added one to the POS layout).
Discounts are never applied automatically — a customer enters a code at checkout, or a staff member applies the discount on the POS. There is no way to make a discount apply itself based on time of day, cart contents, or spend.
Promo codes don't work on third-party platforms like GrabFood, Deliveroo, or other aggregators. Those platforms have their own promotion systems.
## Adding discounts to your POS
To let staff apply discounts without entering a code:
1. Go to **Menu Builder > POS layout**
2. Add a new tile and select **Discount**
3. Choose your discount
4. Save the layout
Learn more: [Adding tiles to your POS](/menu-builder/pos-layout#adding-tiles-to-your-pos)
## Organise your discounts
As your discount list grows, use tabs, filters, and search to keep things manageable.
### Active and archived tabs
The Discounts page has two tabs: **Active** and **Archived**.
* **Active** shows all discounts that are currently in use or available. This includes expired discounts that haven't been archived yet.
* **Archived** shows discounts you've put away. Archived discounts cannot be redeemed by customers or staff.
### Archive a discount
Archive discounts you no longer need. This removes them from the Active tab and blocks their promo codes from being redeemed.
On the **Active** tab, tick the checkbox next to one or more discounts.
A toolbar appears at the top of the page. Click **Archive**.
A confirmation dialog appears. Click **Archive** to confirm.
If you archive a bulk discount, all its generated codes are also archived.
### Unarchive a discount
Restore an archived discount to make it active again.
Click the **Archived** tab on the Discounts page.
Tick the checkbox next to one or more discounts.
Click **Unarchive** in the toolbar, then confirm.
The discount moves back to the Active tab. Its promo code works again immediately.
### Filter discounts
Click the **Filters** button to open the advanced filter modal. Use it to narrow down the discount list.
Available filters:
* **Validity** — show or hide expired discounts and fully redeemed discounts
* **Category** — filter by single code, bulk, or referral discounts
* **Discount type** — filter by sub-total, total, cash voucher, delivery fee, or item-level types
Active filters show a badge count on the Filters button. Click **Clear all** inside the modal to reset.
### Search
Type in the search bar at the top of the Discounts page to find discounts by name or promo code.
## Best practices
* **Test before launching** by placing a small test order to verify the discount works as expected.
* **Use clear names** so staff instantly understand what "Weekend 20% Off" means without checking the details.
* **Set end dates** to avoid forgotten discounts running indefinitely.
* **Cap percentage discounts** to protect your margins on high-value orders.
* **Per-customer limits work by mobile number** — "Max 1 per customer" counts repeat orders from the same phone, even for guests. Add "User is registered" if you want to tie it to a logged-in account instead.
* **Archive old discounts** instead of leaving expired ones in the Active tab. This keeps your list clean and makes it easier to find current promotions.
## Common use cases
For step-by-step setup instructions for specific promotions, see [**Discount use cases**](/merchant-portal/discount-use-cases):
* Free delivery for registered customers
* 1-for-1 promotions
* Happy hour discounts
* First order discounts
* Birthday month promotions
* Corporate/staff discounts
## Why isn't my promo code applying?
Most "my code won't apply" problems come down to a condition the order doesn't meet. Check these first.
* **Minimum spend not met** — the order is below the discount's **Cart total minimum spend**. Ask the customer to add items.
* **Wrong fulfilment type** — the discount has a **Fulfilment type is** condition (for example, delivery only) that the order doesn't match.
* **Wrong items in the cart** — the discount needs specific items or tags (**Cart items include either one of** or **User or product tags include**), or it's blocked by **Cart items exclude all of**.
* **Outside the valid dates or times** — the order falls outside the **Redemption start/end date**, **Serving day of the week**, or **Serving time** conditions.
* **Usage limit reached** — the code hit its **Maximum usage in total**, or the customer hit **Maximum usage per diner**. Per-customer limits count by mobile number, so the same phone hits the cap across different accounts. If a customer is wrongly blocked (shared or recycled number), switch off **Limit usage by mobile number** on that discount.
* **Discount skips add-ons** — if the discount isn't covering modifiers, turn **Discount modifiers** on. When it's off, only the base item price is discounted.
* **Two order-level discounts clash** — you can't stack two order-level discounts on one order. Only one order-level discount plus one POS individual item discount can combine. Remove the other discount first.
## If it doesn't work
* **Staff can't find the discount on POS** — add it as a tile in **Menu Builder > POS layout**. Discounts with no promo code are POS-only and need a tile.
* **Discount not working at checkout** — check if it has been archived (look in the **Archived** tab), expired, or reached its usage limit.
* **Discount not showing in the list** — check which tab you're on (Active vs Archived). Check if any filters are hiding it — look for a badge on the Filters button and click **Clear all** to reset.
* **Cannot archive or unarchive** — you need Admin permissions. Check your role in **Settings > Team members**.
* **Bulk archive not responding** — make sure you've selected at least one discount using the checkboxes. The toolbar only appears when discounts are selected.
* **Archived code still working** — this shouldn't happen. If a customer can still redeem an archived code, contact support at [hello@atlas.kitchen](mailto:hello@atlas.kitchen) with the promo code and order number.
## Next steps
* [Discount use cases](/merchant-portal/discount-use-cases) — ready-to-use configs for common promotions
* [Adding tiles to your POS](/menu-builder/pos-layout#adding-tiles-to-your-pos) — let staff apply discounts from the POS
* [Discount report](/reports/marketing/discount-report) — track discount usage and revenue impact
# How to create and charge Admin orders
Source: https://help.atlas.kitchen/merchant-portal/admin-orders
Create and charge Admin orders in Atlas for delivery, pickup, or dine-in using payment links, terminals, or manual entry.
**Who is this article for?**
* Atlas users with Finance or Admin permissions. Set permissions from **Settings > Team members**.
* Users who need to manually create orders for VIP customers, charge deposits, or add external orders.
## Before you begin
Admin orders allow you to manually register and charge orders in Atlas for delivery, pickup, or dine-in. You can use this feature to charge VIP customers, collect deposits for future events, etc.
## Creating an Admin order
Follow these steps to create an Admin order:
1. Open the Atlas Merchant Portal and tap the ☰ menu to open the sidebar.
2. Tap "All Orders".
3. Tap "Add Order" in the top-right corner.
4. In the order creation screen, select:
1. Outlet
2. Fulfilment type (Delivery, Pickup, or Dine-in)
3. Date & time
4. Customer details
5. Items to charge
5. Tap "Create" in the top-right corner to finalise the order.
* Wait 2-3 seconds, then reload the page to see your order.
6. Once you open the order again, it will show as Unpaid and it will have a red banner on top. Tap on "Make payment".
7. This will open a modal with three options to resolve the underpayment:
* \*\*Option 1: Online payment link. \*\*You will send an email to the customer for them to pay online the outstanding amount. The order must have the diner's email assigned.
1. Select this option > Tap "Continue".
2. Tap “Charge”, and an email will be sent to the diner's email, for them to pay online.
3. After paid, the order will update with the new payment.
* \*\*Option 2: Payment terminal. \*\*You must own an Atlas payment terminal to use this. You will trigger a payment on the terminal, for customer to pay in-person.
1. Select this option > Tap “Continue”.
2. Tap the “Select terminal to charge” dropdown, and select your current station.
3. Tap “Payment type” dropdown, and select the correct payment type.
4. Tap “Charge payment”.
* **Option 3: Manual payment.**
1. Select this option > Tap “Continue”.
2. Tap “Payment type” dropdown, and select the correct payment type.
3. Tap “Update”.
## Retrieving the payment link for an Admin order
You can use this option if the customer did not receive the email or does not have a valid email address:
1. Open the order details page.
2. Click the **Payment Link** (underlined text) to copy the link.
3. Share the link via WhatsApp, SMS, or any other communication channel.
The online payment page diners will receive will look like this:
## Confirming payment for an Admin order
Once the customer completes the payment:
1. The **order status** will change from **Unpaid** to **Paid**.
2. The **order details modal** will show the payment reference at the bottom.
## What should happen
After completing the steps above:
* The Admin order appears in "All Orders" with the correct items, customer details, and serving time
* If using online payment link: The customer receives an email with a payment link
* If using payment terminal: The terminal displays the payment amount and processes the card
* If using manual payment: The order status changes to Paid immediately
* The order status changes from "Unpaid" (red banner) to "Paid" once payment is completed
## If it doesn't work
1. Refresh the page (tap the browser refresh button or pull down on mobile)
2. Check the date filter at the top of the Orders page — ensure it includes the order's serving date
3. Check that you selected the correct outlet when creating the order
4. Wait a moment and refresh again — there may be a brief delay
1. Check that the order has a valid email address in the customer details
2. Ask the customer to check their spam/junk folder
3. Copy the payment link manually from the order details page and send via WhatsApp or SMS
1. Ensure the terminal is powered on and connected to WiFi
2. Verify you selected the correct terminal from the dropdown
3. Tap "Charge payment" again — the first attempt may have timed out
4. If the terminal still doesn't respond, use manual payment instead and contact support
1. Refresh the page and wait 30 seconds for the payment to sync
2. For online payments: Check if the customer completed all steps on the payment page
3. For terminal payments: Verify the terminal displayed "Approved" after the transaction
4. Contact support at [hello@atlas.kitchen](mailto:hello@atlas.kitchen) if the issue persists
## Next steps
* [Process refunds](/merchant-portal/refunds) — Learn how to refund Admin orders if needed
* [Edit order details](/merchant-portal/editing-order) — Modify items, customer info, or delivery address
* [View reports](/reports/overview) — Track Admin order sales in your reports
# Announcements
Source: https://help.atlas.kitchen/merchant-portal/announcements
Show a slim message strip at the top of your storefront to broadcast pricing notes, hours, promos, or operational updates.
An announcement bar is a slim strip across the top of your storefront that shows a short message to everyone who visits. It appears on Atlas Online, Kiosk, and Scan-to-Order.
## What announcement bars do
Use an announcement bar to tell all your customers something at once — a pricing note, holiday hours, a running promotion, a new item, or a quick operational heads-up.
**Bar vs pop-up.** An announcement *bar* is the thin strip at the top. A [pop-up](/merchant-portal/pop-ups) is a separate, richer feature — a full-screen image with its own display rules and an optional button. This guide covers the bar.
## Where it appears
* **Atlas Online** — your online storefront
* **Kiosk** — self-order kiosk in-store
* **Scan-to-Order** — diners ordering from the QR menu
Announcement bars don't appear on GrabFood, Foodpanda, or other third-party apps, which run their own storefronts.
## Set up an announcement bar
1. In the Merchant Portal, go to **Marketing tools → Announcements**.
2. Click **Create new announcement**.
3. Select **Website** (Atlas Online) or **Channel** (Kiosk + STO).
4. Write the **title** and **message** (see [Writing the copy](#writing-the-copy) below).
5. Configure styling — background and text colour, optional link URL, and whether customers can dismiss the bar.
6. Pick the **channels, outlets, and storefronts** the bar should show on.
7. Set a **start** and **end** time. For long-term notices (like a pricing note), set the end date far in the future.
8. **Save as draft** to publish later, or **Save** to go live immediately.
## Writing the copy
A bar has a **title** and a **message**, and they display **together on one line**. Because there is only a space between them, write the two so they read as a single sentence — and **end the title with punctuation** (a colon works well) so they do not run together.
* **Good** — title `Note:` + message `Prices are not subject to GST` reads as **Note: Prices are not subject to GST**
* **Avoid** — title `Note` + message `Prices are not subject to GST` reads as **Note Prices are not subject to GST**
Keep it short and specific. The bar is narrow, and one clear message lands better than a long one.
## Styling
* **Colours** — the bar is **black with white text** by default. You can set a custom background and text colour; keep them high-contrast so the message stays readable.
* **Link** — you can make the bar clickable and send customers to a URL, such as an item or a menu section.
* **Dismissable** — choose whether customers can close the bar. Turn this **off** for notices you always want shown (like a pricing note) and **on** for time-limited messages.
## Common use cases
| You want to… | Example message |
| - | - |
| Note pricing or tax | **Note: Prices are not subject to GST** |
| Share special or holiday hours | **Public Holiday: open 10am–6pm today** |
| Promote a running offer | **This weekend: 20% off with WEEKEND10** |
| Highlight a new item | **New: try our Laksa** |
| Give an operational heads-up | **Heads up: orders may take a little longer today** |
## Tips
* Show **one message at a time** — several bars compete for the same strip.
* For a promo bar, make sure the wording matches the actual discount (code, amount, and dates).
* To change or take down a bar, edit it from the Announcements screen in your portal.
Don't use announcement bars for full-screen campaigns or image-based promos. Use [Pop-ups](/merchant-portal/pop-ups) instead — they display as a splash page when diners land on your menu.
## Next steps
* [Pop-ups](/merchant-portal/pop-ups)
* [Cross-sell](/merchant-portal/cross-sell)
* [Discounts](/merchant-portal/add-discounts)
# BCRS (Beverage Container Return Scheme)
Source: https://help.atlas.kitchen/merchant-portal/bcrs
Set up the $0.10 beverage container deposit on Atlas for Singapore's BCRS regulation.
**Who is this for?**
* Atlas merchants in Singapore selling pre-packaged drinks in plastic or metal containers (150mL to 3L)
## What this does
Starting 1 April 2026, Singapore requires a \$0.10 deposit on every pre-packaged beverage sold in a disposable container. Atlas adds this deposit automatically to orders containing BCRS-tagged items.
You need to tag which products are BCRS-eligible. Atlas handles the rest — the \$0.10 deposit appears as a separate line on receipts, invoices, and order summaries across POS, online ordering, kiosk, and scan-to-order.
## How BCRS works on Atlas
* **\$0.10 per item**: Each BCRS-tagged item adds \$0.10 per unit to the order. If a customer orders 3 canned drinks, the deposit is \$0.30.
* **Modifiers count too**: If a drink modifier (e.g., "add canned soda") is tagged as BCRS, it also incurs the deposit.
* **Not taxable**: The deposit is not subject to GST.
* **Not discountable**: Discounts do not reduce the deposit amount.
* **Separate line on receipts**: The deposit shows as "BCRS deposit" on printed receipts, PDF invoices, and order summaries.
The BCRS deposit does not affect your net sales figures in reports. It is a pass-through charge collected on behalf of the scheme.
## Tag products as BCRS-eligible
You can tag products one at a time or in bulk using CSV. This applies to pre-packaged drinks in plastic or metal containers (150mL to 3L) that come with a deposit mark. If unsure, you may confirm if the drinks you serve are eligible with your supplier.
Open [Products](https://portal.atlas.kitchen/products) on the merchant portal.
Select the product you want to tag (e.g., "Canned Coke 330ml").
Scroll to the **BCRS** section in the product form. Turn on the toggle.
Tap **Save**. Repeat for each product that uses a disposable beverage container.
Modifiers can also be tagged as BCRS. Edit the modifier the same way — the BCRS toggle appears for both products and modifiers.
On the [Products](https://portal.atlas.kitchen/products) page, tap the dropdown menu and select **Export products to CSV**. You will receive an email with the CSV file.
Open the CSV file. Find the **BCRS** column. Set it to `TRUE` for every beverage product that uses a disposable container. Set it to `FALSE` for everything else.
On the Products page, tap the dropdown menu and select **Import CSV**. Upload your edited file and review the preview table.
Check that the BCRS column shows a green tick for the correct products. Tap **Confirm** to apply.
## But what if some of my outlets still carry old stock without the deposit mark?
Some outlets may not have BCRS-labelled stock yet (e.g., still clearing old inventory). You can disable BCRS for specific outlets on a per-product basis.
Go to [Products](https://portal.atlas.kitchen/products) and select the product.
In the **BCRS** section (with the toggle turned on), use the **Exclude outlets** dropdown to select which outlets should not charge the BCRS deposit for this product.
Tap **Save**. Those outlets will not add the \$0.10 deposit for this product until you remove the exclusion.
Per-outlet exclusions can only be set on the merchant portal — not via CSV import.
## Return Right F\&B Scheme (dine-in exemption)
If your outlet has signed up for NEA's **Return Right F\&B Scheme (RRFS)**, dine-in orders are exempt from the BCRS deposit. Customers leave their containers at the outlet instead of paying the deposit.
RRFS means:
* **Dine-in orders**: No BCRS deposit charged
* **Takeaway and delivery orders**: BCRS deposit still applies
To enable RRFS for an outlet, contact Atlas support at [hello@atlas.kitchen](mailto:hello@atlas.kitchen) or on your Whatsapp support channel with the outlet name. Atlas will turn on the RRFS eligibility for your outlet. This will automatically exempt BCRS drinks for all dine-in orders. Note that BCRS deposits will still apply for takeaway or delivery orders.
To qualify for RRFS, your outlet must hold a valid food shop licence from the Singapore Food Agency, offer dine-in, and sell BCRS-regulated beverages. Sign up with NEA at [go.gov.sg/RRFS](https://go.gov.sg/RRFS) before contacting Atlas.
## What should happen
After tagging your products and enabling the feature:
* Orders with BCRS-tagged items show a **"BCRS deposit"** line in the payment breakdown
* The deposit is \$0.10 per BCRS item, multiplied by quantity
* Receipts (printed and PDF) include the BCRS deposit line
* RRFS outlets do not show the deposit for dine-in orders
* Excluded outlets do not show the deposit for excluded products
## If it doesn't work
* **Deposit not appearing on orders**: Check that the product's BCRS toggle is turned on. If you have multiple outlets, check that the outlet is not in the exclusion list.
* **Deposit showing on dine-in at an RRFS outlet**: Contact support to confirm RRFS is enabled for that outlet.
* **Deposit amount seems wrong**: Count the number of BCRS-tagged items (including modifiers) in the order. Each one adds \$0.10 per unit.
* **CSV import did not update BCRS**: Make sure the BCRS column has `TRUE` or `FALSE` (not blank). Re-export and check the values.
* **Issue persists**: Contact support at [hello@atlas.kitchen](mailto:hello@atlas.kitchen) with the order number and outlet name.
## What's next
* [Edit products](https://portal.atlas.kitchen/products) to tag BCRS items
* Learn more about the scheme at [bcrs.sg](https://bcrs.sg/) or [NEA's guide for F\&B operators](https://www.nea.gov.sg/our-services/waste-management/beverage-container-return-scheme/for-f-b-operators)
* [Manage refunds](/merchant-portal/refunds) — BCRS deposit amounts can be adjusted when processing refunds
# Cross-sell
Source: https://help.atlas.kitchen/merchant-portal/cross-sell
Configure cross-sell prompts to suggest complementary items during checkout and increase Average Order Value.
Cross-sell is a marketing tool that prompts diners to add complementary items before they check out. It appears on Scan-to-Order, Kiosk, and Atlas Online.
## What cross-sell does
When a diner adds a triggering item to their cart, Atlas shows them a suggestion to add something that goes well with it — a popup on the menu and a section in the cart.
## Where it appears
* **Scan-to-Order** — diners ordering from the QR menu
* **Kiosk** — self-order kiosk in-store
* **Atlas Online** — your online storefront
## Set up a cross-sell group
1. In the Merchant Portal, go to **Marketing tools → Cross-sell**.
2. Click **Create new cross-sell group**.
3. Add a name and description for personal reference. This would not show to diners.
4. Choose the **trigger products** — the items that, when added to cart, will show the suggestion.
5. Choose the **suggested products** — what you want to recommend alongside them.
6. Save. The group is live immediately across Scan-to-Order, Kiosk, and Atlas Online.
## Limitations
* The popup and the cart section are always shown together, i.e., you can't enable just one.
* Products need to be in the menu. The suggestion only shows when both the trigger and product to promote is in the menu.
* Each product can only be assigned as a trigger to one group. Assigning it to another group removes it from the previous group.
## Common use cases
* **Increase AOV** by putting popular or high-margin items in front of diners at the right moment.
* **Highlight new items** by attaching them as suggestions to your best-sellers.
Don't use cross-sell for drink upsells on a specific dish (e.g. "add a drink to this burger"). Use [Modifier Groups](/menu-builder/create-menus) on the product instead — they're built for required or optional add-ons tied to a single item.
## Next steps
* [Discounts](/merchant-portal/add-discounts)
* [Discount use cases](/merchant-portal/discount-use-cases)
# How to use customers' data
Source: https://help.atlas.kitchen/merchant-portal/customers-data
Access and export customer data, understand registered vs guest users, and use customer information for marketing campaigns.
## Getting started with the Customers page
To visualise your customer database:
1. Open Atlas Merchant Portal and tap the "☰" button in the top-left corner.
2. Tap Customers. The page will look like this:
On this page, you can:
* Navigate using the tabs on the top-left corner to switch between **Registered** & **Guest** users
* Find specific customer with the search bar
* Help your customers to add a profile for them by clicking on Add customer
* Download data by clicking Export to CSV
* Open a customer to see their profile, where you can:
* View their details, order history and average order value
* Edit their details and add a "Customer tag". Tags can be used to target specific customers in promo codes and custom dashboards
* Read AI insights on their ordering habits (for customers with at least one order)
* Tap an order to see it in full
If your customer database is too big, the download function could take a while or even fail. Reach out to us if that is the case, we will assist you with the download.
## Type of customers
### Registered users
Registered users are customers that created an account with your restaurant. They will do this for faster online checkouts, and to stay tuned for only-members discounts (go ahead and set one up if you have none yet!).
**You can target these customers for your marketing emails/sms, if they have checked the Marketing consent box when signing up.**
They will fill up the following information when signing up for an account:
* Email address — *mandatory*
* Contact number — *mandatory*
* Name — *mandatory*
* Title — *optional*
* Date of birth — *optional*
And you will see the following data from them:
* Mobile verified: Checks if they've confirmed their phone number with an OTP
* Marketing consent: Checks if customers consent to receiving exclusive discounts, seasonal specials, and latest updates via email.
* Order count
* Total spend
To download this data: Make sure you are on the Registered users tab > Tap on Export to CSV
A few common use cases here:
* **Import the data into** [**Mailchimp**](https://mailchimp.com/) **and run your own campaigns.**
* **Run your own analytics.** Not savvy with reports? Use our [Customer Report](https://portal.atlas.kitchen/customers-report) instead. To access it, go Reports > Customer Report.
You might want to try [Customer.io](https://customer.io/) as emailing platform, as we have a native integration with them. Access is included with Atlas Loyalty. Contact us to enable it.
### Guest users
Guest users are customers that might have entered some of their personal details when checking out, but did not sign up for an account with your restaurant. They will usually do this automatically as part of Apple Pay / Google Pay express checkout, or to receive an email receipt.
**You cannot target these customers for your marketing emails/sms.**
A Registered user can decide to checkout as a Guest when purchasing from your restaurant (either online or on-premise). This will create a Guest user account for them for that session, and analytics will not be synced with their main registered account.
## Channels where customer data is captured
These are the few channels where we collect data:
| Product | Collecting Guest users data | Collecting Registered users data |
| - | - | - |
| Atlas Online | ✅ Always | ✅ Always |
| Atlas Scan to Order | ✅ - if the customer info fields are enabled | ✅ - if registered customer login is enabled |
| Atlas Kiosk | ✅ - if the customer info fields are enabled | ✅ - if registered customer login is enabled |
| Atlas POS | ✅ - if restaurant staff enters customer data | ✅ - if restaurant staff assigns order to registered customer |
| Atlas Aggregator (Grabfood, Deliveroo & Foodpanda) | 🟡 - some guest data might be available if restaurant is handling the delivery | ❌ - these third-party platforms do not share customer data |
| Atlas KDS | ❌ - NA | ❌ - NA |
| Atlas Dispatch | ❌ - NA | ❌ - NA |
# Delivery settings, fees and minimum orders
Source: https://help.atlas.kitchen/merchant-portal/delivery-fee-minimum-order
Set up delivery fees, free delivery thresholds, minimum order amounts, large-order lead time, and delivery logistics for your Atlas Online store.
**Who is this for?**
* Atlas merchants who run delivery orders through an Atlas Online website
* Admin or Manager users configuring outlet delivery settings
Delivery fees are configured per outlet, and minimum order amounts per brand, in the Atlas Merchant Portal. Changes take effect immediately for new orders.
## Where delivery fees are set
Delivery fees are managed under **Settings → Delivery fee**, and assigned to each outlet from **Outlet settings → Delivery fee settings** in Atlas Merchant Portal.
Log in to the [Atlas Merchant Portal](https://portal.atlas.kitchen). In the left sidebar, under **Setup**, tap **Outlet settings**.
Find your outlet in the list and tap the edit (pencil) icon on the right of its row.
In the outlet's left sidebar, tap **Delivery settings**. You will see **Service zone** and **Delivery fee**, with the fee config currently assigned to this outlet.
Select an existing delivery fee config from the dropdown, or click **Create new delivery fee** to build one from scratch. You can manage delivery fees from Settings → Delivery fee, and assign them here later.
Click **Save** at the top of the page.
## Fee structures
Atlas builds your delivery fee the way last-mile couriers like Lalamove, GrabExpress, and PandaGo price a trip: a base fee that covers a set distance, then a per-kilometre rate beyond it.
The most common setup is a **base rate** for a **base distance**, plus a **per km rate** for anything further (e.g. $10 for the first 5km, $1/km after that). You can also offer free delivery in two ways: a **% subsidy** that covers more of the fee as the customer's cart grows, or a flat **free delivery** threshold that drops the fee to zero once the cart reaches a set amount.
Each field is explained below.
### Base distance and base rate
These two work as a pair. The **base rate** is the flat fee a customer pays for any delivery within the **base distance**. It is the starting price that covers the first stretch of the trip, whatever the exact distance within it.
Example: base distance = 3 km, base rate = \$5.00 → every delivery up to 3 km costs \$5.00.
### Per km rate
Beyond the base distance, this rate is added for each extra kilometre. It is what makes the fee grow for customers who live further away.
Example: base distance 3 km, base rate \$5.00, per km rate \$1.00. An order 5 km away pays \$5.00 + (2 km × \$1.00) = \$7.00.
### Cart value subsidy (%)
A discount you put towards the customer's delivery fee, sized as a percentage of their order value. The bigger the order, the bigger the discount, so delivery gets cheaper as customers spend more. Once the discount covers the whole fee, delivery is free.
Example: cart value subsidy = 20% → the customer gets \$20 off delivery for every \$100 of order. A \$100 cart takes \$20 off the delivery fee; a \$200 cart takes \$40 off.
**What customers see:** at the Atlas Online checkout, a progress bar shows how much more to spend to lower the delivery fee, and the discounted fee updates as they add items.
### Min cart value for subsidy (\$)
The amount a cart must reach before the subsidy starts to apply. Below this, the customer pays the full delivery fee. **Leave it blank to apply the subsidy to every order.**
Example: min cart value for subsidy = \$50 → only orders of \$50 or more get the subsidy.
### Free delivery at (\$)
The cart value at which delivery becomes completely free, regardless of distance. **Leave it blank to never offer free delivery.**
Example: free delivery at = \$100.00 → any cart of \$100.00 or more ships free.
**What customers see:** a progress bar on the checkout page shows how close they are to the free delivery threshold.
Delivery distances are calculated from the outlet's address, not the customer's nearest MRT. Make sure your outlet address is set correctly under **Outlet settings → Address**.
## Setting a minimum order amount
The minimum order amount for Atlas Online is set per **brand**, not in the delivery fee config. It applies to delivery orders only; pickup orders are not affected.
In the left sidebar, go to **Settings → Brands**.
Click the brand you want to configure to open **Brand details**.
In **Min order value (\$)**, enter the smallest order total a customer must reach to check out. Leave it blank for no minimum.
Click **Save** at the top of the page.
For Grab and Foodpanda, minimum order amounts are set in each platform's merchant portal (GrabMerchant, Foodpanda for Partners), not in Atlas. Atlas syncs the menu and items, but platform order minimums are managed on the aggregator side.
## Large order lead time
Large orders need more prep time. **Large order lead time** automatically adds extra time to the kitchen's estimate once an order passes a value you set, so customers get a realistic ready time and the kitchen isn't caught short.
Go to **Outlet settings → Outlets**, open your outlet, and tap **Delivery settings**. Scroll to **Large order lead time**.
In **Orders above**, enter the order value that counts as large. Then set the **additional** time and unit. For example, orders above \$300 will require an additional 90 minutes.
Click **Save**.
## Delivery vehicle auto-assignment
For Atlas-managed delivery, Atlas books the right vehicle based on the order subtotal, so larger orders go out in something that can carry them. These thresholds are on the same **Brand details** page (**Settings → Brands**, then edit your brand).
* **Logistics booking — switch to car above (\$)** — book a car instead of a bike once the order subtotal passes this amount (e.g. \$175).
* **Logistics booking — switch to van above (\$)** — book a van instead of a car once the order subtotal passes this amount (e.g. \$500).
* **Custom logistics booking message** — an optional note passed to the courier as part of the logistics booking through Atlas Smart Logistics (e.g. building access, unit number, or handling instructions).
## Testing the configuration before going live
Before your next service, verify the delivery fee settings are working correctly.
Visit your Atlas storefront URL (e.g., `yourbrand.atlas.kitchen`) in a private browser window.
Add items that bring your cart to just below and just above any thresholds you have set (minimum order, free delivery, subsidy).
Confirm the delivery fee shown matches your configuration. Confirm the free delivery threshold bar appears if you set one.
**What should happen**: The delivery fee displayed on the customer checkout screen matches your outlet config exactly. Free delivery applies automatically when the threshold is met.
## If the delivery fee looks wrong
Check that the correct delivery fee config is assigned to the outlet. Go to **Outlet settings → Delivery settings** and confirm the config is not set to a \$0 flat-rate option. Also check whether **Free delivery at** is set too low on the config.
Aggregator orders (Grab, Foodpanda) use the delivery fee set by the platform, not Atlas. Only Atlas online orders use your Merchant Portal delivery fee config. This is expected behaviour.
No delivery fee config has been assigned to this outlet. Go to **Outlet settings → Delivery settings** and select or create one.
Delivery fee changes take effect immediately for new orders. Refresh your test browser window in private mode. If you made a change in the past 2 minutes, wait 30 seconds and try again.
If the issue persists after checking the above, contact support at [hello@atlas.kitchen](mailto:hello@atlas.kitchen) with your outlet name and the order number where the fee appeared incorrectly.
## Next steps
* [Surcharges](/merchant-portal/surcharges) — add a temporary fee for holidays, weekends, or peak periods
* [Managing operating hours](/merchant-portal/operating-hours) — set when your outlet accepts delivery orders
* [Adding discounts](/merchant-portal/add-discounts) — set promotional discounts separate from delivery fee subsidies
# Manage delivery drivers
Source: https://help.atlas.kitchen/merchant-portal/delivery-rider-management
How Atlas Smart Logistics books and monitors drivers, what the statuses mean, how to book or cancel a driver, and what to do when there's a problem.
For orders from your own channels, **Atlas Smart Logistics** books the driver through a delivery provider (Lalamove, PandaGo, MilkRun, or Gogox) and our team monitors these orders. This page explains the driver statuses, what you're responsible for, and what to do when there's a problem.
For **aggregator orders** (GrabFood, foodpanda, Deliveroo), the platform dispatches and controls the driver. Atlas can't book, reassign, or cancel those. Use the aggregator's own merchant app or support.
## Driver statuses
Open an order from the **Orders** page to see its delivery status.
* **Assigning**: Atlas is finding a driver. No driver is matched yet.
* **Assigned**: a driver is booked. You can see the driver's contact details and track them on the map.
Drivers usually accept an order 5 to 15 minutes before the collection time, so it's normal not to see a driver straight away.
## Hand the right order to the right driver
You are responsible for handing each driver the correct order. Mixing up orders between drivers is a common delivery problem.
When a driver arrives, check the order against the driver and order details before you hand it over. A wrong handover sends the wrong food to the wrong customer, and it can't be undone once the driver leaves.
## Book a new driver
Tap **Book a new driver** in the top-right corner.
Choose the order you want a driver for.
Select the vehicle type, then book.
By default, Atlas auto-books a vehicle by order value:
* **\$175 and under**: motorbike
* **\$175 to \$500**: car
* **Over \$500**: van
These are the default thresholds. You can change them in your **Brand** settings.
## Cancel a delivery
You can only cancel a delivery while it's **Assigning** (no driver yet). Once it's **Assigned**, you can't cancel it yourself. Reach out to the Atlas support team in your shared WhatsApp group and we'll assist.
Go to **Today's orders** and search for or find the order.
Tap **Cancel** on the order.
## When matching takes longer
On rainy days or at peak hours, matching can take longer. Our team books several drivers at once to speed up matching when this happens, which can add a priority fee to the order.
## Problems with a driver
If a driver won't accept or collect the order, or behaves badly, reach out to the Atlas support team in your shared WhatsApp group and we'll handle a reassignment.
## Diner updates
* Diners automatically get an SMS with a live tracking link, so they can see where the driver is.
* If there's a delay, our support team gets in touch with the diner directly.
## Refunds
Delivery refunds and cancellation fees follow the [Atlas Smart Logistics refund policy](https://docs.google.com/document/d/1fEYdgUSTHpD1y6S1dAl7kHNXmZqM1EPpomXi_K_Rhjs/edit?usp=sharing). To return payment for the food itself, see [Process refunds on Atlas](/merchant-portal/refunds).
## Next steps
* [Process refunds](/merchant-portal/refunds): return payment to the customer.
* [Update order details](/merchant-portal/editing-order): change an order's items or fulfilment.
* [Logistics report](/reports/operations/logistics-report): track delivery partner performance and fees.
# Discount use cases
Source: https://help.atlas.kitchen/merchant-portal/discount-use-cases
Copy-and-use discount configs for 1-for-1 deals, happy hour, first-order promos, free delivery, loyalty rewards, and staff discounts.
**Who is this article for?**
* Atlas users setting up specific promotional campaigns
* Users who prefer copy-and-adapt configurations over building from scratch
This guide provides ready-to-use discount configurations. Pick a scenario, copy the settings, and adapt to your needs.
For an overview of how discounts work, see [**Discounts**](/merchant-portal/add-discounts).
## Customer acquisition
Get new customers through the door.
Give new customers a reason to try you out. Offer \$10 off their first order with a minimum spend to make sure it's worth it.
**Setup:** Create a **Sub-total discount** named "Welcome - 10 Off Your First Order" with a **fixed amount** of \$10. Set the promo code to `WELCOME10` and limit usage to 1 per diner.
**Add these conditions** so only first-time customers can use it:
* **User is registered** = Yes (required to track order history)
* **Number of orders is less than** = 1 (ensures it's their first order)
* **Cart total minimum spend** = \$30 (optional, prevents abuse on small orders)
Both the login and order count conditions are required. Without login, Atlas can't verify if it's the customer's first order.
Delivery fees put people off. Waive them on the first order to remove that barrier.
**Setup:** Create a **Delivery fee discount** named "Free Delivery - First Order" with a **percentage** of 100%. Set the promo code to `FREEDELIVERY`.
**Add these conditions:**
* **User is registered** = Yes
* **Number of orders is less than** = 1
* **Fulfilment type is** = Delivery
## Loyalty & rewards
Keep your regulars coming back.
Reward logged-in customers with free delivery on every order. This gives people a good reason to create accounts.
**Setup:** Create a **Delivery fee discount** named "Member Free Delivery" with a **percentage** of 100%. Set the promo code to `MEMBER` or leave it blank for POS-only.
**Add these conditions:**
* **User is registered** = Yes
* **Fulfilment type is** = Delivery
If you set a promo code, customers enter it at checkout. If you leave it blank, only staff can apply it from the POS.
Customers like being remembered. Give them 15% off during their birthday month.
**Setup:** Create a **Sub-total discount** named "Birthday Treat - 15% Off" with a **percentage** of 15% and a **value cap** of \$20. Set the promo code to `BIRTHDAY` and limit usage to 1 per diner.
**Add these conditions:**
* **User is registered** = Yes
* **Serving date (calendar month)** = matches birth month
Customers must have their birthday saved in their account profile for this to work.
"Spend \$50, get \$10 off" — customers often add extra items to hit the threshold.
**Setup:** Create a **Sub-total discount** named "Spend 50 Get 10 Off" with a **fixed amount** of \$10. Set the promo code to `SPEND50`.
**Add this condition:**
* **Cart total minimum spend** = \$50
You can create tiered discounts (Spend \$50 get \$10, Spend \$80 get \$20, Spend \$120 get \$35) using different promo codes for each tier.
## Time-based promotions
Fill slower periods or create buzz around specific times.
Discount drinks between 5-8pm on weekdays.
**Setup:** Create a **Per eligible item discount** named "Happy Hour 20% Off Drinks" with a **percentage** of 20% and an optional **value cap** of \$10 per item. Set the promo code to `HAPPYHOUR` or leave it blank for POS-only.
**Add these conditions:**
* **Cart items include either one of** = (select all drink items)
* **Serving time is between** = 17:00 - 20:00
* **Serving day of the week is** = Mon, Tue, Wed, Thu, Fri
***
If you have too many drinks and don't want to add them 1 by 1, you could also do a setup this way:
**Setup:** Create a **Discount last Y items every N items** named "Happy Hour 20% Off Drinks". Set \*\*Last Y items **= 1 and**Every N items \*\* = 1. Use a percentage of 20%. Set the promo code to `HAPPYHOUR` or leave it blank for POS-only.
Add these conditions:
* **User or product tags include** = happy-hour
* **Serving time is between** = 17:00 - 20:00
* **Serving day of the week is** = Mon, Tue, Wed, Thu, Fri
Instead of selecting drinks one by one, tag them with "happy-hour" in the Menu Builder. Then use "User or product tags include" with the tag "happy-hour".
Buy one, get one free. Common for beers and appetizers during happy hour.
**Setup:** Create a **Discount last Y items every N items** discount named "1-for-1 Beer". Set **Last Y items** = 1 and **Every N items** = 2. Use a **percentage** of 100% and turn **Discount modifiers** OFF. Optionally set **Max redemptions per use** = 2 to limit free items per order.
**Add these conditions:**
* **User or product tags include** = 1for1-beer
* **Serving time is between** = 17:00 - 20:00 (optional)
Tag eligible products with "1for1-beer" in Menu Builder first. The discount only applies to tagged items.
**How it works:**
* 2 beers → cheapest one free
* 4 beers → 2 cheapest free
* 3 beers → 1 free (odd one is full price)
The system always discounts the cheapest item. A \$12 lager and a \$20 craft beer? The lager is free.
15% discount on Saturday and Sunday.
**Setup:** Create a **Sub-total discount** named "Weekend Special 15% Off" with a **percentage** of 15% and a **value cap** of \$20. Set the promo code to `WEEKEND15`.
**Make it work:** Add this condition:
* **Serving day of the week is** = Saturday, Sunday
## Channel & location
Target specific channels or outlets.
10% off for customers self-collecting their online orders. Encourage people to pick up directly the food in seasons where is difficult to find a driver.
**Setup:** Create a **Sub-total discount** named "Dine-in Special 10% Off" with a **percentage** of 10%. Set the promo code to `PICKUP10`.
**Make it work:** Add this condition:
* **Fulfilment type is** = Pickup
30% off at a new location. Set an end date and cap the discount to protect margins.
**Setup:** Create a **Sub-total discount** named "Grand Opening 30% Off" with a **percentage** of 30% and a **value cap** of \$30. Set the promo code to `GRANDOPEN` and set a **Redemption end date** for when the promotion ends.
**Make it work:** Add this condition:
* **Outlet is** = (select your new outlet)
## Staff & corporate
Discounts for employees and partners.
Give staff a discount when they self-order at any of your channels. They log in with their work email and enter the promo code.
**Setup:** Create a **Sub-total discount** named "Staff Discount" with a **percentage** of 25%. Set the promo code to `STAFF25` or leave it blank for POS-only.
**Make it work:** Add these conditions:
* **User is registered** = Yes
* **User's email domain contains** = @yourcompany.com
You can add multiple email domain conditions if you have staff from different companies or franchises.
Take note most restaurants that set this up for the POS, don't actually set any conditions - and let the staff control who can redeem it.
Give partners a promo code to share with their team.
**Setup:** Create a **Sub-total discount** named "Partner Discount" with a **percentage** of 15%. Set the promo code to `PARTNER15`.
**Make it work:** Add these conditions:
* **User is registered** = Yes
* **User's email domain contains** = @partnercompany.com
## Operational
Day-to-day discounts for your team.
Let staff comp items when something goes wrong. No manager code needed.
**Setup:** Create an **Individual item discount** named "Complimentary Item" with a **percentage** of 100%. Leave the promo code blank.
**How staff use it:**
* Add the item to the order
* Tap the "Complimentary Item" discount tile on POS
* Select which item to comp
* Item shows as free on the receipt
You'll need to [add this discount as a tile to your POS layout](/menu-builder/pos-layout#adding-tiles-to-your-pos) for staff to access it.
Run a 20% off promotion on everything except alcohol items.
**Setup:** Create a **Sub-total discount** named "20% Off Food" with a **percentage** of 20%. Set the promo code to `SAVE20`.
**Make it work:** Add this condition:
* **Cart items exclude all of** = (select all alcohol items)
The discount applies to the whole order except alcohol. \$50 of food and \$20 of beer? Only the food is discounted.
***
If you have too many alcoholic drinks and don't want to add them 1 by 1, you could also do a setup this way:
**Setup:** Create a **Discount last Y items every N items** named "20% Off Food". Set **Last Y items** = 1 and**Every N items** = 1. Use a percentage of 20%. Set the promo code to `FOOD20 `or leave it blank for POS-only.
Add these conditions:
* **User or product tags include** = food20
Instead of selecting alcoholic drinks one by one, tag the applicable items instead (food in this case) with "food20" in the Menu Builder. Then use "User or product tags include" with the tag "food20".
## Quick reference
| I want to... | Use this discount type |
| - | - |
| Give % or \$ off the whole order | Sub-total discount |
| Discount including surcharges | Total discount |
| Discount including taxes (voucher-style) | Cash voucher |
| Give free or discounted delivery | Delivery fee discount |
| Let staff comp a specific item | Individual item discount |
| Auto-discount certain items in cart | Per eligible item discount |
| Give the cheapest item free | Lowest eligible item discount |
| Run a 1-for-1 or buy-X-get-Y promo | Discount last Y items every N items |
# Update order details
Source: https://help.atlas.kitchen/merchant-portal/editing-order
Edit order items, customer info, delivery addresses, and fulfilment type. Make changes via Atlas POS or Orders page with automatic logistics rebooking.
**Who is this guide for?**
* Atlas users with Cashier or above permissions. Set permissions from **Settings > Team members**.
* Users managing orders from Atlas POS, Scan to Order, Kiosk, Online, or Aggregator platforms.
## Before you begin
This guide will walk you through updating order details, including modifying items, customer information, delivery addresses, and fulfilment type.
Some changes, such as modifying delivery times or fulfilment locations, may require rebooking delivery logistics. Follow all steps carefully to ensure updates are correctly applied to your deliveries.
If you are editing an order from a past date, you must have Manager or above permissions. Set permissions from **Settings > Team members**.
## Adjusting order details
Follow these steps to modify an order:
Follow these steps to cancel and refund an entire bill from Atlas POS:
1. Open and log in to your POS station (from Stations).
2. Tap the order history button > tap the order.
3. Alternatively: tap the search button and key in your order number > tap the order.
4. In the order details modal, tap the status "Completed" and scroll down to "Cancelled".
5. Select the option to "Cancel and refund order".
6. In the refund confirmation page, confirm the amount and refund reason, and tap "Refund".
After this, you can print a Refund receipt by tapping the dropdown "Print receipt" > "Refund receipt".
Follow these steps to edit an order one of the Orders pages:
1. Tap "All orders", "Today's orders" or "Upcoming orders" page.
2. Tap the order to open it.
3. Alternatively: Tap the search bar and key in your order number > Tap the order.
4. In the order details modal, tap “Edit order”.
5. Make your changes:
1. **Fulfilment type.** Tap any of the three options to change it (Pickup, Delivery or Dine-in). Take note:
* If you change from Delivery to Pickup, refund the delivery fee: Go to "Charges" on the right side > Change "Delivery Fee" to \$0.
* If you change from Pickup to Delivery, follow the same steps to charge any extra delivery fee to customers, updating to the right value.
2. **Delivery address.** In the top left corner, tap "Delivery address" > Fill up address and unit number > Tap "Add".
3. **Serving date and time.** Right below address, tap "Serving date" and/or "Serving time" to update order date and serving time slot.
4. **Customer details.** Scroll down to the bottom left, and adjust Name, Number or Email address for the diner.
5. **Changing outlet.** In the "Fulfilment type" modal: Tap the "Pickup address" or "Delivery address" to open the address details modal > Change to desired pickup address in the "Select pickup address" list > Tap the right fulfilment type to select it again.
6. In the top-right corner, tap "Update" to save your changes.
7. A modal will pop up if any changes affect your driver booking (address, outlet, time, etc.). Tap "Save and update logistics booking".
And a last few tips:
* When adjusting the "Serving time" for a delivery order, "Preparation time" will happen 30 minutes before the time slot. For example, a 6:30 pm - 7:00 pm delivery order, will be picked up by the driver by 6:00pm.
* For delivery orders, you can only change the serving time before a driver is assigned. Once a driver is assigned or on the way, reach out to the Atlas support team in your shared WhatsApp group and we'll assist.
* After doing the changes, it's best to reprint the Customer receipt (from the "Print receipt" dropdown at the top) and to "Resend customer email" (from the bottom left corner) when possible.
## What should happen
After saving your changes:
* The order details update immediately in the order modal
* If you changed the delivery address or time: A confirmation modal appears to update logistics booking
* If you changed items: The order total recalculates automatically
* If the order was overpaid after changes: A banner appears prompting you to refund the difference
* If the order was underpaid after changes: A banner appears prompting you to collect additional payment
## If it doesn't work
1. Check your permissions — you need Cashier or above for today's orders
2. For orders from past dates: You need Manager or Admin permissions
3. Aggregator orders (GrabFood, Deliveroo, Foodpanda) cannot be edited in Atlas — make changes on the aggregator platform
4. Some order statuses (Cancelled, Refunded) cannot be edited
1. Make sure you tap "Update" in the top-right corner after making changes
2. Check your internet connection
3. If a delivery booking modal appears, you must tap "Save and update logistics booking" to confirm
4. Refresh the page and check if the changes were actually saved
1. Check that you tapped "Save and update logistics booking" when prompted
2. If the driver was already dispatched, contact the driver directly using the phone number in the order
3. For significant address changes, you may need to cancel and rebook delivery
4. Contact support if logistics booking keeps failing
1. Tap "Resend customer email" from the bottom left of the order modal
2. Check that the customer has a valid email address in the order details
3. Ask the customer to check their spam folder
4. Alternatively, reprint the receipt and give it to the customer directly
## Next steps
* [Process refunds](/merchant-portal/refunds) — Refund the difference if you removed items
* [Create Admin orders](/merchant-portal/admin-orders) — Create orders manually
* [Manage stocks](/merchant-portal/stocks) — Block items that are unavailable
# Change the portal language
Source: https://help.atlas.kitchen/merchant-portal/language-switcher
Switch the Atlas Merchant Portal interface between English and Chinese.
## What this does
The language switcher changes all interface text in the Atlas Merchant Portal — menus, buttons, labels, and page headings — to your selected language.
Your language preference is saved to your browser. It stays set even after you log out and log back in, as long as you use the same browser.
## Supported languages
| Language | Label in menu |
| - | - |
| English | English |
| Chinese (Simplified) | 中文 |
## How to switch languages
The account menu opens with options for Profile, Language, Reload app, and Log out.
The menu expands to show the available languages. The current language has a checkmark next to it.
The change is instant — the entire interface switches to your selected language.
## What changes and what doesn't
**Changes with the language switcher:**
* Sidebar menu and navigation labels
* Button text and form labels
* Page headings, column headers, and tab names
* Filter labels and status badges
**Does not change:**
* **Your own data** — product names, category names, outlet names, and customer details stay as entered.
* **Order data** — order IDs, addresses, and contact information are not translated.
* **Help centre** — the documentation site is in English only.
## What should happen
* The portal interface switches to your selected language immediately.
* Your preference persists across sessions in the same browser.
* All navigation, buttons, and system labels display in the selected language.
## If it doesn't work
* Tap your email or avatar in the top-right corner to open the account menu.
* Look for **Language** in the dropdown list — it has a chevron (arrow) indicating a submenu.
* If you don't see it, your merchant account may not have multiple languages enabled. Contact support.
* Product names, category names, and other merchant-entered data are not translated — this is expected.
* If system labels (buttons, menus) are still in the old language, try a hard refresh (Ctrl+Shift+R or Cmd+Shift+R).
* Clear your browser cache if the issue persists.
* Your preference is stored in the browser. If you switch browsers or clear browser data, the preference resets to English.
* Use the same browser to keep your language preference.
If the issue persists, contact support at [hello@atlas.kitchen](mailto:hello@atlas.kitchen).
## Next steps
* [Get started with Atlas](/get-started/onboarding) — set up your account and outlets.
* [View your orders](/merchant-portal/admin-orders) — manage incoming orders from the portal.
# Atlas Loyalty
Source: https://help.atlas.kitchen/merchant-portal/loyalty-signup
How your diners join Atlas Loyalty, earn rewards, and redeem them at your outlets.
**Who is this for?**
* Atlas merchants setting up, launching, and managing the customer loyalty programme.
## What this does
Atlas Loyalty rewards customers for ordering with you, which brings them back more often. Depending on how your programme is set up, customers earn rewards as either points or cashback, and they redeem those rewards against future orders.
### Setting up Atlas Loyalty
Reach out to Atlas support or your account manager to set up and enable your loyalty programme. Once it is active, you set your reward rate and any minimum spend on the programme, and the system tracks and displays rewards across your ordering channels. You do not need to do any manual setup to keep it running.
### How customers sign up
Customers can join your programme in a few ways:
* **Atlas Scan to Order** — sign up on their phone while ordering.
* **Atlas Online** — sign up on your ordering website.
* **Receipt** — scan the QR code on a physical receipt, or tap the link in a digital receipt.
* **Standalone QR** — print a QR code that links to your loyalty portal and display that in your restaurant, so customers can sign up any time.
* **Staff at the POS** — the cashier signs them up during payment. This adds work for your staff, so it is not always the preferred route.
### Earning rewards
Customers earn rewards automatically when they are logged in to their loyalty account at the time of ordering.
They can log in in a few ways:
* **Self-service checkouts** — log in before payment on Atlas Online, Atlas Scan to Order, or Atlas Kiosk.
* **At the POS** — give the cashier their phone number, or log in themselves on the customer-facing display.
In case the customer was not logged in / forgot to log in during the checkout process:
* **Scan a receipt** — scan the QR code on any unclaimed receipt to claim and earn the rewards for that order afterwards. This includes the delivery receipt sent with an aggregator order.
A few things to know about earning:
* **All channels are eligible** — yes, even third-party delivery platforms. Direct orders earn rewards when the customer is logged in, or when the customer claims from the QR code or link on their receipt. Aggregator orders (GrabFood, Foodpanda, and Deliveroo) only earn rewards when the customer scans the QR code on their delivery receipt.
* **Reward rate** — you set the reward rate (points or cashback per SGD spent) on your programme.
* **Minimum spend** — you can set a minimum order spend before an order is eligible to earn rewards.
* **Net sales basis** — rewards are calculated on net sales, which excludes service charges, taxes, delivery fees, and tips.
### Redeeming rewards
Customers redeem rewards against an order, as long as they are logged in at checkout:
* **Self-service checkouts** — redeem before checkout on Atlas Online, Atlas Scan to Order, or Atlas Kiosk.
* **At the POS** — tell the cashier, or log in on the customer-facing display.
You can also set a minimum order spend before rewards can be redeemed.
### Merchant view
You can manage members and monitor activity from the Atlas Merchant Portal:
1. Log in to the **Atlas Merchant Portal**.
2. Tap the menu in the top-left corner, then select **Customers**.
3. Under the **Registered** tab, you can view:
* Member list with names, email addresses, and phone numbers
* Reward balance (points or cashback earned)
* Recent transactional activity
* Marketing communication consent
### Adding or removing credits for a customer
Use this to correct a balance. For example, an order did not earn rewards because the customer forgot to log in, or you want to give credits as a goodwill gesture.
⚠️ The new balance applies immediately and the customer can redeem it on their next order. Every change is recorded against your staff account.
1. Log in to the **Atlas Merchant Portal**.
2. Tap the menu in the top-left corner, then select **Customers**.
3. Under the **Registered** tab, tap the customer's row. Their details panel opens on the right.
4. Scroll to **Loyalty programs**, find the programme you want to change, then tap **Edit credits**.
5. Select **Add credits** or **Remove credits**.
6. Enter the amount and type a **Reason**. The reason is required.
7. Check the **Brand** is correct. For **Add credits**, set the **Expires on** date if your programme expires credits.
8. Tap **Save**.
**What should happen**: A confirmation message appears and the new balance shows against that programme straight away. Tap **View history** on the same row to see the change, with the email of the staff member who made it.
A few things to know:
* **Remove credits only appears when the balance is above zero.** You cannot take a customer below zero. Removing more than they hold shows an insufficient balance error.
* **The customer must be a member, not a guest.** Guests have no reward balance to edit.
* **Points or cashback** — enter a number of points on a points programme, or a dollar amount on a cashback programme. A points programme also shows what one point is worth underneath the amount field.
#### If Edit credits is not there
1. Check the customer is under the **Registered** tab. Guests cannot hold credits.
2. Check the **Loyalty programs** section does not say "Customer is not part of any loyalty programs". A customer can only hold credits once they have joined a programme.
3. If it is still missing, your role does not have loyalty permissions. Contact Atlas support at [hello@atlas.kitchen](mailto:hello@atlas.kitchen) to have them added.
***
## Next steps
* [Understand customer data and export options](/merchant-portal/customers-data)
* [Analyse your loyalty campaign performance](/reports/marketing/loyalty-report)
* [Create member-exclusive discounts](/merchant-portal/add-discounts)
# Add operating hours and special hours
Source: https://help.atlas.kitchen/merchant-portal/operating-hours
Set up regular restaurant hours and special hours for holidays. Control when customers can order for dine-in, pickup, and delivery across Atlas channels.
**Who is this article for?**
* Atlas users with Manager or above permissions. Set permissions from **Settings > Team members**.
* Users managing menus for Atlas POS, Scan to Order, Kiosk, Online, or Aggregator platforms.
## Before you begin
Operating hours are your restaurant's regular opening hours and are synced across all your integrated Atlas channels.
Special hours are used when your regular hours are affected for a day—like on public holidays or special occasions.
Note: For third-party platforms like GrabFood, Deliveroo, or Foodpanda, you'll still need to manually update operating and special hours in their respective restaurant portals.
## Add operation hours
Set up your restaurant's regular operating hours so customers know when you're open for Dine-in, Pickup, or Delivery. You can add multiple time ranges for each day and preview how they appear to diners.
Follow these steps to add operating hours:
* **Time range details** : Tick the option you wish to adjust the operation hours (Dine-in, Pickup, Delivery) - can tick multiple
* **Name**: Give a name for your time slots. (Regular, Lunch, Dinner etc)
* **Time range**: Select the opening and closing time
* **Operating days**: You may choose more than days if you wish the same time set to be applied to multiple days
* **Time slot adjustments**
* **Preview**: This will show how your customers view your operation hours. You may need to adjust 3 and 5 to get the correct timing.
**Extra note:** If your restaurant closes in the middle of the day and resume operation in the evening, you can tap on **"Add new service hours"** after above step is done to add another time slot.
## Edit operation hours
Update your regular operating hours whenever your schedule changes. You can easily adjust or remove time slots for Dine In, Pickup, or Delivery.
To edit existing operating hours, follow these steps:
## Add special hours
This section will guide you on how to close or add special hours for public holidays or special occasions when your restaurant operates on a different timing than regular hours. (i.e half day / early closure).
Follow these steps to add special hours:
1. Name of the occasion or public holiday
2. Duration of the special hours apply
3. Status of your restaurant during these special days
a. As usual: operates same as regular hours
b. Closed: no operation
c. Open with special hours: operate with adjustable timing (halfday, early closure)
## What should happen
After saving your operating hours or special hours:
* **Operating hours**: Your regular hours appear in the Operating Hours section, organised by day
* **Special hours**: The special occasion appears in the Special Hours list with the correct date range and status
* **Customer-facing channels**: Hours update on Atlas Online, Scan to Order, and Kiosk
* **Order slots**: Customers can only select time slots within your operating hours when placing orders
For GrabFood, Deliveroo, and Foodpanda: You must manually update hours in their respective portals. Atlas does not sync operating hours to third-party platforms.
## If it doesn't work
1. Refresh the page and check the Operating Hours section again
2. Verify you selected the correct outlet before making changes
3. Check that you tapped "Save" after configuring the time range
4. Try adding the hours again — the first save may not have completed
1. Check that you set hours for the correct fulfilment type (Dine-in, Pickup, Delivery)
2. Verify the time range covers the times you want to accept orders
3. Check if any special hours are overriding your regular hours for today
4. For aggregator orders: Hours must be set on the aggregator platform separately
1. Check the date range — ensure it includes the correct holiday dates
2. Verify the status is set correctly (Closed, or Open with special hours)
3. Check if another special hour entry conflicts with this date
4. Refresh the page after saving
1. The preview shows an approximation — actual display may vary slightly
2. Check your time slot adjustments in the configuration
3. Test by opening Atlas Online or Scan to Order as a customer
4. Contact support if there's a significant mismatch
## Next steps
* [Set up your menu](/menu-builder/create-menus) — Configure what customers can order
* [Manage stocks](/merchant-portal/stocks) — Block items when you run out
* [View your orders](/merchant-portal/admin-orders) — Monitor incoming orders
# Outlet shifts
Source: https://help.atlas.kitchen/merchant-portal/outlet-shifts
Create shifts for your outlet to track sales by time period and filter reports by shift.
**Who is this article for?**
* Atlas users with Manager or above permissions. Set permissions from **Settings > Team members**.
## What shifts do
Shifts divide your sales day into named time periods so you can:
* **Track sales by period** — see how much revenue lunch generates vs. dinner.
* **Filter reports by shift** — most Atlas reports let you filter by shift to compare performance across periods.
* **Reconcile at shift end** — review payments, voids, and discounts for a specific period instead of waiting until end of day.
Shifts are set per outlet. Each outlet can have its own shift schedule.
## When to use this
* You want to compare lunch vs. dinner sales in reports.
* You have different staff working different periods and want to track performance per shift.
* You need to reconcile payments at the end of each shift, not just at the end of the day.
## Setting up shifts
Tap **Edit** on the outlet you want to configure.
The Shifts section shows your current shifts. Each shift displays its name, time range, and active days.
An inline form appears below your existing shifts.
Use names your team already uses — e.g. "Morning", "Afternoon", "Evening", "Late night".
Pick a start and end time. The duration displays automatically next to the time pickers.
Shifts should cover your full operating hours without gaps. For example:
| Shift | Start | End | Duration |
| - | - | - | - |
| Morning | 6:00 AM | 2:00 PM | 8h |
| Afternoon | 2:00 PM | 10:00 PM | 8h |
Select when this shift applies:
* **Every day** — the shift runs all seven days.
* **Weekdays** — Monday through Friday only.
* **Weekend** — Saturday and Sunday only.
* **Custom** — pick specific days.
The shift appears as a card in the Shifts section. Repeat for each shift you need.
## Editing a shift
Changing a shift's time range does **not** reassign past orders. Only orders placed after the change use the new time range.
The form expands inline. Update the name, time range, or active days.
Changes apply to future orders. Past orders keep their original shift assignment.
## Removing a shift
Past orders tagged with this shift keep their shift label in reports. Future orders during that time range will have no shift assigned.
## How shifts appear in reports
Once shifts are configured, you can filter most reports by shift:
* [**Sales summary report**](/reports/sales/sales-summary-report) — filter by shift to see revenue for a specific period.
* [**Daily outlet report**](/reports/operations/daily-outlet-report) — breaks down sales by shift in the summary section.
* [**Product mix report**](/reports/product/product-mix-report) — see which products sell best during each shift.
Use the **Shift** filter at the top of any report that supports it.
## What should happen
* New shifts appear immediately as cards in the Shifts section after saving.
* Orders placed during a shift's time range are automatically tagged with that shift.
* Reports show the shift filter option after at least one shift is configured.
* Shift names appear in the Daily outlet report and other filtered reports.
## If it doesn't work
* Verify at least one shift is configured for the outlet you're viewing.
* Select the correct outlet in the report's outlet filter.
* Refresh the page — newly created shifts may take a moment to appear in filters.
* Check the shift time ranges — there should be no gaps between shifts.
* Orders are assigned based on when they are placed, not when they are completed.
* If shifts overlap, the order is assigned to the first matching shift.
* Shifts only apply to orders placed after the shift was created. Past orders are not retroactively tagged.
* If you recently changed shift times, past orders keep their original shift assignment.
If the issue persists, contact support at [hello@atlas.kitchen](mailto:hello@atlas.kitchen).
## Next steps
* [Sales summary report](/reports/sales/sales-summary-report) — filter by shift to compare period performance.
* [Daily outlet report](/reports/operations/daily-outlet-report) — review shift-level sales breakdowns.
* [Set operating hours](/merchant-portal/operating-hours) — configure when your outlet accepts orders.
# Add or remove payment types
Source: https://help.atlas.kitchen/merchant-portal/payment-methods
Configure which payment types your business accepts at the POS, kiosk, and online — and set different payment types per outlet.
**Who is this article for?**
* Atlas users with Manager or Admin permissions.
* Merchants configuring which payment types they accept across Atlas POS, Kiosk, Atlas Online, and Scan to Order.
## What this does
Configure, add, or remove the payment types your business accepts. This guide covers enabling payment types (like credit card, PayNow, and cash), creating your own manual payment types, and assigning a specific subset of payment types to an individual outlet.
## When to use this
Use the decision tree below to find the exact steps you need:
* If you want to start accepting a payment type (card, PayNow, cash, etc.): [Enable a payment type](#enable-a-payment-type).
* If you want to stop accepting a specific payment type: [Disable a payment type](#disable-a-payment-type).
* If you need a custom payment type (gift cards, mall vouchers, cash vouchers, etc.): [Add a manual payment type](#add-a-manual-payment-type).
* If you want different outlets to accept different payment types: [Set payment types per outlet](#set-payment-types-per-outlet).
## When to use this
Use the decision tree below to find the exact steps you need:
* If you want to start accepting a payment type (card, PayNow, cash, etc.): [Enable a payment type](#enable-a-payment-type).
* If you want to stop accepting a specific payment type: [Disable a payment type](#disable-a-payment-type).
* If you need a custom payment type (gift cards, mall vouchers, cash vouchers, etc.): [Add a manual payment type](#add-a-manual-payment-type).
* If you want different outlets to accept different payment types: [Set payment types per outlet](#set-payment-types-per-outlet).
## Steps
### Enable a payment type
Turn on the payment types you want to accept. Payment types are grouped into **E-commerce payment types** (Atlas Online and Scan to Order) and **Terminal payment types** (Atlas POS and Kiosk).
Open your web browser and sign in to the dashboard.
Go to **Settings** > **Payment types**.
Use the **E-commerce payment types** section for your Atlas Online and Scan to Order websites, or the **Terminal payment types** section for your Atlas POS and Kiosk.
Switch the **Enabled** toggle on next to the payment type you want to accept (e.g. **Credit card**, **PayNow**, or **Cash**).
### Disable a payment type
Stop accepting a payment type at checkout. Payment types are disabled, not deleted — switching a type off removes it from the relevant checkout screens while keeping it available to re-enable later.
In the Atlas merchant portal, go to **Settings** > **Payment types**.
Find the payment type you want to stop accepting and switch its **Enabled** toggle off.
### Add a manual payment type
Create a custom payment type for things Atlas doesn't provide out of the box — physical gift cards, mall vouchers, cash vouchers, or any custom tender you accept at the till.
In the Atlas merchant portal, go to **Settings** > **Payment types**.
In the **Terminal payment types** section, click the **Add manual payment type** button.
Fill in the **Label** (required, e.g. "Mall voucher"). You can optionally upload an **Image** for the payment type.
Switch **Enabled** on so the payment type is available immediately. Switch **Opens cash register?** on if selecting this payment type at the POS should trigger the cash drawer.
Save the form. Your new payment type will now appear in the Terminal payment types list and on your POS checkout screen.
### Set payment types per outlet
Restrict an individual outlet to a specific subset of your enabled payment types — useful when locations accept different tenders.
In the Atlas merchant portal, go to **Outlet settings** > **Outlets**.
Click **Edit** next to the outlet you want to configure, then go to the **Payment types** section.
Use the **POS Payment types** and **E-commerce Payment types** multi-select fields to choose which payment types this outlet accepts.
Save the outlet. If you leave a field empty, the outlet uses all of your globally enabled payment types for that channel.
## What should happen
Once saved, your changes apply automatically:
* Enabled payment types appear on the relevant checkout screens (POS, Kiosk, Atlas Online, or Scan to Order).
* Disabled payment types no longer appear at checkout.
* Outlet-specific selections override your global list for that outlet.
## If it doesn't work
If a payment type is enabled in the Atlas merchant portal but doesn't show at the till or online:
* **Check the group**: Make sure you enabled it in the right section — **Terminal payment types** for POS/Kiosk, **E-commerce payment types** for Atlas Online/Scan to Order.
* **Check the outlet's selection**: If the outlet has specific payment types selected under **Outlet settings > Outlets > (outlet) > Payment types**, only those will show. Add the missing type, or clear the field to fall back to your global list.
* **Check your connection**: Make sure the POS tablet is online.
If an integrated card terminal isn't responding, this is a hardware connection issue rather than a payment type setting. Check that the terminal is powered on and connected, then contact support if it persists.
If the issue persists, contact support at [hello@atlas.kitchen](mailto:hello@atlas.kitchen).
## Next steps
* [Learn how to reconcile daily shift payments](/merchant-portal/outlet-shifts)
* [Manage team members, roles, and outlet access](/merchant-portal/team-management)
# Pop-ups
Source: https://help.atlas.kitchen/merchant-portal/pop-ups
Configure pop-ups to display a marketing image to diners before they start ordering.
Pop-ups are a marketing tool that shows an image to diners when they open your ordering surface. They appear on Scan-to-Order or Atlas Online.
## What pop-ups do
When a diner opens your menu, Atlas shows them a pop-up visual — great for promoting a campaign, new item, or important announcement before they start browsing.
## Where it appears
* **Scan-to-Order** — diners ordering from the QR menu
* **Atlas Online** — your online storefront
## Set up a pop-up
1. In the Merchant Portal, go to **Marketing tools → Pop-ups**.
2. Click **Create new pop-up**.
3. Select **Website** (Atlas Online) or **Channel** (Scan-to-Order).
4. Add a name for personal reference. This would not show to diners.
5. Upload the **pop-up image** and add the copy that diners will see.
6. Configure when and where the pop-up should appear (channels, outlets, schedule).
7. Save. The pop-up is live immediately across the channels you selected.
## Limitations
* An image needs to be provided.
* Only one pop-up can be active per channel at a time.
## Common use cases
* **Promote a campaign** or limited-time offer the moment diners land on your menu.
* **Announce new items** or menu changes to returning diners.
* **Communicate important notices** like holiday hours or service updates.
* **Target registered/unregistered** users to announce promotions.
## Next steps
* [Cross-sell](/merchant-portal/cross-sell)
* [Discounts](/merchant-portal/add-discounts)
# Process refunds on Atlas
Source: https://help.atlas.kitchen/merchant-portal/refunds
Issue full or partial refunds for paid orders. Cancel orders, reopen for editing, or recharge with different payment methods via POS or Orders page.
**Who is this article for?**
* Atlas users with Cashier or above permissions. Set permissions from Settings > Team members.
* Atlas POS, Scan to order, Kiosk, Online and Aggregator users.
## Before you begin
This guide will run through how to refund payments for paid orders.
You can do partial or full refunds from the Atlas Merchant Portal. If you are processing payments directly with Atlas, refunds happen automatically once triggered.
Note that while order cancellations are reversible, **order refunds are not reversible once initiated.** Before proceeding, make sure you are refunding the correct order and amount.
## Processing a full refund (and cancelling the order)
Use this option when you do not want to charge this amount to the diner. The sales amount will not be collectible.
There are two options to cancel and refund an order:
Follow these steps to cancel and refund an entire bill from Atlas POS:
1. Open and log in to your POS station (from Stations).
2. Tap the order history button > Tap the order.
3. Alternatively: Tap the search button and key in your order number > Tap the order.
4. On the order details modal: Tap on the status "Completed" and scroll down to "Cancelled".
5. A modal will pop up. Select the option to "Cancel and refund order".
6. In the refund confirmation page: Confirm the amount and refund reason, and tap "Refund".
After this, you can print a Refund receipt by tapping the dropdown "Print receipt" > "Refund receipt".
Follow these steps to cancel and refund an entire bill from one of the Orders pages:
1. Tap "All orders", "Today's orders" or "Upcoming orders" page.
2. Tap the order to open it.
3. Alternatively: Tap the search bar and key in your order number > Tap the order.
4. In the order details modal: Tap the status "Completed" and scroll down to "Cancelled".
5. Select the option to "Cancel and refund order".
6. On the refund confirmation page, confirm the amount and refund reason, and tap "Refund".
After this, you can print a Refund receipt by tapping the dropdown "Print receipt" > "Refund receipt".
## Processing a full refund (and reopening the order)
Use this option when you accidentally charged an open order, and you need to reopen it in the POS (for example, to continue adding items).
You can only do this from inside Atlas POS. Follow these steps to refund an entire bill from Atlas POS and reopen the order:
1. Open and log in to your POS station (from Stations).
2. Tap the order history button > tap the order.
3. Alternatively: Tap the search button and key in your order number > Tap the order.
4. In the order details modal: Tap "Adjust" In the top-right corner.
5. Tap "Re-Open in POS (refund required)".
6. In the refund confirmation page, confirm the amount and refund reason, and tap "Refund".
After this, you can go back to the POS, and you will find the order re-opened.
You will find this voided order in the order history too. You can print a Refund receipt by tapping the dropdown "Print receipt" > "Refund receipt".
## Processing a full refund (and recharging the order)
Use this option when you need to charge the amount to the diner, but the initial payment was charged with the wrong payment type. There are two options to refund and recharge an order:
Follow these steps to refund and recharge an entire bill from Atlas POS:
1. Open and log in to your POS station (from Stations).
2. Tap the order history button > Tap the order.
3. Alternatively: Tap the search button and key in your order number > Tap the order.
4. In the order details modal: Tap "Adjust" in the top-right corner.
5. Select the option to "Refund and make a different payment"
6. Enter refund reason > Tap "Refund \$00.00", where 00.00 is the amount to refund.
7. In the next page, select an option for diners to pay again:
* \*\*Option 1: Online payment link. \*\*The order must have the diner's email assigned.
1. Tap "Charge", and an email will be sent to the diner's email, for them to pay online.
2. After paid, the order will update with the new payment.
* \*\*Option 2: Payment terminal. \*\*You must own an Atlas payment terminal for this.
1. Select this option > Tap "Continue".
2. Tap the "Select terminal to charge" dropdown, and select your current station.
3. Tap "Payment type" dropdown, and select the correct payment type.
4. Tap "Charge payment".
* **Option 3: Manual payment.**
1. Select this option > Tap "Continue".
2. Tap "Payment type" dropdown, and select the correct payment type.
3. Tap "Update".
8. Once the diner has paid the order again, the red banner indicating an underpayment will disappear from the order details modal.
Follow these steps to refund and recharge an entire from one of the Orders pages:
1. Tap "All orders", "Today's orders" or "Upcoming orders" page.
2. Tap the order to open it.
3. Alternatively: Tap the search bar and key in your order number > Tap the order.
4. In the order details modal: Tap "Issue refund".
5. Enter the full amount (selected by default) > Enter refund reason > Tap "Refund".
6. In the next page, select an option for diners to pay again:
* **Option 1: Online payment link.** The order must have the diner's email assigned.
1. Tap "Charge", and an email will be sent to the diner's email, for them to pay online.
2. After paid, the order will be updated with the new payment details.
* **Option 2: Payment terminal.** You must own an Atlas payment terminal for this.
1. Select this option > Tap "Continue".
2. Tap the "Select terminal to charge" dropdown, and select your current station.
3. Tap "Payment type" dropdown, and select the correct payment type.
4. Tap "Charge payment".
* Option 3: Manual payment.
1. Select this option > Tap "Continue".
2. Tap "Payment type" dropdown, and select the correct payment type.
3. Tap "Update".
Once the diner has paid the order again, the red banner indicating an underpayment will disappear from the order details modal.
## Processing a partial refund
Use this option when you accidentally overcharged an order, and you need to refund part of it (for example, you added an extra item that was not served).
Follow these steps to do a partial refund on a bill from Atlas POS:
1. Open and log in to your POS station (from Stations).
2. Tap the order history button > Tap the order.
3. Alternatively: Tap the search button and key in your order number > Tap the order.
4. In the order details modal: Tap "Adjust" > Tap "Edit order".
5. You will see your cart is now editable. A few things you can do from here:
1. Remove an item by tapping on the remove button .
2. Adjust quantity with the minus and plus buttons .
3. Adjust sales quantities, scrolling down and selecting the editable boxes.
4. Add and remove new items, by tapping on the top-right corner "Edit cart" button.
6. Once you are done with your changes, Tap "Update" in the top-right corner.
7. A red banner will prompt with the calculated difference to refund. Tap "Refund".
8. In the refund confirmation page, confirm the amount and refund reason, and tap "Refund".
After this, you can print a Refund receipt from the dropdown "Print receipt" > "Refund receipt".
Follow these steps to do a partial refund on a bill from one of the Orders pages:
1. Tap "All orders", "Today's orders" or "Upcoming orders" page.
2. Tap the order to open it.
3. Alternatively: Tap the search bar and key in your order number > Tap the order.
4. In the order details modal: Tap on "Edit order".
5. You will see your cart is now editable. A few things you can do from here:
1. Remove an item by tapping on the remove button .
2. Adjust quantity with the minus and plus buttons .
3. Adjust sales quantities, scrolling down and selecting the editable boxes.
4. Add and remove new items, by tapping on the top-right corner "Edit cart" button.
6. Once you are done with your changes, tap "Update" in the top-right corner.
7. A red banner will prompt with the calculated difference to refund. Tap "Refund".
8. In the refund confirmation page, confirm the amount and refund reason, and tap "Refund".
After this, you can print a Refund receipt by tapping the dropdown "Print receipt" > "Refund receipt".
## What should happen
After completing a refund:
* **For full refunds with cancellation**: The order status changes to "Cancelled" and shows a "Refunded" label
* **For full refunds with reopen**: The order reopens in your POS cart, ready for editing. The original order shows as voided
* **For full refunds with recharge**: The order shows "Unpaid" with a red banner until the customer pays again
* **For partial refunds**: The order total updates to the new amount. The original total is crossed out
For integrated payments, the refund amount reflects in the customer's bank account after processing by their bank.
## How long refunds take
Once you confirm a refund in Atlas, it is submitted right away. How soon the customer gets their money back depends on the payment method.
| Payment method | When the customer gets the refund |
| - | - |
| Card (Visa, Mastercard) | 5–10 business days |
| Apple Pay / Google Pay | 5–10 business days (follows the linked card) |
| PayNow | Returned to the customer's bank, usually faster than a card refund |
| Manual (cash, NETS, bank transfer) | No electronic refund to send; you return it to the customer directly |
| Aggregator (GrabFood, Foodpanda, Deliveroo) | Handled on the platform, following its own timeline |
The card window is set by the customer's bank, so Atlas cannot speed it up once the refund is submitted. Weekends and public holidays do not count as business days.
## If it doesn't work
1. Check that you have Cashier permissions or above (Settings > Team members)
2. Verify the order is in "Completed" or "Paid" status — you cannot refund unpaid orders
3. For aggregator orders (GrabFood, Deliveroo, Foodpanda): Refunds must be processed on the aggregator platform, not Atlas
1. Check the timing first: card refunds take 5–10 business days (see [How long refunds take](#how-long-refunds-take)). The customer may just be waiting on their bank.
2. Confirm the refund was processed in Atlas (order shows "Refunded" label)
3. Check the original payment method — refunds go back to the same card/account used for payment
4. Ask the customer to check their bank statement for the original transaction date
5. Contact support at [hello@atlas.kitchen](mailto:hello@atlas.kitchen) with the order number and refund date
1. Use the search bar and enter the order number (e.g., "A-1234")
2. Check the date filter — expand it to include older dates if needed
3. Try searching by customer name or phone number
4. For orders older than today: You need Manager or Admin permissions to access them
1. Check if the order had discounts applied — refunds are based on what the customer actually paid
2. For partial refunds: Verify you removed the correct items before tapping "Update"
3. Review the refund confirmation screen carefully before confirming
## Next steps
* [Edit order details](/merchant-portal/editing-order) — Modify items without processing a refund
* [Create Admin orders](/merchant-portal/admin-orders) — Manually create and charge orders
* [View sales reports](/reports/sales/sales-summary-report) — Track refunds in your sales data
# Reset POS PIN or portal password
Source: https://help.atlas.kitchen/merchant-portal/reset-pin
Change your point-of-sale login PIN or reset your Atlas merchant portal password.
**Who is this article for?**
* Atlas users with operator, manager, or admin permissions.
* Managers and admins resetting credentials for other staff members.
## What this does
Staff use a unique 6-digit PIN to log in to the Atlas point-of-sale (POS) tablet. All Atlas users use a password to access the Atlas Merchant Portal.
This guide covers when and how to reset these credentials, plus PIN best practices and what to do if a reset doesn't work. The step-by-step lives in the [Team members and roles](/merchant-portal/team-management) guide.
### Best practices for PIN security
To protect your point-of-sale terminal:
* **Never share PINs**: Assign a unique PIN to each staff member. Sharing PINs makes transaction audits unreliable.
* **Rotate PINs regularly**: Change POS PINs every 90 days to prevent unauthorised access.
* **Avoid simple patterns**: Do not use obvious sequences like `123456`, `000000`, or a staff member's birth year.
### Multi-outlet considerations
If your business operates across multiple locations:
* **Immediate synchronisation**: Updating a PIN in the Atlas merchant portal syncs it to all tablets instantly.
* **Single PIN per employee**: Employees use the same PIN across all assigned outlets. Check Settings > Team members to assign outlets.
## When to use this
Use this guide when:
* A staff member forgets their POS login PIN.
* You are locked out of the Atlas merchant portal.
* You need to update credentials for a new or departing employee.
## Reset a team member's PIN
An admin can change any team member's 6-digit PIN from the Atlas merchant portal: go to **Settings > Team members**, tap the **⋮** menu next to their name, and choose **Update pin code**. The new PIN syncs to all tablets immediately.
For the full steps, see [Set up a POS pin code](/merchant-portal/team-management#set-up-a-pos-pin-code) in the Team members guide.
## Reset your portal password
If you have forgotten your Atlas merchant portal password, reset it from the login page using **Forgot password** and follow the email link to set a new one.
For the full steps, see [Reset a password](/merchant-portal/team-management#reset-a-password) in the Team members guide.
## If it doesn't work
1. Check that the tablet has an active internet connection. Offline tablets cannot sync new PINs.
2. Wait 30 seconds and try again. It can take a moment for settings to propagate.
3. Verify that the staff member is assigned to this outlet in Settings > Team members.
1. Check your email spam or junk folder.
2. Make sure emails from `no-reply@atlas.kitchen` are not blocked by IT filters.
3. Return to the portal login page and request the reset link again. Check the email spelling.
If the issue persists, contact support at [hello@atlas.kitchen](mailto:hello@atlas.kitchen).
## Next steps
* [Team members and roles](/merchant-portal/team-management)
# How to use the Stocks page
Source: https://help.atlas.kitchen/merchant-portal/stocks
Manage restaurant stock in Atlas by blocking items, setting quantities, and syncing availability across all channels including aggregators.
Who is this guide for?
* Atlas users with any permissions. Set permissions from **Settings > Team members**.
* Users managing orders from Atlas POS, Scan to Order, Kiosk, Online, or Aggregator platforms.
## Before you begin
From Atlas you can handle all your restaurant stocks in one place, and block or 86 products to avoid operational issues. The Stocks page works across all Atlas products:
* Atlas POS
* Atlas Online
* Atlas Scan to Order
* Atlas Kiosk
* Atlas Aggregator (integrating with all your 3rd party platform stocks)
If you have multiple outlets, please make sure to be in the correct outlet and date. This is automatically set to the current date at your default outlet.
## How to block and unblock items
Follow these steps to block or unblock items in the Stocks page to manage availability and prevent operational issues:
* To use the "Sections" filter, first select a menu from the "Menu" filter.
Items blocked today or until a date will remain blocked for that period, and will unblock automatically after that. For items you have blocked indefinitely, tap "Unblock" to manually make them available again.
## How to set product quantities
Use these steps to set and update product quantities, ensuring accurate stock tracking and automatic deductions:
* "Set remaining quantity left", sets the remaining quantity left to be sold for this period. It does not take into account any existing pre-orders.
* "Set total quantity", sets the total quantity to be sold for this period, including any pre-sold stocks already booked. You will see a remaining quantity left calculation too.
Your quantities will now deduct automatically after each order, and once they reach 0, the item will become "Blocked".
If you need to manually update a quantity in the meantime, follow the same steps above, but tap on "Update quantity" on step 3 instead.
## Setting quantities for GrabFood, Foodpanda and Deliveroo
* Even if you set quantities on Atlas for these integrated platforms, you might still receive an order with more items than you had left.
* These platforms don't read from Atlas what quantity is left, and will assume you always have stock, unless the item is "Blocked".
* If an order with an item quantity higher than the current one comes from one of these aggregators, Atlas will block the item immediately.
* This is a rare situation that only happens for these three integrated platforms with quantities set.
## Blocking items for GrabFood, Foodpanda and Deliveroo
**Always block items from Atlas, not from the aggregator platforms.** Blocking items directly on GrabFood, Foodpanda, or Deliveroo can break the sync and stop orders from reaching Atlas.
In rare situations, you may still receive an order for a blocked item. This can happen when:
* The Aggregator platform assigns a driver to an order placed before you blocked the item
* During busy times, there's a delay between when customers order and when the platform sends the order to Atlas
* A customer ordered the item 1 hour ago when it was available, but the order only reaches you after you've blocked it
If this happens, check that the item is blocked on your Aggregator platform. If it's not blocked there, contact our team via WhatsApp.
## What should happen
After blocking or setting quantities:
* **Blocked items**: The item moves to the "Blocked" section at the top of the Stocks page
* **Items with quantities**: The remaining quantity displays next to the item name and decreases with each order
* **When quantity reaches 0**: The item automatically becomes blocked
* **Across channels**: Changes sync to Atlas POS, Online, Scan to Order, and Kiosk
* **Aggregator platforms**: Changes sync to GrabFood, Foodpanda, and Deliveroo (may take a few moments)
## If it doesn't work
1. Refresh the Stocks page and verify the item shows as "Blocked"
2. On POS: Tap the refresh button or close and reopen the station
3. On Online/Kiosk/Scan to Order: Clear the browser cache and reload
4. Wait 30 seconds — changes may take a moment to sync
1. Check that the item is blocked on the aggregator platform directly
2. This can happen when customers placed orders before the block synced
3. The delay between order placement and delivery notification can be 30-60 minutes
4. If blocks aren't syncing at all, contact support via WhatsApp
1. Verify you set the quantity for the correct date range
2. Check that you're viewing the correct outlet and date on the Stocks page
3. Refresh the page to see the latest quantity
4. For aggregator orders: Quantities may not sync perfectly — see the note above about quantity limitations
1. Use the search bar to search by item name
2. Check the Menu filter — the item may be in a different menu
3. Check the Sections filter — select the correct section after choosing a menu
4. If the item is a modifier, it may not appear in the Stocks page — contact support
## Next steps
* [Create and manage menus](/menu-builder/create-menus) — Add or remove items from your menu
* [View today's orders](/merchant-portal/admin-orders) — Check incoming orders
* [Set operating hours](/merchant-portal/operating-hours) — Control when customers can order
# Surcharges
Source: https://help.atlas.kitchen/merchant-portal/surcharges
Add a temporary fee to orders for a specific period, outlet, or fulfilment type, as a fixed amount or a percentage.
**Who is this article for?**
* Atlas users with Admin permissions.
* Merchants adding a temporary charge for holidays, weekends, or peak periods.
A surcharge adds an extra charge to orders during a period you choose. You decide whether it is a **fixed amount** or a **percentage**, and which **outlet**, **brand**, and **fulfilment types** it applies to. While it is active, it is added automatically, and customers see it at checkout before they pay.
**Looking for GST / tax settings?** They are managed by the Atlas team, not in your Settings. Contact support at [hello@atlas.kitchen](mailto:hello@atlas.kitchen) or your shared WhatsApp group to change them.
## Add a surcharge
In the left sidebar, go to **Settings → Surcharges**. Existing surcharges are listed here.
Find the **Add surcharge** button in the top-right corner.
* **Label** — what customers see at checkout (e.g. "Holiday surcharge").
* **Value type** — choose **Fixed amount** or **Percentage**.
* **Surcharge amount** — the dollar amount (fixed) or the percentage.
* **Start date time** and **End date time** — when the surcharge is active.
* **Outlet** — which outlet it applies to.
* **Brand** — which brand it applies to.
* **Fulfilment types** — which order types it applies to (e.g. Delivery, Pickup).
Click **Save**.
## What should happen
* The surcharge appears in the Surcharges list.
* While it is active, it is added automatically to orders that match the outlet, brand, and fulfilment types you set.
* Customers see the label and amount on the checkout screen before they pay.
## Next steps
* [Delivery settings, fees and minimum orders](/merchant-portal/delivery-fee-minimum-order) — configure delivery pricing and order rules.
# Team members and roles
Source: https://help.atlas.kitchen/merchant-portal/team-management
Add staff accounts, set roles, assign outlet access, and set up POS pin codes from Settings > Team members.
**Who is this article for?**
* Atlas users with Admin permissions. Manage team members from **Settings > Team members**.
## What this does
Team members are the staff who can log in to your Atlas dashboard and POS tablets. Each member has a role that controls what they can do, and outlet access that controls which outlets they work in. This page shows you how to add, update, and remove them.
## When to use this
* You're adding a new employee who needs dashboard or POS access.
* You want to change someone's role or which outlets they work in.
* You need to set up or change a staff member's POS pin code.
* You're removing access for someone who has left.
## Roles
Each role gives a different level of access:
| Role | What they can do |
| - | - |
| **Server** | Take orders, but cannot collect payment. |
| **Cashier** | Take orders, collect payment, and apply preset discounts and vouchers. |
| **Manager** | Process refunds and voids, open discounts and items, and manage menus and outlets. |
| **Finance** | Manage refunds, payment processors, and discounts and vouchers. |
| **Admin** | Full access, including team and role management. |
**Voiding and refunds:** Managers, Finance, and Admins can void orders and process refunds. Servers and Cashiers cannot. To let someone void or refund, give them one of those roles. Voiding always requires a reason.
Need a role with a different mix of permissions? Custom roles aren't available to set up yourself yet. Contact Atlas support at [hello@atlas.kitchen](mailto:hello@atlas.kitchen) and we'll configure one for you.
## Steps
### Add a team member
Go to **Settings > Team members**.
Tap **Add to team** in the top right corner.
Enter the staff member's email address and select a role from the dropdown. See the [Roles](#roles) table above for what each role can do.
Complete the rest of the staff member's details. Admin and Finance roles can access all outlets. For other roles, select the outlets and brands they can work in. Save to create the account.
### Update a role or outlet access
Go to **Settings > Team members**. Tap the **⋮** menu on the right of the staff member's row.
* Tap **Update role** to change their role.
* Tap **Update outlet/brand access** to change which outlets and brands they can work in.
### Set up a POS pin code
Staff use a 6-digit pin code to unlock and switch users on POS tablets.
Go to **Settings > Team members**. Tap the **⋮** menu on the right of the staff member's row.
Tap **Update pin code**. Enter a 6-digit pin code, reconfirm it, and save. The pin code must be 6 digits with no letters.
### Reset a password
Staff reset their own password from the login page, not from Team members. On the login page, the staff member taps **Forgot password** and follows the email link to set a new one.
### Remove a team member
Removing a team member revokes their access right away. There's no temporary deactivation. To restore access later, add them again.
Go to **Settings > Team members**. Tap the **⋮** menu on the right of the staff member's row.
Tap **Remove team member** and confirm. Their access to the dashboard and POS tablets is revoked.
## What should happen
* New team members appear in your team list straight away.
* They can log in to the dashboard or POS based on their role. For email access, the staff member sets their password from the login page using **Forgot password**.
* Removed team members lose access to all dashboards and tablets straight away.
## If it doesn't work
* Check the email address on their profile is spelled correctly.
* Ask them to set their password from the login page using **Forgot password**.
* Confirm their account has a role that includes dashboard access.
* Make sure the pin code is 6 digits and was entered correctly.
* Check the tablet has an active internet connection.
* Confirm the staff member is assigned to that outlet.
* Tap the **⋮** menu on the right of their row and tap **Update outlet/brand access**.
* Confirm the correct outlets and brands are selected.
* Ask them to log out and back in.
If the issue persists, contact support at [hello@atlas.kitchen](mailto:hello@atlas.kitchen).
## Next steps
* [Process refunds](/merchant-portal/refunds)
* [Managing outlet shifts](/merchant-portal/outlet-shifts)
* [Add operating hours and special hours](/merchant-portal/operating-hours)
# Website look and feel
Source: https://help.atlas.kitchen/merchant-portal/website-look-and-feel
Change your website banner, logo, colours, footer, loyalty programme appearance, and the look of your digital receipts.
**Who is this article for?**
* Merchant Portal users with **Marketing** permissions (banners)
* Users with **Admin** access (outlet and receipt settings)
Banners, announcements, pop-ups, and receipt footer text are yours to change in the Merchant Portal. The website header, the website footer, and the receipt template are part of your website build, so the Atlas team changes those for you. Contact support when you need them updated.
## What you can change, and where
| You want to change… | Where |
| - | - |
| The big hero banner at the top of your website | **Marketing tools → Banners** |
| The banner on your Scan-to-Order menu | **Marketing tools → Banners** (Channel banners) |
| Your website logo and colours | Contact Atlas support |
| A message strip across the top of the website | **Marketing tools → [Announcements](/merchant-portal/announcements)** |
| A full-screen image when diners land on your menu | **Marketing tools → [Pop-ups](/merchant-portal/pop-ups)** |
| Custom text at the bottom of digital (email) receipts | **Settings → Outlets → Printers and receipts** |
| The logo and colours in the digital receipt header | Contact Atlas support |
| Custom text at the bottom of printed receipts | **Settings → Outlets → Printers and receipts** |
| Your website footer (logo, links, contact info) | Contact Atlas support |
| The rest of the digital receipt layout | Contact Atlas support |
| Your loyalty programme banner, colours, and point symbol | **Loyalty → Programmes** |
## Website banner
The banner is the hero area at the top of your website. It uses a background image, plus an optional logo, headline, description, and call-to-action button.
There are two kinds, shown as tabs on the Banners screen:
* **Website banners** — for your Atlas Online website
* **Channel banners** — for Scan-to-Order menus
### Create a banner
In the Merchant Portal, go to **Marketing tools → Banners** and click **Create new banner**. Choose **Websites** or **Channels**.
* **Name** — for your own reference. Diners never see it.
* **Outlet** — pick one or more outlets, or leave it as **All outlets**.
* **Website** / **Channel** — where the banner should show.
* **Headline** and **Description** — the copy shown on top of the image.
* **Logo / title image** — optional image shown above the headline. Minimum recommended size is 100px by 100px, and you can set its display width.
* **Include button** — turn this on to add a call-to-action button, then set the **button text** and **button URL**.
Under **Screen variants**, upload a separate image for **Desktop** and **Mobile** and set the **background position** for each.
Recommended minimum sizes:
| Banner type | Desktop | Mobile |
| - | - | - |
| Website banner | 1400 × 720px | 640 × 420px |
| Channel banner | 880 × 880px | 880 × 880px |
Use **Banner preview** to lay out the text over the image, separately for desktop and mobile:
* **Content box width** and **content box position**
* **Content alignment**
* **Space above content** and **space below content**
* **Hide logo for desktop** / **Hide logo for mobile** — useful when your background image already contains your logo
The preview updates as you change these, so you can check both screen sizes before saving.
* **Activate banner** — an active banner displays according to the start and end times below it.
* **Start time** and **End time** — leave these empty for a banner that runs until you turn it off.
* **Set as default** — the default banner is shown whenever no other banner is active.
Save the banner. If the website already has a default banner, Atlas asks whether you want to replace it.
## Website logo and colours
Your website logo and colours are part of your website build, so the Atlas team applies them. To change them, send Atlas support:
* **The logo** as a transparent PNG or SVG
* **The colours** you want, as hex values such as `#1a1a1a` or `#fff`
Keep your text and background colours high-contrast so your website stays readable.
## Website footer
The footer at the bottom of your Atlas Online website is part of your website configuration, so the Atlas team makes these changes for you.
You can customise:
* **Footer logo** — the logo shown at the top of the footer
* **Short brand copy** — a line or two about your business next to the logo
* **Contact information** — address, opening hours, phone number, or anything else you want listed
* **Social links** — Instagram, Facebook, X (Twitter), and any other links you want to add
* **Legal links** — privacy policy, cookies policy, and documentation
Email support with what you'd like and we'll apply it.
## Loyalty programme appearance
The loyalty programme appearance controls how diners see your points brand on the menu, wallet, order completion screen, and customer-facing display.
You can change four things:
* **Point symbol image (optional)** — a 150 × 150 px image. Atlas shows it next to point balances in the menu and wallet. If you do not upload one, the default icon appears instead.
* **Loyalty banner** — a 1200 × 720 px image. It appears at the top of the customer-facing display loyalty flow and the Scan-to-Order loyalty login screen.
* **Brand colour** — the background colour for the point / wallet balance card, the order-completion "Claim your points" / "View wallet" call-to-action, and the customer-facing display loyalty card. It also fills the default point symbol icon when no custom point symbol image is uploaded.
* **Text colour** — the text colour for point totals, labels, and button wording. On the customer-facing display loyalty flow, both the brand colour and text colour are used for text.
### Change the loyalty programme appearance
In the Merchant Portal, go to **Loyalty → Programmes**. Open the programme you want to update.
* Add a **point symbol image** (150 × 150 px, PNG or JPG). This is optional.
* Add a **loyalty banner** (1200 × 720 px, PNG or JPG).
Enter hex values for the **brand colour** and **text colour**. Choose colours with strong contrast so text stays readable.
Tap **Save**.
## Digital receipts
A digital receipt is the email a diner gets after ordering. Two parts of it can be changed: the **header** and the **footer**.
### Header: logo and colours
The header is the branded block at the top of the receipt. You can change:
1. The **logo**
2. The **text colour**
3. The **background colour**
Only the Atlas team can save changes to them, so contact Atlas support with your logo file and the colours you want.
### Footer: add your own text
You can do this yourself if you have **Admin** access to the Merchant Portal.
1. Go to **Settings → Outlets** and open the outlet.
2. Scroll to **Printers and receipts**.
3. Enter your message in **Custom digital receipt footer text** (up to 450 characters). A character counter shows how much room is left.
4. Save.
Anything you enter appears at the end of every digital receipt for that outlet. Common uses: a thank-you note, refund or exchange policy, loyalty sign-up prompt, social handles, or a reminder about opening hours.
Because this is set per outlet, each location can carry its own message. Remember to repeat the change for every outlet that needs it.
### Other things you can control
* **Show outlet contact number on customer receipts** — the switch just above the footer fields. Turn it off if you'd rather diners contact you another way.
* **Outlet details** — the name, address, business registration number, and the contact email at the bottom of the email all come from that outlet's settings, so keep them current.
### Printed receipts
**Custom printed receipt footer text**, in the same section, does the same job for the receipts your thermal printer produces. The two are separate fields, so a long marketing message online won't lengthen every printed chit. Set each one to suit the format.
The rest of the receipt layout, including the order of the sections, fonts, and spacing, is part of the Atlas receipt template. If you need changes there, or a different header for a specific brand, contact Atlas support.
## Next steps
* [Announcements](/merchant-portal/announcements)
* [Pop-ups](/merchant-portal/pop-ups)
* [Cross-sell](/merchant-portal/cross-sell)
# Billing report
Source: https://help.atlas.kitchen/reports/finance/billing-report
View subscriptions, invoices, and manage payment methods.
**Available for:** Finance Admin
[Go to report →](https://portal.atlas.kitchen/billing)
## What this report shows
Access your billing details through the Stripe customer portal. View your Atlas subscriptions, download invoices, and update payment information.
## How to use
1. Select your billing account from the dropdown.
2. Click to open the Stripe customer portal.
## Available functions
* **View subscriptions** — See your active Atlas subscriptions and plan details.
* **View invoice history** — Access past invoices and download invoices or receipts.
* **Update payment method(s)** — Add, remove, or change your payment cards.
* **Update billing information** — Edit your billing address and contact details.
# Payout report
Source: https://help.atlas.kitchen/reports/finance/payout-report
Reconcile sales to payouts and trace payouts back to transactions.
**Available for:** Finance Admin
[Go to report →](https://portal.atlas.kitchen/analytics/payout)
## What this report shows
Two reconciliation views: forward (sales → payouts) and backward (payouts → transactions). Use this to verify payouts match expected sales and trace any discrepancies.
Data refreshes hourly. Last refresh time appears at the top.
## Views
Start from sales for a time period and trace forward to payouts.
### Filters
* **Serving date** — Date range for sales.
### Sales payout breakdown
Shows the flow from expected sales to actual payouts:
* **Expected payment** — Recorded sales for this period.
* **Payment discrepancy** — Minus refunds and adjustments.
* **Net payment** — Expected payment after discrepancies.
* **Net payment (Manual)** — Not processed by Atlas.
* **Net payment (Integrated)** — To be paid out by Atlas.
* **Already paid out** — Completed payouts.
* **Pending payout** — Payouts still processing.
### Completed payouts
Payouts that have been processed for the selected period. Shows window start/end, paid out date, payment method, payout ID, net payment paid out, and transfer amount.
### Transactions pending payout
Individual transactions awaiting payout. Shows serving date, transaction date, outlet, order ID, expected payment, payment amount, refund amount, and net payment pending.
Start from payouts and trace backward to the transactions they came from.
### Filters
* **Paid out at** — When the payout was sent.
* **Payout window start** — Start of the payout period.
* **Payment method** — Filter by payment method.
* **Payout status** — Filter by status (Succeeded, etc.).
### Summary metrics
* **Payouts count** — Number of payouts in the filtered period.
* **Net payment** — Total net payment amount.
* **Total payment processing fees (before tax)** — Payment processing fees before tax.
* **Average payment processing fee %** — Average payment processing fee rate.
* **Total payment processing fees** — Total payment processing fees including tax.
* **Transfer amount** — Amount actually transferred.
### All payouts
Complete list of payouts with payout ID, payment method, window start/end, paid out date, status, total payments, refunds, payment processing fees, and transfer amount.
## Single payout view
Click any payout ID in the All payouts table, then select **Single payout view** to see the specific transactions that make up that payout.
The single payout view shows:
**Payout details:**
* Payout ID, status, payment method
* Window start and end dates
* Paid out date
* Total payments, refunds, payment processing fees
* Transfer amount
**Transactions:**
* Individual transactions included in this payout
* Transaction type, ID, date/time, payment type
* Amount, payment processing fee, and payment processing fee rate per transaction
## Interactive features
* **Drill down** — Click any metric or table row to see underlying data.
* **Download** — Export data from any chart or table.
* **Copy values** — Click any metric to copy to clipboard.
* **AI assistant** — Ask questions about your data. See [Using reports](/reports/using-reports#ai-assistant).
# Why your sales and payout figures don't match
Source: https://help.atlas.kitchen/reports/finance/sales-reconciliation
Reconcile your Atlas sales to the payout in your bank, and understand why your sales, payout, and P&L figures differ.
**Who is this article for?**
* Atlas users with Finance or Admin permissions. Set permissions from **Settings > Team members**.
* Users reconciling sales, payouts, and P\&L figures across reports.
Your sales total and your bank deposit will almost never match to the cent. That is expected. Cash you collect directly is never paid out through Atlas, and card payments carry a processing cost that comes out before the transfer. This guide shows the full line-by-line walk from sales to bank, and how to reconcile your sales to your payouts.
## The short answer
Every figure between your sales report and your bank deposit connects through one walk. It starts from **net sales**, your sales after discounts, which always excludes GST:
| | Figure | What it is |
| :-: | - | - |
| | Net sales | Sales after discounts, excluding GST |
| + | Service charge | |
| + | GST | |
| **=** | **Expected payment** | Your recorded sales |
| − | Payment discrepancy | Refunds and adjustments |
| **=** | **Net payment** | Expected payment after discrepancies |
| − | Manual payments | Cash etc., not paid out by Atlas |
| **=** | **Net payment (Integrated)** | Integrated sales your payout is based on |
| − | Payment processing fee | Cost of processing card payments (Visa, Mastercard, etc.) |
| **=** | **Transfer amount** | What Atlas pays into your bank |
If your bank deposit is smaller than your sales, the difference is almost always **manual payments** (never collected through Atlas) and the **payment processing fee** (the cost of processing the card payments). The walk above accounts for both.
The **payment processing fee** is the cost of accepting card and digital payments (card, PayNow, GrabPay). It covers the charges from the card networks and banks, such as Visa and Mastercard, that handle each transaction. In the payout report it appears as **Total payment processing fees**.
**Net sales always excludes GST.** Atlas defines it as gross sales minus discounts minus any GST included in the price. If you price **tax-inclusive**, the GST baked into your menu prices is backed out to reach net sales. If you price **tax-exclusive**, GST is added at checkout. The walk adds GST back to net sales to reach what the customer actually paid.
## Reconcile your sales to your payouts
Start on the **Sales to payout reconciliation** tab, not the **Payouts** tab. Comparing your sales total to a figure on the Payouts tab is the most common cause of a mismatch that isn't real. The Sales to payout tab links your sales to their payouts and shows where every dollar goes.
[Go to payout report →](https://portal.atlas.kitchen/analytics/payout)
In the payout report, open the **Sales to payout reconciliation** tab and set the **serving date** range you want to check.
Every line is accounted for:
* **Expected payment** — your recorded sales for the period.
* **Payment discrepancy** — refunds and adjustments.
* **Net payment** — expected payment after discrepancies. It splits into:
* **Net payment (Manual)** — cash and other payments not processed by Atlas. You collect these directly, so Atlas never pays them out.
* **Net payment (Integrated)** — the integrated sales your payout is based on, shown as **Already paid out** and **Pending payout**.
Net payment is the total of both. Only the integrated portion leads to a payout, and the amount paid into your bank (the transfer amount) is that figure minus the processing fee. A sales total that looks higher than your payouts is usually explained by manual payments and pending payouts.
**Net payment (Integrated)** is the integrated sales your payout is based on. The payment processing fee comes out of it, and the remainder, the **transfer amount**, is what Atlas pays into your bank. To see the fee and transfer amount for a specific payout, open the **Payouts** tab, tap a payout ID, and select **Single payout view**.
Comparing your sales total against the **Payouts** tab will almost always show a gap, because that tab lists integrated payouts only. Reconcile on the **Sales to payout reconciliation** tab instead, where manual payments and pending payouts are shown separately.
## Worked example
This example uses tax-exclusive pricing and illustrative rates: a 3% payment processing fee, 9% GST, and 10% service charge. Your fee rate is set per merchant and may differ. Check your own rate in the payout report's Single payout view.
A Tuesday with the following activity:
| Item | Amount |
| - | - |
| Gross sales | \$2,000.00 |
| Discounts | −\$80.00 |
| Net sales | \$1,920.00 |
| Service charge (10% of net) | +\$192.00 |
| GST (9% of net + service charge) | +\$190.08 |
| **Expected payment** | **\$2,302.08** |
Of that, \$100.00 was paid in cash. Cash is a manual payment, so Atlas does not pay it out. That leaves \$2,202.08 as **Net payment (Integrated)**, the figure your payout is based on.
On Thursday, Atlas settles the card payments:
| Item | Amount |
| - | - |
| Net payment (Integrated) | \$2,202.08 |
| Payment processing fee (3%) | −\$66.06 |
| **Transfer amount** | **\$2,136.02** |
In each report:
* **Sales summary (Tuesday)** — gross \$2,000.00, expected payment \$2,302.08.
* **Payout report (Thursday)** — transfer \$2,136.02.
* **Difference** — \$166.06, fully explained by the payment processing fee (\$66.06) plus the \$100.00 cash that Atlas does not pay out.
## Why a deposit might not match same-date sales
Timing is the usual cause. The rest are less common.
**Timing (most common).** Sales record on the serving date. Payouts record on the settlement date, often days later. Friday's card sales may only reach your bank on Monday. To reconcile, filter the **Sales to payout reconciliation** tab by serving date. It separates pending payouts from completed ones.
The sales report shows the full amount the customer paid. The transfer amount is what remains after the payment processing fee comes out. Reconcile expected payment against net payment (integrated), not against the transfer amount.
A refund reduces sales on the original order's serving date, but reduces the payout when it is processed, often on a different day and in a different payout window. Chargebacks appear as a negative adjustment in a later payout.
Occasionally a payment for an order fails to settle on time. Atlas runs regular manual sweeps to catch these and processes the outstanding amount when found. When that happens, a sale from an earlier date can appear in a much later payout. For example, a sale from 1 May might be paid out on 23 May. It can look like earlier sales are being paid out again, but it is the previously unsettled payment being caught and paid to you for the first time.
Cash and other payments you collect directly appear in the sales report but never in a payout. Atlas only pays out integrated payments. To see them, check the **Payment type summary** in the sales report, which lists your manual payment methods alongside the integrated ones.
Aggregator orders are recorded in your Atlas sales, but the platforms pay you directly, not Atlas. They do not appear in the Atlas payout report. Reconcile aggregator payments against your Grab and Foodpanda statements separately.
Net sales exclude GST and service charge. Expected payment and the transfer amount include them. Comparing net sales to a payout will always show a gap.
## If it doesn't work
After accounting for the payment processing fee, manual payments, and pending payouts, the remaining gap should be near zero. If a meaningful amount is still unexplained, note the date range and the two figures you are comparing, then contact support.
Payouts usually settle within a few business days. If a payout shows as **Pending** for more than 5 business days, contact support with the payout ID.
Chargebacks and adjustments appear as negative amounts in a later payout. If you see one you cannot trace to a refund or dispute, contact support with the payout ID.
If the issue persists, contact support at [hello@atlas.kitchen](mailto:hello@atlas.kitchen).
## Next steps
* [Payout report](/reports/finance/payout-report) — reconcile sales to payouts and trace payouts back to transactions.
* [Sales summary report](/reports/sales/sales-summary-report) — understand your sales figures.
* [Using reports](/reports/using-reports) — filter, export, and schedule report deliveries.
# Legacy reports
Source: https://help.atlas.kitchen/reports/legacy/overview
Reports being phased out by 1 June 2026 in favor of upgraded analytics-powered versions.
These reports are being phased out in favor of upgraded analytics-powered reports. They will be **removed by 1 June 2026** — their replacements are already available in the category sections above.
In the merchant portal, legacy reports are marked with an amber **LEGACY** badge and a sunset notice.
| Legacy report | Category | Replacement |
| - | - | - |
| Void report | Operations | — |
| Sales order report | Sales | [Sales summary](/reports/sales/sales-summary-report) |
| Sales summary (old) | Sales | [Sales summary](/reports/sales/sales-summary-report) |
| Sales trends (old) | Sales | [Sales trends](/reports/sales/sales-trends) |
| Product popularity | Product | [Product mix](/reports/product/product-mix-report) |
| Discount report (old) | Marketing | [Discount report](/reports/marketing/discount-report) |
| Customers report (old) | Marketing | [Customers report](/reports/marketing/customers-report) |
| Payout report (old) | Finance | [Payout report](/reports/finance/payout-report) |
Legacy reports will be removed by **1 June 2026**. Please transition to the replacement reports listed above.
# Customers report
Source: https://help.atlas.kitchen/reports/marketing/customers-report
Track customer segments, lifetime value, and retention.
**Available for:** Manager Finance Admin
[Go to report →](https://portal.atlas.kitchen/analytics/customers)
## What this report shows
Customer behaviour and value across your business. See who your best customers are, track retention cohorts, and identify segments needing attention.
Data refreshes hourly. Last refresh time appears at the top.
## Filters
* **Type** — Guest, Member, or POS user.
* **Customer segment** — Filter by segment (VIP regulars, Slipping regulars, etc.).
* **First order outlet** — Where the customer first ordered.
* **Orders count** — Filter by number of orders.
* **Lifetime value** — Filter by total spend.
## Sections
### Key metrics
* **Total customers** — All customers with change from last month.
* **Median lifetime value** — Middle value of all customer spend with change from 30 days ago.
* **New customers (30D)** — Customers who placed their first order in the last 30 days.
* **Active customers (30D)** — Customers who ordered in the last 30 days.
### AI insights
AI-generated analysis of customer patterns, highlighting revenue drivers, dormant high-value customers, and reactivation opportunities.
### Customer segmentation
Pre-built segments based on ordering behaviour:
* **VIP regulars** — Order frequently and spend a lot.
* **Solid regulars** — Consistent ordering and spending.
* **Slipping regulars** — Former regulars not seen in 1-3 months.
* **Lost regulars** — Silent for 3+ months.
* **Gone** — Inactive 3+ months, likely churned.
* **Occasional Customers** — Infrequent orders.
* **Inactive Customers** — No recent activity.
**Columns:** Revenue share, customers, median lifetime value, average order value, return rate.
### Order count distribution
How many orders each customer has placed. Most businesses have a large "1 order" segment—the goal is to convert these to repeat buyers.
### Customer growth rate
Total and active customer counts over time. Blue area shows total cumulative customers, orange area shows active customers.
### Lifetime value distribution
Distribution of customers by total spend, broken down by customer type (Guest, Member, POS user).
### Retention cohort analysis
Track how well you retain customers over time. Rows show when customers first ordered, columns show how many remained active in subsequent months. Darker green indicates higher retention.
### Average order value distribution
Distribution of customers by their average order value, broken down by customer type.
### Signups by first order source/outlet
Where your customers come from and how well each channel converts to signups.
### Top 100 customers
Your highest-value customers ranked by total spend.
**Columns:** Type, activity status, name, email, total spend, orders count, average order value, first order date, first order outlet, last order date, date of birth, age.
## Single customer view
Click a customer's name or email in the Top 100 customers table, then select **View customer details** to open a detailed dashboard for that customer.
The single customer view shows:
### AI insights
AI-generated profile analyzing the customer's visit frequency, ordering patterns, and potential opportunities.
### Order history
Complete order history with date, outlet, sales, source, and fulfilment type.
### Top items
What this customer orders most frequently.
### Orders by month
Order frequency and cumulative lifetime value over time.
### Ordering patterns
When this customer typically orders. Darker green indicates more orders at that time.
## Interactive features
* **Drill down** — Click any metric or chart to see underlying data.
* **Download** — Export data from any chart or table.
* **Copy values** — Click any metric to copy to clipboard.
* **AI assistant** — Ask questions about your data. See [Using reports](/reports/using-reports#ai-assistant).
# Discount report
Source: https://help.atlas.kitchen/reports/marketing/discount-report
Track promo code usage, discount costs, and effectiveness.
**Available for:** Manager Finance Admin
[Go to report →](https://portal.atlas.kitchen/analytics/discounts)
## What this report shows
Which promo codes are used most, how much they cost, and where discounts concentrate by outlet, time of day, source, and product category.
Data refreshes hourly. Last refresh time appears at the top.
## Filters
* **Serving date** — Date range. Defaults to past 30 days.
* **Outlet** — Filter by outlet.
* **Fulfilment type** — Dine-in, Pickup, Delivery.
* **Source** — Order source (POS, Kiosk, Web, etc.).
* **Promo code** — Filter by specific promo code.
* **Reason** — Filter by discount reason.
## Sections
### Key metrics
* **Total discounts** — Count of orders that received a discount.
* **Total discount value** — Sum of all discount amounts.
* **Average discount per discounted order** — Total discount value ÷ total discounts.
### AI summary
AI-generated insights about discount performance, top codes, and margin impact.
### Top discounts
Promo codes ranked by usage count. Click any row to expand and see code details.
### Active discounts
Currently enabled discount codes. Right-click any code to edit the discount or copy the value.
### Discount usage by hour of day
When discounts are used most. Blue bars show count (left axis), orange line shows total value (right axis).
### Discounts by outlet
Percentage of orders with discounts at each outlet. High percentages may indicate over-reliance on discounts.
### Discounts by source
Percentage of orders with discounts by channel (Scan to Order, Web, Kiosk, POS).
### Discounts by fulfilment type
Percentage of orders with discounts by order type (Delivery, Dine-in, Pickup).
### Item discounts by category
Average discount percentage by product category.
Values over 100% mean discounts exceeded revenue for that category—typically loss-leader pricing.
To set up categories, edit your product on the [Products page](https://portal.atlas.kitchen/products) and set its **Reporting category**.
### Item discounts
Individual item-level discounts. If this shows "No Results", only order-level or promo code discounts were applied during the filtered period.
## Interactive features
* **Drill down** — Click any metric or chart bar to see underlying data.
* **Download** — Export data from any chart or table.
* **Copy values** — Click any metric to copy to clipboard.
* **AI assistant** — Ask questions about your data. See [Using reports](/reports/using-reports#ai-assistant).
# Loyalty report
Source: https://help.atlas.kitchen/reports/marketing/loyalty-report
Track loyalty program signups, points activity, and member value.
**Available for:** Manager Finance Admin
[Go to report →](https://portal.atlas.kitchen/analytics/loyalty)
## What this report shows
Loyalty program performance including signups, points earned and spent, member retention, and lifetime value comparison between members and non-members.
Data refreshes hourly. Last refresh time appears at the top.
## Filters
* **Date** — Date range. Defaults to past 3 months.
* **First order brand** — Filter by brand where customer first ordered.
* **First order outlet** — Filter by outlet where customer first ordered.
## Sections
### User summary and points summary
**User summary:**
* **Customer count** — Total customers in the filtered period.
* **Member count** — Customers who signed up (created an account).
* **Signup rate** — Member count ÷ customer count.
* **Loyalty member count** — Members enrolled in the loyalty program.
* **Loyalty adoption rate** — Loyalty members ÷ total members.
**Points summary:**
* **Loyalty reward value earned** — Total value of points earned.
* **Loyalty reward value spent** — Total value of points redeemed.
* **Redemption rate** — Value spent ÷ value earned.
* **Loyalty reward value expired** — Value of points that expired.
* **Loyalty rewards expiry rate** — Expired ÷ earned.
* **Loyalty rewards balance** — Outstanding points value (earned - spent - expired).
### AI insights
AI-generated analysis of loyalty program performance, highlighting high-value outlets, member vs non-member spending, and adoption opportunities.
### Points summary by source
Loyalty points activity broken down by order source.
### % orders from members (weekly)
What percentage of orders come from members (vs guests), broken down by order source. Higher percentages indicate stronger member engagement.
### % of orders with points earned (weekly)
What percentage of orders earned loyalty points. Low percentages may indicate members aren't logging in or points aren't being awarded correctly.
### % of orders with points spent (weekly)
What percentage of orders used points for redemption. Track whether members are actively using their rewards.
### Signup rate (monthly)
Monthly signup conversion rate. Blue bars show member signups, orange bars show total customers, pink line shows signup rate percentage.
### Lifetime value by loyalty status
Median lifetime value comparison between loyalty members and non-members. Use this to quantify the value of your loyalty program.
### User retention by loyalty status
How well you retain loyalty members vs non-members over time. Higher retention among loyalty members validates the program's effectiveness.
### Members by activity status
Current member breakdown by activity:
* **Active (Last 30 days)** — Ordered recently.
* **Inactive (31-60 days)** — No orders in 31-60 days.
* **Dormant (>60 days)** — No orders in over 60 days.
## Interactive features
* **Drill down** — Click any metric or chart to see underlying data.
* **Download** — Export data from any chart or table.
* **Copy values** — Click any metric to copy to clipboard.
* **AI assistant** — Ask questions about your data. See [Using reports](/reports/using-reports#ai-assistant).
# Daily outlet report
Source: https://help.atlas.kitchen/reports/operations/daily-outlet-report
Quick overview of sales for a single day.
**Available for:** Server Cashier Manager Finance Admin
[Go to report →](https://portal.atlas.kitchen/daily-outlet-report)
## What this report shows
A comprehensive overview of sales for a single day or custom period. Commonly used during shift closing to review sales, payments, and reconcile the day.
## Filters
* **Date** — Serving date (when orders were fulfilled). Defaults to today.
* **Start time / End time** — Filter by time within the day.
* **Outlet** — Switch between outlets.
* **Station** — Filter by specific stations.
An outlet's sales day defaults to 12AM-12AM. Contact support to customise (e.g., 3AM-3AM).
## Sections
### Sales summary
Key financial metrics for the selected period.
* **Gross sales** — Undiscounted sales based on item prices. For tax-inclusive outlets, includes tax.
* **Discounts** — Total discounts (order and item-level).
* **Points redeemed** — Value of loyalty points redeemed.
* **Tax (included)** — Inclusive tax.
* **Net sales** — Gross sales - discounts - points redeemed - tax (included).
* **Delivery fee** — Delivery fees charged to customers.
* **Surcharge** — Surcharges (peak periods, packaging, etc.)
* **Service charge** — Service charge.
* **Total sales** — Net sales + delivery fee + surcharge + service charge.
* **Platform delivery fee** — Delivery fees from 3rd-party platforms (not your revenue).
* **Platform discounts** — Discounts sponsored by platforms (not deducted from your sales).
* **Tips** — Tips collected.
* **Rounding** — Rounding differences.
* **Tax (excluded)** — Exclusive tax.
* **Expected payments** — What you should receive.
* **Actual payments** — What you actually received. If different, click "View unsettled orders" to investigate.
### Discounts
Breakdown of discounts by promo code: name, count, and total discounted amount.
### Voided/adjusted items
List of voided items grouped by void reason, with count and total value.
### Sales by payment type
Payments and refunds by payment type: net payments, total paid, total refunded, and transaction count.
### Daily insights
* **Order count** — Total orders.
* **Average order value** — Total sales ÷ order count.
* **Total covers** — Customers served.
* **Average spend per cover** — Total sales ÷ covers.
Quantity and sales by product category.
To set up categories, edit products on the [Products page](https://portal.atlas.kitchen/products) and set **Reporting category**.
All products sold: name, total sales (with/without modifiers), quantity, original price, and brand.
Sales numbers are based on main product price and may not account for bundling, discounts, or modifier price overrides.
Toggle between **Grouped view** and **All products** using the tabs.
Redemptions on [cash vouchers](https://portal.atlas.kitchen/cash-vouchers): voucher name, count, and total value.
## Exporting
* **Print summary receipt** — Print high-level metrics to a printer.
* **Export to PDF** — Export the entire report.
# Logistics report
Source: https://help.atlas.kitchen/reports/operations/logistics-report
Atlas Smart Logistics trips and costs.
**Available for:** Server Cashier Manager Finance Admin
[Go to report →](https://portal.atlas.kitchen/logistics-report)
## What this report shows
Track and reconcile logistics costs for Atlas Smart Logistics deliveries. View trip details, monitor uninvoiced trips, and verify weekly invoices.
This report only shows data for deliveries made through Atlas Smart Logistics (Lalamove, Pandago, etc.), not third-party platform deliveries.
## Filters
The date filter changes based on the selected tab:
**Invoice date** — Filters by when invoices were generated.
**Trip date** — Filters by when deliveries happened.
Additional filters on trip views: **Outlet** and **Brand**.
## Sections
### All trips
Every logistics trip with cost breakdowns and summary metrics.
**Summary metrics:**
* **Total trips** — Number of delivery trips.
* **Total orders value** — Combined value of delivered orders.
* **Total delivery fee** — What customers paid for delivery.
* **Total orders value + delivery fee** — Combined total.
* **Total logistics fee** — What you pay (platform fees + Atlas service fee).
* **Net logistics fee (less delivery fee)** — Logistics cost minus customer delivery fees.
**Trip columns:** Invoiced status, invoice number, ID, timestamp, outlet, order details, order value, delivery fee, logistics fee, net logistics fee, distance, vehicle type, order source, logistics type.
### Uninvoiced trips
Trips not yet included in a weekly invoice. Use this to forecast your next logistics bill.
Invoices are generated weekly. Trips appear here until invoiced.
### Invoices
Weekly logistics invoices from Atlas. Each shows invoice number, subtotal, invoice date, and invoice period.
Click any invoice to see all included trips and reconcile totals.
## Understanding trips vs orders
One order can have multiple trips when:
* A large order requires multiple drivers
* A redelivery happens after the original trip
Multiple rows with the same order ID are not duplicates—each is a separate delivery charge.
**Refunded trips** appear as separate rows with negative logistics fees.
## Exporting
* **Download** — Export trip data or invoice details.
* **Filter** — Narrow down results before exporting.
# Production efficiency report
Source: https://help.atlas.kitchen/reports/operations/production-efficiency-report
Track how long kitchen tickets take to complete.
**Available for:** Server Cashier Manager Finance Admin
[Go to report →](https://portal.atlas.kitchen/analytics/production-efficiency)
## What this report shows
How long it takes to complete kitchen tickets using data from your Kitchen Display System (KDS). Track ticket completion times, identify peak periods, and find bottlenecks.
This report requires Atlas Kitchen Display System (KDS). Data comes from ticket interactions on your kitchen screens.
Voided items are excluded from this report and do not contribute to preparation timings.
## Filters
* **Serving date** — Serving date. Defaults to today.
* **Outlet** — Switch between outlets.
* **Station** — Filter by kitchen station (e.g., grill, fryer, prep).
* **Kitchen display** — View data from specific KDS screens.
* **Ticket item name** — Filter by specific menu items.
Data refreshes hourly. Last refresh time appears at the top.
## Sections
### Key metrics
* **Ticket count** — Total tickets received.
* **Ticket count (completed)** — Tickets marked complete.
* **Median completion time** — Middle value of all completion times (in minutes).
### AI summary
AI-generated summary of patterns and trends in your data.
### Tickets by fulfilment time
Tickets grouped by how long they took to complete. Shows your kitchen's speed distribution.
### Tickets by hour
Ticket count per hour. Bar colour indicates median completion time:
* **Green** — Faster
* **Red** — Slower
Use this to spot periods when your kitchen struggles to keep up.
### Tickets by status
Tickets grouped by colour status, showing how many completed on time vs over target.
### Tickets by day of week and shift
On-time performance broken down by day of week and shift.
### Ticket details
Complete list of every ticket. Download for detailed analysis.
## Interactive features
* **Drill down** — Click any metric or chart bar to see underlying tickets.
* **Download** — Export data from any chart or table.
* **Copy values** — Click any metric to copy to clipboard.
* **AI assistant** — Ask questions about your data. See [Using reports](/reports/using-reports#ai-assistant).
# Reports overview
Source: https://help.atlas.kitchen/reports/overview
Find the right report for sales, operations, marketing, and finance data.
Atlas reports help you understand how your business is performing. Use them to track sales, monitor operations, and make informed decisions.
**New to reports?** Start with [Using reports](/reports/using-reports) to learn how to filter, export, and set up scheduled deliveries.
## Find the right report
### Operations
Day-to-day reports for running your restaurant.
Quick overview of sales for a single day. Updates in real time.
Kitchen preparation times. Requires KDS.
Atlas Smart Logistics trips and costs.
### Sales
Track revenue and break down sales by product, time, or order.
Detailed breakdown of sales metrics.
Sales patterns and insights over time.
### Product
See how your products are performing.
Breakdown of your product mix.
### Marketing
Understand your customers and marketing performance.
Track how your discounts are performing.
Understand your customer segments.
Track your loyalty program performance.
### Finance
Check payouts and billing.
Payments made to you and their status.
Your Atlas subscriptions and billing.
### Legacy reports
Reports being phased out by 1 June 2026. See [Legacy reports](/reports/legacy/overview) for the full list and replacements.
## Next steps
* [Using reports](/reports/using-reports) — Learn how to filter, export, and set up deliveries
# Product mix report
Source: https://help.atlas.kitchen/reports/product/product-mix-report
Analyse product sales, quantities, and performance by category.
**Available for:** Manager Finance Admin
[Go to report →](https://portal.atlas.kitchen/analytics/product-mix)
## What this report shows
Product sales performance across your menu. See which items drive revenue vs volume, compare categories, and drill into modifier-level details.
The report is organized into three tabs:
* **Product mix** — Overview with AI insights, charts, and category breakdowns.
* **Product details** — Detailed product-level data.
* **Modifier groups** — Modifier group choices and performance across your menu.
Data refreshes hourly. Last refresh time appears at the top.
## Filters
* **Serving date** — Date range. Defaults to past 30 days.
* **Outlet** — Filter by outlet.
* **Item name** — Search for specific products.
* **Item SKU** — Filter by SKU.
* **Item reporting category** — Filter by category.
* **Source** — Order source (POS, Kiosk, Web, etc.).
* **Fulfilment type** — Dine-in, Pickup, Delivery.
* **Serving hour of day** — Filter by hour.
* **Serving day of week** — Filter by day.
* **Table** — Filter by table.
## Sections
### AI insights
AI-generated analysis of your product mix. Identifies high-margin items, pricing opportunities, and menu consolidation suggestions.
### Item quantity vs sales
Scatter chart plotting each product by volume (quantity %) vs revenue (sales %). Products in the top-right are your stars—high volume and high revenue. Products with high quantity but low sales may be priced too low.
### Product mix by reporting category
Expandable table grouped by reporting category. Click a category to see individual products within it.
**Columns:** Reporting category, item name, quantity, % of total, % of category, gross sales, % of total, % of category, average price.
### All products
Flat list of every product. Useful for searching and sorting across your entire menu.
**Columns:** Brand, reporting category, item name, item SKU, quantity, % of total, item sales, % of total.
### Sales by team member
Gross sales broken down by team member and reporting category.
## Product name actions
Click an underlined product name to see available actions.
* **Single product view** — Open a detailed dashboard for that product (see below).
* **Modifier groups used in** — Jump to the Modifier groups tab, filtered to show which modifier groups include this product.
### Single product view
The single product view shows:
* **Metrics** — Quantity, item sales, gross sales, average price over time.
* **Quantity by modifier group** — Which modifier groups include this product.
* **Item sales by modifier group** — Revenue contribution by modifier group.
## Drilling into data
Click any metric value to drill into the underlying data.
* **Drill into Modifier sales** — See how different modifiers performed for that product.
* **Drill into All items** — View every order item that contributed to that metric.
## Interactive features
* **Drill down** — Click any metric to see underlying data.
* **Download** — Export data from any chart or table.
* **Copy values** — Click any metric to copy to clipboard.
* **AI assistant** — Ask questions about your data. See [Using reports](/reports/using-reports#ai-assistant).
# Sales summary report
Source: https://help.atlas.kitchen/reports/sales/sales-summary-report
Detailed breakdown of sales metrics including payments, discounts, and category performance.
**Available for:** Manager Finance Admin
[Go to report →](https://portal.atlas.kitchen/analytics/sales-summary)
## What this report shows
A comprehensive breakdown of your sales performance. Track net sales, payment discrepancies, discounts, and see how sales split across outlets, brands, fulfilment types, and product categories.
## Filters
* **Serving date/time** — When orders were fulfilled. Defaults to the past 7 days.
* **Outlet(s)** — Filter by one or multiple outlets. Supports wildcard search (e.g., "contains atlas").
* **Source** — Where orders came from (POS, scan to order, kiosk, etc.)
* **Fulfilment type** — Dine-in, pickup, or delivery
* **Serving hour of day** — Filter by specific hours
* **Serving day of week** — Filter by specific days
* **Brand** — Filter by brand if you operate multiple brands
* **Order created date/time** — When the order was created (different from serving time)
## Sections
### Key metrics
At-a-glance performance indicators: net sales, total covers, order count, average cover value, and average order value. Hover over the info icon next to each metric to see its definition.
### Sales summary
Financial breakdown from gross sales to final payments. Shows gross sales, discounts, net sales, tax, service charges, and expected payment.
Also tracks **payment discrepancies** — the difference between expected and actual payment. Click on any order ID to investigate underpaid or overpaid orders.
### AI-generated insights
Automatically identifies trends, patterns, and notable changes in your sales data.
### Net sales charts
Three charts showing net sales broken down by:
* **Day** — Daily sales by fulfilment type
* **Day of week** — Which days perform best
* **Hour of day** — Peak and off-peak hours
Use the **Date granularity** dropdown on the "Net sales by day" chart to switch between daily, weekly, or monthly views.
### Payment type summary
Breakdown of payment methods used, split into integrated payments (processed through Atlas) and manual payments.
### Outlet summary
Compare sales performance across your outlets: gross sales, net sales, order count, and average order value per location.
### Brand summary
Sales performance by brand. Useful for multi-brand operators.
### Discount summary
Track promo code usage and total discount amounts.
### Fulfilment type summary
Sales breakdown by how orders were fulfilled (dine-in, pickup, delivery).
### Source summary
Sales breakdown by order source (POS, scan to order, web, delivery platforms, etc.)
### Customer type summary
Sales breakdown by customer type (Member, Guest, or unknown).
### Loyalty redemption summary
Compare orders with and without loyalty reward redemptions. Click any row to drill into individual redemption details.
### Item category summary
Product sales organised by reporting category. Click on any item to see modifier breakdowns.
To set up reporting categories, edit your product on the [Products page](https://portal.atlas.kitchen/products) and set its **Reporting category**.
# Sales trends
Source: https://help.atlas.kitchen/reports/sales/sales-trends
Track sales performance over time with period comparisons and breakdowns.
**Available for:** Manager Finance Admin
[Go to report →](https://portal.atlas.kitchen/analytics/sales-trends)
## What this report shows
Track how your sales are trending over time. Compare current performance against previous periods and see daily patterns across different dimensions.
## Filters
* **Serving date/time** — When orders were fulfilled. Defaults to the past 7 complete days.
* **Serving date granularity** — Group data by date, week, month, quarter, or year.
* **Outlet(s)** — Filter by one or multiple outlets.
* **Order created date/time** — When the order was created.
* **Brand** — Filter by brand.
* **Source** — Where orders came from (POS, scan to order, kiosk, etc.)
* **Fulfilment type** — Dine-in, pickup, or delivery.
* **Serving hour of day** — Filter by specific hours.
* **Serving day of week** — Filter by specific days.
## Sections
### Month-to-date sales
Current month's net sales compared to:
* **Last MTD** — Same period last month
* **Last year MTD** — Same period last year
### Week-to-date sales
Current week's net sales compared to:
* **Last WTD** — Same period last week
* **4 weeks ago WTD** — Same period 4 weeks ago
### Metrics for period
Summary metrics for your selected date range:
* **Gross sales** — Total sales before discounts and tax
* **Net sales (excl. tax)** — Sales after discounts, excluding tax
* **Order count** — Total number of orders
* **Average order value** — Net sales divided by order count
* **Average cover value** — Net sales divided by total covers
### Daily sales and order count
A combined chart showing:
* **Order count** (blue bars) — Number of orders per day
* **Net sales** (orange line) — Net sales excluding tax per day
### Breakdown by source
Daily net sales stacked by order source (e.g., Kiosk, POS, Scan to Order, Web).
### Breakdown by fulfilment type
Daily net sales stacked by fulfilment type (Delivery, Dine-in, Pickup).
### Breakdown by outlet
Daily net sales stacked by outlet. Useful for comparing location performance over time.
### Breakdown by brand
Daily net sales stacked by brand. Useful for multi-brand operators.
# Using reports
Source: https://help.atlas.kitchen/reports/using-reports
How to filter, export, and set up scheduled report deliveries.
## New vs legacy reports
Reports powered by [Omni](https://omni.co) have replaced legacy versions with more features like scheduled deliveries and alerts. Legacy reports are marked **LEGACY** and will be removed by 1 June 2026.
If you see different numbers between a new and legacy report for the same data, contact support at [hello@atlas.kitchen](mailto:hello@atlas.kitchen).
## Accessing reports
Go to [**Reports**](https://portal.atlas.kitchen/reports) in the Atlas Merchant Portal sidebar. You'll see a directory of all available reports organised by category.
## Filtering reports
Most reports have filters at the top to narrow down your data. Common filters include date range, outlet, and shift. Adjust these to see the data you need.
## Exporting and downloading
### Analytics reports
**Two ways to download:**
* **Single tile**: Click the three-dot menu (⋯) on any chart or table
* **Entire dashboard**: Click the download icon at the bottom right of the report
**Format options:** PNG, PDF, XLSX, or CSV
Downloads respect all active filters. Apply filters before downloading to export only the data you need.
### Legacy reports
Most tiles have a download icon to export that section's data.
Some reports also have buttons to export the entire report or selected sections to PDF or CSV.
## AI assistant
Only available for analytics reports.
Ask questions about your data using the built-in AI assistant. There are two ways to access it:
Click the AI icon in the bottom right corner to open the dashboard assistant. Select a chart or table, then ask questions about that data.
Click the three-dot menu (⋯) on any chart or table and select **Ask a follow up question**. This opens the assistant with that tile's context already loaded.
AI results may not be perfect. Double-check before acting on insights.
## Scheduled deliveries and alerts
Only available for analytics reports.
Automate report delivery to keep your team informed. There are two options:
* **Schedules** — Deliver reports at specified frequencies (e.g., daily, weekly)
* **Alerts** — Deliver reports only when specific conditions are met
Reports can be delivered via [email](https://docs.omni.co/share/deliveries/email), [SFTP](https://docs.omni.co/share/deliveries/sftp), or [webhooks](https://docs.omni.co/share/deliveries/webhooks).
For setup instructions, click on each of the links above.
# Set up the customer-facing display
Source: https://help.atlas.kitchen/stations/customer-facing-display
Show customers their order, let them log in for rewards, and choose how they get their receipt.
## What this does
The customer-facing display (CFD) is a second screen that faces your customers during checkout. It shows them their order in real time as items are added at the POS.
With additional features enabled, customers can also:
* **Log in** with their phone number to earn loyalty rewards
* **Choose their receipt** — email, print, or no receipt
## Getting started
The CFD needs to be set up by the Atlas team. Contact support at [hello@atlas.kitchen](mailto:hello@atlas.kitchen) or reach out to your Atlas Whatsapp group to get it enabled for your outlet.
Once enabled, the display pairs with your POS station and shows the live cart automatically.
## Diner login for loyalty
If your outlet has a loyalty programme enabled, customers see a login prompt on the CFD during ordering.
On a wide screen, the login panel appears on the right side. On a narrow screen, a "Log in to earn rewards" button opens a login overlay.
Atlas searches for their account.
The code is sent automatically by SMS. They can also request the code by email instead.
Their loyalty points or cashback balance appears on the display. Rewards are applied to their order automatically.
The login prompt only appears if loyalty is enabled for your outlet. Contact support to set up a loyalty programme.
## Receipt selection
After payment, customers can choose how to receive their receipt — instead of printing one automatically.
**Email receipt**, **Print receipt**, or **No receipt**.
Logged-in customers see their email pre-filled. Guests type their email and tap send.
The display resets for the next customer after a few seconds.
### Enable or disable receipt selection
Go to **Settings > Outlets**.
Find the POS station that has the CFD paired.
When enabled, customers choose their receipt on the display. When disabled, receipts print automatically as before.
## Managing the display
### Status indicator
A small dot in the corner of the display shows the connection status:
* **Green** — connected to the POS and working normally
* **Yellow (pulsing)** — connecting to the POS
* **Red** — disconnected from the POS. Check the Wi-Fi connection or restart the display
### Reload
Tap the reload button on the left sidebar to refresh the display and re-sync with the POS.
### Exit the display
Hold the status indicator dot for 5 seconds. A confirmation dialog appears — confirm to exit. This is intentionally hidden so customers cannot accidentally exit the display.
## What should happen
* Cart items appear on the display in real time as the cashier adds them.
* If loyalty is enabled, customers see a login prompt during ordering.
* After payment, customers see receipt options (if enabled).
* The display resets automatically when the cashier starts a new order or logs out.
## If it doesn't work
* **Display is blank or not showing the cart** — check that the display is paired to the correct POS station and connected to Wi-Fi.
* **Login prompt not appearing** — check that loyalty is enabled for the outlet. Contact support if unsure.
* **Receipt selection not appearing after payment** — check the "CFD receipt selection" toggle in station settings.
* **Display stuck on a previous order** — start a new order on the POS to reset the display. If it stays stuck, tap the reload button on the left sidebar.
* **Status dot is red** — the display lost connection. Check the Wi-Fi or restart the display.
If the issue persists, contact support at [hello@atlas.kitchen](mailto:hello@atlas.kitchen).
# How to use POS for QSR
Source: https://help.atlas.kitchen/stations/pos
Accept payments in-store and show customers their order details.
**Who is this guide for?**
* Atlas users subscribed to Atlas POS.
* Staff taking orders on the tablet during service.
## Before you begin
Accept all kinds of payments in-store. You can also choose whether to show customers their order details on screen.
Your POS tile layout is fully customisable. Set up your pages, product tiles, and discount tiles from [Menu builder > POS layouts](/menu-builder/pos-layout).
## Taking an order
When you open the POS, you land on the ordering screen. Your menu items display as tiles on the left, and the cart displays on the right.
If the item has no modifiers, it adds directly to the cart.
Select the required options (e.g. serving portion, add-ons). You can also:
* Add **special instructions** in the text field at the bottom
* Change the **quantity** using the **-** and **+** buttons
Use the category tabs at the bottom of the screen (e.g. **Savoury**, **Desserts**, **Beverage**, **Discounts**) to navigate between menu sections. Tap a folder tile to open subcategories.
## Editing items in the cart
To modify an item already in the cart, tap the item in the cart panel on the right. A modal appears with these options:
* **Edit** — change modifiers, quantities, or add item notes
* **Remove** — remove the item from the cart
* **Void** — void the item (records it as voided in reports)
* **Apply item discount** — apply a discount to this specific item
## Order actions
For actions that apply to the whole order, tap the **three dots** (Ȯ) in the top-right corner of the cart panel.
Available actions:
* **Order notes** — add notes visible to the kitchen
* **Assign customer** — link a customer profile to the order (useful if running a loyalty programme). From the customer window, tap **"View or edit profile"** to open the customer's profile — see their details, order history and average order value, or edit their details. Customers with at least one order also get AI insights on their ordering habits.
* **Add open item** — add a custom item not on the menu
* **Apply discount** — apply a discount to the entire order
* **Apply cash voucher** — redeem a cash voucher code
* **Merge orders** — combine with another open order
* **Split order** — split the charge across multiple payments
* **Void order** — void the entire order
* **Remove order** — delete the order completely
* **Reprint kitchen receipt** — print every sent course again on one kitchen docket
### Reprinting kitchen receipts
Use this when the kitchen loses a docket or asks for a course again.
* **Whole order**: Tap the **three dots** (Ȯ) > **"Reprint kitchen receipt"**. This prints every course sent to the kitchen as one docket, including held courses. The option only appears once at least one item is sent, and only if a kitchen receipt printer is linked to this POS.
* **One course**: Tap a sent item in the cart > **"Reprint this kitchen receipt"**. This works on held items too — you do not need to fire them first.
* If an item-receipt printer is linked, the option reads **"Reprint this kitchen receipt and item dockets"** instead. It also re-issues the fire item dockets for any fired items.
A "Reprint triggered successfully" toast means Atlas sent the job to the printer. If nothing prints, check the kitchen printer is online and has paper.
## Charging an order
Atlas Pay integrates your terminal directly with the POS. The exact order amount is sent automatically — no manual keying, no reconciliation mismatches, and faster checkouts. Your terminal must be connected and online.
The button shows the total amount (e.g. **Charge \$90.50**).
Payment methods are grouped into two categories:
* **Terminal** — integrated payments processed through your Atlas Pay terminal
* **Credit Card** — the exact order amount reflects on the terminal automatically. The customer taps or inserts their card.
* **PayNow, WeChat Pay, Alipay** — the terminal shows a QR code for the customer to scan and pay.
* **Manual** — non-integrated payments you record manually (e.g. ShoppePay, Cash, Invoiced Payment)
For terminal payments, wait for the customer to complete the payment on the terminal. The order is marked as paid automatically.
After payment, a confirmation screen lets you reprint the receipt or start a new order immediately. From here you can:
* **Reprint receipt** — print or reprint the receipt
* **Load another order** — open a different existing order
* **Create new order** — start the next order immediately
### Splitting the bill
On the payment screen, tap **"Split bill"** in the bottom-right corner. You can split by amount or by item.
Split bills cannot be reversed once the first payment is made. Check the split is right before tapping "Yes, proceed to charge".
**Split by amount**
1. Enter the **number of bills to split**.
2. Adjust the amounts if needed.
3. Tap **"Proceed to charge"** and charge each split separately.
**Split by item**
Each item goes to exactly one bill.
1. Tap **"Split items"** on a bill.
2. Select the items, then pick a bill to move them to. Tap **"Create a new bill"** for a separate bill.
3. Tap **"Proceed to charge"** and charge each bill separately.
Items in a bill are not deleted. They stay on the payment screen inside their bills. Back in the cart, the item list only shows items not yet billed, so the cart can look empty once everything is split. Open **"Split bill"** again to see the billed items.
A receipt prints automatically for each partial payment.
### Closing a fully paid order
When every bill is charged, the remaining amount is \$0 but the order can stay open. The **Charge** button changes to **"Close order"**. Tap it to close the order — it does not charge anything.
### Connecting your Atlas Pay terminal to WiFi
1. On your Atlas Pay terminal, go to **Settings** > **Network**.
2. Enter the WiFi password.
3. Tap **WiFi** > select your network and connect.
To turn WiFi off, toggle it from the same screen. The terminal has a 4G backup and will continue processing payments over mobile data.
If the terminal feels unstable or does not sync with the POS properly, switch to 4G by turning off WiFi.
### Checking transactions on your Atlas Pay terminal
If a payment didn't go through or you need to verify a charge, you can check the transaction history directly on the terminal.
1. On your Atlas Pay terminal, go to **Transactions** > **History**.
2. Enter the terminal password.
3. Scroll through the transaction list or search for the one you need.
4. Tap the transaction to view more details.
The **Merchant reference** field shows the last digits of the Atlas order ID. Use this to match the transaction with the correct order in Atlas.
### Force checkout
This is a rare situation that happens when either the POS or the Atlas Pay terminal disconnects from the network mid-payment. The POS cannot confirm whether the payment went through, so it asks you to verify manually.
When this happens, a screen appears asking you to ensure the payment was authorised on the terminal. Before tapping **"I understand, force checkout"**:
1. Check the terminal screen — it should show **"Approved"** with a green checkmark.
2. If unsure, go to **Transactions** > **History** on the terminal and confirm the transaction shows a green tick.
**Do not force checkout without verifying the terminal.** If the payment was declined or did not go through, force checkout will mark the order as paid and the customer could walk away without paying. Always confirm the terminal shows "Approved" first.
## Refunding an order
Tap **"History"** in the top toolbar to view past orders. Search by order number or scroll through the list, then tap **"View"** on the order.
To do a partial refund from the POS:
1. Tap the order history button > Tap the order.
2. Alternatively: Tap the search button and key in your order number > Tap the order.
3. In the order details modal: Tap "Adjust" > Tap "Edit order".
4. You will see your cart is now editable. A few things you can do from here:
1. Remove an item by tapping on the remove button .
2. Adjust quantity with the minus and plus buttons .
3. Adjust sales quantities, scrolling down and selecting the editable boxes.
4. Add and remove new items, by tapping on the top-right corner "Edit cart" button.
5. Once you are done with your changes, tap "Update" in the top-right corner.
6. A red banner will prompt with the calculated difference to refund. Tap "Refund".
7. In the refund confirmation page, confirm the amount and refund reason, and tap "Refund".
After this, you can print a refund receipt from the dropdown "Print receipt" > "Refund receipt".
For full refunds, refund and recharge, and other refund options, see the [full refunds guide](/merchant-portal/refunds).
## Changing fulfilment type
The current fulfilment type displays in the top-right corner (e.g. **Takeaway**, **Dine-in**).
Tap the label to change it. A modal lets you switch between dine-in, takeaway, or delivery.
## Managing open orders
If a customer needs time to decide, you can park their order and serve the next person in line.
Tap the **arrow** (›) in the top-right corner to expand the open orders list. All unsettled orders display here with their order number and fulfilment type. Tap any order to return to it.
To start a new order while leaving the current one open, tap **"+ New order"** at the bottom of the list. Tap the **arrow** next to it to pick a specific order type (dine-in, takeaway, or delivery).
Keep your open orders list empty by end of day. Open orders left overnight can cause reporting discrepancies.
## If it doesn't work
1. Check if the item opened a modifier modal — you need to complete the selection and tap "Add"
2. Scroll down in the cart — the item may be below the visible area
3. Verify you are on the correct order (check the order number in the top-right corner)
1. Check that the terminal is powered on and connected to WiFi
2. Verify the green dot in the top toolbar is green (indicates the terminal is connected)
3. Try selecting the payment method again and tap "Charge"
4. If the terminal still doesn't respond, use a manual payment method instead and contact support
1. Tap the arrow (›) in the top-right corner to expand the list
2. Scroll through the list — orders are listed by order number
3. Use the **Search** button in the top toolbar to find the order by number
4. The order may have already been charged — check **History** instead
1. Tap the fulfilment label (e.g. "Takeaway") in the top-right corner
2. Select the correct type from the modal
3. If the order is already charged, you cannot change the fulfilment type — contact support
1. Follow the [refund and recharge steps](/merchant-portal/refunds#processing-a-full-refund-and-recharging-the-order) to refund and recharge with the correct payment type
## Next steps
* [Customer-facing display](/stations/customer-facing-display) - Set up your customer-facing display for easier checkouts
* [Process refunds](/merchant-portal/refunds) — Refund or cancel orders from POS
* [Set up POS layouts](/menu-builder/pos-layout) — Customise your POS tile layout
* [Manage stocks](/merchant-portal/stocks) — Block or set quantities for items during service
# How tips work on POS
Source: https://help.atlas.kitchen/stations/pos-tips
How tipping works at the Atlas POS terminal, which payment types support it, and where tips appear in your reports and orders.
**Who is this article for?**
* Atlas users with Admin permissions who want to enable tips at their outlet.
* Anyone who wants to understand how tips are taken and how they appear in Atlas.
## What tipping does
When tipping is enabled, a customer can add a tip while paying by credit card at the Atlas Pay terminal. The tip is added to the bill you charge, and it shows separately in your daily report and the order details.
## Enabling tipping
Tipping is **not enabled by default**. Contact Atlas support to turn it on for your account.
Tipping applies to your entire account. If you have multiple outlets under one account, enabling tips turns it on across all of them. Per-outlet tip control is not available yet.
## How tipping works at the terminal
Charge a **credit card** order the way you normally do. There is nothing extra for staff to do. When the customer pays, the terminal shows the order amount and a **Choose tip** prompt. The customer picks a percentage (for example, +5% or +10%), taps **Custom** to key in their own amount, or taps **No tip**. The tip is added to the total automatically, so the customer pays the bill including their tip.
The tip percentages are set up by Atlas support. Tipping works for **credit card** payments only. The tip prompt does not appear for PayNow, WeChat Pay, or Alipay.
The tip can only be added at this prompt, before the card payment goes through. Once the payment is authorised, a tip cannot be added or changed afterward.
## Where tips show up
### Daily outlet report
In the daily outlet report **Sales summary**, the tip appears as a separate **Tips** line, added on top of your total sales to reach expected payments.
### Order details
Open the order to see the tip listed under the paid amount, with the total marked "incl. tip".
## Refunds and tips
* **Full refund** — the tip is refunded along with the order amount.
* **Partial refund** — the tip is not reduced automatically. Contact Atlas support if you need to adjust the tip.
## If it doesn't work
Two things to check. First, tipping must be enabled on your account. Contact Atlas support to turn it on. Second, the customer must be paying by **credit card** — the tip prompt does not appear for PayNow, WeChat Pay, or Alipay.
This can happen if the terminal lost connection mid-payment. Contact Atlas support with the order ID and the terminal charge amount, and the tip can be reconciled manually.
Tipping is currently account-wide. Per-outlet tip control is not available. Contact Atlas support to discuss your setup.
## Next steps
* [Process refunds](/merchant-portal/refunds) — refund or cancel orders that include a tip.
* [Daily outlet report](/reports/operations/daily-outlet-report) — view tips in your daily revenue breakdown.
* [Troubleshooting Atlas Pay terminals](/hardware/terminal-troubleshooting) — fix terminal connection and payment issues.
# Atlas AI use cases
Source: https://help.atlas.kitchen/use-cases
Try these on the portal, or with Claude and ChatGPT.
## Featured
Identify gaps in your menu and resolve them automatically
Keep customers updated about new menus and promotions
MCP only
## Reporting & insights
Turn any report into daily digestible visuals
MCP only
Create custom reports and dashboards
MCP only
Motivate staff to upsell with leaderboards and rewards
MCP only
## Marketing
Automatically create single or bulk discounts and vouchers
Track customer status, preferences, and dietary requirements
Credit points for campaigns or service recovery
Suggest complementary items during checkout
Display targeted announcements on digital menus
Keep customers updated about new menus and promotions
## Operations
Block stock and set stock availability
Create and update POS layouts across outlets
Update operating hours or set special hours
Look up orders, get delivery status, tracking link, cancel, and refund
Set to busy to keep orders under control
## Menu management
Track and report cost of goods sold
Update product, modifiers, and menu sections' availability
Bulk manage dietary info in product descriptions
Plan and create modifier groups to make meal bundles and add-ons
Reorder and add customer-facing labels to highlight your products
Keep menus updated when new products are added
MCP only
# Welcome to Atlas
Source: https://help.atlas.kitchen/welcome-to-atlas
Delightful and easy restaurant tech.
Atlas is the easiest way to start, run and grow any restaurant online and offline. Atlas helps restaurants power online storefronts, POS, 3rd party logistics, sync with food platforms, connect with other tools, leverage AI and a lot more.
## Get started
If you're currently onboarding and new to Atlas, you can get started using the guides below:
Atlas handles the details so you can focus on what matters. Use this guide for onboarding best practices.
Quickly set up Atlas Merchant Portal on your device for faster, seamless access.
Boost sales with Atlas using cross-selling, loyalty programs, and aggregator integrations.
## Atlas Merchant Portal
Atlas Merchant Portal is your command centre for managing your restaurant. From accessing the POS to updating menus and accessing reports, everything you need is in one place. Here's how to navigate and make the most of it.
### Orders
Create and charge Admin orders in Atlas for delivery, pickup, or dine-in
Update order details in Atlas, including items, customer info, addresses, and fulfilment
Process refunds in Atlas by cancelling, reopening, or adjusting payments
### Stocks
Manage restaurant stock in Atlas by blocking/unblocking items and setting product quantities across all channels
### Customers
Manage customer data in Atlas by accessing the Customers page, identifying user types, and exporting data for marketing and analytics.
### Reports
Access comprehensive, real-time reports in Atlas to track sales, operations, products, marketing, and finances. Monitor your restaurant's performance with detailed analytics and insights.
### Marketing tools
Create and configure discounts / promotions in Atlas.
### Menu builder
Create and configure menus in Atlas, including sections, products, and modifier groups.
Set up and manage POS layouts in Atlas, including pages, tiles, and outlet assignments.
### Outlet settings
This guide will walk you through how to add and edit your regular restaurant operation hours, including special hours for public holidays or special occasions
## Run Atlas from your AI assistant
Ask about sales, edit menus, or 86 an item in plain language. Takes about two minutes to set up.
Copy-paste prompts for item costs, allergen tags, cross-sell groups and modifiers.
## Hardware
Step-by-step guide to connecting an Atlas printer to your WiFi network using manual pairing or QR pairing with WeChat.
## Customer guides
Diners can update their phone number on Atlas Online by logging in, recovering access, and verifying changes.
## Integrations
Integrate Atlas with Revel by setting up APIs, mapping menus, dining options, payments, discounts, and service fees. Configure order sync, table mapping, and test the integration.