Courses & training
Udemy
Coupons, course updates, announcements and revenue for instructors.
11 endpoints
Subjects, topics, steps and assignments in your Trainual, built by your agent. Use it in ChatGPT, Claude or any AI agent over MCP, or in n8n, Make and scripts over REST.
11 tools Read and write
Trainual has an official MCP server and a REST API, both on the Premium and Enterprise plans only (checked 28 Oct 2026). The MCP server only reads, and the API assigns training and manages users but cannot create, edit or publish a subject. Cotlet runs 11 Trainual tools hosted, over MCP for agents and REST for scripts, and does the writing.
| What you need | Official MCP | API v3 | Cotlet |
|---|---|---|---|
| Plans | Premium, Enterprise | Premium, Enterprise | Any plan |
| Search subjects and read steps | Yes | Published only | Yes, drafts too |
| Create a subject, topics and steps | No | No, "on our roadmap" | Yes, as a draft |
| Edit a step, publish a subject | No | No | Yes, after your OK |
| Assign a subject to people | No | Yes | Yes, after your OK |
| Allowed by Trainual's terms | Yes, official | Yes, official | Uses the web app |
Checked 28 Oct 2026. Sources: Trainual Help: Trainual's API & Webhooks · Trainual Help: The Trainual MCP Server · Trainual Help: Create & Publish Subjects · Trainual Help: Integrations · Trainual API v3 reference · Zapier: Trainual integrations
Use your own account in its Cotlet Cloud Browser.
Connect your agent or create a Cotlet API key.
Ask your agent or send an HTTP request.
We never keep your Trainual password, and nothing your employees see changes until you approve it. Who can see your session
Use MCP with your AI agent, or HTTP requests in n8n, Make, Zapier and scripts. Follow the MCP setup below or jump to the REST guide.
Sign in to Trainual in a Cloud Browser. Make a Cotlet account, open Trainual in its Cloud Browser, log in with your usual Trainual login or SSO and press Enable for agents.
Add the Cotlet address. Enter https://cotlet.dev/mcp/v1 as the MCP server or connector URL in your agent.
Approve the connection. Chat apps send you to a Cotlet sign-in page. Code editors, n8n and scripts use an API key from the console.
One address, https://cotlet.dev/mcp/v1, serves Trainual and any other app you enable. You need no Trainual MCP token and no Admin+ role. If the Trainual tools are missing after you enable it, refresh the connector.
Settings > Connectors > Add custom connector
URL: https://cotlet.dev/mcp/v1/connect
Claude Code:
claude mcp add --transport http cotlet-trainual \
https://cotlet.dev/mcp/v1 \
--header "Authorization: Bearer $COTLET_API_KEY" Settings > Apps & Connectors > Create
MCP server URL: https://cotlet.dev/mcp/v1/connect
Authentication: OAuth // ~/.cursor/mcp.json
{
"mcpServers": {
"cotlet-trainual": {
"url": "https://cotlet.dev/mcp/v1",
"headers": { "Authorization": "Bearer ${env:COTLET_API_KEY}" }
}
}
} # ~/.codex/config.toml
[mcp_servers.cotlet-trainual]
url = "https://cotlet.dev/mcp/v1"
bearer_token_env_var = "COTLET_API_KEY" MCP Client Tool (inside an AI Agent)
Transport: HTTP Streamable
URL: https://cotlet.dev/mcp/v1
Auth: Bearer, <your key>
Tool: trainual_read Make: MCP Client > Call a tool
Zapier: MCP Client by Zapier > Run Tool
Server URL: https://cotlet.dev/mcp/v1
Token: <your key>
Tool: trainual_write Create a Cotlet API key with access to Trainual and its read operations. Store it as COTLET_API_KEY in your environment or automation platform's credential store.
Connect Trainual in Cotlet and enable it for agents. Account access: Your own Trainual account. Creating and editing content needs the Author permission or higher. You sign in in your own browser and keep your SSO or 2-step verification.
curl https://cotlet.dev/api/v1/trainual/subjects \
-H "Authorization: Bearer $COTLET_API_KEY" A successful REST call puts the tool output in result. This illustrative response excerpt omits call IDs, messages and credit details.
{
"status": "success",
"app": "trainual",
"tool": "list_subjects",
"result": {
"subjects": [
{
"subject_id": "sub_8f2a41",
"title": "Opening checklist",
"tab": "Processes",
"status": "published"
},
{
"subject_id": "sub_3c9d07",
"title": "Refund policy",
"tab": "Policies",
"status": "unpublished"
}
]
}
} Returns each subject with its ID, title, tab and status (published or unpublished). Subjects you cannot open with your Trainual role are not listed.
Use the ID with get_subject, create_topic and assign_subject.
Keep the same selection when continuing a list. Compare changed record values as well as identifiers when refreshing your destination.
| Tool | Connect through | Example workflow |
|---|---|---|
| n8n | HTTP Request | Read one subject with its topics and steps. Use get_subject in your configured learning report. |
| Make | HTTP > Make a request | Read the text of one step. Use get_step in your configured learning report. |
| Python or Node.js | REST API | See who has a subject assigned and whether they completed it. Use list_assignments in your configured learning report. |
Send Authorization: Bearer <your Cotlet API key> in request headers. You configure the schedule, destination and record comparisons.
Cotlet reads Trainual; your workflow steps write to your chosen destination. These HTTP workflows do not require a native Cotlet connector or a prebuilt template.
Python and Node.js can use the same HTTP requests without an AI agent. Keep access keys in credentials, outside shared workflow exports.
The API and MCP reference lists operations and inputs. The REST API guide explains authentication, errors and approvals.
Reads include drafts your role can open. Writing needs the Author permission or higher. Steps are text: no image, video or file uploads.
Returns each subject with its ID, title, tab and status (published or unpublished). Subjects you cannot open with your Trainual role are not listed. Use the ID with get_subject, create_topic and assign_subject.
MCP calltrainual_read → list_subjects
REST endpointGET https://cotlet.dev/api/v1/trainual/subjects
| Name | Type | Description |
|---|---|---|
| query string | string | Words to search in subject titles. |
| tab string | string | Content tab to list: Company, Policies or Processes. |
{
"subjects": [
{
"subject_id": "sub_8f2a41",
"title": "Opening checklist",
"tab": "Processes",
"status": "published"
},
{
"subject_id": "sub_3c9d07",
"title": "Refund policy",
"tab": "Policies",
"status": "unpublished"
}
]
} Returns the subject title and status, then its topics in the order the app shows them, each with its steps and their titles. Each topic shows whether it is marked Finished. Step text comes from get_step, so a long subject stays short here.
MCP calltrainual_read → get_subject
REST endpointGET https://cotlet.dev/api/v1/trainual/subjects/{subject_id}
| Name | Type | Description |
|---|---|---|
| subject_id string required | string | Subject ID from list_subjects. |
{
"subject_id": "subject_8c41d2"
} {
"subject_id": "sub_8f2a41",
"title": "Opening checklist",
"status": "published",
"topics": [
{
"topic_id": "top_11a",
"title": "Before doors open",
"finished": true,
"steps": [
{
"step_id": "stp_501",
"title": "Turn on the lights"
},
{
"step_id": "stp_502",
"title": "Count the till"
}
]
},
{
"topic_id": "top_11b",
"title": "Opening the register",
"finished": false,
"steps": [
{
"step_id": "stp_503",
"title": "Log in to the POS"
}
]
}
]
} Returns the step title and its text as plain text with simple formatting. Images, video and embeds appear as links, not files. Use it before update_step so the agent edits what is there.
MCP calltrainual_read → get_step
REST endpointGET https://cotlet.dev/api/v1/trainual/steps/{step_id}
| Name | Type | Description |
|---|---|---|
| step_id string required | string | Step ID from get_subject or get_topic. |
{
"step_id": "step_8c41d2"
} {
"step_id": "stp_502",
"title": "Count the till",
"body": "Count the cash drawer against the float sheet. Write the total on the sheet and sign it."
} Creates the subject as a draft, as the Create subject button does. Nobody sees a draft, so this call reaches no one and needs no confirmation. Returns the subject ID. You need the Author permission or higher.
MCP calltrainual_write → create_subject
REST endpointPOST https://cotlet.dev/api/v1/trainual/subjects
| Name | Type | Description |
|---|---|---|
| title string required | string | Subject title. |
| tab string | string | Content tab: Company, Policies or Processes. |
{
"title": "title"
} {
"subject_id": "sub_a40e19",
"title": "Closing checklist",
"tab": "Processes",
"status": "draft"
} Adds the topic in a drafted state under the subject, as the app does. On a published subject the new topic stays unpublished until the subject is published again. It reaches no one, so it needs no confirmation.
MCP calltrainual_write → create_topic
REST endpointPOST https://cotlet.dev/api/v1/trainual/subjects/{subject_id}/topics
| Name | Type | Description |
|---|---|---|
| subject_id string required | string | Subject ID from list_subjects. |
| title string required | string | Topic title. |
{
"subject_id": "subject_8c41d2",
"title": "title"
} {
"topic_id": "top_2b7",
"subject_id": "sub_a40e19",
"title": "Locking up",
"status": "draft"
} Adds the step at the end of the topic, as the + Add Step button does. Text only: images, video and files are not uploaded. The step is part of a draft topic, so no one sees it before you publish. It needs no confirmation.
MCP calltrainual_write → add_step
REST endpointPOST https://cotlet.dev/api/v1/trainual/topics/{topic_id}/steps
| Name | Type | Description |
|---|---|---|
| topic_id string required | string | Topic ID from get_subject. |
| title string required | string | Step title. |
| body string required | string | Step text, plain text with line breaks. |
{
"topic_id": "top_2b7",
"title": "Set the alarm",
"body": "Arm the alarm panel by the back door. You have 60 seconds to leave."
} {
"step_id": "stp_620",
"topic_id": "top_2b7",
"title": "Set the alarm",
"position": 3
} Replaces the step text, so call get_step first and send the full new text. If the subject is published, employees see the change when it saves. The agent reports the old and the new text. By default you confirm each call; you can switch that off for this tool.
MCP calltrainual_write → update_step
REST endpointPATCH https://cotlet.dev/api/v1/trainual/steps/{step_id}
| Name | Type | Description |
|---|---|---|
| step_id string required | string | Step ID from get_subject or get_topic. |
| title string | string | New title. Omit to keep it. |
| body string | string | New text. It replaces the whole text of the step. |
{
"step_id": "step_8c41d2"
} {
"step_id": "stp_502",
"title": "Count the till",
"updated": true
} Publish as is or finish every topic first, the two choices Trainual's Publish dialog gives. Assigned people see the subject once it is published.
Does what the Publish button does. With as_is, topics not marked Finished stay out and publish later when they are marked Finished. With finish_all, everything goes out. People already assigned the subject can then open it. By default you confirm each call; you can switch that off for this tool.
MCP calltrainual_write → publish_subject
REST endpointPOST https://cotlet.dev/api/v1/trainual/subjects/{subject_id}/publish
| Name | Type | Description |
|---|---|---|
| subject_id string required | string | Subject ID from list_subjects. |
| mode string required | string | as_is publishes only topics marked Finished. finish_all marks every unfinished topic and test Finished, then publishes. |
{
"subject_id": "subject_8c41d2",
"mode": "mode"
} {
"subject_id": "sub_a40e19",
"status": "published",
"topics_published": 2,
"topics_left_unpublished": 0
} Returns each user with ID, name, email and job title. Archived users are left out. Use the IDs with assign_subject and list_assignments.
MCP calltrainual_read → list_users
REST endpointGET https://cotlet.dev/api/v1/trainual/users
| Name | Type | Description |
|---|---|---|
| query string | string | Part of a name or email. |
{
"users": [
{
"user_id": "usr_7a1",
"name": "Dana Whitfield",
"email": "dana@example.com",
"job_title": "Shift lead"
},
{
"user_id": "usr_7a2",
"name": "Eli Okafor",
"email": "eli@example.com",
"job_title": "Barista"
}
]
} Assigns the subject to each user, so it shows in their training. Users who already have it are skipped and listed. Returns who was assigned. By default you confirm each call; you can switch that off for this tool.
MCP calltrainual_write → assign_subject
REST endpointPOST https://cotlet.dev/api/v1/trainual/subjects/{subject_id}/assign
| Name | Type | Description |
|---|---|---|
| subject_id string required | string | Subject ID from list_subjects. |
| user_ids array required | array | User IDs from list_users. |
{
"subject_id": "subject_8c41d2",
"user_ids": "user ids"
} {
"subject_id": "sub_a40e19",
"assigned": [
"usr_7a1",
"usr_7a2"
],
"skipped": []
} Returns one row per user and subject with the completion status Trainual shows. Pass subject_id to see a whole team on one subject, or user_id for one person. You see only people your role can see.
MCP calltrainual_read → list_assignments
REST endpointGET https://cotlet.dev/api/v1/trainual/assignments
| Name | Type | Description |
|---|---|---|
| subject_id string | string | Only this subject. Omit for all assignments you can see. |
| user_id string | string | Only this user, from list_users. |
{
"assignments": [
{
"user_id": "usr_7a1",
"name": "Dana Whitfield",
"subject_id": "sub_8f2a41",
"subject": "Opening checklist",
"status": "completed"
},
{
"user_id": "usr_7a2",
"name": "Eli Okafor",
"subject_id": "sub_8f2a41",
"subject": "Opening checklist",
"status": "not completed"
}
]
} Your signed-in Trainual profile, AES-256-GCM encrypted, in Finland. No password.
The 11 Trainual tools. No cookie, no Trainual token.
The subjects, people and completions your Trainual role can open.
Billing, account settings, permissions, SSO, API and MCP tokens.
Your agent gets a link and you log in again. We never log in for you.
Disable Trainual for agents, reset the browser or delete the key.
Edits show under your name in Trainual's activity and version history, as if you made them. The Cotlet site scores A+ on Qualys SSL Labs, securityheaders.com and Mozilla Observatory (live results); there is no SOC 2 report or third-party pentest yet.
"Use automated tools (e.g. bots, scrapers) to extract content from any part of the Service."
The clause names extracting content, and Cotlet's reads do read content, so treat it as a risk. Section 3(e) lets Trainual suspend access without notice if it believes the terms were broken. The official MCP server and API are the routes the terms leave clear, and neither writes content. We found no public case of a Trainual account closed for automation (checked 28 Oct 2026).
Trainual's API allows 20 requests a second per account. Your agent works far slower than that, one step at a time, like a person in the editor.
Trainual updated its API on 10 Jul 2026 and ends the old version on 31 Dec 2026; the web editor changes too. When a button or menu moves, we change the tool, and your prompts keep working. status.cotlet.dev watches the site, console and API every 3 minutes.
| Action | Undo |
|---|---|
| Create a subject, topic or step | Delete it in Trainual; nobody saw a draft |
| Edit a step | Version history: 30 days on Core, 90 on Pro, unlimited on Premium |
| Publish a subject | Set it back to Unpublished |
| Assign a subject | Unassign it; the person may have seen it |
3 of 11 tools ask first: update_step, publish_subject and assign_subject. Reads and drafts run at once, since a draft reaches nobody. Turn the wait off per tool for a scheduled run.
Read a drafted policy before you publish it. Trainual's terms put AI text at your own risk, and the steps carry your name.
{
"name": "add_step",
"arguments": {
"topic_id": "top_2b7",
"title": "Set the alarm",
"body": "Arm the alarm panel by the back door. You have 60 seconds to leave."
}
} curl -X POST https://cotlet.dev/api/v1/trainual/topics/top_2b7/steps \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"title":"Set the alarm","body":"Arm the alarm panel by the back door. You have 60 seconds to leave."}' {
"step_id": "stp_620",
"topic_id": "top_2b7",
"title": "Set the alarm",
"position": 3
} Scripts and cron jobs reach the same tools over REST at /api/v1/trainual, one key, one price. A write your Trainual role cannot make, such as add_step without Author permission, fails and costs nothing. The tools table lists the REST path of each tool.
About $16 a monthfor a business of about 40 people that adds a subject a week, 2,680 credits. Trainual bills your plan as before.
| Job | Calls | Credits |
|---|---|---|
| Notes into a draft subject: 3 topics, 12 steps, weekly | 17 × 4 | 680 |
| Policy change across 6 steps, twice a month | 11 × 2 | 220 |
| Publish the finished subject, weekly | 2 × 4 | 80 |
| Assign onboarding to new hires, weekly | 3 × 4 | 120 |
| Friday list of incomplete training | 2 × 4 | 80 |
| Cloud Browser, 30 days | 1,500 | |
| Total | 2,680 |
The month is our example. Trainual's average contract is about $4.1K a year (Getlatka, Oct 2024), and most reviewers on G2 work at 50 people or fewer. Trainual no longer shows prices; third-party sites list Core at $249 and Premium at $399 a month billed yearly for 10 seats. Dollars at the $29 pack rate.
| Credits | Price, one time | Calls at 10 credits | Per 1,000 credits |
|---|---|---|---|
| 5,000 | $29 | 500 | $5.80 |
| 15,000 | $79 | 1,500 | $5.27 |
| 32,000 | $149 | 3,200 | $4.66 |
| 60,000 | $249 | 6,000 | $4.15 |
Only successful calls use credits; failed calls and timeouts cost nothing. At a balance of 0 calls pause, never a surprise charge. Authenticate with the Authorization: Bearer header.
| Option | What it does | Where it stops |
|---|---|---|
| Trainual MCP server | Official, mcp.trainual.com: searches content and reads users, groups, responsibilities, assignments and profile documents. | Read-only, Premium and Enterprise, Admin+ token that expires after 365 days. |
| Trainual API v3 | Official REST: users, groups, responsibilities, assignments, completions, activities and webhooks. | Content is view-only and published-only; you write and host the code. |
| Zapier | Triggers on completions and new users; invite, archive, assign subjects and roles. | No content action at all. |
| GitHub | No community Trainual MCP server or CLI found. Trainual's own trainual/tiptap-collaboration-mcp (11 stars) talks to Tiptap, not to Trainual data. | Nothing to run. |
On Premium or Enterprise, the official MCP server answers questions from your training for free, and the API or Zapier can assign it. For drafting subjects, editing steps and publishing on any plan, Cotlet works in your own login.
Cotlet belongs to Take Group sp. z o.o., a software company registered in Poland, EU (VAT PL6342984273), trading since 2019. Its founders are Bart Krawczyk (Co-founder, CTO) and Jake Slugocki (Co-founder, SEO, sales and marketing). Write to contact@cotlet.dev about the Trainual tools.
Sign up free at https://cotlet.dev, open Trainual under Integrations in the console and log in to Trainual in its Cloud Browser. The trial starts with your first app, with no card.
Sign up at cotlet.dev, log in to Trainual once in its Cloud Browser and add Cotlet to ChatGPT or Claude, following the steps in your console. No API key is needed. ChatGPT and Claude then work in your Trainual account through Cotlet, in their phone apps too.
With Cotlet, ChatGPT, Claude and other AI agents handle jobs like these in Trainual: turn a process into a Trainual subject; update a policy across steps; assign onboarding to new hires. You ask in plain words, and anything that reaches other people waits for your OK first.
Yes, as text. It creates a subject as a draft, adds topics and steps, and you publish when you are happy. Images, video and file uploads are not covered. Trainual also has its own Smart Outline and Compose AI tools inside the editor.
Use it if you are on Premium or Enterprise and only want answers from published training: it is official and costs nothing extra. It cannot draft, edit, publish or assign. You can connect both to the same agent: the official one for search, Cotlet for the writing.
Yes, on Premium and Enterprise: up to 10 per user, for events such as a completed subject, published content or an archived user. Cotlet sends no events, so run your agent on a schedule, for example a weekly list_assignments.
Only the way in differs. Both carry the same 11 tools, inputs and answers, with one API key and one price. Agents use MCP; scripts and HTTP steps use REST.
No. Cotlet is independent and not affiliated with Trainual.
Yes. Call Cotlet's REST API from a script or an HTTP step in n8n, Make or Zapier with your Cotlet key. MCP is the alternative for AI agents; you do not need to connect an agent to use REST.
Free 7-day trial with 2,000 credits, no card needed.
May we use Google Analytics to see which pages help people? It sets cookies only if you accept. No ads, and we never sell data. Cookie policy