Skip to main content
POST
Update a coaching catalogue directory

Authorizations

Authorization
string
header
required

Supabase JWT — Authorization: Bearer <token>.

Body

application/json
id
string
required

Id of the directory to update (the catalogue URL segment). The id itself cannot be changed — create a new directory instead.

Minimum string length: 1
Pattern: ^[a-z0-9]+(?:(?:-|_)+[a-z0-9]+)*$
Example:

"sales-coaching-en"

name
string

Display name of the directory.

Minimum string length: 1
Example:

"Sales coaching"

description
string | null

Short description shown on the directory card.

mojito_language_code
enum<string> | null

Language of the directory (one of the platform-languages.json codes). The catalogue groups directories by language.

Available options:
ar,
bg,
zh,
hr,
cs,
da,
nl,
en,
fil,
fi,
fr,
de,
el,
hi,
hu,
id,
it,
ja,
ko,
ms,
no,
pl,
pt,
br,
ro,
ru,
sk,
es,
sv,
ta,
th,
tr,
uk,
vi
Example:

"en"

visibility
enum<string>

Who can see the catalogue directory. Options — public: Shared across every merchant. Platform admins only — a merchant caller is rejected by row-level security. | merchant_public: Listed in the merchant's own catalogue — the normal choice. | merchant_invite: Owned by the merchant but not listed; reachable only for invited users. | merchant_unlisted: Owned by the merchant but not listed; reachable only via a direct link..

Available options:
public,
merchant_public,
merchant_invite,
merchant_unlisted
Example:

"merchant_public"

status
enum<string>

Lifecycle status of the catalogue directory. Options — draft: Not published — the directory exists but is not served to visitors. | active: Published and served in the catalogue. | archived: Retired — kept for reference but no longer served..

Available options:
draft,
active,
archived
Example:

"active"

cover_image_url
string | null

Cover image URL shown on the directory card. null clears it.

coach_plan
enum<string> | null

Coaching-plan stage this item belongs to, used by the coaching-plan progress view. Omit/null to leave it out of any plan. Options — demo: Demo session. | screening: Screening-interview practice. | 2nd: Second-interview practice. | 3rd: Third-interview practice. | closing: Closing / salary-negotiation practice. | job-specific: Job-specific coaching. | other: Anything that does not fit the other buckets..

Available options:
demo,
screening,
2nd,
3rd,
closing,
job-specific,
other
Example:

"screening"

tags_sub
string[] | null

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

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

Markdown for the custom directory page. Sending null removes the custom page and restores the default grid; sending a string replaces the whole page. Directives, each ALONE on its own line: [plan-progress], [directory:<tag-id>], [session:<interview-id>], [sessions], [sessions:<term>], [sessions:filter=<term>,limit=<n>].

Example:

"## Sales coaching\n\nPick a session to practise with.\n\n[sessions:filter=objection-handling,limit=6]\n"

Response

Directory updated.

Confirmation of what was updated.

id
string
required

Id of the updated directory.

Example:

"sales-coaching-en"

updated_fields
string[]
required

Names of the fields that were written.

Example:
catalogue_url
string | null
required

Public URL of the directory page, when the merchant has a coaching-portal domain configured. Null otherwise.

Example:

"https://coaching.example.com/catalogue/sales-coaching-en"