> ## Documentation Index
> Fetch the complete documentation index at: https://docs.notifly.tech/llms.txt
> Use this file to discover all available pages before exploring further.

# API 카탈로그 목록

> 프로젝트의 활성 API 카탈로그 목록을 조회합니다.



## OpenAPI

````yaml /ko/api-reference/openapi.yaml get /v1/projects/{projectId}/catalogs
openapi: 3.0.3
info:
  title: Notifly API
  version: 1.0.0
  contact:
    email: contact@notifly.tech
servers:
  - url: https://api.notifly.tech
    description: 노티플라이 API 서버입니다
security: []
paths:
  /v1/projects/{projectId}/catalogs:
    parameters:
      - $ref: '#/components/parameters/ProjectId'
    get:
      tags:
        - 카탈로그
      summary: list-api-catalogs
      description: 프로젝트의 활성 API 카탈로그 목록을 조회합니다.
      operationId: listApiCatalogs
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CatalogListResponse'
        '400':
          $ref: '#/components/responses/CatalogBadRequest'
        '401':
          $ref: '#/components/responses/CatalogUnauthenticated'
        '403':
          $ref: '#/components/responses/CatalogPermissionDenied'
        '404':
          $ref: '#/components/responses/CatalogNotFound'
        '413':
          $ref: '#/components/responses/CatalogPayloadTooLarge'
        '500':
          $ref: '#/components/responses/CatalogInternalServerError'
      security:
        - bearerAuth: []
components:
  parameters:
    ProjectId:
      name: projectId
      in: path
      description: 노티플라이 프로젝트 ID입니다.
      required: true
      schema:
        type: string
        pattern: ^[a-f0-9]{32}$
        minLength: 32
        maxLength: 32
  schemas:
    CatalogListResponse:
      type: object
      required:
        - data
        - error
      properties:
        data:
          type: object
          required:
            - catalogs
            - next_cursor
            - links
          properties:
            catalogs:
              type: array
              items:
                $ref: '#/components/schemas/Catalog'
            next_cursor:
              nullable: true
              enum:
                - null
            links:
              $ref: '#/components/schemas/Links'
        error:
          nullable: true
          enum:
            - null
      example:
        data:
          catalogs:
            - name: products
              description: 메시지 개인화용 상품 정보
              data_classification: non_personal
              fields:
                - name: id
                  type: string
              num_items: 120
              updated_at: '2026-08-04T12:00:00Z'
              links: {}
          next_cursor: null
          links: {}
        error: null
    Catalog:
      type: object
      required:
        - name
        - description
        - data_classification
        - fields
        - num_items
        - updated_at
        - links
      properties:
        name:
          type: string
        description:
          type: string
          nullable: true
        data_classification:
          type: string
          enum:
            - non_personal
          description: 비개인 참조 데이터만 지원합니다.
        fields:
          type: array
          items:
            $ref: '#/components/schemas/CatalogField'
        num_items:
          type: integer
          minimum: 0
        updated_at:
          type: string
          format: date-time
        links:
          $ref: '#/components/schemas/Links'
    Links:
      type: object
      additionalProperties:
        anyOf:
          - type: string
          - nullable: true
            enum:
              - null
    CatalogApiErrorResponse:
      type: object
      required:
        - data
        - error
      properties:
        data:
          nullable: true
          enum:
            - null
        error:
          $ref: '#/components/schemas/CatalogApiError'
      example:
        data: null
        error:
          code: INVALID_ARGUMENT
          message: Invalid bulk item request.
          details:
            - field: items[0].unknown_field
              path:
                - items
                - 0
                - unknown_field
              code: invalid-fields
              message: 'Unrecognized field: unknown_field.'
    CatalogField:
      oneOf:
        - type: object
          additionalProperties: false
          required:
            - name
            - type
          properties:
            name:
              type: string
              pattern: ^[A-Za-z0-9_-]+$
              maxLength: 250
              not:
                enum:
                  - __proto__
            type:
              enum:
                - string
        - type: object
          additionalProperties: false
          required:
            - name
            - type
          properties:
            name:
              type: string
              pattern: ^[A-Za-z0-9_-]+$
              maxLength: 250
              not:
                enum:
                  - __proto__
            type:
              enum:
                - number
        - type: object
          additionalProperties: false
          required:
            - name
            - type
          properties:
            name:
              type: string
              pattern: ^[A-Za-z0-9_-]+$
              maxLength: 250
              not:
                enum:
                  - __proto__
            type:
              enum:
                - boolean
        - type: object
          additionalProperties: false
          required:
            - name
            - type
          properties:
            name:
              type: string
              pattern: ^[A-Za-z0-9_-]+$
              maxLength: 250
              not:
                enum:
                  - __proto__
            type:
              enum:
                - time
        - type: object
          additionalProperties: false
          required:
            - name
            - type
          properties:
            name:
              type: string
              pattern: ^[A-Za-z0-9_-]+$
              maxLength: 250
              not:
                enum:
                  - __proto__
            type:
              enum:
                - array
        - type: object
          additionalProperties: false
          required:
            - name
            - type
          properties:
            name:
              type: string
              pattern: ^[A-Za-z0-9_-]+$
              maxLength: 250
              not:
                enum:
                  - __proto__
            type:
              enum:
                - object
        - type: object
          additionalProperties: false
          required:
            - name
            - type
          properties:
            name:
              type: string
              pattern: ^[A-Za-z0-9_-]+$
              maxLength: 250
              not:
                enum:
                  - __proto__
            type:
              enum:
                - geo
    CatalogApiError:
      type: object
      required:
        - code
        - message
      properties:
        code:
          type: string
        message:
          type: string
        details:
          type: array
          description: 입력 검증 오류가 발생한 필드와 경로를 제공합니다. 클라이언트에서 message 문자열을 해석하지 마세요.
          items:
            $ref: '#/components/schemas/CatalogApiValidationErrorDetail'
      additionalProperties: true
    CatalogApiValidationErrorDetail:
      type: object
      description: >-
        입력 검증 오류 한 건입니다. `field`는 사람이 읽는 점·대괄호 경로이고 `path`는 같은 위치를 문자열·숫자 배열로
        나타냅니다.
      required:
        - field
        - path
        - code
        - message
      properties:
        field:
          type: string
          description: '점·대괄호로 표현한 필드 경로입니다. 예: items[0].price'
        path:
          type: array
          description: 필드 경로를 문자열·숫자 segment로 나눈 배열입니다.
          items:
            anyOf:
              - type: string
              - type: integer
        code:
          type: string
          description: 입력이 거절된 이유를 나타내는 코드입니다.
        message:
          type: string
          description: 사람이 읽을 수 있는 검증 오류 메시지입니다.
      additionalProperties: false
  responses:
    CatalogBadRequest:
      description: Invalid Catalog request.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/CatalogApiErrorResponse'
    CatalogUnauthenticated:
      description: Authentication required.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/CatalogApiErrorResponse'
    CatalogPermissionDenied:
      description: Project access denied.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/CatalogApiErrorResponse'
    CatalogNotFound:
      description: Catalog resource not found.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/CatalogApiErrorResponse'
    CatalogPayloadTooLarge:
      description: JSON body exceeds 4 MiB.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/CatalogApiErrorResponse'
    CatalogInternalServerError:
      description: Internal server error.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/CatalogApiErrorResponse'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: POST /authenticate로 발급받은 인증 토큰을 Bearer 형식으로 전달합니다.

````