---
title: "Create a portal navigation item"
method: POST
path: "/portal-navigation-items"
tags: ["Portal Navigation Items"]
---

# Create a portal navigation item

`POST /portal-navigation-items`

## 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`
- Auth: one of:
  - HTTP basic
  - API key in cookie `Auth-Graviteeio-APIM`

User must have the ENVIRONMENT_DOCUMENTATION[update] permission.

## Request body

- 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 `201`

Portal navigation item created. Newly created items are unpublished by default.

- 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

## Other responses

- `400`: Missing API Product reference, invalid parent, invalid TOP_NAVBAR root placement, or malformed request
- `404`: Referenced API Product does not exist in the current environment
- `409`: The API Product is already represented in the environment navigation tree
- `default`: Generic error response

## Changes

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

[Operation history](https://skmtc.dev/gravitee-io/apis/gravitee-io-apim-management-api-environments/changes/portal-navigation-items/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)
