Question: How can I fetch the complete main navigation menu via jsonapi?

I've tried:

```
curl --header 'Accept: application/vnd.api+json' https://cms.example.com/jsonapi/menu/menu/

```

and

```
 curl --header 'Accept: application/vnd.api+json' https://cms.example.com/jsonapi/menu/menu/232fc942-51f3-4478-8535-e5dc482a166e

```

where `232fc942-51f3-4478-8535-e5dc482a166e` is the `id` of the main-navigation menu BUT only the first level nodes are returned:

```
{
  "data": {
    "type": "menu--menu",
    "id": "232fc942-51f3-4478-8535-e5dc482a166e",
    "attributes": {
      "label": "Main navigation"
    },
    "links": {
      "self": {
    "href": "https://cms.garanteasy.com/jsonapi/menu/menu/232fc942-51f3-4478-8535-e5dc482a166e"
      }
    }
  },
  "jsonapi": {
    "version": "1.0",
    "meta": {
      "links": {
    "self": {
      "href": "http://jsonapi.org/format/1.0/"
    }
      }
    }
  },
  "links": {
    "self": {
      "href": "https://cms.garanteasy.com/jsonapi/menu/menu/232fc942-51f3-4478-8535-e5dc482a166e"
    }
  }
}

```

Answer: 
It is possible to pull all the menu items using the JSON:API exclusively. The main "long standing issue" is that the links are not available to non admin users, which probably defeats the purpose for most users. There are a couple patches, however, that allow this:

<https://www.drupal.org/project/drupal/issues/2915792>

And to add the url property:

<https://www.drupal.org/project/drupal/issues/3066751>

This allows you to hit this endpoint:

`/jsonapi/menu_link_content/your-menu-machine-name`

And get a standard JSON:API result.

> 
> Key takeaway: The state of Drupal's headless menu fetching is abysmal. 
> 
> 
>
There is also the [rest\_menu\_items](https://www.drupal.org/project/rest_menu_items) module. This doesn't have any dependencies, the only thing you need to do is enable the endpoint. This also enables you to specify which values you want, and specify the depth of the tree.