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: 
I did not get it to run with JSON:API, there are several long-standing issues...

*However* you can get it to run if you additionally install the [REST Menu Tree](https://www.drupal.org/project/rest_menu_tree) module.

Be aware that this has several direct and indirect dependencies:

It has a direct dependency on [Menu Normalizer](https://www.drupal.org/project/menu_normalizer) and according to [this issue](https://www.drupal.org/project/rest_menu_tree/issues/2899998) you need to then activate that endpoint for example with the [REST UI](https://www.drupal.org/project/restui) module - which in turn will activate the [core REST module](https://www.drupal.org/docs/8/core/modules/rest).

Then in your site activate the endpoint via the Rest UI in `/admin/config/services/rest`.

Afterwards you might also want to allow everyone to GET this endpoint via `/admin/people/permissions#module-rest`

And finally you get a JSON array in `/entity/menu/main/tree`.
Or query a different menu via `/entity/menu/{internal_menu_name}/tree`.
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.