---
title: "Create portal navigation items in bulk"
method: POST
path: "/portal-navigation-items/_bulk"
tags: ["Portal Navigation Items"]
---

# Create portal navigation items in bulk

`POST /portal-navigation-items/_bulk`

## Request

- Base URL: `/management/v2/environments/DEFAULT` (relative, and the document was published on a file host, not at the API’s origin)
- URL: `/management/v2/environments/DEFAULT/portal-navigation-items/_bulk`
- Auth: one of:
  - HTTP basic
  - API key in cookie `Auth-Graviteeio-APIM`

User must have the ENVIRONMENT_DOCUMENTATION[update] permission.

## Request body

- CreatePortalNavigationItems: Portal navigation items to create in bulk
  - `items` CreatePortalNavigationItem[], required
    - union
      - CreatePortalNavigationPage: Base portal navigation item. Newly created items are unpublished by default.
        - `id` string, uuid: The unique ID of the navigation item
        - `title` string, required: The title of the navigation item
        - `type` 'PAGE' | 'FOLDER' | 'LINK' | 'API' | 'API_PRODUCT', required: The type of the navigation item
        - `area` 'HOMEPAGE' | 'TOP_NAVBAR', required: The portal area (used by portal navigation items)
        - `order` integer: The order of the navigation item, from 0 to MAX + 1, where MAX is the maximum existing order within the target parent. If not provided or greater than MAX, the new item is appended to the end of the target parent.
        - `parentId` string, uuid: The parent ID of the navigation item, if not provided item is created at root
        - `visibility` 'PUBLIC' | 'PRIVATE', required: The portal visibility (used by portal navigation items)
        - `portalPageContentId` string, uuid: The UUID of the portal page content
        - `contentType` 'GRAVITEE_MARKDOWN' | 'OPENAPI' | 'ASYNCAPI': Type of portal page content
        - `source` PortalNavigationItemSource: External source of the item content.
          - `type` string, required: Fetcher plugin id.
          - `configuration` object, required: Fetcher configuration.
          - `useAutoFetch` boolean: Whether the content is automatically re-fetched on a schedule.
          - `fetchCron` string: Cron expression driving the auto-fetch schedule. Only used when useAutoFetch is true.
          - `lastFetchedAt` string, date-time: Date of the last successful fetch.
          - `lastFetchAttemptAt` string, date-time: Date of the last fetch attempt, successful or not. This is the date the auto-fetch schedule is computed from, and it dates lastFetchError when the last attempt failed.
          - `lastFetchError` string: Error message of the last failed fetch. Absent when the last fetch succeeded.
      - CreatePortalNavigationFolder: Base portal navigation item. Newly created items are unpublished by default.
        - `id` string, uuid: The unique ID of the navigation item
        - `title` string, required: The title of the navigation item
        - `type` 'PAGE' | 'FOLDER' | 'LINK' | 'API' | 'API_PRODUCT', required: The type of the navigation item
        - `area` 'HOMEPAGE' | 'TOP_NAVBAR', required: The portal area (used by portal navigation items)
        - `order` integer: The order of the navigation item, from 0 to MAX + 1, where MAX is the maximum existing order within the target parent. If not provided or greater than MAX, the new item is appended to the end of the target parent.
        - `parentId` string, uuid: The parent ID of the navigation item, if not provided item is created at root
        - `visibility` 'PUBLIC' | 'PRIVATE', required: The portal visibility (used by portal navigation items)
        - `source` PortalNavigationItemSource: External source of the item content.
          - `type` string, required: Fetcher plugin id.
          - `configuration` object, required: Fetcher configuration.
          - `useAutoFetch` boolean: Whether the content is automatically re-fetched on a schedule.
          - `fetchCron` string: Cron expression driving the auto-fetch schedule. Only used when useAutoFetch is true.
          - `lastFetchedAt` string, date-time: Date of the last successful fetch.
          - `lastFetchAttemptAt` string, date-time: Date of the last fetch attempt, successful or not. This is the date the auto-fetch schedule is computed from, and it dates lastFetchError when the last attempt failed.
          - `lastFetchError` string: Error message of the last failed fetch. Absent when the last fetch succeeded.
      - CreatePortalNavigationLink: Base portal navigation item. Newly created items are unpublished by default.
        - `id` string, uuid: The unique ID of the navigation item
        - `title` string, required: The title of the navigation item
        - `type` 'PAGE' | 'FOLDER' | 'LINK' | 'API' | 'API_PRODUCT', required: The type of the navigation item
        - `area` 'HOMEPAGE' | 'TOP_NAVBAR', required: The portal area (used by portal navigation items)
        - `order` integer: The order of the navigation item, from 0 to MAX + 1, where MAX is the maximum existing order within the target parent. If not provided or greater than MAX, the new item is appended to the end of the target parent.
        - `parentId` string, uuid: The parent ID of the navigation item, if not provided item is created at root
        - `visibility` 'PUBLIC' | 'PRIVATE', required: The portal visibility (used by portal navigation items)
        - `url` string, required: The URL for the link
      - CreatePortalNavigationApi: Base portal navigation item. Newly created items are unpublished by default.
        - `id` string, uuid: The unique ID of the navigation item
        - `title` string, required: The title of the navigation item
        - `type` 'PAGE' | 'FOLDER' | 'LINK' | 'API' | 'API_PRODUCT', required: The type of the navigation item
        - `area` 'HOMEPAGE' | 'TOP_NAVBAR', required: The portal area (used by portal navigation items)
        - `order` integer: The order of the navigation item, from 0 to MAX + 1, where MAX is the maximum existing order within the target parent. If not provided or greater than MAX, the new item is appended to the end of the target parent.
        - `parentId` string, uuid: The parent ID of the navigation item, if not provided item is created at root
        - `visibility` 'PUBLIC' | 'PRIVATE', required: The portal visibility (used by portal navigation items)
        - `apiId` string, required: The apiId for the navigationItem
        - `categoryIds` string[]: The IDs of the Portal Next categories this API navigation item is assigned to. Defaults to an empty list if not provided.
      - CreatePortalNavigationApiProduct: Base portal navigation item. Newly created items are unpublished by default.
        - `id` string, uuid: The unique ID of the navigation item
        - `title` string, required: The title of the navigation item
        - `type` 'PAGE' | 'FOLDER' | 'LINK' | 'API' | 'API_PRODUCT', required: The type of the navigation item
        - `area` 'HOMEPAGE' | 'TOP_NAVBAR', required: The portal area (used by portal navigation items)
        - `order` integer: The order of the navigation item, from 0 to MAX + 1, where MAX is the maximum existing order within the target parent. If not provided or greater than MAX, the new item is appended to the end of the target parent.
        - `parentId` string, uuid: The parent ID of the navigation item, if not provided item is created at root
        - `visibility` 'PUBLIC' | 'PRIVATE', required: The portal visibility (used by portal navigation items)
        - `apiProductId` string, uuid, required: API Product referenced by the navigation item

## Response `200`

A list of portal navigation items

- object
  - `items` PortalNavigationItem[]: List of portal navigation items
    - union
      - PortalNavigationPage: Base portal navigation item
        - `id` string, uuid, required: The unique ID of the navigation item
        - `organizationId` string, required: The organization ID
        - `environmentId` string, required: The environment ID
        - `title` string, required: The title of the navigation item
        - `type` 'PAGE' | 'FOLDER' | 'LINK' | 'API' | 'API_PRODUCT', required: The type of the navigation item
        - `area` 'HOMEPAGE' | 'TOP_NAVBAR', required: The portal area (used by portal navigation items)
        - `parentId` string, uuid: The parent ID of the navigation item
        - `rootId` string, uuid, required: The root parent ID of the navigation item hierarchy
        - `order` integer, required: The order of the navigation item (zero-based)
        - `published` boolean, required: Whether the navigation item is published or not
        - `visibility` 'PUBLIC' | 'PRIVATE', required: The portal visibility (used by portal navigation items)
        - `portalPageContentId` string, uuid, required: The UUID of the portal page content
        - `source` PortalNavigationItemSource: External source of the item content.
          - `type` string, required: Fetcher plugin id.
          - `configuration` object, required: Fetcher configuration.
          - `useAutoFetch` boolean: Whether the content is automatically re-fetched on a schedule.
          - `fetchCron` string: Cron expression driving the auto-fetch schedule. Only used when useAutoFetch is true.
          - `lastFetchedAt` string, date-time: Date of the last successful fetch.
          - `lastFetchAttemptAt` string, date-time: Date of the last fetch attempt, successful or not. This is the date the auto-fetch schedule is computed from, and it dates lastFetchError when the last attempt failed.
          - `lastFetchError` string: Error message of the last failed fetch. Absent when the last fetch succeeded.
      - PortalNavigationFolder: Base portal navigation item
        - `id` string, uuid, required: The unique ID of the navigation item
        - `organizationId` string, required: The organization ID
        - `environmentId` string, required: The environment ID
        - `title` string, required: The title of the navigation item
        - `type` 'PAGE' | 'FOLDER' | 'LINK' | 'API' | 'API_PRODUCT', required: The type of the navigation item
        - `area` 'HOMEPAGE' | 'TOP_NAVBAR', required: The portal area (used by portal navigation items)
        - `parentId` string, uuid: The parent ID of the navigation item
        - `rootId` string, uuid, required: The root parent ID of the navigation item hierarchy
        - `order` integer, required: The order of the navigation item (zero-based)
        - `published` boolean, required: Whether the navigation item is published or not
        - `visibility` 'PUBLIC' | 'PRIVATE', required: The portal visibility (used by portal navigation items)
        - `source` PortalNavigationItemSource: External source of the item content.
          - `type` string, required: Fetcher plugin id.
          - `configuration` object, required: Fetcher configuration.
          - `useAutoFetch` boolean: Whether the content is automatically re-fetched on a schedule.
          - `fetchCron` string: Cron expression driving the auto-fetch schedule. Only used when useAutoFetch is true.
          - `lastFetchedAt` string, date-time: Date of the last successful fetch.
          - `lastFetchAttemptAt` string, date-time: Date of the last fetch attempt, successful or not. This is the date the auto-fetch schedule is computed from, and it dates lastFetchError when the last attempt failed.
          - `lastFetchError` string: Error message of the last failed fetch. Absent when the last fetch succeeded.
      - PortalNavigationLink: Base portal navigation item
        - `id` string, uuid, required: The unique ID of the navigation item
        - `organizationId` string, required: The organization ID
        - `environmentId` string, required: The environment ID
        - `title` string, required: The title of the navigation item
        - `type` 'PAGE' | 'FOLDER' | 'LINK' | 'API' | 'API_PRODUCT', required: The type of the navigation item
        - `area` 'HOMEPAGE' | 'TOP_NAVBAR', required: The portal area (used by portal navigation items)
        - `parentId` string, uuid: The parent ID of the navigation item
        - `rootId` string, uuid, required: The root parent ID of the navigation item hierarchy
        - `order` integer, required: The order of the navigation item (zero-based)
        - `published` boolean, required: Whether the navigation item is published or not
        - `visibility` 'PUBLIC' | 'PRIVATE', required: The portal visibility (used by portal navigation items)
        - `url` string, required: The URL for the link
      - PortalNavigationApi: Base portal navigation item
        - `id` string, uuid, required: The unique ID of the navigation item
        - `organizationId` string, required: The organization ID
        - `environmentId` string, required: The environment ID
        - `title` string, required: The title of the navigation item
        - `type` 'PAGE' | 'FOLDER' | 'LINK' | 'API' | 'API_PRODUCT', required: The type of the navigation item
        - `area` 'HOMEPAGE' | 'TOP_NAVBAR', required: The portal area (used by portal navigation items)
        - `parentId` string, uuid: The parent ID of the navigation item
        - `rootId` string, uuid, required: The root parent ID of the navigation item hierarchy
        - `order` integer, required: The order of the navigation item (zero-based)
        - `published` boolean, required: Whether the navigation item is published or not
        - `visibility` 'PUBLIC' | 'PRIVATE', required: The portal visibility (used by portal navigation items)
        - `apiId` string, required: ApiId referenced from the navItem
        - `categoryIds` string[]: The IDs of the Portal Next categories this API navigation item is assigned to
      - PortalNavigationApiProduct: Base portal navigation item
        - `id` string, uuid, required: The unique ID of the navigation item
        - `organizationId` string, required: The organization ID
        - `environmentId` string, required: The environment ID
        - `title` string, required: The title of the navigation item
        - `type` 'PAGE' | 'FOLDER' | 'LINK' | 'API' | 'API_PRODUCT', required: The type of the navigation item
        - `area` 'HOMEPAGE' | 'TOP_NAVBAR', required: The portal area (used by portal navigation items)
        - `parentId` string, uuid: The parent ID of the navigation item
        - `rootId` string, uuid, required: The root parent ID of the navigation item hierarchy
        - `order` integer, required: The order of the navigation item (zero-based)
        - `published` boolean, required: Whether the navigation item is published or not
        - `visibility` 'PUBLIC' | 'PRIVATE', required: The portal visibility (used by portal navigation items)
        - `apiProductId` string, uuid, required: API Product referenced by the navigation item
  - `metadata` PortalNavigationItemsResponseMetadata: Sidecar data resolved for the returned navigation items, present only when requested via the `includes` query parameter.
    - `apis` object: Map of navigation item ID to a summary of its resolved Api, present only when `includes=apis` was requested.

## Other responses

- `400`: Invalid navigation item payload or hierarchy
- `404`: A referenced API Product or parent does not exist in the current environment
- `409`: An API Product is already represented in the environment navigation tree
- `default`: Generic error response

## Changes

- **2026-08-12** `1b43518fec30`: 1 info
  - added the optional property `metadata` to the response with the `200` status
- **2026-08-10** `37e8cbe5f769`: 2 info
  - added the optional property `items/items/oneOf[#/components/schemas/PortalNavigationFolder]/allOf[subschema #2]/source/lastFetchAttemptAt` to the response with the `200` status
  - added the optional property `items/items/oneOf[#/components/schemas/PortalNavigationPage]/allOf[subschema #2]/source/lastFetchAttemptAt` to the response with the `200` status
- **2026-08-05** `d179daa13dee`: 2 info
  - added the new optional request property `items/items/oneOf[subschema #4: CreatePortalNavigationApi]/allOf[subschema #2]/categoryIds`
  - added the optional property `items/items/oneOf[#/components/schemas/PortalNavigationApi]/allOf[subschema #2]/categoryIds` to the response with the `200` status
- **2026-07-31** `218efa41606c`: 1 breaking, 3 info
  - added `subschema #2` to the `items/items/oneOf[subschema #2: CreatePortalNavigationFolder]/` request property `allOf` list
  - added the new optional request property `items/items/oneOf[subschema #1: CreatePortalNavigationPage]/allOf[subschema #2]/source`
  - added the optional property `items/items/oneOf[#/components/schemas/PortalNavigationPage]/allOf[subschema #2]/source` to the response with the `200` status
  - added `subschema #2` to the `items/items/oneOf[#/components/schemas/PortalNavigationFolder]/` response property `allOf` list for the response status `200`
- …earlier changes not shown

[Operation history](https://skmtc.dev/gravitee-io/apis/gravitee-io-apim-management-api-environments/changes/portal-navigation-items/_bulk/post.md)

---

[API](https://skmtc.dev/gravitee-io/apis/gravitee-io-apim-management-api-environments.md) - [All operations](https://skmtc.dev/gravitee-io/apis/gravitee-io-apim-management-api-environments/llms.txt) - [OpenAPI document](https://skmtc.dev/gravitee-io/apis/gravitee-io-apim-management-api-environments/revisions/b736a7e375df?raw)
