---
title: "Create API Product"
method: POST
path: "/v2/api-products"
tags: ["API Products"]
---

# Create API Product

`POST /v2/api-products`

An API Product packages together associated APIs and their operations, backed by thorough documentation,
with the objective of making API consumption straightforward for developers.

## Request body

- CreateAPIProductDTO — The request schema to create an API product.
  - `name` string, required — The name of the API product.
  - `description` string, nullable — The description of the API product.
  - `labels` Labels — Labels store metadata of an entity that can be used for filtering an entity list or for searching across entity types. Keys must be of length 1-63 characters, and cannot start with "kong", "konnect", "mesh", "kic", or "_".
  - `public_labels` PublicLabels — Public labels store information about an entity that can be used for filtering a list of objects. Public labels are intended to store **PUBLIC** metadata. Keys must be of length 1-63 characters, and cannot start with "kong", "konnect", "mesh", "kic", or "_".
  - `portal_ids` string[], required — The list of portal identifiers which this API product should be published to

## Response `201`

API product

- APIProduct
  - `id` string, uuid, required — The API product ID.
  - `name` string, required — The name of the API product
  - `description` string, nullable, required — The description of the API product
  - `portal_ids` string[], required — The list of portal identifiers which this API product is published to. This property is deprecated and will be removed in a future version. Use the `portals` property instead.
  - `portals` APIProductPortal[], required — The list of portals which this API product is published to
    - `portal_id` string, uuid, required
    - `portal_name` string, required
  - `version_count` number, required — The number of product versions attached to this API product
  - `created_at` string, date-time, required — An ISO-8601 timestamp representation of entity creation date.
  - `updated_at` string, date-time, required — An ISO-8601 timestamp representation of entity update date.
  - `labels` Labels, required — Labels store metadata of an entity that can be used for filtering an entity list or for searching across entity types. Keys must be of length 1-63 characters, and cannot start with "kong", "konnect", "mesh", "kic", or "_".
  - `public_labels` PublicLabels, required — Public labels store information about an entity that can be used for filtering a list of objects. Public labels are intended to store **PUBLIC** metadata. Keys must be of length 1-63 characters, and cannot start with "kong", "konnect", "mesh", "kic", or "_".

## Other responses

- `400` — Bad Request
- `401` — Unauthorized
- `403` — Forbidden
- `415` — Unsupported Media Type

## Changes

> 52 revisions in range; 2 could not be searched.

- **2025-10-29** `19e869275e28` — 1 warning
  - added the new `type` enum value to the `allOf[subschema #2]/invalid_parameters/items/oneOf[#/components/schemas/InvalidParameterStandard]/rule` response property for the response status `400`
- **2025-08-22** `96118a9cd7f4` — 6 breaking, 1 info
  - the response property `allOf[subschema #2]/invalid_parameters/items/oneOf[#/components/schemas/InvalidParameterChoiceItem]/source` became nullable for the status `400`
  - the response property `allOf[subschema #2]/invalid_parameters/items/oneOf[#/components/schemas/InvalidParameterDependentItem]/source` became nullable for the status `400`
  - the response property `allOf[subschema #2]/invalid_parameters/items/oneOf[#/components/schemas/InvalidParameterMaximumLength]/source` became nullable for the status `400`
  - the response property `allOf[subschema #2]/invalid_parameters/items/oneOf[#/components/schemas/InvalidParameterMinimumLength]/source` became nullable for the status `400`
  - …3 more
- **2025-08-13** `ab1a51b76144` — 1 breaking
  - the request property `labels/additionalProperties/` became not nullable
- **2025-03-13** `ddd4be7ea073` — 1 breaking, 1 info
  - the response property `labels/additionalProperties/` became nullable for the status `201`
  - the request property `labels/additionalProperties/` became nullable
- …earlier changes not shown

[Full history](https://skmtc.dev/kong/apis/konnect-api/changes/v2/api-products/post.md)

---

[API](https://skmtc.dev/kong/apis/konnect-api.md) · [All operations](https://skmtc.dev/kong/apis/konnect-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/kong/konnect-api/revisions/72502a676a92/schema)
