---
title: "Create a catalog entry"
url: "https://nexora.apim.eu/apis/agent-catalog/versions/fa44b0ce-8be5-4345-b3ca-97adeccf8c16/operations/createCatalogEntry"
---

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

# Create a catalog entry

`POST` `/catalog-entries`

Operation ID: `createCatalogEntry`

Starts the generation of a catalog entry from an agent and a template. Processing runs asynchronously; the response initially carries `status: "in_progress"`.

## Request body (required)

Content types: `application/json`

## Responses

- `202` - Generation accepted
- `400` - The request doesn't match the schema
- `401` - Key is missing, revoked or invalid
- `403` - The key is missing a required scope
- `404` - Agent or template not found
- `429` - Rate limit reached

## 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:
    post:
      tags:
        - Catalog Entries
      summary: Create a catalog entry
      description: |
        Starts the generation of a catalog entry from an agent and a
        template. Processing runs asynchronously; the response initially
        carries `status: "in_progress"`.
      operationId: createCatalogEntry
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CreateCatalogEntryRequest"
            examples:
              standard:
                summary: Copilot with the standard sections
                value:
                  agent_id: agt_8f2c1a
                  template_id: tpl_standard
                  target_team: engineering
                  sections:
                    - capabilities
                    - data_scope
                    - integrations
                    - compliance
              complianceAudience:
                summary: Governance-focused version for the compliance review
                value:
                  agent_id: agt_8f2c1a
                  template_id: tpl_governance
                  target_team: compliance-legal
                  sections:
                    - capabilities
                    - compliance
                    - data_scope
      responses:
        "202":
          description: Generation accepted
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CatalogEntry"
              example:
                id: entry_4d9b2e
                agent_id: agt_8f2c1a
                template_id: tpl_standard
                target_team: engineering
                status: in_progress
                created_at: 2026-08-20T09:41:12Z
        "400":
          $ref: "#/components/responses/ValidationError"
        "401":
          $ref: "#/components/responses/NotAuthenticated"
        "403":
          $ref: "#/components/responses/ScopeMissing"
        "404":
          description: Agent or template not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
        "429":
          $ref: "#/components/responses/TooManyRequests"
security:
  - apiKey: []
components:
  schemas:
    CreateCatalogEntryRequest:
      type: object
      required:
        - agent_id
        - template_id
      properties:
        agent_id:
          type: string
          description: Agent the catalog entry is generated from.
          example: agt_8f2c1a
        template_id:
          type: string
          description: Design template of the catalog.
          example: tpl_standard
        target_team:
          $ref: "#/components/schemas/TargetTeam"
        sections:
          type: array
          description: Order and selection of sections. Defaults to the template's
            sections if omitted.
          items:
            $ref: "#/components/schemas/Section"
        internal_note:
          type: string
          maxLength: 500
          description: Internal remark; does not appear in the record.
          example: Owner wants the pilot renewed before the entry goes live org-wide.
    CatalogEntry:
      type: object
      properties:
        id:
          type: string
          example: entry_4d9b2e
        agent_id:
          type: string
          example: agt_8f2c1a
        template_id:
          type: string
          example: tpl_standard
        target_team:
          $ref: "#/components/schemas/TargetTeam"
        status:
          $ref: "#/components/schemas/CatalogEntryStatus"
        record_url:
          type: string
          format: uri
          description: "Only set once `status: completed`. The link is valid for 24 hours."
          example: https://api.nexora.example/v1/catalog-entries/entry_4d9b2e/record
        pages:
          type: integer
          description: Page count of the generated record.
          example: 4
        disclosures:
          $ref: "#/components/schemas/DisclosureReport"
        created_at:
          type: string
          format: date-time
          example: 2026-08-20T09:41:12Z
        completed_at:
          type: string
          format: date-time
          nullable: true
          example: 2026-08-20T09:41:20Z
    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"
    TargetTeam:
      type: string
      description: Audience the entry is written for.
      enum:
        - engineering
        - product
        - support
        - sales-ops
        - compliance-legal
        - open
      default: open
    Section:
      type: string
      description: Content block of the catalog entry.
      enum:
        - capabilities
        - data_scope
        - integrations
        - compliance
        - target_teams
        - rollout_history
    CatalogEntryStatus:
      type: string
      description: Lifecycle of a catalog entry.
      enum:
        - in_progress
        - completed
        - published
        - withdrawn
        - failed
      example: completed
    DisclosureReport:
      type: object
      description: Result of the compliance-disclosure check.
      properties:
        complete:
          type: boolean
          example: false
        missing:
          type: array
          items:
            $ref: "#/components/schemas/ErrorDetail"
    ErrorDetail:
      type: object
      properties:
        field:
          type: string
          example: compliance_certification.valid_until
        reason:
          type: string
          example: missing
  responses:
    ValidationError:
      description: The request doesn't match the schema
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/Error"
    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: []
    ScopeMissing:
      description: The key is missing a required scope
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/Error"
          example:
            code: scope_missing
            message: The API key is missing a required scope.
            details:
              - field: catalog:write
                reason: not_granted
    TooManyRequests:
      description: Rate limit reached
      headers:
        Retry-After:
          schema:
            type: integer
            example: 12
      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`.
```
