---
title: "Publish a catalog entry"
url: "https://real-estate-agency.apim.eu/apis/agent-catalog/versions/fa44b0ce-8be5-4345-b3ca-97adeccf8c16/operations/publishCatalogEntry"
---

> Full API specification: https://real-estate-agency.apim.eu/apis/agent-catalog/versions/fa44b0ce-8be5-4345-b3ca-97adeccf8c16.md

# Publish a catalog entry

`POST` `/catalog-entries/{entryId}/publish`

Operation ID: `publishCatalogEntry`

Puts the catalog entry live on the chosen channels. Compliance disclosures are checked first.

## Path parameters

- `entryId` (string, required) - Identifier of the catalog entry.

## Request body (required)

Content types: `application/json`

## Responses

- `200` - Published, or scheduled
- `401` - Key is missing, revoked or invalid
- `404` - The catalog entry doesn't exist
- `422` - Compliance disclosures are missing

## OpenAPI definition

```yaml
openapi: 3.0.3
info:
  title: Agent Catalog
  version: 1.0.0
servers:
  - url: https://api.nexora.example/v1
    description: Production
  - url: https://sandbox.api.nexora.example/v1
    description: Sandbox
paths:
  /catalog-entries/{entryId}/publish:
    parameters:
      - $ref: "#/components/parameters/CatalogEntryId"
    post:
      tags:
        - Catalog Entries
      summary: Publish a catalog entry
      description: |
        Puts the catalog entry live on the chosen channels. Compliance
        disclosures are checked first.
      operationId: publishCatalogEntry
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - channels
              properties:
                channels:
                  type: array
                  minItems: 1
                  items:
                    $ref: "#/components/schemas/CatalogChannel"
                scheduled_for:
                  type: string
                  format: date-time
                  description: Optional time for a later, scheduled publication.
            example:
              channels:
                - internal_catalog
                - slack_directory
                - service_now_cmdb
      responses:
        "200":
          description: Published, or scheduled
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Publication"
        "401":
          $ref: "#/components/responses/NotAuthenticated"
        "404":
          $ref: "#/components/responses/NotFound"
        "422":
          description: Compliance disclosures are missing
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                compliance_certification:
                  summary: Compliance-certification figures are missing
                  value:
                    code: compliance_disclosure_missing
                    message: Compliance disclosures from the certification are missing for
                      publication.
                    details:
                      - field: compliance_certification.data_classification_level
                        reason: missing
                      - field: compliance_certification.valid_until
                        reason: expired
                chargeback:
                  summary: Chargeback rate exceeds the approved ceiling
                  value:
                    code: chargeback_rate_invalid
                    message: The chargeback rate exceeds the business unit's approved ceiling.
                    details:
                      - field: chargeback.rate_percent
                        reason: exceeds_ceiling
security:
  - apiKey: []
components:
  parameters:
    CatalogEntryId:
      name: entryId
      in: path
      required: true
      description: Identifier of the catalog entry.
      schema:
        type: string
        example: entry_4d9b2e
  schemas:
    CatalogChannel:
      type: string
      description: Publication channel.
      enum:
        - internal_catalog
        - slack_directory
        - service_now_cmdb
        - api_directory
    Publication:
      type: object
      properties:
        entry_id:
          type: string
          example: entry_4d9b2e
        status:
          $ref: "#/components/schemas/CatalogEntryStatus"
        channels:
          type: array
          items:
            type: object
            properties:
              channel:
                $ref: "#/components/schemas/CatalogChannel"
              state:
                type: string
                enum:
                  - live
                  - scheduled
                  - failed
              url:
                type: string
                format: uri
        published_at:
          type: string
          format: date-time
          example: 2026-08-20T09:44:03Z
    Error:
      type: object
      description: Uniform error format across all Nexora AI APIs.
      required:
        - code
        - message
      properties:
        code:
          type: string
          example: compliance_disclosure_missing
        message:
          type: string
          example: Compliance disclosures from the certification are missing for
            publication.
        details:
          type: array
          items:
            $ref: "#/components/schemas/ErrorDetail"
    CatalogEntryStatus:
      type: string
      description: Lifecycle of a catalog entry.
      enum:
        - in_progress
        - completed
        - published
        - withdrawn
        - failed
      example: completed
    ErrorDetail:
      type: object
      properties:
        field:
          type: string
          example: compliance_certification.valid_until
        reason:
          type: string
          example: missing
  responses:
    NotAuthenticated:
      description: Key is missing, revoked or invalid
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/Error"
          example:
            code: not_authenticated
            message: The API key is invalid or has been revoked.
            details: []
    NotFound:
      description: The catalog entry doesn't exist
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/Error"
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: apikey
      description: |
        Every call carries an API key in the `apikey` header. You generate the
        key in the Nexora AI portal under "My Apps"; it's shown exactly once.

        Each key has the scopes it's allowed to use attached to it. If one is
        missing, the API responds with `403` and `code: "scope_missing"`; the
        missing scope is in `details[].field`.
```
