Skip to content

Tools reference

Once connected, your assistant has the tools below. They map directly to the REST API, so the responses and the permission rules are identical. Everything is read-only except the tools under “Changing announcements”, which need a connection granted the announcement:write scope, the tools that add documents and YouTube videos, which need content:write, the tools under “Assigning training”, which need training:assign, the tools under “Authoring lessons”, which need lesson:write, the tools under “Managing content”, which need content:manage, the tools under “Deleting content”, which need content:delete, create_issue, which needs issue:write, the tools under “Deciding a content review”, which need content-review:write, the tools under “Public links”, which need public-link:write, the tools under “Deciding issues”, which need issue:manage, the tools under “Managing people”, which need member:manage, the tools under “Managing teams”, which need team:manage, and the tools under “Managing company roles”, which need company-role:manage, and the tools under “Managing duties”, which need duty:manage, and the tools under “Managing a role’s curriculum”, which need curriculum:manage, and the tools under “What an external role can read”, which need content-grant:manage, and the tools under “Retiring a topic”, which need topic:retire, and the tools under “Retiring an item”, which need item:retire, and the tools under “Proposing a plan”, which need plan:propose, and get_client_terms and create_client, which need client:create.

Search the organization’s business knowledge base (processes, policies, facts, and source documents and transcripts). This is usually the first tool to call: it returns type-tagged results with snippets, relevance scores, and web links.

Input Type Notes
query string Natural-language search query. Required.
types string[] Restrict to topic and/or chapter. Defaults to all.
limit number Max results, 1–50. Default 10.

List the knowledge graph’s topics, in alphabetical order by name, optionally restricted to one category. Use it to browse or enumerate topics. search_mereon finds a topic by what it is about, and list_spaces shows how topics are grouped. Each topic gives its name, category and link. Read one in full with get_topic, find who owns it with get_duties, and list its items with get_topic_items.

Input Type Notes
categorySlug string Restrict to one category, e.g. operations, hr, finance. An unrecognized slug is an error rather than a silent match-everything.
filter string A stewardship worklist instead of every topic: no-owner (no one is Responsible for the topic itself), no-verification-interval (no review cadence set), or verification-overdue (the next review date has passed). An unknown value is an error.
cursor string Pagination cursor from a previous response. It is the id of the last topic returned.
limit number Max topics, 1–100. Default 50.

Fetch a knowledge topic by id: its description, category, the items under it (processes, policies, facts), and related topics. Use after search_mereon to read a topic in full.

Input Type Notes
topicId string Topic id from search results or related topics. Required.

List the items (processes, policies, facts) under a topic, as a nested tree. Use it after get_topic or list_topics surfaces a topic id when you need every item rather than the summaries get_topic carries. Read one in full, with its evidence, using get_item.

Input Type Notes
topicId string Topic id from list_topics or search results. Required.

Fetch a single item (process, policy, or fact) by id, including its child items and the source evidence backing it: quotes, video timestamps, document ranges, and confidence, with links to the original content.

Input Type Notes
itemId string Item id from a topic’s items list. Required.

Fetch a single content resource by id: its title, type (document, video, audio, or guide), summary, duration (for video), and link. Use to look up a resource’s metadata once you have its id. For the full wording use get_content_text; to find a resource by title use list_content.

Input Type Notes
contentId string Content id from search results, list_content, or item evidence. Required.

Fetch the full text of a source document, or the transcript of a video, split into chapters. Use when search snippets are not enough and you need the original wording.

Input Type Notes
contentId string Content id from search results or item evidence. Required.

Get the timed transcript of a video or an audio recording: each spoken segment with its start and end in milliseconds, in order. Use it to cite where in a recording something is said, or to read an earlier version of it. A document or a guide has no timing, so read it with get_content_text.

It is the current version unless versionId names another, which has to belong to this resource. A version learners have not had (a completed one above the current version, a draft, or a processing or failed one) is an editor’s working copy and is shown only to someone who may edit the resource.

Input Type Notes
contentId string Content id of a video or an audio recording. Required.
versionId string A version id from list_content_versions. Defaults to the current version.

List a resource’s versions, newest first: which one learners see now, which it replaced, who published each, and what the publisher said should happen to learners already enrolled (retrainingIntent: none, full_retake or changed_material). Use it to answer “when did this change” and “did that update retrain people”.

Anyone who can read the resource sees its released versions: the current one and the completed ones it replaced. A completed version above the current one (a publish not yet live, or one a rollback moved away from), a draft, or a processing or failed version is an editor’s working copy and is shown only to someone who may edit the resource. Not paginated.

Input Type Notes
contentId string Content id, from list_content or search results. Required.

Find who is Responsible, Accountable, Consulted, or Informed for a topic, item, space, or category, including duties inherited from parent entities. Answers “who owns this process” and “who should I ask about this”. Each duty says whether a person set it or the system suggested it (source, confidence).

Input Type Notes
entityType string One of TOPIC, ITEM, SPACE, CATEGORY. Required.
entityId string The entity id. Required.

create_duty, change_duty and delete_duty assign, change, or remove who is Responsible, Accountable, Consulted, or Informed for a topic, item, space, or category. They need a connection granted the duty:manage scope, and the person behind it must be allowed to assign, change, or remove that duty, which owners and admins are, checked on every call. See Duties for the full rules.

Call one only when the person has agreed. A duty assigned here is recorded as set by a person. For a person, actorId is their login from find_people, or the organization’s record of them from a duty you already read. Leave actorId out for an organization-wide duty. Copying duties down to child topics, and handing one role’s duties to another role, stay in the app.

Each call is limited to 10 a minute and 60 an hour, and each is recorded in the audit log.

Assign who is Responsible, Accountable, Consulted, or Informed for a topic, item, space, or category. The duty is recorded as set by a person. Returns the duty. Needs permission to assign duties.

Input Type Notes
actorType string ROLE, TEAM, INDIVIDUAL, THIRD_PARTY, ORGANIZATION, or ROLE_KIND. Required.
actorId string Who holds the duty. Leave it out for ORGANIZATION. INTERNAL or EXTERNAL for ROLE_KIND.
entityType string TOPIC, ITEM, SPACE, or CATEGORY. Required.
entityId string The topic, item, space, or category. Required.
role string RESPONSIBLE, ACCOUNTABLE, CONSULTED, or INFORMED. Required.
tierQualifier string ALL, MIN, MAX, or EXACT. Only a company role may set this.
advancementTierId string | null The tier a MIN, MAX, or EXACT duty is bound to. Omit it for ALL.

Change a duty’s level, its learning priority, or how far a company role’s duty reaches on its advancement path. Send at least one of role, learningPriorityOverride, tierQualifier, and advancementTierId. The actor and the entity stay as they are. Returns the duty. Needs permission to change that duty.

Input Type Notes
dutyId string From create_duty, or assignmentId on get_duties. Required.
role string RESPONSIBLE, ACCOUNTABLE, CONSULTED, or INFORMED. Optional.
learningPriorityOverride string | null CRITICAL, HIGH, MEDIUM, or LOW. null clears it so the topic’s priority applies.
tierQualifier string ALL, MIN, MAX, or EXACT. Only a duty held by a company role may set this.
advancementTierId string | null The tier a MIN, MAX, or EXACT duty is bound to. Omit it for ALL.

Remove a duty. Returns the duty that was removed. Needs permission to remove that duty.

Input Type Notes
dutyId string From create_duty, or assignmentId on get_duties. Required.

List the organization’s data-quality issues (conflicts, duplicates, content and structure gaps, stale or misclassified knowledge), most recent first.

Input Type Notes
status string OPEN, IN_PROGRESS, RESOLVED, or DISMISSED.
type string CONFLICT, DUPLICATE, MISCLASSIFICATION, STALE, CONTENT_GAP, STRUCTURE_GAP, OTHER, UPDATE_HELD (an update to a resource held because it would remove too much), or RETIRED_ITEM_REAPPEARED (an item someone retired that a new version of its source says again).
severity string CRITICAL, HIGH, MEDIUM, or LOW.
assignedToMe boolean Only issues assigned to the connected user, either directly or through a role they currently hold.
targetType string TOPIC, ITEM, SPACE, or CATEGORY. Use it with targetId.
targetId string Only issues that concern the topic, item, space, or category with this id.
search string Text to find in the title, the description, or a target’s title. The whole text has to appear, in that order, and case does not matter.
cursor string Pagination cursor from a previous response.
limit number Max issues, 1–100. Default 50.

The response is { issues, nextCursor }, the same shape as the other paged lists. Each issue says what raised it (trigger), and you pass nextCursor back as cursor to read the next page. Earlier versions returned the issues as a bare list with no way to reach a second page, so a client that read that list directly needs to read issues instead.

List the topics a resource contributed knowledge to, with how many items came from it. Use to answer “what did we learn from this document” without reading the whole text.

Latest-only: archived and superseded records are excluded, so this is what the resource currently supports.

Input Type Notes
contentId string Content id, from search results or list_content.

List what depends on a resource: the lessons that teach it, and the topics it is the only evidence for. Use before suggesting a change to a document — the sole-evidence topics are the ones that would lose their basis without it.

Lessons are limited to the ones you can see, and only lessons still teaching are counted: a withdrawn one is not. An external account is refused. Each list carries a true count plus a preview of at most 20 entries.

Input Type Notes
contentId string Content id, from search results or list_content.

List the external organizations that hold duties in this knowledge base — vendors, contractors, regulators. They own areas of the work alongside internal roles.

Takes no inputs.

Read one third party. For what it answers for, use list_third_party_duties.

Input Type Notes
thirdPartyId string Third party id, from list_third_parties.

List everything a third party answers for: each topic, item, space, or category it holds a duty on, the level, and whether the duty is inherited from an ancestor rather than assigned directly. Each duty also says whether a person set it or the system suggested it (source, with a confidence for a suggestion).

This is the holder’s side of get_duties, which instead names who owns a given topic. Limited to entities you can read, and needs raci-assignment.read as get_duties does.

Input Type Notes
thirdPartyId string Third party id, from list_third_parties.
entityType string Restrict to TOPIC, ITEM, SPACE or CATEGORY.
cursor string Pagination cursor from a previous response.
limit number Rows per page, 1–100. Default 50.

List everything a role answers for, in the same shape as list_third_party_duties, and with the same raci-assignment.read requirement. Each row also carries how far the duty reaches across the role’s advancement path, so a duty covering only senior levels is distinguishable from one covering the whole role.

A duty on a topic inherits down to every item on that topic, so an unfiltered list is mostly item rows. Pass entityType: "TOPIC" for the summary a person would recognize.

Input Type Notes
companyRoleId string Company role id, from list_company_roles.
entityType string Restrict to TOPIC, ITEM, SPACE or CATEGORY.
cursor string Pagination cursor from a previous response.
limit number Rows per page, 1–100. Default 50.

List the organization’s categories, with the titles and descriptions it uses itself. Categories are the top of the structure — a category holds spaces, a space holds topics, a topic holds items — so start here when you do not know where a subject lives.

Takes no inputs.

Read one data-quality issue in full. Each target carries the affected content itself (an item target’s block type and text), so you can explain what conflicts, duplicates, or is stale rather than only naming it. Closed issues carry the resolution strategy.

Input Type Notes
issueId string Issue id, from list_issues.

Each target carries its own id.

Read what the AI knowledge review has already looked at for an issue: each pass with its status, the searches it ran, whether it decided the knowledge base already covers the topic, and its summary. Use it before looking into an issue yourself, so you do not repeat what has been checked. Newest first.

Visible to whoever can read the issue.

Input Type Notes
issueId string Issue id, from list_issues. Required.

List the spaces the organization’s knowledge is grouped into. A category holds spaces, a space holds topics, so this is how to see the shape of the graph before drilling into it.

Input Type Notes
categorySlug string Restrict to one category, e.g. operations, hr, finance. An unrecognized slug is an error rather than a silent match-everything.

Read one space and the topics it groups. Topics are limited to those you can see, and to the current graph (nothing archived or superseded).

Input Type Notes
spaceId string Space id, from list_spaces.

List viewable content resources (documents, videos, audio, and guides), most recent first. Use to find a specific resource by name or browse a type. For questions about what the content says, use search_mereon instead.

Input Type Notes
query string Title keywords. Every word must appear in the title, any order, case-insensitive.
type string Restrict to one of document, video, audio, guide.
tags string[] Tag names from list_tags. A resource must carry every one. An invalid name is an error, and an external account may not filter by tag.
teamId string Content everyone can read, or that is shared to this team, an id from list_teams.
readyOnly boolean Only resources that are processed and indexed.
cursor string Pagination cursor from a previous response.
limit number Max resources, 1–100. Default 50.

Each resource says who can read it (visibility, teams), its tags, who uploaded it, and whether it is ready to teach from. A contribution still waiting in the review queue is not listed, whoever is asking.

List the organization’s tags by name. They are the vocabulary list_content filters by and each resource’s tags are drawn from, so call this to learn which tags exist before filtering. An external account is refused. No inputs.

List lessons in the catalog (authored training units), most recent first. For the raw source videos and documents use list_content; for what the material says use search_mereon.

Input Type Notes
query string Text to find in the lesson title, case-insensitively.
tags string[] Tag names from list_tags. A lesson must carry every one. An invalid name is an error.
teamId string Lessons shared to this team, an id from list_teams. It has to be your team unless you can read the whole organization.
includeClosed boolean true to include closed lessons, for finding one to reopen. Leave it out when choosing a lesson to assign or share.
cursor string Pagination cursor from a previous response.
limit number Max lessons, 1–100. Default 50.

Each lesson says how thorough the teaching is, who it is shared with and its tags. Someone who manages lessons across the organization also sees how many people are enrolled (stats). It needs access to lessons, which an external account does not have.

Fetch one lesson in detail: its metadata, who it is shared with, its tags and the source content pieces it teaches, in order, limited to the ones you can read. stats (how many people are enrolled, in progress and finished) is shown only to someone who may manage the lesson. A withdrawn lesson reports status CLOSED, and closedByRetirement when it closed because its topic was retired. A lesson made for one learner or from a review is not in the catalog and is not found.

Input Type Notes
lessonId string The lesson id. Required.

List the topics a lesson covers, in the order it teaches them, each with whether the author picked it (EXPLICIT) or it follows from the resources they picked (DERIVED). Only live topics you can read are listed, so a lesson closed because its topic was retired covers nothing. Each is a name and a link; read its items with get_topic_items. Not paginated.

Input Type Notes
lessonId string The lesson id, from list_lessons. Required.

Get how often people who finished a lesson are asked to take it again: none or recurring with an interval in days, and whether that means the whole lesson (full_retake) or what changed (changed_material). policy is null when none was set, which is not the same as no retraining: the organization’s default applies, and a company role’s curriculum can override either, which get_company_role reports as the item’s retrainingOverride. Needs access to enrollments, and the lesson has to be one you can see.

Input Type Notes
lessonId string The lesson id, from list_lessons. Required.

List the organization’s company roles (named org-chart positions), sorted alphabetically by name. Each result carries how many people hold the role and the role it reports to. Available only when the connected user can read the org chart.

Input Type Notes
query string Case-insensitive match on the role name.
cursor string Pagination cursor from a previous response.
limit number Max roles, 1–100. Default 50.

Fetch one company role in detail: its reporting parent and member count, its training curriculum (the lessons and topics everyone in the role must complete), and its current members.

Input Type Notes
companyRoleId string The company role id. Required.

List content-review requests — proposed content and issue-resolutions awaiting (or past) review. A reviewer sees the whole organization’s queue; everyone else sees only their own submissions (pass mine=true to force that). Requires content-review read access.

Input Type Notes
status string PENDING, APPROVED, REJECTED, CHANGES_REQUESTED, CANCELED, or SUPERSEDED.
resourceType string document, video, audio, or guide.
kind string content, content-resolves-issue, or issue-only.
submitterId string Reviewers only: restrict to one submitter.
mine boolean Only the connected user’s own submissions.
cursor string Pagination cursor from a previous response.
limit number Max requests, default 50 (max 100).

Get what approving a content-review request would do to the knowledge base before anyone decides: the topics and claims it would add, change or retire. state says whether there is a plan to read: not-requested, working (waiting will help), failed (waiting will not), or ready, and only ready carries a plan, which may still propose no changes. Use it to judge a proposal by its effect and not only its wording.

A reviewer can read any request in the org; everyone else only their own. Requires content-review read access.

Input Type Notes
requestId string The content-review request id, from list_content_review_requests. Required.

Fetch one content-review request by id: its workflow state, the content or issue it concerns, the submitter and reviewer, and any notes. A reviewer can read any request in the org; everyone else only their own.

Input Type Notes
requestId string The content-review request id. Required.

Get the organization’s knowledge-base maturity: its level (UNDOCUMENTED → OPTIMIZED), the signals behind it (topic ownership, structured content, verification cadence, category coverage, open issues), and ranked recommendations for what to improve next. Readable by any member who can read the organization.

Input Type Notes
categorySlug string Scope to one category (e.g. operations, hr). Omit for org-wide maturity.

List every category (always 14) with its maturity level, or null when the category has too few topics to score. The “which areas are weakest” overview. Readable by any member who can read the organization. No inputs.

Find members of the organization by name or email, and get the id a write needs. The person to tell in add_announcement_audience (actorType INDIVIDUAL) is named by the id this returns. Each match is an id, a name and an email. It includes members who hold no role and are on no team, which the org chart and team rosters leave out. An admin sees everyone, and a team-scoped user sees their teams.

Input Type Notes
query string Matches anywhere in the name or email, case-insensitively.
limit integer At most this many people, 1 to 50. Defaults to 25. There is no cursor, so narrow with query.

List the organization’s teams and their current members, and get the id a write needs. The team to tell in add_announcement_audience (actorType TEAM) is named by the id this returns. Each member is an id, a name and an email. An organization admin sees every team, a team admin sees their own, and anyone else sees none. Not paginated. No inputs.

List the organization’s people, as the members page does: each person’s role, whether they are active or have left, their teams and company roles and, for an organization admin, who they report to. Active people unless status says otherwise, ordered by name, with a total. Use it to answer “who is on the team”, “who holds this company role”, or “who has left”, or to find the id get_member and get_user_progress take. To find one person by name, find_people is cheaper.

An owner, admin or billing admin reads everyone. Anyone else is shown only themself, and an external account is refused. noManager and the organization-only fields are for an organization admin. Limited to 30 calls a minute.

Input Type Notes
query string Text to find in the name or email. The whole text has to appear in one of them, and case does not matter.
status string active (the default), deactivated, or all.
teamId string Only members of this team, an id from list_teams.
noManager boolean Only people with no manager. Organization admins only.
cursor string Pagination cursor from a previous response.
limit number Max members, 1–100. Default 50.

Get one person in the organization, at any status: their role, teams, company roles and, for an organization admin, their manager, phone and when they left. An owner, admin or billing admin may open anyone with a record here. A manager may open someone who reports to them, without those organization-admin fields. Anyone else may open only themself and is told anyone else was not found, which is also the answer for an id from another organization. An external account is refused.

Input Type Notes
memberId string The person’s user id, from list_members or find_people. Required.

List the invitations that have been sent and not yet accepted, newest first, with the role each person will have when they accept. Expired invitations are included and marked. Use it to answer “who have we invited but not heard from”. An invitation has no id here, because the id is what its public accept page is addressed by. Organization admins only. No inputs.

List each person with how much training they have: their lesson enrollments, pop quizzes and last review, as the progress page does. People who have left are included, because this is a record of who was trained, and someone loaded in bulk who has never signed in is not listed until they do. For how one person is doing, with completion and overdue counts, use get_user_progress.

An organization admin sees every row. Anyone else sees their own, and an external account is refused. Limited to 30 calls a minute.

Input Type Notes
query string Text to find in the name or email. The whole text has to appear in one of them, and case does not matter.
teamId string Only members of this team, an id from list_teams.
cursor string Pagination cursor from a previous response.
limit number Max people, 1–100. Default 50.

List each person and the manager they have been given. This is the reporting line, not the role tree: two people who share a title are not each other’s managers. reportsTo is null for someone with no manager, a manager who has left is still named with their status, and a manager the organization records without an account has a null id and name. Use noManager for “who has no manager”, and get_org_chart for the chart of roles.

Organization admins only. Limited to 30 calls a minute.

Input Type Notes
status string active (the default), deactivated, or all.
noManager boolean Only people with no manager.
cursor string Pagination cursor from a previous response.
limit number Max people, 1–100. Default 50.

Describe this connection: the person it acts as, their organization with its time zone, the token behind it and when it expires, the product features the organization has, and what the person may do. Use it to learn what you can and cannot do before trying, and the organization’s time zone to read a date it means as local. The time zone is null when the organization has not set one. No inputs.

List what the organization has told Mereon to treat as true about itself, newest first: facts an admin wrote and ones the system recorded from the organization’s website or a research conversation. The AI features read them as established fact, so this is where to look when an answer assumes something about the organization. Each says whether a person or the system wrote it; who wrote it is not returned.

Needs the access an organization admin has (owners, admins and billing admins); anyone else is refused.

Input Type Notes
cursor string Pagination cursor from a previous response.
limit number Max findings, 1–100. Default 50.

Get whether an admin has confirmed the org chart recently: never_verified, current, or reverification_due, when it was last confirmed and when the next confirmation is due. Confirmations are every 90 days. Use it for “is our org chart up to date”. Who confirmed it is not returned. Needs access to the org chart. No inputs.

Get the organization’s connection to its identity directory (SCIM): its status, when the directory last authenticated and last changed something, whether it paused itself and why, and how many people it has provisioned, updated, deactivated and skipped. eligible says whether the plan includes it; a lapsed organization can still read what the directory did. The token is not returned, not even its display prefix. Needs the access an organization admin has; anyone else is refused. No inputs.

List what the identity directory has done to the organization’s people, newest first: each operation, whether it was applied, skipped, rejected or failed, and why, with the address the directory’s request named. Use it to answer “why was she not provisioned” or “what failed overnight”. The sentence the app prints, the directory’s own id for the person and the employee record are left out. Pass the cursor from the last response to read the next page. Needs the access an organization admin has; anyone else is refused.

Input Type Notes
outcome string Only events with this outcome: APPLIED, SKIPPED, REJECTED, or FAILED.
cursor string The cursor from the previous response.
limit number Max events, 1–100. Default 50.

Get the organization chart: every position with the role it reports to, the people who currently hold it, and whether it is vacant. Someone who has left does not count as holding a role, so a seat only they held reads as vacant. Rebuild the tree from each role’s reportsToRoleId. Use it for “who holds this role?” and “which roles are unfilled?”. This is the chart of roles, and who answers to whom is a different question, which get_my_reporting_line answers for the connected user. Needs access to the org chart (company-role.read). Not paginated. No inputs.

Get the connected user’s place in the organization: the roles they hold, who they report to (at most one person), and who reports directly to them. People come from the manager each person has been given and not from the role tree, so two people who share a title are not each other’s managers. Only people who are currently employed are listed. Needs access to the org chart (company-role.read). No inputs.

Get another person’s training progress: the lessons they are enrolled in, each with completion and score, the obligations they have been assigned, each with a due date and whether it is overdue, and a roll-up count. Use it for “how is Maria doing on her training?”.

The rule is whatever the app applies to those two lists. You can read your own, an organization admin can read anyone’s, and a manager can read someone who reports to them. Anyone you may not read is reported as not found, as is a person from another organization. A person who has left is found, because the app keeps their record and an audit asks for it. For your own training, use list_my_enrollments and list_my_obligations.

Input Type Notes
userId string The person’s id, from find_people, list_teams or get_org_chart. Required.

Get the ranked list of topics a person should study next: why each is queued (NEW, PARTIAL, RETRAINING or DEEPEN), its priority, any due date and whether it is overdue, whether an unfinished prerequisite blocks it, and a lesson to start from. Use it for “what is Maria behind on?” or “who has overdue training?”. The result also names the person.

The rule is the one the app applies to a person’s learning queue. You can read your own, an organization admin can read anyone’s, and anyone else can read the people who report to them, directly or further down the org chart. The reporting line is the manager each person has been given, not the role tree. Anyone you may not read is reported as not found, as is a person from another organization. A person who has left has an empty queue. Topics are limited to what you can read, but lessons assigned to the person are listed by title either way. For your own queue, use get_my_learning_queue. It is worked out from scratch on every call, so it is limited to 20 calls a minute, and so is get_my_learning_queue.

Input Type Notes
userId string The person’s id, from find_people, list_teams or get_org_chart. Required.
cursor string Pagination cursor from a previous response.
limit number Max entries, 1–100. Default 50.

The tools below read the connected user’s own training. None of them takes a person as an input, so there is no way to use them to read a colleague’s record. They need only the read scope.

List the training the connected user has been assigned: lessons, topics and items, each with its due date, whether it is required, whether it is overdue, and whether it is still active or completed. Cancelled and waived obligations are administrative states and are not returned. Not paginated. No inputs.

List the lessons the connected user is enrolled in, newest first, each with whether it is completed or in progress, the score where one is recorded, and any due date. The id of an enrollment is what get_quiz_results takes. Not paginated. No inputs.

List the pop quizzes assigned to the connected user, each with its prompt, due date, and the connected user’s own status and score. It never shows how anyone else did. A pop quiz’s id is what get_pop_quiz takes. Not paginated. No inputs.

List the organization’s pop quizzes, newest first, each with who sent it, how many people it went to and how many have finished. Use it to find the id get_pop_quiz takes, which is how you read how each recipient did. It needs organization-wide access to pop quizzes, which owners, admins and billing admins have. Anyone else is refused, and list_my_pop_quizzes lists the ones sent to them. A pop quiz that certifies an announcement carries its announcementId.

Input Type Notes
sentByMe boolean Only the pop quizzes the connected user sent.
cursor string Pagination cursor from a previous response.
limit number Max pop quizzes, 1–100. Default 50.

Get the ranked list of topics the connected user should study next, the same queue as their dashboard. Each entry says why it is queued (NEW, PARTIAL, RETRAINING or DEEPEN), its priority, any due date and whether it is overdue, whether an unfinished prerequisite blocks it, and a lesson to start from when one exists. total counts the whole queue. The queue is recomputed on every call, so entries can shift between pages.

Input Type Notes
cursor string Pagination cursor from a previous response.
limit number Max entries, 1–100. Default 50.

Get the per-question results of the quizzes on one lesson enrollment: for each question, whether the learner got it right, the answer they gave, the correct answer and the explanation, plus the overall score and summary. A learner reads their own. Anyone else needs the review access the app asks for before it shows an enrollment’s answers, which only owners, admins and billing admins have, and a manager does not. Anyone else is told it was not found. The correct answer and explanation are withheld for a question that has not been answered yet, for a reviewer as well as the learner.

Input Type Notes
lessonEnrollmentId string The id of an entry from list_my_enrollments. Required.

Get one pop quiz with its recipients and how each did: who it went to, whether they finished, and their score, plus how many finished. An owner, admin or billing admin sees every recipient. A recipient sees the pop quiz they were sent with only their own row. Anyone else is told it was not found. Ids come from list_pop_quizzes, which is for admins, and from list_my_pop_quizzes, which lists the ones sent to the connected user.

Input Type Notes
popQuizId string The id of an entry from list_pop_quizzes or list_my_pop_quizzes. Required.

An announcement tells people something has changed and makes the knowledge base agree with what was said. See Announcements for the model: who may read one is separate from who is told, and sending is not a single call.

The author’s tools below need announcement access, which admins, owners and billing admins have.

List the organization’s announcements, in every state from draft to retracted. Each one gives its title, status, who it is for, what it says, and whether it asks recipients to take a pop quiz. This is the author’s view. To read one you were sent, use read_announcement.

Input Type Notes
status string Only announcements in this state: DRAFT, PLANNING, PLANNED, IN_REVIEW, READY, SENDING, SENT, FAILED or RETRACTED.

Fetch one announcement as its author sees it: what it says (resolved from the topics, items and resources it draws on), the selections and audience it was built from, whether it asks for a pop quiz, and where it is in its life. Selection and audience entry ids come from here.

Input Type Notes
announcementId string The announcement id. Required.

The changes to the knowledge base that sending an announcement would make (items added, superseded or retired, topics added or superseded), and which of them the author has excluded. plan is null until planning has been started.

Input Type Notes
announcementId string The announcement id. Required.

How far a send got: how many people were addressed, how many could not be told, how many are still outstanding, and how many failed. delivery is null until it has been sent.

Input Type Notes
announcementId string The announcement id. Required.

For an announcement that asked recipients to take a pop quiz on what it says: who has taken it, whether they finished, and their score. popQuiz is null when it did not ask.

Input Type Notes
announcementId string The announcement id. Required.

What retracting a sent announcement would undo, which of those changes cannot be undone (an issue is filed for each instead), and how many people would be told it was withdrawn. canRetract is false once the 48-hour window has closed.

Input Type Notes
announcementId string The announcement id. Required.

Read a sent announcement as its audience does: the title, who wrote it, when it was sent and what it says. Works for anyone the announcement was visible to, with no announcement access needed, unlike get_announcement, which is the author’s view of one in any state. A draft, or one you cannot see, is not found.

Input Type Notes
announcementId string The announcement id. Required.

These need a connection granted the announcement:write scope, and the person behind it must hold the matching permission, checked on every call. Each one is recorded in the audit log against the announcement. A tool that loses something or sends it is marked so an assistant can ask before running it.

Start a draft announcement. Nothing is required up front. Then say what it says, choose who may read it and who is told, plan it, and send it. Nothing reaches anyone until send_announcement. Needs announcement.create.

Input Type Notes
title string The title recipients see. Can be empty while drafting; sending needs one.
everyone boolean True if everyone in the organization may read it, false for admins only. This is who can see it, not who is told.

Change a draft: its title, who may read it, and whether recipients are asked to take a pop quiz confirming they understood it. Sending needs everyone and requiresPopQuiz each chosen, true or false. The title and everyone can only change while it is a draft, so call reopen_announcement first if it has been planned.

Input Type Notes
announcementId string The announcement id. Required.
title string The new title.
everyone boolean True if everyone may read it, false for admins only.
requiresPopQuiz boolean True to ask recipients to take a short pop quiz confirming they understood it.
popQuizDueDate string | null ISO 8601 date-time the pop quiz is due, with any UTC offset, in the future. null returns to the default window.

Permanently delete a draft. Anything past draft is refused: reopen a planned one first, and withdraw a sent one with retract_announcement. Needs announcement.delete.

Input Type Notes
announcementId string The announcement id. Required.

Set the text the author wrote for a draft, as opposed to what is drawn from the library. Calling it again replaces the earlier text, and an empty body clears it.

Input Type Notes
announcementId string The announcement id. Required.
body string The announcement text. Required.
title string A name for the text. Defaults to the announcement’s title.

Draw on something already in the knowledge base so the announcement says what the knowledge base says: a whole resource, a topic, or a single item.

Input Type Notes
announcementId string The announcement id. Required.
kind string RESOURCE, TOPIC or ITEM. Required.
targetId string The content id, topic id or item id, matching kind. Required.

Take something out of a draft. With only selectionId it removes that whole selection. With itemId as well it keeps the selection and leaves just that item out.

Input Type Notes
announcementId string The announcement id. Required.
selectionId string The selection id, from get_announcement. Required.
itemId string Leave just this item out instead of removing the whole selection.

Choose who a draft is told to. An audience wider than who may read the announcement is refused, and third parties cannot be added.

Input Type Notes
announcementId string The announcement id. Required.
actorType string INDIVIDUAL, TEAM, ROLE, ROLE_KIND or ORGANIZATION. Required.
actorId string For INDIVIDUAL a user id (an active member), for TEAM or ROLE the team or company role id, for ORGANIZATION the organization id, for ROLE_KIND INTERNAL or EXTERNAL. Required.

Take an entry out of a draft’s audience.

Input Type Notes
announcementId string The announcement id. Required.
audienceId string The audience entry id, from get_announcement. Required.

Start working out which knowledge-base items and topics sending would add, supersede or retire. The announcement needs its own words first, because every change the plan proposes cites them. It runs in the background and returns at once with the announcement in PLANNING; poll get_announcement_plan until the plan appears. send_announcement is refused until this has been done.

Input Type Notes
announcementId string The announcement id. Required.

Decide whether one planned change is left out of what sending does. State the outcome rather than toggling, so repeating the call is safe.

Input Type Notes
announcementId string The announcement id. Required.
sequence number The change’s sequence, from get_announcement_plan. Required.
excluded boolean True to leave the change out, false to put it back. Required.

Show what the email and text will say and how many people they would go to, without sending anything. willBeTold is the number of people a send would tell right now: pass it as expectedRecipientCount to send_announcement. It writes the opening line if there is not one yet, so the sentence previewed is the sentence delivered.

Input Type Notes
announcementId string The announcement id. Required.

Tell the audience by email and text, publish what the plan changes, and make the announcement readable. This reaches real people, and can be withdrawn for 48 hours, which tells everyone. Send only when the person has explicitly asked, after they have seen the plan and the notification. Refused until the announcement has been planned, has a title, has had everyone and requiresPopQuiz chosen, and has an audience. Having a plan does not mean anyone has read it, so pass expectedRecipientCount: a send that would now tell a different number of people is refused and nothing goes out. Returns at once with the announcement in SENDING; follow it with get_announcement_delivery. Calling it again on a FAILED send finishes it. Limited to five calls a minute and thirty an hour.

Input Type Notes
announcementId string The announcement id. Required.
expectedRecipientCount integer The number of people you expect it to tell: willBeTold from preview_announcement_notification. If it would now tell a different number, nothing is sent. It is checked when the call is accepted, so it guards against a stale preview and not against a change in the seconds before delivery starts.

Within 48 hours of sending, undo what the announcement changed in the knowledge base and tell everyone the send attempted that it was withdrawn. Changes that cannot be undone are left, with an issue filed for each. Call get_announcement_retraction_preview first and show the person what it would do.

Input Type Notes
announcementId string The announcement id. Required.

Take a planned announcement that has not been sent back to editing, so its words, title or content can change. The plan is kept until you change what the announcement says or draws on, and a plan that survived can be sent as it is. After such a change, plan it again.

Input Type Notes
announcementId string The announcement id. Required.

These add content to the organization’s library. They need a connection granted the content:write scope, and the person behind it must be allowed to add that kind of content, checked on every call. They create and never edit: none of them changes something that already exists. See Creating documents and YouTube videos for the full rules.

Every one takes a visibility, which is the person’s choice: an assistant should ask rather than assume everyone. For a document it also decides whether it publishes or goes to an administrator for review, and the result says which in mode. Each one is recorded in the audit log, and each is limited to 10 calls a minute and 100 an hour. Sending for review is held lower, because every proposal emails the administrators: 3 a minute and 20 an hour for one person, across every connection and the REST API together.

Write a new document into the library from a title and a markdown body. If the person may publish to the visibility named, it is published (or kept as a draft with asDraft); otherwise it goes to review. Returns mode, draft, contentId, reviewRequestId, title and url. draft: true means the document exists and is not live: do not create it again. Needs document.create, or content-review.create to submit for review.

Input Type Notes
title string Required. Up to 255 characters, on one line.
content string The whole document, in markdown, up to 500,000 characters. Required.
visibility string everyone, teams or admins. Required.
teamIds string[] Team ids from list_teams, with teams only.
asDraft boolean Leave it unpublished, for someone to look over and publish in Mereon. Ignored when it goes to review.

Fetch a public page or file, such as a PDF, and add it to the library as a document. Publishes or goes to review on the same rule, and returns the same fields. Addresses on a private network and video sites are refused. Needs document.create, or content-review.create to submit for review.

Input Type Notes
url string An http or https address. Required.
visibility string everyone, teams or admins. Required.
teamIds string[] Team ids from list_teams, with teams only.

Add a YouTube video to the library by its link. There is no review lane, as in the app: it needs video.create, and the visibility has to be one the person may publish to. Returns contentId, alreadyInLibrary, title and url. For a video already in the library, alreadyInLibrary is true, nothing is created, and its visibility is left as it was; if the person cannot see that video, its contentId, title and url are null. title is also null for a new import until processing reads it from YouTube.

Input Type Notes
url string A YouTube watch, share or shorts link. Required.
visibility string everyone, teams or admins. Required.
teamIds string[] Team ids from list_teams, with teams only.

These decide what people owe. They need a connection granted the training:assign scope, and the person behind it must be allowed to do the act, checked on every call. An organization admin reaches anyone, a team admin the people on teams they administer, and only an organization admin may excuse someone or move a due date. See Assigning training for the full rules.

Several reach real people by email and text. An assistant should only call them when the person asked, and confirm who they go to first. Each is recorded in the audit log. assign_training and unassign_training are limited to 10 calls a minute and 60 an hour, create_pop_quiz to 5 and 30, and the rest to 30 and 300.

Obligation ids come from get_user_progress (another person’s) or list_my_obligations (your own). The obligation tools return the obligation as it stands after the change: id, userId, itemType, itemId, status, required, dueDate, dueDateOverridden and needsReview.

Require a lesson of everyone, of the people on some teams, or of named people, optionally with a deadline. Each person it newly reaches gets the lesson, a quiz prepared for them, and an email and text. Returns lessonId, title and assigned, one { userId, enrollmentId } per person newly reached; people who already had it are not listed. Needs lesson-enrollment.create.

Input Type Notes
lessonId string From list_lessons. Required.
audience string everyone, teams or users. Required.
teamIds string[] Team ids from list_teams, with teams only.
userIds string[] Person ids from find_people, with users only. Up to 500.
dueDate string Due at this moment, ISO 8601 with a UTC offset.
dueInDays integer Due this many days after it is assigned, 1 to 3,650. Give at most one of dueDate and dueInDays.

Take a lesson back from named people. Their enrollment in progress is removed with their progress in it, and the requirement is cancelled; a completed enrollment is kept. Only an organization admin may take back a lesson that is required of someone. Returns lessonId, title and removedCount. Needs lesson-enrollment.delete.

Input Type Notes
lessonId string Required.
userIds string[] Person ids from find_people. Required.

Set how often people who completed a lesson must take it again, or turn that off. Needs permission to edit that lesson. Returns the policy as get_lesson_retraining_policy does.

Input Type Notes
lessonId string Required.
retrainingType string recurring, or none. Required.
intervalDays integer Days between retakes, 1 to 3,650. With recurring only.
completionMode string full_retake or changed_material. With recurring only.

Require one person to learn a topic or a knowledge item. They must hold a duty on it, directly or through a role or team; the level they must reach follows from that duty. Returns the obligation. Needs lesson-enrollment.create.

Input Type Notes
userId string From find_people. Required.
itemType string topic or item. Required.
itemId string Required.
dueDays integer Days from now until it is due, 1 to 3,650.
reason string Up to 2,000 characters.

Require one person to take a lesson again within a number of days, and tell them. Returns the obligation. Needs lesson-enrollment.create.

Input Type Notes
userId string Required.
lessonId string Required.
dueDays integer 1 to 3,650. Required.
retrainingResetsClock boolean Whether completing it counts as their next scheduled retake. Required.
reason string Up to 2,000 characters.

Excuse a person from something they owe, as a deliberate exception. For a lesson they are told. It cannot be undone. Returns the obligation, now waived. Needs lesson-enrollment.update, at organization scope in practice.

Input Type Notes
obligationId string Required.
reason string Why, kept on the record. Required.

End a requirement that was assigned by mistake or no longer applies. For a lesson the person is told, and their enrollment is left as it is. Returns the obligation, now cancelled. Needs lesson-enrollment.update, at organization scope in practice.

Input Type Notes
obligationId string Required.
reason string Why, kept on the record. Required.

Set the due date a person sees on something they owe, by hand, or pass null to take that override off. For a lesson, setting a date tells the person. Returns the obligation. Needs lesson-enrollment.update, at organization scope in practice.

Input Type Notes
obligationId string Required.
dueDate string | null ISO 8601 with a UTC offset, or null. Required.

Settle an obligation flagged needsReview at the date given, or with none, and clear the flag. Returns the obligation. Needs lesson-enrollment.update, at organization scope in practice.

Input Type Notes
obligationId string Required.
resolvedDueDate string | null ISO 8601 with a UTC offset. Leave out or null for none.

Send a short quiz on a video, document or guide to everyone, to some teams, or to named people. Questions are written for each person after this returns, and each is told by email and text once theirs are ready; follow it with get_pop_quiz. Every recipient must be able to see the content. If its questions cannot be started, nothing is created and it is safe to try again. Returns id, title, dueDate and url. Needs pop-quiz.create at organization scope.

Input Type Notes
contentId string A video, document or guide. Required.
audience string everyone, teams or users. Required.
teamIds string[] With teams only.
userIds string[] With users only.
dueDate string ISO 8601 with a UTC offset, in the future. Required.
difficulty string SIMPLE, MODERATE, CHALLENGING or ADVANCED.

These create and change lessons. They need a connection granted the lesson:write scope, and the person behind it must be allowed to do the act on the lesson named, checked on every call: an organization admin can change any lesson, a team admin the lessons shared with teams they administer. See Authoring lessons for the full rules.

An assistant should only call them when the person asked. Creating a lesson, changing what it teaches or its settings, writing its material again and splitting it have a model write material, and are limited to 5 calls a minute and 30 an hour; sharing, choosing or clearing its picture, closing, reopening and deleting to 30 and 300. Each is recorded in the audit log. The tools that leave a lesson in place return it as get_lesson does. Uploading a picture is an API call, under Authoring lessons.

Create a lesson from resources, topics or both, and start writing its material, which takes a few minutes. Only pass a title the person gave: without one the lesson is named from its material. Creating a lesson assigns it to nobody: use assign_training for that. Returns the lesson. Needs lesson.create.

Input Type Notes
visibility string Who can take it: everyone, teams or admins. Required. Only an organization admin may use everyone or admins.
teamIds string[] Team ids from list_teams, with teams only.
contentIds string[] Resource ids from list_content or search_mereon, in teaching order. Up to 50.
topicIds string[] Topic ids from list_topics or search_mereon, taught after the resources. Up to 50. Give at least one resource or topic.
title string Kept as given.
format string GUIDED (default) or CURATED. Fixed once created.
difficulty string SIMPLE (default), MODERATE, CHALLENGING or ADVANCED.
thoroughness string MINIMAL, STANDARD (default), THOROUGH or INTENSIVE.
requiredContentIds string[] CURATED only: the resources a learner has to finish before moving on.

Change a lesson’s title, description, difficulty, thoroughness or whether simulations are on; only what is given changes. A new difficulty writes the quiz plan and material again. Returns the lesson. Needs lesson.update on that lesson.

Input Type Notes
lessonId string From list_lessons or get_lesson. Required.
title string One line.
description string Up to 5,000 characters.
difficulty string SIMPLE, MODERATE, CHALLENGING or ADVANCED.
thoroughness string MINIMAL, STANDARD, THOROUGH or INTENSIVE.
simulationsEnabled boolean Whether role-play and other simulations are on.

Replace the resources a lesson teaches from, in order, and its topics when given (left out, they are kept). It replaces rather than adds, so read the lesson with get_lesson first and send the whole list. When what it teaches from changed, its quiz plan and material are written again. Returns lesson and retainedTeamAccess, the teams that keep access to a resource taken out. Needs lesson.update on that lesson.

Input Type Notes
lessonId string Required.
contentIds string[] The resources from now on, in order. Required.
topicIds string[] The topics from now on.
requiredContentIds string[] CURATED lessons only.

Set who can take a lesson, replacing who could before. It decides who can take it, not who has to. Returns the lesson. Needs lesson.update on that lesson.

Input Type Notes
lessonId string Required.
visibility string everyone, teams or admins. Required.
teamIds string[] With teams only.

Start writing a lesson’s material again from what it teaches from. Returns lessonId and started, which is false when it was already being written. Needs lesson.update on that lesson.

Input Type Notes
lessonId string Required.

Withdraw a lesson: it leaves the catalog and cannot be assigned, and everyone’s history is kept. If people are part-way through, an assistant should ask whether they may finish (keep) or stop now (revoke) and never choose revoke itself. Returns lesson and stoppedCount. Refused when it is already closed. Needs lesson.update on that lesson.

Input Type Notes
lessonId string Required.
reason string Kept in the lesson’s history.
inFlightAccess string keep (default) or revoke.

Put a closed lesson back in the catalog. Find it with list_lessons and includeClosed. People stopped when it closed stay stopped. Returns the lesson. Refused when it is already open. Needs lesson.update on that lesson.

Input Type Notes
lessonId string Required.

Delete a lesson nobody has been enrolled in. A lesson anyone has been enrolled in is refused with the counts, because deleting it would erase their records: close it instead. A team admin’s delete stops sharing the lesson with the teams they administer and leaves it for everyone else. Returns lessonId, outcome (deleted or unshared) and, when unshared, teamIds. A deletion also returns requiredCount, the people still required to take the lesson whose requirement it cancelled, and roleCount, the roles whose training it was removed from. Needs lesson.delete on that lesson.

Input Type Notes
lessonId string Required.

Ask a model how to split a lesson whose topics fall into groups with nothing between them. Changes nothing. Returns summary and lessons, each part with its tempId, title, description, rationale, topics and contents. Show the plan to the person and apply it only once they agree. Needs lesson.update on that lesson and access to everything it teaches from.

Input Type Notes
lessonId string Required.

Apply a plan from split_lesson, edited or not. The part with the most topics is written into the lesson being split, which keeps its id, enrollments and sharing; every other part becomes a new lesson. Returns lessons, one { tempId, lessonId, title, url, kept } per part. Needs lesson.create, and lesson.update on the lesson being split.

Input Type Notes
lessonId string The lesson being split. Required.
lessons object[] The parts, 2 to 10: each { tempId, title, description, topicIds, contentIds }. Required.
visibility string Who the new lessons are shared with: everyone, teams or admins. Required.
teamIds string[] With teams only.

Set the tags a lesson carries, by name, replacing the ones it had: read them with get_lesson first and send the whole list. An empty list clears them. Each has to be one of the organization’s tags from list_tags. Returns the lesson. Needs lesson.update on that lesson.

Input Type Notes
lessonId string Required.
tags string[] Tag names. Up to 50. Required.

Choose the resource a lesson shows as its picture. It has to be a resource the lesson already teaches from (contents on get_lesson). Pass null to clear that choice. When the lesson has an uploaded image, that image is what people see until delete_lesson_poster_image removes it. Uploading an image is an API call. Returns the lesson. Needs lesson.update on that lesson.

Input Type Notes
lessonId string Required.
posterContentId string | null A resource the lesson already teaches from, or null to clear that choice. Required.

Remove the uploaded picture from a lesson. The resource chosen as its picture, if any, is what people see again. Returns the lesson. Needs lesson.update on that lesson.

Input Type Notes
lessonId string Required.

These change what is already in the library. They need a connection granted the content:manage scope, and the person behind it must be allowed to do the act on the resource named, checked on every call: an organization admin can change any resource, a team admin the resources shared with teams they administer. Renaming and deleting tags and changing what a team holds need an organization admin. They do not delete a resource or share one outside the organization. Deleting is its own scope, under Deleting content. See Managing content for the full rules.

An assistant should only call them when the person asked. Publishing a draft has the resource read again by a model and is limited to 5 calls a minute and 30 an hour; the rest to 30 and 300. Each is recorded in the audit log. The tools that leave a resource in place return it as get_content does.

Change a video’s, audio’s or guide’s title or summary; only what is given changes. A guide shows the change at once and is left with a draft for publish_draft. A document’s title is changed with edit_document. Returns the resource. Needs content.update on that resource.

Input Type Notes
contentId string From list_content, search_mereon or get_content. Required.
title string One line, up to 255 characters.
summary string or null Up to 5,000 characters. null clears a video’s or audio’s summary; a guide’s cannot be cleared.

Read the title and text edit_document replaces: the document’s draft when it has one, and otherwise what a new draft starts from, its title and published text. Returns contentId, hasDraft, title and body. Build a new body from this one: get_content_text is the published text and leaves out what a draft already changed. Needs content.update on that document.

Input Type Notes
contentId string A document. Required.

Save a new title, new text or both to a document’s draft. The text replaces the whole draft, so read what it replaces with get_document_draft first and send everything that should stay. Learners keep reading the published document until publish_draft. Returns content and draft, whose retrainingIntentRequired says whether publishing it needs a retraining choice. Needs content.update on that document.

Input Type Notes
contentId string A document. Required.
title string One line, up to 255 characters.
body string The whole text, in markdown.

Save a video’s or audio recording’s transcript as a draft. segments replaces the whole transcript, so read it with get_content_transcript first (pass the draft’s version id from list_content_versions when one exists) and send every segment that should stay. At least one segment. startMs and endMs are whole milliseconds from the start of the recording, zero or greater, and endMs is not before startMs. Learners keep the published recording until publish_draft. Returns content and draft, whose retrainingIntentRequired says whether publishing it needs a retraining choice. Needs content.update on that resource.

Input Type Notes
contentId string A video or an audio recording. Required.
title string One line, up to 255 characters. The title the recording takes when the draft is published.
segments object[] The whole transcript, at least one segment. Each is { text, startMs, endMs }. Whole milliseconds, zero or greater, and endMs is not before startMs. Required.

Make a document’s, guide’s, video’s or audio recording’s draft the version learners read. Once it has been published before, a guide, a video, an audio recording, and a document whose text changed are indexed again and can retrain the people already trained on it, so it needs retrainingIntent, which is the person’s decision: an assistant should ask, never choose. A document whose draft only renames it, or a first publish, needs none. A recording whose transcript has no words is refused before its status changes. Returns the resource. Needs content.update on that resource.

Input Type Notes
contentId string A document, guide, video or audio recording. Required.
retrainingIntent string none, full_retake (take the lesson again) or changed_material (a short lesson on what changed).

Throw away a document’s, guide’s, video’s or audio recording’s draft, leaving the published version as it is. For a video or an audio recording, the transcript goes back to the published chapters. Refused, before anything changes, when there is no draft or the resource has never been published. Returns the resource. Needs content.update on that resource.

Input Type Notes
contentId string A document, guide, video or audio recording. Required.

Make an earlier published version of a video or an audio recording the one learners read, and throw away its draft. versionId is a published version of this resource from list_content_versions. The transcript saved on the recording stays as it is; call update_transcript afterwards when it should match the version learners now read. Returns the resource. Needs content.update on that resource.

Input Type Notes
contentId string A video or an audio recording. Required.
versionId string A published version id from list_content_versions. Required.

Set who in the organization can read a resource, replacing who could before. Only an organization admin may use everyone or admins; a team admin names teams they administer and changes only those. Returns the resource. Needs content.update on that resource.

Input Type Notes
contentId string Required.
visibility string everyone, teams or admins. Required.
teamIds string[] Team ids from list_teams, with teams only.

Set the tags a resource carries, by name, replacing the ones it had: read them with get_content first and send the whole list. An empty list clears them. Each has to be one of the organization’s tags from list_tags. Returns the resource. Needs content.update on that resource.

Input Type Notes
contentId string Required.
tags string[] Tag names. Up to 50. Required.

Add a tag to the organization’s vocabulary. The name is stored lowercase, with spaces and punctuation turned into hyphens and anything other than the letters a to z, digits, hyphens and underscores dropped, accents included; a name the organization already has is refused. Returns the tag. Needs content.update.

Input Type Notes
name string Up to 40 characters. Required.

Rename one of the organization’s tags everywhere it is used. A new name that is already a tag is refused. Returns the tag under its new name. Needs organization.update.

Input Type Notes
tagName string The tag to rename, as list_tags names it. Required.
name string Its new name. Required.

Delete one of the organization’s tags, which takes it off every resource and lesson that carries it. Returns the tag that was deleted. Needs organization.update.

Input Type Notes
tagName string As list_tags names it. Required.

Add resources to what a team holds, alongside what it already has, so everyone on the team can read them. Each has to be a video, document, guide or audio the person can open. Returns teamId and the contentIds named, all of which the team now holds; it may have held some already. Needs team.update on that team.

Input Type Notes
teamId string From list_teams. Required.
contentIds string[] 1 to 50 resource ids. Required.

Take a resource off what a team holds. People on the team can still read it if it is shared with everyone or another team they are on. Refused when the team does not hold it. Needs team.update on that team.

Input Type Notes
teamId string Required.
contentId string Required.

These remove resources from the library. They need a connection granted the content:delete scope, and the person behind it must be allowed to delete resources, checked on every call. An organization admin deletes them. A team admin mostly removes them from the teams they administer, and a guide is deleted for the whole organization. See Deleting content for the full rules.

Call preview_content_deletion first and show the person what it says. Call delete_content only after they agree. dismissIssues and retireOrphanedTopics stay unset unless they said so. When people are part-way through a lesson this would close, ask whether to keep them going or stop them. Both tools are limited to 30 calls a minute and 300 an hour, counted per tool. Each resource removed or taken off a team is recorded in the audit log.

See what deleting these resources would do, before anything changes. Returns which would be deleted, which a team admin would only remove from their teams, which lessons would close, who is part-way through those, which topics would be left with no evidence, which lessons retiring those topics would close, and which open issues stand in the way. Needs content.delete. Changes nothing.

Input Type Notes
contentIds string[] Resource ids from list_content, search_mereon or get_content, 1 to 25. Required.

Delete the resources the person agreed to, after preview_content_deletion. dismissIssues and retireOrphanedTopics are their answers and stay unset unless they said so. When the preview says people are part-way through a lesson this would close, send inFlightAccess as they decided: keep leaves them going and revoke stops them. A resource the answers leave blocked is refused, and nothing is deleted, until every such reason is answered. Returns what happened to each one: deleted, unshared or kept. Needs content.delete.

Input Type Notes
contentIds string[] Resource ids from list_content, search_mereon or get_content, 1 to 25. Required.
inFlightAccess string keep or revoke. The person decides. Required when people are part-way through a lesson the delete would close, and also when retireOrphanedTopics is true and people are part-way through a lesson retiring those topics would close.
dismissIssues boolean True only when the person agreed to dismiss the open issues that block these resources.
retireOrphanedTopics boolean True only when the person agreed to retire topics this would leave with no evidence. When there are such topics, this also needs permission to retire topics.

approve_content_review, reject_content_review and request_content_review_changes decide a submission waiting in the queue. They need a connection granted the content-review:write scope, and the person behind it must be allowed to review submissions, which owners and admins are, checked on every call. See Decide a review for the full rules.

Call one only when the person has agreed. Approving publishes the submission or applies the issue fix. Ask what should happen to people already trained: leaving retrainingIntent out stores none and retrains nobody. Leave visibility out unless they named who can read a new submission. Leave onStalePreview out unless they chose. rebuild refuses and prepares a new preview, and extract-afresh approves and works the changes out again.

Each decision is limited to 5 calls a minute and 30 an hour, and each is recorded in the audit log. The note sent to the submitter stays on the request.

Approve a pending content review, which publishes the submission or applies the issue fix. Returns the request. Needs permission to review submissions.

Input Type Notes
requestId string From list_content_review_requests. Required.
reviewNote string A note stored with the decision, up to 4,000 characters. Only when the person wrote one.
retrainingIntent string none, full_retake, or changed_material. Ask when anyone is already trained. Leave it out and nobody is retrained.
visibility string everyone, teams, or admins. Leave it out unless the person said who can read a new submission. A held demo keeps the audience chosen when it was uploaded.
teamIds string[] The teams, from list_teams, when visibility is teams.
forceIfBaseVersionChanged boolean Approve when the submission was edited again after this review was opened. Only when the person said to go ahead.
onStalePreview string rebuild refuses and prepares a new preview. extract-afresh approves and works the changes out again. Leave it out unless the person chose, which uses rebuild.

Reject a pending content review and send reviewNote to the person who submitted it. A first submission that is rejected releases its source, so it can be submitted again as something new. Returns the request. Needs permission to review submissions.

Input Type Notes
requestId string Required.
reviewNote string What the submitter is told, in their words. Required. Up to 4,000 characters.

Ask the person who submitted a pending content review to change it, and send reviewNote to them. The submission stays out of the library. Returns the request. Needs permission to review submissions.

Input Type Notes
requestId string Required.
reviewNote string What the submitter should change, in their words. Required. Up to 4,000 characters.

create_team, update_team, delete_team, add_team_members, remove_team_members and set_team_member_role create a team, rename it, delete it, and change who is on it. They need a connection granted the team:manage scope, and the person behind it must be allowed to create, change or delete that team, which owners and admins are, checked on every call. See Teams for the full rules.

Call one only when the person has agreed. People added with add_team_members join as team-viewer. Someone already on the team keeps their current role. set_team_member_role changes it. A batch applies one person at a time, so a later refusal leaves the earlier changes in place. Removing someone is refused when it would take away training their job still requires. Someone who is not on the team is refused.

Each call is limited to 10 a minute and 60 an hour, and each is recorded in the audit log. What a team holds in the library stays under “Managing content”.

Create a team. The new team has no members. Returns the team. Needs permission to create teams.

Input Type Notes
name string The team name, on one line, up to 255 characters. Required.

Rename a team. Returns the team and how many people are on it. Needs permission to change that team.

Input Type Notes
teamId string From list_teams. Required.
name string The new name, on one line, up to 255 characters. Required.

Delete a team. Returns the team and how many people were on it. Needs permission to delete that team.

Input Type Notes
teamId string From list_teams. Required.

Add people who already belong to the organization. Each joins as team-viewer. Someone already on the team keeps their current role. Returns the team and each membership. Needs permission to change that team.

Input Type Notes
teamId string From list_teams. Required.
userIds string[] From find_people, 1 to 100. Repeated ids are asked once. Required.

Remove people from a team. Refused when the removal would take away training their job still requires. Someone who is not on the team is refused. Returns the team and each membership that was removed. Needs permission to change that team.

Input Type Notes
teamId string From list_teams. Required.
userIds string[] From find_people, 1 to 100. Repeated ids are asked once. Required.

Set whether someone administers a team or belongs to it. They must already be on the team. Returns that membership. Needs permission to change that team.

Input Type Notes
teamId string From list_teams. Required.
userId string From find_people. Required.
role string team-admin or team-viewer. Required.

create_company_role, update_company_role, publish_company_role, discard_company_role_draft, move_company_role, delete_company_role, merge_company_role, assign_company_role_members, unassign_company_role_members, set_company_role_advancement_path and set_company_role_member_standing create a company role, change its name or description, move it, merge it, delete it, and choose who holds it. They need a connection granted the company-role:manage scope, and the person behind it must be allowed to create, change or delete that role, which owners and admins are, checked on every call. See Company roles for the full rules.

Call one only when the person has agreed. A name or description change is a draft until publish_company_role. Readers keep seeing the live name until then. A batch applies one person at a time, so a later refusal leaves the earlier changes in place. Someone who cannot open the role’s training is refused. Someone who does not hold the role is refused on a removal.

Each call is limited to 10 a minute and 60 an hour, and each is recorded in the audit log. A role’s curriculum is add_curriculum_item and remove_curriculum_item. What an external role can read is add_content_grant and remove_content_grant. Duties are create_duty, change_duty, and delete_duty.

Create a company role. Leave parentRoleId out and it sits at the top of the chart. kind defaults to INTERNAL. Returns the role. Needs permission to create company roles.

Input Type Notes
name string The role name, on one line, up to 255 characters. Required.
kind string INTERNAL or EXTERNAL. Optional.
parentRoleId string | null The role it reports to, from list_company_roles. Leave it out, or send null, to place it at the top.

Save a new name or description as a draft. Readers keep seeing the live name until publish_company_role. Send at least one of name and description. Returns the draft and the live name. Needs permission to change that role.

Input Type Notes
roleId string From list_company_roles. Required.
name string The new name, on one line. Optional.
description string The new description, up to 20,000 characters. Optional.

Make a draft name and description the ones readers see. Refused when the role has no draft. Returns the role. Needs permission to change that role.

Input Type Notes
roleId string From list_company_roles. Required.

Throw away a draft name or description. The live role is unchanged. Refused when the role has no draft. Returns the live role. Needs permission to change that role.

Input Type Notes
roleId string From list_company_roles. Required.

Set the role this one reports to. parentRoleId null places it at the top of the chart. A move that would put a role under itself, or an internal role under an external role, is refused. Returns the role. Needs permission to change that role.

Input Type Notes
roleId string From list_company_roles. Required.
parentRoleId string | null The role it should report to, or null. Required.

Delete a company role. Returns the role and how many people held it. Needs permission to delete that role.

Input Type Notes
roleId string From list_company_roles. Required.

Move this role’s people, curriculum, duties and child roles onto the target role, then delete this role. The two roles have to be the same kind. Returns the role that remains. Needs permission to delete this role.

Input Type Notes
roleId string The role being merged away, from list_company_roles. Required.
targetRoleId string The role that remains, from list_company_roles. Required.

Assign people who already belong to the organization. An internal person on an external role, or an external person on an internal role, is refused. Someone who cannot open the role’s training is refused. Assigning someone who already holds the role refreshes that assignment. Returns the role and each membership. Needs permission to change that role.

Input Type Notes
roleId string From list_company_roles. Required.
userIds string[] From find_people, 1 to 100. Repeated ids are asked once. Required.

Remove people from a company role and cancel the training that role assigned them. Someone who does not hold the role is refused. Returns the role and each membership that was removed. Needs permission to change that role.

Input Type Notes
roleId string From list_company_roles. Required.
userIds string[] From find_people, 1 to 100. Repeated ids are asked once. Required.

Replace a company role’s advancement path. The first tier is the most junior. An empty list removes the path. Send a tier’s id to keep that step when its label changes. Returns the path. Needs permission to change that role.

Input Type Notes
roleId string From list_company_roles. Required.
tiers object[] Most junior first, at most 100. Each has label and an optional id. Required.

Set or clear where someone stands on a company role’s advancement path. standingTierId null clears an explicit standing so the lowest tier applies. The tier has to be on this role’s path. They must already hold the role. Returns that standing. Needs permission to change that role.

Input Type Notes
roleId string From list_company_roles. Required.
userId string From find_people. Required.
standingTierId string | null A tier on this role’s path, or null. Required.

add_curriculum_item and remove_curriculum_item add or remove a lesson or a topic on a company role’s training curriculum. They need a connection granted the curriculum:manage scope, and the person behind it must be allowed to change that role, which owners and admins are, checked on every call. See Add a curriculum item for the full rules.

Call one only when the person has agreed. People who already hold the role are not given a new item unless applyToExisting is true. A topic can be added only when the role already has a duty on it. Send only the fields for the due date you chose. Changing an item after it is added stays in the app. What an external role can read is content-grant:manage.

Each call is limited to 10 a minute and 60 an hour, and each is recorded in the audit log on the company role.

Add a lesson or a topic to a company role’s curriculum. People who already hold the role are not given it unless applyToExisting is true. A topic can be added only when the role already has a duty on it. Returns the curriculum item. id is the lesson or topic id. Needs permission to change that role.

Input Type Notes
roleId string From list_company_roles. Required.
itemType string lesson or topic. Required.
itemId string The lesson id from list_lessons, or the topic id from list_topics. Required.
applyToExisting boolean When true, people who already hold the role are given this item. Defaults to false.
dueDateType string none, fixed, or relative. Required. Send only the fields that type uses.
dueDateFixed string ISO date-time. Required when dueDateType is fixed.
dueDateRelativeDays number At least 1. Required when dueDateType is relative.
dueDateRelativeAnchor string employment_start, role_assignment_date, or first_login. Required when dueDateType is relative.
retraining object | null Omit, or null, to keep the item’s own rule. retrainingType none turns retraining off for this role. recurring also names intervalDays and completionMode (full_retake or changed_material).
tierQualifier string ALL, MIN, MAX, or EXACT. Defaults to ALL.
advancementTierId string | null A tier on this role’s path. Required for MIN, MAX, or EXACT. Omit it for ALL.

Remove a lesson or a topic from a company role’s curriculum. itemType and itemId are what get_company_role returns for that item. Returns the item that was removed. Needs permission to change that role.

Input Type Notes
roleId string From list_company_roles. Required.
itemType string lesson or topic. Required.
itemId string The lesson or topic id, from get_company_role. Required.

add_content_grant and remove_content_grant grant or remove a video, an audio file, a document, or a guide that an external company role can read. They need a connection granted the content-grant:manage scope, and the person behind it must be allowed to change that role, which owners and admins are, checked on every call. See Add a content grant for the full rules.

Call one only when the person has agreed. Granting a resource that is already granted leaves it in place. An internal role is refused. A lesson stays on the curriculum.

Each call is limited to 10 a minute and 60 an hour, and each is recorded in the audit log on the company role.

Give an external company role access to one video, audio file, document, or guide. Granting a resource that is already granted leaves it in place. An internal role is refused. Returns the grant. Needs permission to change that role.

Input Type Notes
roleId string The external company role, from list_company_roles. Required.
contentId string The video, audio, document, or guide id, from list_content. Required.

Remove one resource from an external company role. contentId is what get_company_role returns in contentGrants. A grant that is not on the role is refused. Returns the grant that was removed. Needs permission to change that role.

Input Type Notes
roleId string The external company role, from list_company_roles. Required.
contentId string From contentGrants on get_company_role. Required.

preview_topic_retirement, withdraw_topic and reinstate_topic withdraw a topic the organization no longer follows, and bring one back. They need a connection granted the topic:retire scope, and the person behind it must be allowed to retire topics, which owners and admins are, checked on every call. See Retire a topic for the full rules.

Call withdraw_topic and reinstate_topic only when the person has agreed. Look at preview_topic_retirement first. When learnersInProgressCount is above zero, ask whether those people finish or stop, and pass that choice. Never choose it. Leaving it out lets them finish. The videos and documents stay in the library. Retiring one item, while the topic continues, is item:retire.

Each call is limited to 10 a minute and 60 an hour, and a retirement is recorded in the audit log on the topic.

What retiring this topic would withdraw. Writes nothing. learnersInProgressCount is how many people are part-way through a lesson this would close. Needs permission to retire topics.

Input Type Notes
topicId string From list_topics or get_topic. Required.

Withdraw a topic the organization no longer follows. Call it only when the user has agreed. Look at preview_topic_retirement first. When people are part-way through, ask whether they finish or stop, and pass that as inFlightAccess. Never choose it. Leaving it out lets them finish. The videos and documents stay in the library. A topic that is already retired is refused. Returns the retirement. Needs permission to retire topics.

Input Type Notes
topicId string From list_topics or get_topic. Required.
reason string Why the organization no longer follows this topic, up to 2,000 characters. Optional.
inFlightAccess string keep or revoke. Leave it out to let people finish.

Bring a retired topic back. Call it only when the user has agreed. Required training the retirement cancelled is not put back. A topic that is not retired is refused. A topic whose evidence was deleted is refused. Returns the retirement that was restored. Needs permission to retire topics.

Input Type Notes
topicId string From list_topics or get_topic. Required.

preview_item_retirement, withdraw_item and reinstate_item withdraw one item the organization no longer follows, and bring one back. They need a connection granted the item:retire scope, and the person behind it must be allowed to retire items, which owners and admins are, checked on every call. See Retire an item for the full rules.

Call withdraw_item and reinstate_item only when the person has agreed. Look at preview_item_retirement first. The topic continues, and lessons that teach it stay open. There is no choice about people part-way through, because no lesson closes. Child items go with the item. The videos and documents stay in the library.

Each call is limited to 10 a minute and 60 an hour, and a retirement is recorded in the audit log on the item.

What retiring this item would withdraw. Writes nothing. The topic continues, so no lesson closes. childItemCount is how many child items go with it. Needs permission to retire items.

Input Type Notes
itemId string From get_item or get_topic_items. Required.

Withdraw one item the organization no longer follows. Call it only when the user has agreed. Look at preview_item_retirement first. The topic continues, and lessons that teach it stay open. Child items go with it. The videos and documents stay in the library. An item that is already retired is refused. An item whose topic is retired is refused. Returns the retirement. Needs permission to retire items.

Input Type Notes
itemId string From get_item or get_topic_items. Required.
reason string Why the organization no longer follows this item, up to 2,000 characters. Optional.

Bring a retired item back. Call it only when the user has agreed. Child items this retirement archived come back with it. Required training the retirement cancelled is not put back. An item that is not retired is refused. An item whose topic is still retired is refused. Returns the retirement that was restored. Needs permission to retire items.

Input Type Notes
itemId string From get_item or get_topic_items. Required.

For a solutions partner: list_clients and get_client_adoption read the partner’s clients and need only read, and get_client_terms and create_client create a new one and need a connection granted the client:create scope. The person behind the connection must have the access an organization admin has (owners, admins and billing admins), checked on every call. An organization that is not a solutions partner is refused. See Clients for the full rules.

Call create_client only when the person has agreed, after showing them get_client_terms’s summary for the billing they chose. Never choose the billing for them: it decides who pays. The connection stays pinned to the partner, so it cannot act inside the new client. To set the client up, the person connects again and chooses the client on the consent screen.

create_client is limited to 5 calls a minute and 30 an hour, and get_client_terms to 10 a minute and 60 an hour. A new client is recorded in the partner’s audit log and in the client’s own.

List the partner’s active clients, by name: how each is billed, who pays, the partner’s discount or commission on it as a fraction, its member count and its subscription. Archived clients are left out. Needs the access an organization admin has.

Input Type Notes
cursor string nextCursor from the previous page.
limit number Max clients, 1–100. Default 50.

How well one client is using Mereon: a health tier, members who signed in within 7 and 30 days, content, training owed, and this week’s activity, questions asked and lessons completed against the week before. All counts: no person is named. A client that is not one of this partner’s active clients is refused.

Input Type Notes
clientId string From list_clients. Required.

What creating a client with this billing would mean for this partner: who pays, the discount or commission copied onto the client, and the Pro trial it starts on, with summary, a sentence to show the person. Writes nothing. Runs the checks create_client runs, so a referral partner who has not finished payout setup, or a reseller partner with no payment method, is refused here too. Needs permission to create clients.

Input Type Notes
billing string reseller (the partner pays, at its reseller discount) or referral (the client pays, and the partner earns its referral commission). Required.

Create a client of the partner: the organization, its Pro trial (billed to the partner for a reseller client), and an invitation to its owner when one is named. Send the same requestKey when retrying: a retry returns the client the first call made with created: false, and tries an owner invitation the first could not send. A retry while the first call is still running is refused and changes nothing; send it again in a minute. The same key with a different request is refused. A retry days later is still safe. A failed invitation does not fail the call: owner.status is failed and owner.message says why. Returns the client, the terms, the owner invitation and connect, which says how to set the client up. Needs permission to create clients.

Input Type Notes
name string One line, up to 200 characters. Required.
domain string The client’s website or domain. Optional.
billing string reseller or referral. Required, with no default.
owner object { name, email }. Invited by email to own the client. Optional.
requestKey string A key you choose, 8 to 100 letters, digits, ., _, : or -. The same on every retry of this request, and new for the next client. Required.

These tools let an assistant propose a set of changes as one plan, which the person approves in Mereon before anything runs. A plan’s steps are the assistant’s write actions, the same ones Mereon’s own chat assistant can offer, limited to what the person may do. They need a connection granted the plan:propose scope, and the person behind it must be allowed to use the assistant, which every organization role is. A personal access token does not have this scope unless it was given it.

There is no tool to approve a plan. Give the person the plan’s approveUrl and ask them to check it and approve it there, signed in as themselves. Each step is held to their own permissions when it is proposed, when it is approved and when it runs. A plan can be read and changed only by the connection that proposed it. Any other connection is told it was not found.

In an app that shows MCP Apps, such as Claude or ChatGPT, propose_plan and get_plan also draw the plan as a card in the conversation: the same card Mereon shows, with each step’s settings. The person can change a setting there, which the card does through update_plan, and open the plan in Mereon to approve it. The card’s data travels in the result’s _meta under mereon.ai/plan, so the text the model reads stays the same. An app that does not show MCP Apps shows the text alone.

propose_plan and update_plan are each limited to 20 calls a minute and 300 an hour. Each call is recorded in the audit log, and a proposal’s entry lists its steps by id and action, not their arguments.

Every tool here except list_plan_tools returns the plan:

Field Notes
planId Name it on get_plan and update_plan.
status proposed, incomplete, running, finished or cancelled. An incomplete plan cannot be approved until what is missing is filled in.
revision Name it on update_plan.
approveUrl Where the person approves the plan.
remaining What the request still needs beyond this plan, when you said.
steps Each step’s id, tool, description, its fields (each with value, whether it is required and editable, any error and any choices), and needsInput when something on it is missing or was refused.
results Once the plan has run, what each step did, with the ids of what it created.
remainderPlanId After a run that stopped part-way, the plan offered for the rest.
next What to do next, in a sentence.

The write actions you can put in a plan, limited to what the user may do. Without tools, each action’s name, description, what a later step can take from it (creates), and which of its arguments can take what an earlier step creates (takesFromSteps). Name actions in tools to get their args as well, which is the shape a step’s args must match. Writes nothing.

Input Type Notes
tools string[] Action names to return with their arguments, up to 25. Leave it out to list every action without arguments.

Propose changes as a plan the user approves in the app. Nothing runs until they do. Each step names an action from list_plan_tools and its arguments. Resolve ids with the read tools first. A step that uses what an earlier step creates passes { "$step": "<that step's id>", "field": "<a name from its creates>" } where the id belongs, as the whole argument or as one element of a list, and only in an argument listed under takesFromSteps. Each step is checked as the app checks it, and a plan with a mistake is refused with what to fix. A value only the user may choose, or one that is missing, is asked for on the plan (needsInput), which they or update_plan can fill. Returns the plan.

Input Type Notes
steps object[] The steps, in the order they run, from 1 to 25. Each is { id, tool, description, args }. tool and args are required. id defaults to s1, s2 and so on by position. description is up to 300 characters and shows only where the action cannot name the step itself.
remaining string What the request still needs beyond this plan, up to 1,000 characters, when it does only part of it. Optional.
request string The user’s request in their own words, up to 4,000 characters. Some checks read it, such as which content a quiz should be about. Optional.

A plan this connection proposed: whether it is waiting, running, finished or cancelled, each step and its settings, and once it has run, what each step did with the ids of what it created. A plan that stopped part-way names the plan offered for the rest (remainderPlanId). Writes nothing.

Input Type Notes
planId string From propose_plan. Required.

Meant for the plan card, which marks it for the app’s use only (_meta.ui.visibility: ["app"]). An app that does not show MCP Apps lists it like any other tool, and calling it can do no more than change settings on a waiting plan.

Change settings on a plan that is waiting for approval, as the user can on the plan itself: one step, or every step of a group of repeated steps at once. Only a field marked editable can be set, and null clears one. A plan changed since the revision you name is refused, so read it again with get_plan. Each change is checked again, and a problem comes back on its field. Runs nothing. Returns the plan.

Input Type Notes
planId string From propose_plan. Required.
revision number The revision propose_plan or get_plan last returned. Required.
stepIds string[] The step to change, or the steps of one group to change together. Required.
set object The fields to set, by name, to a value or to one of the field’s choices. null clears a field. Required.

create_issue files an issue about the knowledge base for the organization’s reviewers. It needs a connection granted the issue:write scope, and the person behind it must be allowed to file issues, which owners, admins and team admins are, checked on every call. See File an issue for the full rules.

An assistant should file an issue only when the person has agreed to it: show them what it will file and call the tool after they say yes. Filing is limited to 10 calls a minute and 60 an hour, and each is recorded in the audit log.

File an issue: something wrong, missing, out of date, duplicated, conflicting or in the wrong place. Check list_issues for one already open about the same thing first. Every topic or item named by id has to be one the person can read, or the call is refused as not found. To report something missing, name it by title alone, or name the space or category it belongs in. An issue the person filed stays visible to them. Assigning it to a person or a company role notifies them. Recorded as raised by the person, with trigger MANUAL. Returns the issue as get_issue does. Needs issue.create.

Input Type Notes
type string CONFLICT, DUPLICATE, MISCLASSIFICATION, STALE, CONTENT_GAP, STRUCTURE_GAP, or OTHER. Required. UPDATE_HELD and RETIRED_ITEM_REAPPEARED are raised by Mereon and cannot be filed.
severity string CRITICAL, HIGH, MEDIUM, or LOW. Required.
title string A short statement of the problem, up to 500 characters. Required.
description string or null What is wrong and what would fix it, up to 10,000 characters.
targets object[] 1 to 20, all of one targetType (TOPIC, ITEM, SPACE or CATEGORY), each { targetType, targetId, targetTitle }. targetId is a topic id from search_mereon or get_topic, an item id from get_item, a space id from list_spaces, or a category slug. Leave targetId off a topic or item to name it by title alone. The person who filed the issue can still read it. Other callers who cannot read the whole organization, and did not file it, cannot. CONFLICT and DUPLICATE need two or more. Required.
assignedToRoleId string or null A company role from list_company_roles.
assignedToId string or null A person from list_members.

These tools share a library resource with someone who has no account. They need a connection granted the public-link:write scope. The person behind it must also be allowed to do the act, checked on every call. An external account cannot share or send. See Public links for the full rules.

A link’s address is the secret that opens the resource, so the tools that only read a link are on this scope too. Call create_public_link and share_public_link only when the person has agreed, and state when the link stops working before you create it. Never invent a password. Most of these are limited to 30 calls a minute and 300 an hour. Sending is limited to 6 a minute and 60 an hour.

Share a library resource with someone who has no account, by a link they can open. Call this only when the user has agreed to share the material outside the organization. Tell them when the link stops working before you call it. Leave expiryKind off for 30 days. Send expiryDays only with days, and expiryAt only with at. A mismatch is refused. Never invent a password. When the user wants a password and did not supply one, set useSuggestedPassword and show them the password this returns. A password they supply is not retrievable. Needs permission to read the resource.

Input Type Notes
contentId string The resource id, from list_content, search_mereon or get_content. Required.
expiryKind string never, days, or at. Leave it out for 30 days. days needs expiryDays. at needs expiryAt. never is refused when the organization caps how long a link may last. A number or instant sent with the wrong kind is refused.
expiryDays number How many days the link lasts, from 1 to 365. Send this only when expiryKind is days.
expiryAt string The ISO instant the link stops working. Send this only when expiryKind is at.
password string A password the user chose, 8 to 200 printable ASCII characters. Do not invent one.
useSuggestedPassword boolean Ask the server to generate a password.

Every link pointing at one resource, including ones that no longer open. Each row carries its address. A resource the user cannot read is not found. Needs permission to read the resource.

Input Type Notes
contentId string The resource id. Required.

Every link in the organization, including ones that no longer open. Each row carries its address. Needs permission to update the organization, which owners and admins have. No inputs.

Whether the user could share this resource, and the longest a link may last. A resource they cannot read is not found. Needs permission to read the resource.

Input Type Notes
contentId string The resource id. Required.

Turn off one or more links, by id. An address that was already off counts as unchanged, and the count is how many changed. The record stays. Only the person who created a link, or an admin, can turn it off.

Input Type Notes
ids string[] Link ids, from list_public_links or list_organization_public_links. 1 to 200. Required.

Replace a link’s address. The old address stops working and the new one is returned. History, password and expiry stay. Each call mints a new address. Only the person who created the link, or an admin, can replace it.

Input Type Notes
linkId string The link id, from list_public_links or create_public_link. Required.

Send a link by email or text to people who have no account. Only call it when the user has agreed to send it, and only to the addresses they named. There is no message of your own. The text is the organization template. Partial delivery is success: the result names the addresses that did not go out. At most 20 recipients. An external account cannot send. Limited to 6 sends a minute and 60 an hour.

Input Type Notes
linkId string The link id. Required.
emails string[] Email addresses the user named.
phones string[] Phone numbers the user named.

The addresses a link was sent to. Needs permission to read the resource. An external account cannot read them.

Input Type Notes
linkId string The link id. Required.

The password the server generated for a link. Null when the creator supplied their own. Show it to the user. Do not invent a replacement. Needs permission to read the resource.

Input Type Notes
linkId string The link id. Required.

Bar one resource from new public links, or lift the bar. Existing links stay, and whether they open is decided when someone opens them. Needs permission to update the resource. Someone who can read it and cannot update it is refused. Someone who cannot read it is told it was not found.

Input Type Notes
contentId string The resource id. Required.
blocked boolean True stops new links to this resource. False lifts that bar. Required.

Whether links are on, whether a team-restricted resource can be shared, the longest a link may last, and whether a password is required. Needs permission to update the organization. No inputs.

Change whether links are on, whether a team-restricted resource can be shared, the longest a link may last, and whether a password is required. Turning links off suspends every existing link. Null for publicLinkMaxDurationDays clears the cap. Leave a field out to keep it. Needs permission to update the organization.

Input Type Notes
publicLinksEnabled boolean Whether anyone can share a resource this way.
publicLinksAllowTeamRestricted boolean Whether a resource shared with only some teams can have a public link.
publicLinkMaxDurationDays number or null The longest a link may last, in days, from 1 to 365. Null clears the cap.
publicLinkPasswordRequired boolean Whether a new link must have a password.

These tools dismiss an issue, reopen one, change who it is assigned to, merge a duplicate, choose the correct version of a conflict, or fill a content gap. Each needs a connection granted the issue:manage scope, and the person behind it must be allowed to update issues, which owners, admins and team admins are, checked on every call. See Decide an issue for the full rules.

Call one only when the person asked. When a decision can retrain people who were trained on the material it replaces, ask them. Leaving retrainingIntent out stores none, and nobody is retrained. Each tool is limited to 10 calls a minute and 40 an hour, and each is recorded in the audit log. The reason, a note’s title and a note’s body stay off that row.

Dismiss an open issue with the person’s reason. Show them the reason first. Returns the issue as get_issue does. Needs issue.update. An update held because it would remove too much (UPDATE_HELD) cannot be dismissed while it is held: it is answered in the app.

Input Type Notes
issueId string From list_issues or get_issue. Required.
reason string Why it is being dismissed, in the person’s words, up to 10,000 characters. Required.

Reopen an issue that was resolved or dismissed. Returns the issue as get_issue does. Needs issue.update. An UPDATE_HELD issue cannot be reopened.

Input Type Notes
issueId string Required.

Set who an issue is assigned to. Both fields are required. An id sets that side, and null clears it. Both null clears the assignment. Newly added recipients are notified. Returns the issue as get_issue does. Needs issue.update.

Input Type Notes
issueId string Required.
assignedToId string or null A person from list_members, or null. Required.
assignedToRoleId string or null A company role from list_company_roles, or null. Required.

Merge the two topics a duplicate issue flags. winnerId remains and loserId is superseded. They have to be the two topics this issue flags. A duplicate that flags more than two topics is resolved from the issues page. Ask about retraining when people were trained on the material being replaced. Returns the issue as get_issue does. Needs issue.update.

Input Type Notes
issueId string Required.
winnerId string The topic that remains. Required.
loserId string The topic that is superseded. Required.
retrainingIntent string none, full_retake, or changed_material. Leave it out to store none.
retrainingDueDate string or null YYYY-MM-DD. Send it only with full_retake or changed_material.

Choose the correct version of a conflict. selectedTargetId is the id of the issue’s target that is correct, from get_issue, rather than the topic or item behind it. Ask about retraining when people were trained on the material being replaced. Returns the issue as get_issue does. Needs issue.update.

Input Type Notes
issueId string Required.
selectedTargetId string The issue target’s id, from get_issue. Required.
retrainingIntent string none, full_retake, or changed_material. Leave it out to store none.
retrainingDueDate string or null YYYY-MM-DD. Send it only with full_retake or changed_material.

Fill a content gap. strategy says how: contentGapUpload or contentGapCategoryUpload names a contentId already in the library (from list_content or an upload), contentGapLink names linkedType TOPIC and linkedId, and contentGapNote sends title and body. Send only that strategy’s fields. There is no file upload here. A category gap takes an upload. A contentGapUpload that has finished processing with no knowledge items is refused, so the issue is not left waiting. Ask about retraining when people were trained on the material being replaced. A category upload has no retraining fields. Leave override out unless the person asked to record the resolution after the coverage check declined. Returns the issue as get_issue does. Needs issue.update.

Input Type Notes
issueId string Required.
strategy string contentGapUpload, contentGapCategoryUpload, contentGapLink, or contentGapNote. Required.
contentId string A resource already in the library. Required for an upload.
via string CONTENT_GAP_UPLOAD or CONTENT_GAP_RECORD. Leave it out for a file. Send it only with an upload.
linkedType string TOPIC. Required for a link.
linkedId string The topic that covers the gap, from get_topic. Required for a link.
title string The note title, up to 255 characters. Required for a note.
body string The note. Required for a note.
override boolean Record the resolution after the coverage check declined. Leave it out unless the person asked.
retrainingIntent string Leave it out to store none. A category upload has no retraining fields.
retrainingDueDate string or null YYYY-MM-DD. Send it only with full_retake or changed_material.

These tools invite people, change their organization role, deactivate or reactivate them, remove them, and set who they report to. Each needs a connection granted the member:manage scope, and the person behind it must be allowed to do that act, which owners and admins are, checked on every call. See Members for the full rules.

An assistant should call one only when the person asked for that change. Inviting someone sends them an email or a text. Deactivating or removing someone ends their access. Each tool is limited to 10 calls a minute and 60 an hour, and each is recorded in the audit log.

Invite a person by email or phone. They are a member once they accept. Leave role out and acceptance chooses it: owner when the organization has none yet, otherwise viewer. An owner is given that role after they join. An external invitation needs companyRoleIds. Returns the invitation as list_pending_invitations shows one. The accept link stays on the invitation. Needs user.create.

Input Type Notes
name string The name the organization will have on file. Required.
email string or null Required when the organization signs people in by email.
phone string or null Required when the organization signs people in by text.
role string or null admin, billing-admin, viewer or external.
companyRoleIds string[] Company roles they join when they accept, from list_company_roles. Required, and external, when role is external.
teamIds string[] Teams they join when they accept, from list_teams.

Change a member’s organization role to owner, admin, billing-admin, viewer or external. An external person’s role is set when they are invited, and changing it in either direction is refused. Demoting the last active owner is refused. Returns the member as get_member does. Needs user.update.

Input Type Notes
memberId string The person’s user id, from list_members or find_people. Required.
role string Their new organization role. Required.

End a person’s access and free their seat. Their training history, teams and company roles stay. Deactivating the last active owner, or the connected user, is refused. Doing it again is safe. Returns the member as get_member does. Needs user.delete.

Input Type Notes
memberId string Required.

Bring a deactivated person back, with their training history continuous. A comped organization at its seat cap is refused before anything changes. Doing it again for someone who is already active is safe. Returns the member as get_member does. Needs user.delete.

Input Type Notes
memberId string Required.

Remove a person from the organization. Their training history and organization role stay, and they show as deactivated. Removal takes them off their teams, closes their company roles, and deletes their duties in this organization. Reactivating them later starts from that empty position. Deactivate them when their teams, company roles, and duties should stay. Removing the last active owner, or the connected user, is refused. Needs user.delete.

Input Type Notes
memberId string Required.

Set or clear who a person reports to, by the manager’s user id from list_members. Pass null to clear it. A manager recorded without an account has no user id, so this tool has nothing to name them by. Needs organization-wide permission to update people, which owners and admins have, because the edge lets that manager see the person’s reviews and learning progress. Returns the member as get_member does. Needs user.update.

Input Type Notes
memberId string Required.
reportsToUserId string or null The manager’s user id, or null to clear the reporting line. Required.