Skip to main content
GET
Get a coaching catalogue directory

Authorizations

Authorization
string
header
required

Supabase JWT — Authorization: Bearer <token>.

Query Parameters

id
string
required

Id of the catalogue directory to read (the catalogue URL segment).

Minimum string length: 1
Example:

"sales-coaching-en"

merchant_id
string<uuid>

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"

Response

The resolved catalogue directory.

One catalogue directory with its content page, sub-directories and matched sessions.

id
string
required

Directory id — also the catalogue URL segment.

Example:

"sales-coaching-en"

name
string | null
required

Display name.

description
string | null
required

Short description shown on the directory card.

mojito_language_code
string | null
required

Directory language.

Example:

"en"

visibility
string | null
required

Who can see it.

status
string | null
required

Lifecycle status.

coach_plan
string | null
required

Coaching-plan stage, when the directory belongs to one.

cover_image_url
string | null
required

Cover image URL.

merchant_id
string | null
required

Owning merchant id. Null for a platform-wide directory.

tags_sub
string[] | null
required

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:
tags_interview_set_filter
string[] | null
required

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:
content_md
string | null
required

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\n\nPick a session to practise with.\n\n[sessions:filter=objection-handling,limit=6]\n"

created_at
string | null
required

Creation timestamp (ISO 8601).

updated_at
string | null
required

Last update timestamp (ISO 8601).

catalogue_url
string | null
required

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
boolean
required

True when this is the directory the merchant's catalogue opens on.

sub_directories
object[]
required

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
object[]
required

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
boolean
required

True when more sessions match than the 200 returned — narrow tags_interview_set_filter if you see this.