# /entitlements/catalog - Create an add-on type **POST /entitlements/catalog** Add a new add-on type to the catalog. Only the owner organization or a Super Admin can manage the catalog (403 otherwise). ## Servers - Backend API server (port 8080): https://api.your-domain.com/api (Backend API server (port 8080)) - Collect API server (port 8081): https://collect.your-domain.com/api (Collect API server (port 8081)) ## Authentication methods - Bearer auth ## Parameters ### Body: application/json (object) - **id** (string) Catalog id: lowercase kebab-case, convention nsec-, ns8- or - - **display_name** (string) Human-readable name - **description** (string) Optional longer description - **scoped** (boolean) True when grants can be narrowed to a single application instance (per-application-instance modules) - **kind** (string) Add-on kind - **system_type** (string) Restricts the add-on to one system type. Empty/omitted = any type. - **legacy_alias** (string) Old wire id (lowercase kebab-case) consumers still call on GET /auth/service/{id} - **applies_to** (string) Application (applications.instance_of) the module applies to. Required in practice for kind=module: omitted, it falls back to the id prefix, which is wrong for hyphenated app names. Ignored for services. - **purchasable** (boolean) Whether the add-on is on sale. Defaults to true when omitted. ## Responses ### 201 Catalog item created successfully #### Body: application/json (object) - **code** (integer) - **message** (string) - **data** (object) One grantable add-on type. Ids are lowercase kebab-case; convention: `nsec-` (firewall services), `ns8-` (application enablement on a cluster) or `-` (per-application-instance modules, `scoped: true`; `applies_to` names the application, since the id prefix is ambiguous for hyphenated app names). `legacy_alias` is the old wire id the appliance feeds still call on `GET /auth/service/{id}` — legacy ids are never renamed. ### 400 Invalid id or legacy_alias (lowercase kebab-case required), invalid kind (service/module) or system_type (nsec/ns8/empty) #### Body: application/json (object) - **code** (integer) HTTP error code - **message** (string) Error message - **data** (object) ### 401 Unauthorized - invalid or missing token #### Body: application/json (object) - **code** (integer) - **message** (string) - **data** (object | null) ### 403 Forbidden - insufficient permissions #### Body: application/json (object) - **code** (integer) - **message** (string) - **data** (object | null) ### 409 Catalog item already exists #### Body: application/json (object) - **code** (integer) - **message** (string) - **data** (object | null) ### 500 Internal server error #### Body: application/json (object) - **code** (integer) - **message** (string) - **data** (object | null) [Powered by Bump.sh](https://bump.sh)