[Cotlet](https://cotlet.dev/index.md) · [Integrations](https://cotlet.dev/integrations.md) · [How it works](https://cotlet.dev/how-it-works.md) · [Use cases](https://cotlet.dev/use-cases.md) · [Security](https://cotlet.dev/security.md) · [For developers](https://cotlet.dev/for-developers.md) · [For automation agencies](https://cotlet.dev/for-agencies.md) · [Blog](https://cotlet.dev/blog.md) · [API docs](https://cotlet.dev/docs.md) · [Help center](https://cotlet.dev/help.md) · [Changelog](https://cotlet.dev/changelog.md) · [Contact](https://cotlet.dev/contact.md) · [Pricing](https://cotlet.dev/pricing.md) · [Sign up](https://cotlet.dev/signup)

# Enroll a learner in a Thought Industries course

> Enroll an existing Thought Industries learner in a course by email, after a check of what they have and the seat limit. Hosted, nothing to maintain.

Source: https://cotlet.dev/integrations/thought-industries-api-mcp-server/enroll-learner-in-course

A learner writes to support for the course their manager approved, and an admin has to find the profile, open Access and add the content.

Cotlet does it in your own Thought Industries account with list\_learners, get\_learner, list\_courses, get\_course and enroll\_learner, called by your AI agent, an n8n workflow or a script.

[Sign up free](https://cotlet.dev/app/signup?app=thought-industries) [All Thought Industries tools](https://cotlet.dev/integrations/thought-industries-api-mcp-server.md)

Hosted · nothing to install or maintain

## Can Thought Industries do this on its own?

Thought Industries enrolls an existing learner from the profile and through the REST call POST /incoming/v2/users/bulkContentAssignment, which takes users by ID or email and course IDs (checked 23 Oct 2026). The API needs a key from an admin and code. The announced MCP server lists an enroll\_user tool, but it cannot be connected today.

## How you do it in Thought Industries today

1. From the homepage an admin selects Users > Learners and clicks the learner's name to open the profile.
2. The admin opens the Access tab, searches for the content and clicks Add Content.
3. Before adding, the admin looks at the same tab for content the learner already has, because a purchase and an Auto Assignment rule can enroll the same person twice.
4. For a course with limited seats, the admin checks Courses > All Courses > the content title > Enrollment step > Access for Limit Enrollments and the maximum number.
5. The request comes by email or ticket, so every enrollment is a switch from the inbox to the admin and back.

## How to enroll a learner in a Thought Industries course

Prompt

```
Enroll priya.nair@example.com in Safety basics. Check first what she already has and whether the course has a seat limit.
```

1. 01  
### Find the learner  
list\_learners looks up the email. If nobody or several people match, the agent stops and asks. A person who is not in the platform yet goes through import\_learners, with your OK.
2. 02  
### Read what they have  
get\_learner returns the content on the Access tab. If the course is already there, the agent says so and enrolls nobody twice.
3. 03  
### Check the seats  
list\_courses finds the course by title and get\_course reads its Enrollment step. If enrollments are limited, the agent shows the maximum and asks before it adds one more person.
4. 04  
### Enroll  
enroll\_learner adds the content to the learner's Access tab. The call waits for your OK by default, because the learner sees the course on their dashboard.
5. 05  
### Confirm  
The agent reads the profile again and reports the content now on the Access tab.

### What you get back

Example data

```
Learner: Priya Nair (priya.nair@example.com)
Already had: Onboarding 101
Safety basics: no seat limit
Enrolled in Safety basics
Access tab now lists 2 courses
```

### Other ways to ask

- Enroll everyone on this list in Safety basics, one by one, and skip anyone who already has it.
- Enroll Tom Becker in the June webinar if it still has a free seat.
- Check which courses priya.nair@example.com has, but change nothing.

## What Thought Industries allows, and what to know first

- A course added by an admin shows in the Content Actions Log as an enrollment with the source manager\_course\_enrollment.
- Enrollment limits and the waitlist setting belong to a session, so each session of a webinar has its own maximum.
- Auto Assignment does not respect seat limits or waitlisting, and overlapping enrollments can occur when a rule and a purchase both apply.
- Managers with permission to provision learner access see the Waitlisted Content container on the learner's Access tab, so the account behind this job needs that permission.

enroll\_learner asks for your OK by default. To run it on a schedule without you, switch confirmation off for that tool in your dashboard.

Sources: [Thought Industries Help: Managing Learners in Panorama](https://support.thoughtindustries.com/hc/en-us/articles/360046308693-Managing-Learners-in-Panorama) · [Thought Industries Help: Waitlisting](https://support.thoughtindustries.com/hc/en-us/articles/4413299087383-Waitlisting) · [Thought Industries Help: Auto Assignment](https://support.thoughtindustries.com/hc/en-us/articles/30400538282519-Auto-Assignment) · [Thought Industries developer docs: Bulk Content Assignment](https://developer.thoughtindustries.com/docs/rest/content/bulk-assignment/)

## Call enroll\_learner from a script

curl

```
curl -X POST https://cotlet.dev/api/v1/thought-industries/contents/4b1c2d3e-6a7b-4c8d-9e0f-1a2b3c4d5e6f/learner/enroll \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"learner":"priya.nair@example.com"}'
```

Example response

```
{
"learner_id": "3f9a2b18-7c4d-4e2a-9b1f-0c5d6e7f8a90",
"content_id": "4b1c2d3e-6a7b-4c8d-9e0f-1a2b3c4d5e6f",
"title": "Safety basics",
"status": "enrolled"
}
```

MCP: add https://cotlet.dev/mcp/v1 with the same key; the call is thought\_industries\_write → enroll\_learner. Example data.

[Schedule it in n8n, Make, Zapier or cron](https://cotlet.dev/integrations/thought-industries-api-mcp-server.md#automations)

## Thought Industries tools this automation uses

__Cotlet Thought Industries tools used to enroll a learner in a Thought Industries course__
| Tool | Parameters |
| --------------- | -------------------- |
| list\_learners | query, cursor |
| get\_learner | learner |
| list\_courses | query, cursor |
| get\_course | content\_id |
| enroll\_learner | learner, content\_id |

[All 11 Thought Industries tools with descriptions](https://cotlet.dev/integrations/thought-industries-api-mcp-server.md#tools)

## Frequently asked questions

### Is it safe to connect Thought Industries to Cotlet?

Yes. You sign in to Thought Industries yourself, in your own Cloud Browser in the EU, and we never save your password. Your agents only get Thought Industries once you enable it, every background request is listed, and the browser profile is stored encrypted with AES-256-GCM, the cipher 1Password uses for its vaults. The AI model never sees a login, posts and messages wait for your OK, and Disable for agents cuts access in one click. Independent scanners grade cotlet.dev A+ on Qualys SSL Labs, securityheaders.com and Mozilla Observatory; live results are on https://cotlet.dev/security.

## More Thought Industries automations

- [Enroll new hires in Thought Industries courses](https://cotlet.dev/integrations/thought-industries-api-mcp-server/enroll-new-hires-in-courses.md)
- [Weekly Thought Industries course completion report](https://cotlet.dev/integrations/thought-industries-api-mcp-server/weekly-course-completion-report.md)
- [Thought Industries API and MCP server: every tool](https://cotlet.dev/integrations/thought-industries-api-mcp-server.md)
- [All use cases](https://cotlet.dev/use-cases.md)

## Give your agent access to Thought Industries.

Free 7-day trial with 2,000 credits, no card needed. Cotlet is independent and not affiliated with Thought Industries.

[Sign up free](https://cotlet.dev/app/signup?app=thought-industries)

---

Give your AI agents your signed-in browser.

**Product:** [Integrations](https://cotlet.dev/integrations.md) · [Use cases](https://cotlet.dev/use-cases.md) · [How it works](https://cotlet.dev/how-it-works.md) · [Pricing](https://cotlet.dev/pricing.md) · [Security](https://cotlet.dev/security.md)

**Resources:** [Blog](https://cotlet.dev/blog.md) · [API docs](https://cotlet.dev/docs.md) · [Help center](https://cotlet.dev/help.md) · [Changelog](https://cotlet.dev/changelog.md) · [GitHub](https://github.com/cotletdev/cotlet)

**Solutions:** [For developers](https://cotlet.dev/for-developers.md) · [For automation agencies](https://cotlet.dev/for-agencies.md)

**Company:** [About](https://cotlet.dev/about.md) · [AI info: company facts](https://cotlet.dev/ai-info.md) · [Contact](https://cotlet.dev/contact.md)

**Legal:** [Terms of service](https://cotlet.dev/terms) · [Privacy policy](https://cotlet.dev/privacy) · [Refund policy](https://cotlet.dev/refunds) · [Acceptable use](https://cotlet.dev/acceptable-use) · [Cookie policy](https://cotlet.dev/cookies) · [DPA](https://cotlet.dev/dpa) · [Subprocessors](https://cotlet.dev/subprocessors)

**Elsewhere:** [Status page](https://status.cotlet.dev) · [Cotlet on GitHub](https://github.com/cotletdev) · [Cotlet on X](https://x.com/cotletdev) · [Cotlet on LinkedIn](https://www.linkedin.com/company/cotletdev) · [Cotlet on Product Hunt](https://www.producthunt.com/products/cotlet) · [Cotlet on Crunchbase](https://www.crunchbase.com/organization/cotlet) · [Cotlet on SaaSHub](https://www.saashub.com/cotlet)

Cotlet.dev is built by Bart Krawczyk and Jake Slugocki, the founders of Take Group sp. z o.o., ul. Wincentego Janasa 4, 40-855 Katowice, Poland. KRS 0000871398, NIP 6342984273, VAT EU: PL6342984273. [About us](https://cotlet.dev/about.md)

Cotlet is an independent service. It is not affiliated with, endorsed by or sponsored by any of the products listed on this site. Product names are trademarks of their respective owners.
