---
title: "Create or replace a catalog"
method: POST
path: "/api/v1/catalog-pages"
tags: ["Catalogs"]
---

# Create or replace a catalog

`POST /api/v1/catalog-pages`

## Request

- Base URL: `https://api.getcortexapp.com`
- URL: `https://api.getcortexapp.com/api/v1/catalog-pages`
- Auth: HTTP bearer

Creates a catalog, or replaces the existing one with the same slug.

API key must have the `Edit catalogs` permission.

## Request body

- CatalogPageRequest
  - `description` string: Optional description of the catalog
  - `filter` Filter: Filter that selects the entities in the catalog, for `FILTER` catalogs
    - `groups` GroupFilter: Entity groups to include or exclude
      - `exclude` string[]
      - `include` string[]
    - `query` string: CQL expression to apply as a filter
    - `types` TypeFilter: Entity types (e.g. service, domain, team) to include or exclude. Only one of `include` or `exclude` can be set
      - `exclude` string[]
      - `include` string[]
  - `iconTag` string, required: Tag of the icon shown for the catalog
  - `isDraft` boolean, required: Whether the catalog is a draft
  - `name` string, required: Name of the catalog
  - `relationshipTypeTag` string: Tag of the relationship type the catalog is built from, for a `RELATIONSHIP_TYPE` catalog
  - `slug` string, required: Unique identifier for the catalog
  - `type` 'FILTER' | 'RELATIONSHIP_TYPE' | 'DOMAIN': What the catalog is built from. Optional: inferred as `FILTER` when `filter` is set and `RELATIONSHIP_TYPE` when `relationshipTypeTag` is set. Must be set explicitly to `DOMAIN` for a domain catalog

## Response `200`

Successfully created or replaced the catalog

- CatalogPage
  - `dateCreated` string, date-time, required: Time the catalog was created
  - `dateUpdated` string, date-time, required: Time the catalog was last updated
  - `description` string: Optional description of the catalog
  - `filter` Filter: Filter that selects the entities in the catalog, for `FILTER` catalogs
    - `groups` GroupFilter: Entity groups to include or exclude
      - `exclude` string[]
      - `include` string[]
    - `query` string: CQL expression to apply as a filter
    - `types` TypeFilter: Entity types (e.g. service, domain, team) to include or exclude. Only one of `include` or `exclude` can be set
      - `exclude` string[]
      - `include` string[]
  - `iconTag` string, required: Tag of the icon shown for the catalog
  - `isCortexManaged` boolean, required: Whether the catalog is managed by Cortex. Cortex-managed catalogs cannot be modified or deleted
  - `isDraft` boolean, required: Whether the catalog is a draft
  - `name` string, required: Name of the catalog
  - `relationshipTypeTag` string: Tag of the relationship type the catalog is built from, for `RELATIONSHIP_TYPE` catalogs
  - `slug` string, required: Unique identifier for the catalog
  - `type` 'FILTER' | 'RELATIONSHIP_TYPE' | 'DOMAIN', required: What the catalog is built from: a filter, a relationship type, or the domain hierarchy

## Other responses

- `400`: Bad Request
- `403`: The catalog is managed by Cortex and cannot be modified
- `404`: The referenced relationship type was not found
- `429`: The client has exceeded the rate limit by performing too many requests in a short period. Retry the request after a delay.

## Changes

- **2026-11-03** `a7b058663c95`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/cortex/apis/cortex-api/changes/api/v1/catalog-pages/post.md)

---

[API](https://skmtc.dev/cortex/apis/cortex-api.md) - [All operations](https://skmtc.dev/cortex/apis/cortex-api/llms.txt) - [OpenAPI document](https://skmtc.dev/cortex/apis/cortex-api/revisions/a7b058663c95?raw)
