> ## Documentation Index
> Fetch the complete documentation index at: https://help.atlas.kitchen/llms.txt
> Use this file to discover all available pages before exploring further.

# Menu details

> Returns full menu hierarchy with sections, items, modifier groups, and modifiers.



## OpenAPI

````yaml get /menus/{id}
openapi: 3.1.0
info:
  title: Atlas Admin API
  version: 1.0.0
  description: ''
servers:
  - url: https://api.atlas.kitchen/admin/v1
    description: Admin API
security:
  - apiKey: []
    merchantId: []
tags:
  - name: Introduction
    description: >
      The Atlas Admin API provides server-to-server access to merchant
      operations — menu management, order lifecycle, user sync, and inventory.


      ### Who uses this API


      - **Integration partners** syncing menus, orders, or users from external
      systems

      - **POS integrations** creating dine-in carts with payment

      - **Aggregator platforms** pushing orders from external channels


      ### Base URL


      ```

      https://api.atlas.kitchen/admin/v1

      ```


      All endpoints are under `/admin/v1`. Each merchant has their own API
      endpoint (e.g. `https://api.merchant-name.atlas.kitchen/admin/v1`).


      ### Conventions


      **Monetary values** — All monetary fields (`price_cents`, `subtotal`,
      `amount`, etc.) are integers in **minor currency units** (cents). `790` =
      $7.90.


      **Dates and times:**

      - Dates — ISO 8601 format: `2026-04-11`

      - Timestamps — Unix epoch (seconds): `1775882963`

      - Timeslots — Seconds since midnight: `36000` = 10:00 AM


      **Pagination** — List endpoints support `page` and `per_page` query
      parameters (max 200 per page).


      **Errors** — All errors follow a consistent format:


      ```json

      {
        "type": "Invalid Parameter",
        "message": "Human-readable description",
        "error_hash": { "field_name": "Specific error" }
      }

      ```


      | Status | Type | Meaning |

      |--------|------|---------|

      | 401 | Unauthorized | Invalid or missing API key |

      | 404 | Not Found | Resource doesn't exist |

      | 422 | Invalid Parameter | Validation failed |

      | 500 | Server Error | Unexpected error |
  - name: Authentication
    description: >
      Every request requires two headers:


      | Header | Description |

      |--------|-------------|

      | `X-Api-Key` | Your API key |

      | `X-Merchant-Id` | Your merchant ID |


      ### Example


      ```bash

      curl https://api.atlas.kitchen/admin/v1/menus \
        -H "X-Api-Key: your-api-key" \
        -H "X-Merchant-Id: your-merchant-id"
      ```


      ### Credential security


      - Never expose credentials in public repositories or client-side code

      - Store credentials securely (environment variables, secret managers)

      - If credentials are compromised, contact support immediately for
      replacement


      ### Error response


      Invalid or missing credentials return `401 Unauthorized`:


      ```json

      {
        "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."
        }
      }

      ```
  - name: Menus
    description: >
      Manage merchant menus with full hierarchy — sections, items, modifier
      groups, and modifiers.


      The `POST /menus` endpoint is an **upsert by identifier** — it creates a
      new menu or updates an existing one, syncing the entire hierarchy in a
      single call. Orphaned sections and items are automatically removed.
  - name: Orders
    description: >
      Create, retrieve, and update orders. Orders are created through a channel
      link (outlet + channel configuration) and support 3-level item nesting
      with payment breakdown overrides.
  - name: Users
    description: >
      Sync user records from external systems. Creates or updates users with
      support for guest users, external ID linking, and account creation.
  - name: Stocks
    description: |
      Item stock levels for an outlet on a given serving date.
  - name: Tables
    description: |
      Table layouts for outlets.
  - name: Carts
    description: |
      Create POS carts for dine-in orders with optional upfront payment.
  - name: Cash Vouchers
    description: >
      Create and inspect prepaid cash vouchers for external gift-card or voucher
      integrations.
paths:
  /menus/{id}:
    get:
      tags:
        - Menus
      summary: Menu details
      description: >-
        Returns full menu hierarchy with sections, items, modifier groups, and
        modifiers.
      operationId: getMenu
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: Full menu with hierarchy
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MenuDetail'
        '404':
          $ref: '#/components/responses/NotFound'
components:
  schemas:
    MenuDetail:
      allOf:
        - $ref: '#/components/schemas/Menu'
        - type: object
          properties:
            sections:
              type: array
              items:
                $ref: '#/components/schemas/MenuSection'
    Menu:
      type: object
      properties:
        id:
          type: integer
        identifier:
          type: string
        name:
          type: string
        brand_id:
          type: integer
        start_date:
          type: string
          format: date
        end_date:
          type: string
          format: date
        state:
          type: string
        lead_time:
          type: integer
        tag_list:
          type: array
          items:
            type: string
        created_at:
          type: integer
        updated_at:
          type: integer
    MenuSection:
      type: object
      properties:
        section_id:
          type: integer
        identifier:
          type: string
        name:
          type: string
        description:
          type: string
          nullable: true
        display_order:
          type: integer
        image_url:
          type: string
          nullable: true
        sub_sections:
          type: array
          items:
            $ref: '#/components/schemas/MenuSubSection'
        products:
          type: array
          items:
            $ref: '#/components/schemas/Product'
    Error:
      type: object
      properties:
        type:
          type: string
        message:
          type: string
        error_hash:
          type: object
    MenuSubSection:
      type: object
      properties:
        id:
          type: integer
        identifier:
          type: string
        name:
          type: string
        description:
          type: string
          nullable: true
        display_order:
          type: integer
        image_url:
          type: string
          nullable: true
        products:
          type: array
          items:
            $ref: '#/components/schemas/Product'
    Product:
      type: object
      properties:
        id:
          type: integer
        name:
          type: string
        sku:
          type: string
        description:
          type: string
          nullable: true
        price_cents:
          type: integer
        currency:
          type: string
        brand_id:
          type: integer
        display_order:
          type: integer
        is_configurable:
          type: boolean
        product_tags:
          type: array
          items:
            type: string
        kitchen_tags:
          type: array
          items:
            type: string
        horizontal_image_url:
          type: string
          nullable: true
        report_category:
          type: string
          nullable: true
        sugar_level:
          type: string
          nullable: true
        nutri_grade:
          type: string
          nullable: true
        archived_at:
          type: integer
          nullable: true
        item_modifier_groups:
          type: array
          items:
            $ref: '#/components/schemas/ItemModifierGroup'
    ItemModifierGroup:
      type: object
      properties:
        id:
          type: integer
        display_order:
          type: integer
        is_fixed:
          type: boolean
        archived:
          type: boolean
        selection_required_min_override:
          type: integer
          nullable: true
        selection_required_max_override:
          type: integer
          nullable: true
        hide_thumbnails:
          type: boolean
        modifier_group:
          $ref: '#/components/schemas/ModifierGroup'
    ModifierGroup:
      type: object
      properties:
        id:
          type: integer
        identifier:
          type: string
        name:
          type: string
        selection_required_min:
          type: integer
        selection_required_max:
          type: integer
        max_quantity_per_modifier:
          type: integer
          nullable: true
        hide_thumbnails:
          type: boolean
        modifiers:
          type: array
          items:
            $ref: '#/components/schemas/Modifier'
    Modifier:
      type: object
      properties:
        id:
          type: integer
        display_order:
          type: integer
        default_quantity:
          type: number
        price_cents_override:
          type: integer
          nullable: true
        item:
          type: object
          properties:
            id:
              type: integer
            name:
              type: string
            price_cents:
              type: integer
            description:
              type: string
              nullable: true
            type:
              type: string
            product_tags:
              type: array
              items:
                type: string
            kitchen_tags:
              type: array
              items:
                type: string
  responses:
    NotFound:
      description: Resource not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: X-Api-Key
      description: Your API key provided during onboarding. Example `c2fb5ae6ea99c37d...`
    merchantId:
      type: apiKey
      in: header
      name: X-Merchant-Id
      description: Your numeric merchant ID. Example `1`

````