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

# Get a coaching catalogue directory

> Reads one catalogue directory in full: its settings, its custom Markdown page (`content_md`), the sub-directories it nests, and the coaching sessions its `tags_interview_set_filter` currently matches. Read a directory before updating it — `content_md`, `tags_sub` and `tags_interview_set_filter` are replaced wholesale by catalogue-tag-update, so you need the current value to extend rather than overwrite it.



## OpenAPI

````yaml https://cool.jobmojito.com/functions/v1/openapi get /catalogue-tag-get
openapi: 3.1.0
info:
  title: JobMojito API
  version: 1.0.0
  description: >-
    Public API for JobMojito, served by Supabase Edge Functions. Authenticate
    with a Supabase JWT access token via the Authorization header.
servers:
  - url: https://cool.jobmojito.com/functions/v1
    description: Production
security: []
tags:
  - name: Interviews
    description: >-
      Create, configure and manage interview / coaching / assessment
      definitions.
  - name: Coaching catalogue
    description: >-
      Directories (pages) of the coaching portal catalogue that group coaching
      sessions and carry custom content pages.
  - name: Results
    description: >-
      Interview results, transcripts, reports, re-attempt requests and
      analytics.
  - name: Candidates
    description: List and manage candidates.
  - name: Knowledge base
    description: Upload documents used to generate knowledge-base interviews.
  - name: Resume & Form verification
    description: Pre-screen candidates from resumes and forms.
  - name: Admin
    description: >-
      Account administration — invite team/coaching users, manage sub-merchants
      and avatar templates.
paths:
  /catalogue-tag-get:
    get:
      tags:
        - Coaching catalogue
      summary: Get a coaching catalogue directory
      description: >-
        Reads one catalogue directory in full: its settings, its custom Markdown
        page (`content_md`), the sub-directories it nests, and the coaching
        sessions its `tags_interview_set_filter` currently matches. Read a
        directory before updating it — `content_md`, `tags_sub` and
        `tags_interview_set_filter` are replaced wholesale by
        catalogue-tag-update, so you need the current value to extend rather
        than overwrite it.
      parameters:
        - schema:
            type: string
            minLength: 1
            description: Id of the catalogue directory to read (the catalogue URL segment).
            example: sales-coaching-en
          required: true
          name: id
          in: query
        - schema:
            type: string
            format: uuid
            description: >-
              Optional merchant to scope to. Admins and sub-merchant operators
              only; other callers always use their token's merchant.
            example: 28106cba-1c27-4e53-b149-32113e5e8e31
          required: false
          name: merchant_id
          in: query
      responses:
        '200':
          description: The resolved catalogue directory.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CatalogueTagGetResponse'
        '401':
          description: Missing or invalid access token.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Caller is not permitted to read this merchant.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: No directory with this id (or hidden by row-level security).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '422':
          description: Validation error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Server error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
        - bearerAuth: []
components:
  schemas:
    CatalogueTagGetResponse:
      type: object
      properties:
        id:
          type: string
          description: Directory id — also the catalogue URL segment.
          example: sales-coaching-en
        name:
          type: string
          nullable: true
          description: Display name.
        description:
          type: string
          nullable: true
          description: Short description shown on the directory card.
        mojito_language_code:
          type: string
          nullable: true
          description: Directory language.
          example: en
        visibility:
          type: string
          nullable: true
          description: Who can see it.
        status:
          type: string
          nullable: true
          description: Lifecycle status.
        coach_plan:
          type: string
          nullable: true
          description: Coaching-plan stage, when the directory belongs to one.
        cover_image_url:
          type: string
          nullable: true
          description: Cover image URL.
        merchant_id:
          type: string
          nullable: true
          description: Owning merchant id. Null for a platform-wide directory.
        tags_sub:
          type: array
          nullable: true
          items:
            type: string
          description: >-
            Ids of the directories nested under this one, in display order.
            Replaces the whole list — send the full set, not just the additions.
            A referenced directory only appears if it exists and is visible to
            the viewer.
          example:
            - sales-coaching-objections-en
            - sales-coaching-closing-en
        tags_interview_set_filter:
          type: array
          nullable: true
          items:
            type: string
          description: >-
            Tag filter selecting which coaching sessions this directory lists: a
            session appears when its own `tags` contain EVERY tag here (an AND,
            not an OR). Only `active` coaching/persona sessions with visibility
            `public` or `merchant_public` are listed. Set the matching tags on
            the session with the create-interview / job-interview-update `tags`
            field.
          example:
            - sales
            - objection-handling
        content_md:
          type: string
          nullable: true
          description: >-
            Markdown for a custom directory page. When set (even as an empty
            string) the markdown replaces the default grid and decides the
            layout itself; null renders the plain grid of sub-directories and
            sessions. Alongside normal Markdown you can place these directives,
            each ALONE on its own line: `[plan-progress]` (the learner's
            coaching-plan progress), `[directory:<tag-id>]` (a card for one
            sub-directory), `[session:<interview-id>]` (a card for one session),
            `[sessions]` (every session in this directory), `[sessions:<term>]`
            (sessions matching a term), `[sessions:filter=<term>,limit=<n>]` (a
            filtered, capped list). A directive on a line with other text is
            rendered as ordinary text.
          example: |
            ## Sales coaching

            Pick a session to practise with.

            [sessions:filter=objection-handling,limit=6]
        created_at:
          type: string
          nullable: true
          description: Creation timestamp (ISO 8601).
        updated_at:
          type: string
          nullable: true
          description: Last update timestamp (ISO 8601).
        catalogue_url:
          type: string
          nullable: true
          description: >-
            Public URL of this directory page, when the merchant has a
            coaching-portal domain configured.
          example: https://coaching.example.com/catalogue/sales-coaching-en
        is_start_directory:
          type: boolean
          description: True when this is the directory the merchant's catalogue opens on.
        sub_directories:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
                description: Sub-directory id.
              name:
                type: string
                nullable: true
                description: Display name.
              description:
                type: string
                nullable: true
                description: Short description.
              status:
                type: string
                nullable: true
                description: Lifecycle status.
              visibility:
                type: string
                nullable: true
                description: Visibility.
              mojito_language_code:
                type: string
                nullable: true
                description: Directory language.
            required:
              - id
              - name
              - description
              - status
              - visibility
              - mojito_language_code
            additionalProperties:
              nullable: true
          description: >-
            The directories listed in `tags_sub`, resolved and in display order.
            An id in `tags_sub` that does not resolve (deleted, or not visible
            to you) is simply absent here — compare the two to spot a broken
            link.
        matched_sessions:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
                description: Interview definition id of the coaching/persona session.
              name:
                type: string
                nullable: true
                description: Session name.
              type:
                type: string
                nullable: true
                description: Product type — `coaching` or `persona`.
              type_avatar:
                type: string
                nullable: true
                description: Avatar/voice modality of the session.
              status:
                type: string
                nullable: true
                description: >-
                  Lifecycle status (always `active` here — nothing else is
                  listed).
              visibility:
                type: string
                nullable: true
                description: Visibility.
              type_credit:
                type: string
                nullable: true
                description: Credit bucket the session draws from.
              tags:
                type: array
                nullable: true
                items:
                  type: string
                description: >-
                  The session's own tags — the superset that matched this
                  directory's filter.
            required:
              - id
              - name
              - type
              - type_avatar
              - status
              - visibility
              - type_credit
              - tags
            additionalProperties:
              nullable: true
          description: >-
            The coaching/persona sessions this directory currently lists,
            applying the same rules as the live portal: `active`, type
            `coaching` or `persona`, visibility `public` or `merchant_public`
            for this merchant, and `tags` containing every tag of
            `tags_interview_set_filter`. Empty when the filter is null. Capped
            at 200.
        matched_sessions_truncated:
          type: boolean
          description: >-
            True when more sessions match than the 200 returned — narrow
            `tags_interview_set_filter` if you see this.
      required:
        - id
        - name
        - description
        - mojito_language_code
        - visibility
        - status
        - coach_plan
        - cover_image_url
        - merchant_id
        - tags_sub
        - tags_interview_set_filter
        - content_md
        - created_at
        - updated_at
        - catalogue_url
        - is_start_directory
        - sub_directories
        - matched_sessions
        - matched_sessions_truncated
      description: >-
        One catalogue directory with its content page, sub-directories and
        matched sessions.
    Error:
      type: object
      properties:
        error:
          type: string
          example: Field is required.
        name:
          type: string
          example: interview_result_id
      required:
        - error
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: 'Supabase JWT — `Authorization: Bearer <token>`.'

````