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

# Get Menu

> Retrieve a single navigation menu with links

# Get Menu

Returns a single navigation menu by its ID, including all links and nested children.

## Request

<CodeGroup>
  ```bash cURL theme={null}
  curl -X GET "https://api.launchmystore.io/api/v1/menus/menu_abc123.json" \
    -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
  ```

  ```javascript Node.js theme={null}
  const response = await fetch('https://api.launchmystore.io/api/v1/menus/menu_abc123.json', {
    headers: {
      'Authorization': 'Bearer YOUR_ACCESS_TOKEN'
    }
  });
  ```
</CodeGroup>

## Path Parameters

<ParamField path="id" type="string" required>
  The unique menu ID
</ParamField>

## Response

Responses use the standard envelope (`status`, `state`, `message`, `data`, `count`, `pagination`). The menu is nested under `data.menu`.

<ResponseField name="status" type="integer">
  HTTP status code (`200` on success)
</ResponseField>

<ResponseField name="state" type="string">
  Result state, e.g. `success`
</ResponseField>

<ResponseField name="message" type="string">
  Human-readable message, or `null`
</ResponseField>

<ResponseField name="data" type="object">
  Wrapper object containing the menu

  <Expandable title="data.menu">
    <ResponseField name="menuId" type="string">
      Unique menu ID (UUID)
    </ResponseField>

    <ResponseField name="name" type="string">
      Menu name
    </ResponseField>

    <ResponseField name="handle" type="string">
      URL-safe menu handle
    </ResponseField>

    <ResponseField name="slug" type="string">
      URL-safe slug
    </ResponseField>

    <ResponseField name="url" type="string">
      Destination URL for this menu item
    </ResponseField>

    <ResponseField name="menuType" type="string">
      Where the menu is used (e.g. `header`, `footer`)
    </ResponseField>

    <ResponseField name="menuItemType" type="string">
      Item resource type (e.g. `page`, `product`, `category`, `customized`)
    </ResponseField>

    <ResponseField name="child" type="array">
      Array of nested child menu-item objects (same shape, stored as JSON)
    </ResponseField>

    <ResponseField name="selected" type="boolean">
      Whether the menu item is enabled
    </ResponseField>

    <ResponseField name="depth" type="integer">
      Nesting depth (0 for top level)
    </ResponseField>

    <ResponseField name="order" type="integer">
      Sort order within its level
    </ResponseField>

    <ResponseField name="parentId" type="string">
      Parent menu ID, or `null` for top-level items
    </ResponseField>

    <ResponseField name="productId" type="string">
      Linked product ID, when `menuItemType` is `product`
    </ResponseField>

    <ResponseField name="categoryId" type="string">
      Linked category ID, when `menuItemType` is `category`
    </ResponseField>

    <ResponseField name="pageId" type="string">
      Linked page ID, when `menuItemType` is `page`
    </ResponseField>

    <ResponseField name="createdAt" type="string">
      Creation timestamp (ISO 8601)
    </ResponseField>

    <ResponseField name="updatedAt" type="string">
      Last update timestamp (ISO 8601)
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="count" type="integer">
  Result count (omitted for single-resource responses)
</ResponseField>

<ResponseField name="pagination" type="object">
  Pagination metadata; `null` for single-resource responses
</ResponseField>

## Example Response

```json theme={null}
{
  "status": 200,
  "state": "success",
  "message": null,
  "data": {
    "menu": {
      "menuId": "a1b2c3d4-0001-4e5f-8a9b-0c1d2e3f4a5b",
      "name": "Home",
      "handle": "home",
      "slug": "home",
      "url": "/",
      "menuType": "header",
      "menuItemType": "customized",
      "child": [
        {
          "name": "New Arrivals",
          "url": "/collections/new-arrivals",
          "menuItemType": "category",
          "categoryId": "c0ffee00-1111-4222-8333-444455556666"
        }
      ],
      "selected": true,
      "depth": 0,
      "order": 1,
      "parentId": null,
      "productId": null,
      "categoryId": null,
      "pageId": null,
      "createdAt": "2024-01-01T10:00:00.000Z",
      "updatedAt": "2024-03-15T14:30:00.000Z"
    }
  },
  "count": null,
  "pagination": null
}
```

## Error Response

When the menu does not exist, the endpoint returns the standard envelope with an `error` state:

```json theme={null}
{
  "status": 404,
  "state": "error",
  "message": "Menu not found",
  "data": null
}
```

## Error Codes

| HTTP Status | Description                               |
| ----------- | ----------------------------------------- |
| `401`       | Invalid or missing access token           |
| `403`       | App doesn't have `read_content` scope     |
| `404`       | Menu with the specified ID does not exist |
