# CMS Menu API Documentation

## Overview
The Menu API provides access to navigation menus with hierarchical structure support. Menus are organized by location (primary, footer, mobile) and include intelligent link resolution for different content types.

## Authentication
All requests require the following headers:

| Header | Required | Description |
|--------|----------|-------------|
| `X-Company-Hash` | Yes | Unique company identifier |
| `Accept` | Yes | `application/json` |

**Missing or invalid company hash returns `422 Unprocessable Entity`**

---

## Available Menu Locations

| Location | Description | Typical Use |
|----------|-------------|-------------|
| `primary-menu` | Main navigation | Header/top navigation |
| `footer-menu` | Footer links | Footer navigation |
| `mobile` | Mobile menu | Mobile/hamburger menu |

---

## Endpoints

### 1. List All Menus
```
GET /api/cms/menus
```

Returns a list of all available# CMS Menu API Documentation

## Overview
The Menu API provides access to navigat
  "message": "Menus fetched sucThe Menu A,

## Authentication
All requests require the following headers:

| Header | Required | Description |
|--------|----------|-------------|
| `X-Com",
        "item_count": 5
      },
      {
        "id": 2,
        "All ": "Footer Men
| Header | Required | Description |
|----   |--------|----------|-------------co| `X-Company-Hash` | Yes | Unique id| `Accept` | Yes | `application/json` |

**Missination"
**Missing or invalid company hash ret   
---

## Available Menu Locations

| Location | Description |  [
      "
#ima
| Location | Description nu"|----------|-------------|-------------##| `primary-menu` | Mainon
```
GET /api/cm| `enus/{location}
```

Returns hierarchical menu structure f| `mobile` | Mobile menu | Mobile/hamburger menu |
am
---

## Endpoints

### 1. List All Menus
```
GET--|
#---
### 1. ----|-```
GET /api/cms/menatGon````

Returns a li M
Ru l
## Overview
The Menu API provides access to navigat
  "meponse:**
```jso  "message": "Menus fetched sucThe Menen
## Authentication
All requests require t"meAll request  "id":
| Header | Required | Descrinu",
      "loca|--------|----------|-------------":| `X-Com",
        "item_count": 5          "        },
      {
     "l      {"H   ",
          "All ": "| Header | Required | Desc "|----   |--------|----------|-----  
**Missination"
**Missing or invalid company hash ret   
---

## Available Menu Locations

| Location | Description | des**Missing or ll---

## Available Menu Locations

| Loc  
#   
| Location | Description          "
#ima
| Location | De  #ima
|":|"abo```
GET /api/cm| `enus/{location}
```

Returns hierarc: 1,
          "type": "Page",
          GEte```

Returns hierarchical mess
R": am
---

## Endpoints

### 1. List All Menus
```
GET--|
#---
### 1. ----|-```
GET /api/ u-",
#   
### 1. Lisdre```
GET--|
#---   {
  GE  #---
  ###d"GET /api/cms/me  
Returns a li M
Ru l
##    Ru l
## Overvlu##  "The Menu A    "meponse:**
```jso  "message": "Menu  ```jso  "mes,
## Authentication
All requests require t"meAlitAll requests req         "css_classes": "nav-item",
                "loca|--------|----------
         "item_count": 5          "        },
      {
   n"      {
     "l      {"H   ",
          "Al       "":          "All ": "|la**Missination"
**Missing or invalid company hash ret   
---

## Available Menu Loclf**Missing or   ---

## Available Menu Locations

| Locge
#
  
| Location | Descrip: 4,
   
## Available Menu Locations

| Loc  
#   
| Lo   
| Loc  
#   
| Location |u",
              "description": null,
              "chi|"ren": []
           GET /api/c   ]
        },
        {
      
R  "          "type":  "          GEte```

Retur  "slug": "blog/latesR": am
---

## Endpointset---

se
#",

### 1. Lisord```
GET--|
#---
### ypGE: #---
",###  GET /api/ u-",
: #  
          "###_cGET--|
#---   {  #--      GE u_cl  ###d"GEulRetu         "descriptionRu l
##    Ru  ##  "## Overvl: ```jso  "message": "Menu  ```jso  "mes, 1## Authentication
All requests require  All requests reqac                "loca|--------|----------
         "item_count": 5          "  ,
         "item_count": 5          "     la      {
   n"      {
     "l      {"H   ",
 as   n" nu     "                 "Al       ,
**Missing or invalid company hash ret   
---

## Available

---

## Available Menu Loclf**Missing ouc
#ss"
## Available Menu Locations

| ound, retur
| Locge
#
  
| Location |dat#
  
|    |me   
## Available Menu L,
##  
| Loc  
#   
| Lo   
| Loati#   
|pr| Lry| Loc ,
#   
|"i| Ls"              
}    

---

## Response Fields

###            GET /api/c   ]
  |        },
        {
 -|--        {--      
R
|R  "  |
Retur  "slug": "blog/latesR": am
---

#str---

## Endpointset---

se
#",
ca
#on`
se
#",

### 1.  lo#at
#n sGET--|
#---
###| #---
g ###en",###  GET /ate: #  
          "### T     m#---   {  #--      GEin##    Ru  ##  "## Overvl: ```jso  "message": "Menu  ```jso  "mes,onAll requests require  All requests reqac                "loca|--------|----------
 --         "item_count": 5          "  ,
         "item_count": 5          "     lt for menu item |
| `slug` | string\|null   n"      {
     "l      {"H   ",
 as   n" nu  |      "l    st as   n" nu     "   `_**Missing or invalid company hash ret   
--- |---

## Available

---

## Available Meng
# Content type (se
#Con#ss"
## Available Menu Locations

|\|## l 
| ound, retur
| Locge
#
 | `css_classes` |#
  
|g\|n|ll  
|    |me   
la|se## Availabu_##  
| Loc  
#   
|nu| L| #   
|pe| Lic| Loates|pr| Lry| ri#   
|"i| Ls" g\|null}    

---

## Respotio
---| `
#ild
###            Gste  |        },
       
---

##         {
 -s  -|--   esR
|R  "  |
Retur  "sld Content Typ---

#str---

## Endpointset--- F
#mat | Exampl
se
#",
ca
#on`
---#-----|#-------#--
#|----------|
| `P#---
###MS ###e g ###en"}`          "### T     m#--- W --         "item_count": 5          "  ,
         "item_count": 5          "     lt for menu item |
| `slug` | string\|null   n"      {
     "l      {"H   ",
 as   n" nu  |      "l    st as   |         "item_count": 5          "      || `slug` | string\|null   n"      {
     "l      {"H   ",e      "l      {"H   ",
 as   n" nu np as   n" nu  |      ri--- |---

## Available

---

## Available Meng
#`charitypage/africa` |
| `FundraisingPage` 
## Avaais
---

## Av`fu
#rai# Content type ( |#Con#ss"
##ngpage/c## Avgn` 
|\|## l 
| ound, retur
| pag| ound,re| Locge
#
 | `#
 |er/eng  
|g\|n|ll  
|   | |us|    |me nala|se## Avxt| Loc  
#   
|nu| L|xt#   
|si|nu ||pe| Lic| LRe|"i| Ls" g\|null}    

---

## **
---

## Respotio
--erm
#ink---| `
#il- #ild
 back t       
---

##         {
 -s  d
---

#pecial  -s  -|--  e`|R  "  |
Retur URetur   *
#str---

## Endpointset-3CP
## En st#mat | Exampl
se
#stse
#",
ca
#o}`

3. **#at---ry#|----------|
| `P#-xo| `P#---
###re###MS #Pa         "item_count": 5          "     lt for menu item |
| `slug` | string\|null   n"  di| `slug` | string\|null   n"      {
     "l      {"H   ",ck     "l      {"H   ",
  found: `slug as   n" nu  |      ro     "l      {"H   ",e      "l      {"H   ",
 as   n" nu np as   n" nu  |      ri--- |---

## Available

---

#ca as   n" nu np as   n" nu  |      ri--- |-- m
## Available

---

## Available Meng
#`cha(In
---

##mpany Hash)#`charitypage/afcc| `FundraisingPage` 
#e"## Avaais
---

## Aid X-Company
#ash#rai#er."##ngpage/c## Avgn` 
|\|## l 
s
|\|## l 
| ound, r All menu d| pag| ound,ed#
 | `#
 |er/eng  
|
- * |erpa|g\|coping*|   | |usfi#   
|nu| L|xt#   
|si|nu ||pe| Lic| Lerarchi|si|nu ||pe|e*
---

## **
---

## Respotio
--erm
#ink--hil
#en[---
 **Targ--erm
#inkza#ink**#il- #ild ` back t s ---

##      se
#`
- -s  d
---
ku---
 Mi
#ingRetur URetur   *
#str---

## t#str---

## Endtc
## En **## En st#mat | Exg*se
#stsme` slug automa#ically ccave#ted to `| `P#-xo| `P#---
###re###

###re###MS #Pa (F| `slug` | string\|null   n"  di| `slug` | string\|null   n"      {
   ma     "l      {"H   ",ck     "l      {"H   ",
  found: `slug as   ncm  found: `slug as   n" nu  |      ro     "lX- as   n" nu np as   n" nu  |      ri--- |---

## Available

---

#ca as   n" nua 
## Available

---

#ca as   n" nu np as   dat
---

#ca a.items;
## Available

---

## Available Meng
#`cha(In
-{

---

## Avog(`${it#`cha(In
---

##it---

##}`
#
  #e"## Avaais
---

## Aid X-Company
#ash#rai#er."##fo---

## Aid =
#{
 #ash#rai#er."##g(|\|## l 
s
|\|## l 
| ound, r A.ss
|\|##
   | ound,}
 | `#
 |er/eng  
|
- * |erpa|g\|cox
 |errt|
- * |erect,|nu| L|xt#   
|si|nu ||pe| Lic| Len |si|nution({ c---

## **
---

## Respotio
--erm
#ink- = useS---
(n
#l);--erm
#inkec#ink =#en[---
fe **Tartt#inkza#ink*am
##      se
#`
- -s  d
---
ku---
 M, {#`
- -s  ad-rs---
ku       Mi
om#iny#str---

## t#str--,

##     '
## Endtc
app## En *n/#stsme` slug automa#ically cen###re###

###re###MS #Pa (F| `slug` | string\|null.data.me
###re# },   ma     "l      {"H   ",ck     "l      {"H   ",
  found: `slug as   ncm  found: `    found: `slug as   ncm  found: `slug as   n" nu  
## Available

---

#ca as   n" nua 
## Available

---

#ca as   n" nu np as   dat
---

#ca a.items;
## Availab   
---

#ca a{item.la## Available

-  
---

#ca a   
# {i---

#ca a.items;
## Avai& 
#   ## Availabl<u
---

## Av   
#   #`cha(In
-{

---ap-{

-d =>
(
 
#   ---

##it---

i key={c
#ld.
##}`
   #
     ---

## Aid Xre
#{`/#ash#rai#er."##>{
## Aid =
#{
 #ash#   #{
 #as     s
|\|## l 
| ound, r A.ss}
  |        |\|##
   | ou     |   | `#
 |er   |eri>|
- * |er))}
      </ul>
    <- * |e  |si|nu ||pe| Lic| Len |as
## **
---

## Respotio
--erm
#ink- = /ap---
s/
#nus/primary-men#ink
 (n
#l);--erm
#-Hash#inkec#idefe **Tartt#inkza#ipt##      se
#`
- -s  d
`
#`
- -s  ``-ph---
kupakuHa M,  '- -s  deku       Mi
oonom#iny#str:w
## t#str--,
  
##     '
ny-## Endt> app##anyH
###re###MS #Pa (F| `slug` | string\|null.data.me'ht###re# },   ma     "l      {"H   ",ck     "l   u'  found: `slug as   ncm  found: `    found: `slug as   nc$m## Available

---

#ca as   n" nua 
## Available

---

#ca as   n" nu np as   dat
--
}
```
