Skip to main content
The coaching catalogue is what a learner browses on the coaching portal. It is a tree of directories; each directory is one page at /catalogue/<id> on your coaching domain, and it can hold two things:
  • Sub-directories — listed explicitly in the directory’s tags_sub.
  • Coaching sessions — not listed explicitly. A session appears because its own tags match the directory’s tags_interview_set_filter.
That indirection is the whole design: you tag a session once, and it shows up in every directory whose filter it satisfies. Nothing has to be re-linked when you add a session.
Coaching-platform feature. Directories only render on a coaching portal; they have no effect on the recruiting/interview portal.

The mental model

Every directory can carry several languages. Its top-level fields are its default language (mojito_language_code); translations holds the others, each a page of its own. See Several languages in one directory.

How a session gets into a directory

A session is listed when all of these are true:
The tag filter is an AND, not an OR. A directory filtering on ["sales", "objection-handling"] lists only sessions carrying both tags. A session may carry extra tags — that is what lets one session appear in several directories.
Two edge cases are worth knowing:
  • tags_interview_set_filter: [] (empty array) matches every tagged session — a useful “everything” directory, and an easy accident.
  • tags_interview_set_filter: null matches nothing. A brand-new directory created without the field lists no sessions until you set it.

Walkthrough

1

See what already exists

Start from the root and walk down, rather than guessing ids.
include_public=true (the default) also returns the platform-wide directories shared across merchants. Set it to false to see only your own. mojito_language_code matches a directory’s default language or any of its language versions; each row’s languages lists them, default first.
2

Create the directory

The id is the URL segment and the value other directories reference in their tags_sub. Use lowercase letters, digits and single -/_ separators. A directory that will hold several languages is better named without a language suffix (sales-coaching, not sales-coaching-en): the same address serves every language. The API cannot change an id afterwards; a merchant can, in the admin catalogue editor (see Gotchas).
parent_tag appends the new id to that directory’s tags_sub, so the page is reachable immediately. Omit it and the directory exists but is only reachable by direct link until you add it to a parent.The response returns catalogue_url — the live page — when your merchant has a coaching domain configured.
3

Tag the sessions

A new session takes its tags on create. All three creation endpoints accept tags:
An existing session is re-tagged with update_interview. tags is replaced wholesale, so read the current value first and send the extended list:
persona-create defaults to portal: "coaching", which is the variant that belongs in a catalogue. A persona created with portal: "interview" is stored as persona_interview and is never listed in the catalogue — it goes through the recruiting invitation flow instead. See Create an interview.
4

Verify the mapping

Do not assume the tags matched. get_catalogue_directory returns the sessions the directory actually lists, applying exactly the rules the live portal applies:
An empty matched_sessions almost always means one of four things: the session is still draft, its visibility is merchant_invite/merchant_unlisted, its type is not coaching/persona, or its tags are missing one of the filter’s tags.
5

Author a custom page (optional)

By default a directory renders as a plain grid: sub-directories, then sessions. Set content_md and your Markdown takes over the layout instead.
Directives must sit alone on their own line — one on a line with other text renders as ordinary text:
content_md is replaced wholesale. Read the current page with get_catalogue_directory and send the edited whole — not a fragment. Sending null removes the custom page and restores the default grid.
A directive can only show sessions the directory already lists. If [sessions:filter=…] renders nothing, check matched_sessions first — the filter narrows that set, it does not widen it.
content_md also renders chips, callouts, cards, columns and buttons on top of standard Markdown — see Format content with Markdown for the full vocabulary.

Several languages in one directory

One directory can be offered in several languages. Each language is a version with its own name, description, content_md, cover, sub-directories (tags_sub) and session filter (tags_interview_set_filter) — a page of its own, at the same address. The directory’s top-level fields are its default language (mojito_language_code); translations maps every other language to its version. A learner sees the version in the language they picked in the catalogue’s language switch (remembered across pages), else their portal language; when the directory lacks it, English, then the default. The switch appears only on directories with more than one language.
A coaching session itself has one language (its mojito_language_code). A “multilingual session” is therefore one session per language, gathered into one directory whose versions each list their own language’s sessions.
1

Create one session per language, with a language-specific tag

The filter is tags-only, so give each language’s sessions their own tag, e.g. sales-en and sales-sk, and set each session’s mojito_language_code.
2

Create the directory with all its languages at once

Top-level fields are the default language; each translations entry is another language’s version. name is required in every version; every other field is optional. A version without tags_interview_set_filter lists no sessions.
3

Add, replace or remove a language later

translations on update_catalogue_directory is a patch per language — unlike content_md or tags_sub, languages you do not send are kept. An object replaces that language’s version; null removes it.
A version is replaced whole: to change one field of it, read it from get_catalogue_directory → translations.<lang> and send the edited version. translations: null removes every version but the default.
4

Verify every language

get_catalogue_directory returns languages (default first) and translations. Its matched_sessions and sub_directories describe the default language; pass mojito_language_code to see them for another version:
viewed_language in the response says which version the lists belong to. A language the directory does not have answers 422, so a missing translation cannot pass for a working one.
Changing the default language. Send mojito_language_code on update_catalogue_directory. If the directory already has that language, its version becomes the default and the old default stays as a version. If it does not, the default version is simply relabelled. Top-level fields sent in the same request always describe the default after the change. Sub-directories and cards. A directory id is the same in every language, so tags_sub and [directory:<id>] cards name the same ids in each version; each card renders in the learner’s language.

Coaching plans

coach_plan marks a directory (or a session) as a stage of a guided plan — demo, screening, 2nd, 3rd, closing, job-specific, other. Learners then see their progress through those stages wherever a page carries the [plan-progress] directive. Leave it null for anything that is not part of a plan.

Gotchas

Next steps

Create an interview

Create the coaching sessions and role-play personas the catalogue lists.

Review results

Read transcripts and feedback once learners complete a session.