/entitlements/catalog/{id} - Update an add-on type

Add MCP server to your AI tool

Allow AI tools and LLMs to interact with the API documentation portal through MCP.

MCP server URL

https://api.my.nethesis.it/mcp

Standard setup for AI tools providing an mcp.json file

mcp.json
{
  "my.nethesis.it MCP server": {
    "url": "https://api.my.nethesis.it/mcp"
  }
}

Close
PUT /entitlements/catalog/{id}

Update the display fields (display_name, description) of a catalog item. The id and scoped flag are immutable. Only the owner organization or a Super Admin can manage the catalog.

Path parameters

  • id string Required

    Catalog id

application/json

Body Required

  • display_name string

    Human-readable name

  • description string

    Optional longer description

  • purchasable boolean

    Toggles the buy action. Omitted leaves it as it is.

Responses

  • 200 application/json

    Catalog item updated successfully

    Hide response attributes Show response attributes object
    • code integer
    • message string
    • data object

      One grantable add-on type. Ids are lowercase kebab-case; convention: nsec-<service> (firewall services), ns8-<app> (application enablement on a cluster) or <app>-<module> (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.

      Hide data attributes Show data attributes object
      • id string

        Catalog id (lowercase kebab-case, immutable)

      • display_name string

        Human-readable name

      • description string

        Optional longer description

      • scoped boolean

        True when grants can be narrowed to a single application instance via scope (per-application-instance modules). Immutable.

      • kind string

        Both kinds are sellable on the shop — services are firewall add-ons granted system-wide, modules are add-ons for a single application instance of an NS8 cluster

        Values are service or module.

      • system_type string

        Restricts the add-on to one system type. Empty/omitted = any type.

        Values are nsec or ns8.

      • legacy_alias string

        Old wire id consumers still call on GET /auth/service/{id} (only for types migrated from the legacy my)

      • applies_to string

        Application (applications.instance_of) a module add-on applies to. Empty for system-wide services. Stored explicitly because the - id prefix is ambiguous when the app name itself contains a hyphen (nethvoice-proxy).

      • purchasable boolean

        False when the add-on exists but is not on sale: the shop product is unpublished, or it is sold off-line only. The add-on stays visible wherever it is granted — only the buy action is withheld. Separate from the per-organization allowlist, which answers who may buy rather than whether it is on sale at all.

      • in_use boolean

        True when at least one grant references the item — revoked and expired grants included, since they are kept for audit and block the delete all the same. Clients should disable the delete action for these items: DELETE /entitlements/catalog/{id} answers 409.

      • created_at string(date-time)
      • updated_at string(date-time)
  • 400 application/json

    Bad request - validation error

    Hide response attributes Show response attributes object
    • code integer

      HTTP error code

    • message string

      Error message

    • data object
      Hide data attributes Show data attributes object
      • type string

        Type of error

        Values are validation_error or external_api_error.

      • errors array[object]
        Hide errors attributes Show errors attributes object
        • key string

          Field name that failed validation

        • message string

          Error code or message

        • value string

          Value that failed validation

      • details

        Additional error details

  • 401 application/json

    Unauthorized - invalid or missing token

    Hide response attributes Show response attributes object
    • code integer
    • message string
    • data object | null
  • 403 application/json

    Forbidden - insufficient permissions

    Hide response attributes Show response attributes object
    • code integer
    • message string
    • data object | null
  • 404 application/json

    Resource not found

    Hide response attributes Show response attributes object
    • code integer

      HTTP error code

    • message string

      Error message

    • data object
      Hide data attributes Show data attributes object
      • type string

        Type of error

        Values are validation_error or external_api_error.

      • errors array[object]
        Hide errors attributes Show errors attributes object
        • key string

          Field name that failed validation

        • message string

          Error code or message

        • value string

          Value that failed validation

      • details

        Additional error details

  • 500 application/json

    Internal server error

    Hide response attributes Show response attributes object
    • code integer
    • message string
    • data object | null
PUT /entitlements/catalog/{id}
curl \
 --request PUT 'https://api.your-domain.com/api/entitlements/catalog/nsec-blacklist' \
 --header "Authorization: Bearer $ACCESS_TOKEN" \
 --header "Content-Type: application/json" \
 --data '{"display_name":"Blacklist","description":"IP and DNS blacklist feed for NethSecurity","purchasable":false}'
Request examples
{
  "display_name": "Blacklist",
  "description": "IP and DNS blacklist feed for NethSecurity",
  "purchasable": false
}
Response examples (200)
{
  "code": 200,
  "message": "catalog item updated successfully",
  "data": {
    "id": "nsec-blacklist",
    "display_name": "Blacklist",
    "description": "IP and DNS blacklist feed for NethSecurity",
    "scoped": false,
    "kind": "service",
    "system_type": "nsec",
    "legacy_alias": "ng-blacklist",
    "applies_to": "nethvoice",
    "purchasable": true,
    "in_use": true,
    "created_at": "2026-07-01T10:00:00Z",
    "updated_at": "2026-07-01T10:00:00Z"
  }
}
Response examples (400)
{
  "code": 400,
  "message": "validation failed",
  "data": {
    "type": "validation_error",
    "errors": [
      {
        "key": "username",
        "message": "required",
        "value": "string"
      }
    ]
  }
}
Response examples (401)
{
  "code": 401,
  "message": "invalid token",
  "data": {}
}
Response examples (403)
{
  "code": 403,
  "message": "insufficient permissions",
  "data": {}
}
Response examples (404)
{
  "code": 400,
  "message": "validation failed",
  "data": {
    "type": "validation_error",
    "errors": [
      {
        "key": "username",
        "message": "required",
        "value": "string"
      }
    ]
  }
}
Response examples (500)
{
  "code": 500,
  "message": "internal server error",
  "data": {}
}