---
title: "StudioMeyer Academy REST API"
description: "Methods, paths, access rules and schemas from the same contract as the service."
canonical: "https://studiomeyer.academy/en/developers/api"
language: en
markdown_versions: ["https://studiomeyer.academy/entwickler/api.md", "https://studiomeyer.academy/en/developers/api.md", "https://studiomeyer.academy/es/entwickler/api.md"]
publisher: "StudioMeyer Academy, https://studiomeyer.academy (llms.txt: https://studiomeyer.academy/llms.txt)"
---

## One service, two transports

REST and MCP use the same Academy service. The expandable operations below come from its actual registry. Input and output schemas describe supported fields; extra assumptions from earlier drafts do not apply.

- [GET /v1](https://studiomeyer.academy/v1)
- [OpenAPI 3.1](https://studiomeyer.academy/v1/openapi.json)

## Read responses

The envelope contains success, result, errors\[\], messages\[\] and request\_id. Lists add result\_info with cursor, has\_more and count. Pass cursor unchanged for the next page. links\[\] provides rel, method and href; follow those links. content\_locale and fallback identify the returned translation; version, status and updated may be null for legacy content.

## Language and identity

locale=de|en|es overrides Accept-Language; the default is de. Missing translations fall back to German and are marked as fallback. Search uses query. Lessons need lesson:\<level>:\<slug> or an explicit level; ambiguous slugs are rejected.

## Writes and credits

Idempotency-Key is mandatory for POST /v1/me/spend-quotes and credit actions. Preparation creates a pending quote without spending; separate browser approval must precede spending. Never reuse a key with different input. Learning writes follow their individual idempotent contracts; there is no blanket exactly-once guarantee for every POST. Deletion requires confirm: true. Conditional paid-coaching permissions are evaluated from the input.

Purchases and spending remain disabled (unconfigured) without approved prices, credit amounts and legal configuration. No test payment creates real credit. An OAuth scope alone is never permission to spend credits.

- [Access and permissions](https://studiomeyer.academy/en/developers/anmeldung)

## Request limits

The table shows current REST buckets. Public requests share a conservative bucket by default. Only an explicitly configured IP header replaced by a trusted proxy separates anonymous clients. MCP and OAuth may add transport limits. Responses include RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset; reset and Retry-After are seconds.

Bucket

Limit

Window (s)

Identity

anonymous

120

60

shared\_anonymous

read

120

60

verified\_principal

write

30

60

verified\_principal

## Versioning

/v1 names the API contract; content versions are independent. Removed routes or fields, changed field types and new required fields are breaking changes. Optional fields and new routes may be added. Check the changelog, OpenAPI and Deprecation/Sunset headers. No binding retirement date has been published for existing aliases.

- [Interface changes](https://studiomeyer.academy/en/changelog)
- [Understand errors](https://studiomeyer.academy/en/developers/fehler)

## Payments with confirmation

ACP 2026-04-17 uses /checkout\_sessions and /.well-known/acp.json. /.well-known/payments.json reports whether approved offers, provider and durable storage are configured; it is not payment proof. POST requires Bearer, API-Version and Idempotency-Key. Cookies do not authorize agent checkout. The person reviews and pays at Stripe. Only the verified original payment proof permits a single credit grant. No purchase starts without business and legal approval. Direct card payment by the agent is not implemented.

- [ACP discovery](https://studiomeyer.academy/.well-known/acp.json)
- [Payment readiness](https://studiomeyer.academy/.well-known/payments.json)
- [Your payments](https://studiomeyer.academy/en/dashboard/zahlungen)

## Long-running tutor requests

POST /v1/me/tutor/jobs accepts the same tutor input with quote, browser approval and Idempotency-Key. 202 Accepted returns job\_id and status\_url plus Location and Retry-After. GET /v1/jobs/{id} reads status without launching work or spending. Only the same account owner and OAuth grant can read the job. A separate worker revalidates permission before execution. Queue lifetime is at most 15 minutes, result retention one hour. Uncertain outcomes are never automatically rerun. The original tutor key prevents double spending; the synchronous path is unchanged.

- [Job capabilities](https://studiomeyer.academy/v1/jobs)
- [OpenAPI](https://studiomeyer.academy/v1/openapi.json)

## Public search and batch reads

NLWeb 0.55 GET/POST /ask searches approved free content only, without model calls or credits. query.text is limited to 2000 characters; prefer.limit is 1 to 20. With prefer.streaming=true and Accept: text/event-stream, events are start, result, error and complete. No matches produce NO\_RESULTS. /schemamap.xml describes public structured feeds. POST /v1/batch reads up to 20 public item IDs with at most four concurrent fetches; no writes or spending.

```
curl -fsS https://studiomeyer.academy/ask -H "Content-Type: application/json" --data '{"query":{"text":"Was ist ein Prompt?"}}'
```

- [Schema map](https://studiomeyer.academy/schemamap.xml)
- [Library llms.txt](https://studiomeyer.academy/dashboard/bibliothek/llms.txt)

## Operations

Start`GET /v1/start`

Permissions

Public

Credit effect

None

- `GET /v1/start`

**MCP tools:** `academy_start`

**Older names:** `academy_welcome`

### Tool annotations

```
{
  "readOnlyHint": true,
  "destructiveHint": false,
  "idempotentHint": true,
  "openWorldHint": false
}
```

### Input schema

`No named fields`

### Output schema

`paths: array<object> (Required); links: array<object> (Required)`

[Complete schema in OpenAPI](https://studiomeyer.academy/v1/openapi.json#/paths/~1v1~1start/get)

The field overview lists names, types and requirement status. Nested structures, variants and validation rules are fully available in the linked OpenAPI contract.

List learning paths`GET /v1/paths`

Permissions

Public

Credit effect

None

- `GET /v1/paths`

**MCP tools:** `academy_paths`

### Tool annotations

```
{
  "readOnlyHint": true,
  "destructiveHint": false,
  "idempotentHint": true,
  "openWorldHint": false
}
```

### Input schema

`No named fields`

### Output schema

`paths: array<object> (Required)`

[Complete schema in OpenAPI](https://studiomeyer.academy/v1/openapi.json#/paths/~1v1~1paths/get)

The field overview lists names, types and requirement status. Nested structures, variants and validation rules are fully available in the linked OpenAPI contract.

Read a path`GET /v1/paths/{pathSlug}`

Permissions

Public

Credit effect

None

- `GET /v1/paths/{pathSlug}`

**MCP tools:** `academy_path`

### Tool annotations

```
{
  "readOnlyHint": true,
  "destructiveHint": false,
  "idempotentHint": true,
  "openWorldHint": false
}
```

### Input schema

`pathId: string (Required)`

### Output schema

`path: object (Required); confirmedLessons: array<object> (Required); moduleMapping: string (Required)`

[Complete schema in OpenAPI](https://studiomeyer.academy/v1/openapi.json#/paths/~1v1~1paths~1{pathSlug}/get)

The field overview lists names, types and requirement status. Nested structures, variants and validation rules are fully available in the linked OpenAPI contract.

Read a module`GET /v1/paths/{pathSlug}/modules/{moduleSlug}`

Permissions

Public

Credit effect

None

- `GET /v1/paths/{pathSlug}/modules/{moduleSlug}`

**MCP tools:** `academy_module`

### Tool annotations

```
{
  "readOnlyHint": true,
  "destructiveHint": false,
  "idempotentHint": true,
  "openWorldHint": false
}
```

### Input schema

`pathId: string (Required); moduleId: string (Required)`

### Output schema

`pathId: string (Required); moduleId: string (Required); title: string (Required); lessons: array<object> (Required); steps: array<object> (Required); isContentContainer: boolean (Required)`

[Complete schema in OpenAPI](https://studiomeyer.academy/v1/openapi.json#/paths/~1v1~1paths~1{pathSlug}~1modules~1{moduleSlug}/get)

The field overview lists names, types and requirement status. Nested structures, variants and validation rules are fully available in the linked OpenAPI contract.

Read a lesson`GET /v1/lessons/{lessonSlug}`

Permissions

Public

Credit effect

None

- `GET /v1/lessons/{lessonSlug}`

**MCP tools:** `academy_lesson`

### Tool annotations

```
{
  "readOnlyHint": true,
  "destructiveHint": false,
  "idempotentHint": true,
  "openWorldHint": false
}
```

### Input schema

`level: integer (Required); slug: string (Required)`

### Output schema

`id: string (Required); requestedLocale: string (Required); content_locale: string (Required); fallback: boolean (Required); version: string | null (Required); status: string | null (Required); updated: string | null (Required); content: object (Required)`

[Complete schema in OpenAPI](https://studiomeyer.academy/v1/openapi.json#/paths/~1v1~1lessons~1{lessonSlug}/get)

The field overview lists names, types and requirement status. Nested structures, variants and validation rules are fully available in the linked OpenAPI contract.

Teaching plan for AI`GET /v1/lessons/{lessonSlug}/teach`

Permissions

Public

Credit effect

None

- `GET /v1/lessons/{lessonSlug}/teach`

**MCP tools:** `academy_teach`

**Older names:** `academy_tutor_context`

### Tool annotations

```
{
  "readOnlyHint": true,
  "destructiveHint": false,
  "idempotentHint": true,
  "openWorldHint": false
}
```

### Input schema

`level: integer (Required); slug: string (Required)`

### Output schema

`id: string (Required); requestedLocale: string (Required); content_locale: string (Required); fallback: boolean (Required); version: string | null (Required); status: string | null (Required); updated: string | null (Required); content: object (Required)`

[Complete schema in OpenAPI](https://studiomeyer.academy/v1/openapi.json#/paths/~1v1~1lessons~1{lessonSlug}~1teach/get)

The field overview lists names, types and requirement status. Nested structures, variants and validation rules are fully available in the linked OpenAPI contract.

Browse the library`GET /v1/library`

Permissions

Public

Credit effect

None

- `GET /v1/library`

**MCP tools:** `academy_library`

### Tool annotations

```
{
  "readOnlyHint": true,
  "destructiveHint": false,
  "idempotentHint": true,
  "openWorldHint": false
}
```

### Input schema

`cursor: string (Optional); limit: integer (Optional); type: string (Optional); pathId: string (Optional); access: string (Optional)`

### Output schema

`items: array<object> (Required); nextCursor: string | null (Required)`

[Complete schema in OpenAPI](https://studiomeyer.academy/v1/openapi.json#/paths/~1v1~1library/get)

The field overview lists names, types and requirement status. Nested structures, variants and validation rules are fully available in the linked OpenAPI contract.

List prompts`GET /v1/prompts`

Permissions

Public

Credit effect

None

- `GET /v1/prompts`
- `GET /v1/library/prompts`

**MCP tools:** `academy_prompts`

### Tool annotations

```
{
  "readOnlyHint": true,
  "destructiveHint": false,
  "idempotentHint": true,
  "openWorldHint": false
}
```

### Input schema

`cursor: string (Optional); limit: integer (Optional)`

### Output schema

`items: array<object> (Required); nextCursor: string | null (Required)`

[Complete schema in OpenAPI](https://studiomeyer.academy/v1/openapi.json#/paths/~1v1~1prompts/get)

The field overview lists names, types and requirement status. Nested structures, variants and validation rules are fully available in the linked OpenAPI contract.

Read a prompt`GET /v1/prompts/{id}`

Permissions

Public

Credit effect

None

- `GET /v1/prompts/{id}`
- `GET /v1/library/prompts/{id}`

**MCP tools:** `academy_prompt`

### Tool annotations

```
{
  "readOnlyHint": true,
  "destructiveHint": false,
  "idempotentHint": true,
  "openWorldHint": false
}
```

### Input schema

`id: string (Required)`

### Output schema

`id: string (Required); requestedLocale: string (Required); content_locale: string (Required); fallback: boolean (Required); version: string | null (Required); status: string | null (Required); updated: string | null (Required); content: object (Required)`

[Complete schema in OpenAPI](https://studiomeyer.academy/v1/openapi.json#/paths/~1v1~1prompts~1{id}/get)

The field overview lists names, types and requirement status. Nested structures, variants and validation rules are fully available in the linked OpenAPI contract.

List playbooks`GET /v1/playbooks`

Permissions

Public

Credit effect

None

- `GET /v1/playbooks`
- `GET /v1/library/playbooks`

**MCP tools:** `academy_playbooks`

### Tool annotations

```
{
  "readOnlyHint": true,
  "destructiveHint": false,
  "idempotentHint": true,
  "openWorldHint": false
}
```

### Input schema

`cursor: string (Optional); limit: integer (Optional); category: string (Optional)`

### Output schema

`items: array<object> (Required); nextCursor: string | null (Required)`

[Complete schema in OpenAPI](https://studiomeyer.academy/v1/openapi.json#/paths/~1v1~1playbooks/get)

The field overview lists names, types and requirement status. Nested structures, variants and validation rules are fully available in the linked OpenAPI contract.

List glossary`GET /v1/glossary`

Permissions

Public

Credit effect

None

- `GET /v1/glossary`
- `GET /v1/library/glossary`

**MCP tools:** `academy_glossary`

### Tool annotations

```
{
  "readOnlyHint": true,
  "destructiveHint": false,
  "idempotentHint": true,
  "openWorldHint": false
}
```

### Input schema

`cursor: string (Optional); limit: integer (Optional)`

### Output schema

`items: array<object> (Required); nextCursor: string | null (Required)`

[Complete schema in OpenAPI](https://studiomeyer.academy/v1/openapi.json#/paths/~1v1~1glossary/get)

The field overview lists names, types and requirement status. Nested structures, variants and validation rules are fully available in the linked OpenAPI contract.

Read a term`GET /v1/glossary/{term}`

Permissions

Public

Credit effect

None

- `GET /v1/glossary/{term}`
- `GET /v1/library/glossary/{term}`

**MCP tools:** `academy_glossary_term`

### Tool annotations

```
{
  "readOnlyHint": true,
  "destructiveHint": false,
  "idempotentHint": true,
  "openWorldHint": false
}
```

### Input schema

`term: string (Required)`

### Output schema

`id: string (Required); requestedLocale: string (Required); content_locale: string (Required); fallback: boolean (Required); version: string | null (Required); status: string | null (Required); updated: string | null (Required); content: object (Required)`

[Complete schema in OpenAPI](https://studiomeyer.academy/v1/openapi.json#/paths/~1v1~1glossary~1{term}/get)

The field overview lists names, types and requirement status. Nested structures, variants and validation rules are fully available in the linked OpenAPI contract.

List recipes`GET /v1/recipes`

Permissions

Public

Credit effect

None

- `GET /v1/recipes`

**MCP tools:** `academy_recipes`

### Tool annotations

```
{
  "readOnlyHint": true,
  "destructiveHint": false,
  "idempotentHint": true,
  "openWorldHint": false
}
```

### Input schema

`cursor: string (Optional); limit: integer (Optional); phase: integer (Optional)`

### Output schema

`items: array<object> (Required); nextCursor: string | null (Required)`

[Complete schema in OpenAPI](https://studiomeyer.academy/v1/openapi.json#/paths/~1v1~1recipes/get)

The field overview lists names, types and requirement status. Nested structures, variants and validation rules are fully available in the linked OpenAPI contract.

Read a recipe`GET /v1/recipes/{id}`

Permissions

Public

Credit effect

None

- `GET /v1/recipes/{id}`

**MCP tools:** `academy_recipe`

### Tool annotations

```
{
  "readOnlyHint": true,
  "destructiveHint": false,
  "idempotentHint": true,
  "openWorldHint": false
}
```

### Input schema

`id: string (Required)`

### Output schema

`id: string (Required); requestedLocale: string (Required); content_locale: string (Required); fallback: boolean (Required); version: string | null (Required); status: string | null (Required); updated: string | null (Required); content: object (Required)`

[Complete schema in OpenAPI](https://studiomeyer.academy/v1/openapi.json#/paths/~1v1~1recipes~1{id}/get)

The field overview lists names, types and requirement status. Nested structures, variants and validation rules are fully available in the linked OpenAPI contract.

Browse concepts`GET /v1/concepts`

Permissions

Public

Credit effect

None

- `GET /v1/concepts`

**MCP tools:** `academy_concepts`

### Tool annotations

```
{
  "readOnlyHint": true,
  "destructiveHint": false,
  "idempotentHint": true,
  "openWorldHint": false
}
```

### Input schema

`cursor: string (Optional); limit: integer (Optional); query: string (Optional)`

### Output schema

`items: array<object> (Required); nextCursor: string | null (Required)`

[Complete schema in OpenAPI](https://studiomeyer.academy/v1/openapi.json#/paths/~1v1~1concepts/get)

The field overview lists names, types and requirement status. Nested structures, variants and validation rules are fully available in the linked OpenAPI contract.

Read about coaching`GET /v1/coaching`

Permissions

Public

Credit effect

None

- `GET /v1/coaching`

**MCP tools:** `academy_coaching`

### Tool annotations

```
{
  "readOnlyHint": true,
  "destructiveHint": false,
  "idempotentHint": true,
  "openWorldHint": false
}
```

### Input schema

`No named fields`

### Output schema

`title: string (Required); description: string (Required); steps: array<string> (Required); accountHref: string (Required)`

[Complete schema in OpenAPI](https://studiomeyer.academy/v1/openapi.json#/paths/~1v1~1coaching/get)

The field overview lists names, types and requirement status. Nested structures, variants and validation rules are fully available in the linked OpenAPI contract.

Create an invitation`POST /v1/me/invites`

Permissions

learn:write

Credit effect

None

- `POST /v1/me/invites`

**MCP tools:** `academy_invite`

### Tool annotations

```
{
  "readOnlyHint": false,
  "destructiveHint": false,
  "idempotentHint": false,
  "openWorldHint": false
}
```

### Input schema

`No named fields`

### Output schema

`id: string (Required); url: string (Required)`

[Complete schema in OpenAPI](https://studiomeyer.academy/v1/openapi.json#/paths/~1v1~1me~1invites/post)

The field overview lists names, types and requirement status. Nested structures, variants and validation rules are fully available in the linked OpenAPI contract.

Confirmed redirects`GET /v1/redirects`

Permissions

Public

Credit effect

None

- `GET /v1/redirects`

### Input schema

`No named fields`

### Output schema

`confirmedRedirects: array<object> (Required)`

[Complete schema in OpenAPI](https://studiomeyer.academy/v1/openapi.json#/paths/~1v1~1redirects/get)

The field overview lists names, types and requirement status. Nested structures, variants and validation rules are fully available in the linked OpenAPI contract.

Read a playbook`GET /v1/playbooks/{id}`

Permissions

Public

Credit effect

None

- `GET /v1/playbooks/{id}`
- `GET /v1/library/playbooks/{id}`

**MCP tools:** `academy_playbook`

### Tool annotations

```
{
  "readOnlyHint": true,
  "destructiveHint": false,
  "idempotentHint": true,
  "openWorldHint": false
}
```

### Input schema

`id: string (Required)`

### Output schema

`id: string (Required); requestedLocale: string (Required); content_locale: string (Required); fallback: boolean (Required); version: string | null (Required); status: string | null (Required); updated: string | null (Required); content: object (Required)`

[Complete schema in OpenAPI](https://studiomeyer.academy/v1/openapi.json#/paths/~1v1~1playbooks~1{id}/get)

The field overview lists names, types and requirement status. Nested structures, variants and validation rules are fully available in the linked OpenAPI contract.

Search content`GET /v1/search`

Permissions

Public

Credit effect

None

- `GET /v1/search`

**MCP tools:** `academy_search, search`

### Tool annotations

```
{
  "readOnlyHint": true,
  "destructiveHint": false,
  "idempotentHint": true,
  "openWorldHint": false
}
```

### Input schema

`cursor: string (Optional); limit: integer (Optional); query: string (Required); type: string (Optional); pathId: string (Optional)`

### Output schema

`items: array<object> (Required); nextCursor: string | null (Required)`

[Complete schema in OpenAPI](https://studiomeyer.academy/v1/openapi.json#/paths/~1v1~1search/get)

The field overview lists names, types and requirement status. Nested structures, variants and validation rules are fully available in the linked OpenAPI contract.

Read content by ID`GET /v1/items/{id}`

Permissions

Public

Credit effect

None

- `GET /v1/items/{id}`

**MCP tools:** `fetch`

### Tool annotations

```
{
  "readOnlyHint": true,
  "destructiveHint": false,
  "idempotentHint": true,
  "openWorldHint": false
}
```

### Input schema

`id: string (Required)`

### Output schema

`id: string (Required); requestedLocale: string (Required); content_locale: string (Required); fallback: boolean (Required); version: string | null (Required); status: string | null (Required); updated: string | null (Required); content: object (Required)`

[Complete schema in OpenAPI](https://studiomeyer.academy/v1/openapi.json#/paths/~1v1~1items~1{id}/get)

The field overview lists names, types and requirement status. Nested structures, variants and validation rules are fully available in the linked OpenAPI contract.

Suggest suitable content`POST /v1/suggestions`

Permissions

Public

Credit effect

None

- `POST /v1/suggestions`

**MCP tools:** `academy_suggest`

### Tool annotations

```
{
  "readOnlyHint": true,
  "destructiveHint": false,
  "idempotentHint": false,
  "openWorldHint": false
}
```

### Input schema

`profile: object (Required)`

### Output schema

`suggestions: array<object> (Required)`

[Complete schema in OpenAPI](https://studiomeyer.academy/v1/openapi.json#/paths/~1v1~1suggestions/post)

The field overview lists names, types and requirement status. Nested structures, variants and validation rules are fully available in the linked OpenAPI contract.

Read your permissions`GET /v1/me/access`

Permissions

Personal access

Credit effect

None

- `GET /v1/me/access`

**MCP tools:** `academy_my_access`

### Tool annotations

```
{
  "readOnlyHint": true,
  "destructiveHint": false,
  "idempotentHint": true,
  "openWorldHint": false
}
```

### Input schema

`No named fields`

### Output schema

`scopes: array<string> (Required); resource: string (Required); tools: array<string> (Required); hint: string (Required)`

[Complete schema in OpenAPI](https://studiomeyer.academy/v1/openapi.json#/paths/~1v1~1me~1access/get)

The field overview lists names, types and requirement status. Nested structures, variants and validation rules are fully available in the linked OpenAPI contract.

Read your profile`GET /v1/me/profile`

Permissions

learn:read

Credit effect

None

- `GET /v1/me/profile`

### Input schema

`No named fields`

### Output schema

`locale: string (Required); selectedPath: string | null (Required)`

[Complete schema in OpenAPI](https://studiomeyer.academy/v1/openapi.json#/paths/~1v1~1me~1profile/get)

The field overview lists names, types and requirement status. Nested structures, variants and validation rules are fully available in the linked OpenAPI contract.

Update your profile`PATCH /v1/me/profile`

Permissions

learn:write

Credit effect

None

- `PATCH /v1/me/profile`

### Input schema

`locale: string (Optional); selectedPath: string | null (Optional)`

### Output schema

`locale: string (Required); selectedPath: string | null (Required)`

[Complete schema in OpenAPI](https://studiomeyer.academy/v1/openapi.json#/paths/~1v1~1me~1profile/patch)

The field overview lists names, types and requirement status. Nested structures, variants and validation rules are fully available in the linked OpenAPI contract.

Read learning progress`GET /v1/me/learning`

Permissions

learn:read

Credit effect

None

- `GET /v1/me/learning`

**MCP tools:** `academy_my_learning`

**Older names:** `academy_stats`

### Tool annotations

```
{
  "readOnlyHint": true,
  "destructiveHint": false,
  "idempotentHint": true,
  "openWorldHint": false
}
```

### Input schema

`No named fields`

### Output schema

`completedLessons: number (Required); recentCompletions: array<object> (Required); currentStreak: number (Required); longestStreak: number (Required); streakTimeZone: string (Required); quizCount: number (Required); notesCount: number (Required); learningPoints: object (Required); credits: object (Required)`

[Complete schema in OpenAPI](https://studiomeyer.academy/v1/openapi.json#/paths/~1v1~1me~1learning/get)

The field overview lists names, types and requirement status. Nested structures, variants and validation rules are fully available in the linked OpenAPI contract.

Continue learning`GET /v1/me/continue`

Permissions

learn:read

Credit effect

None

- `GET /v1/me/continue`

**MCP tools:** `academy_continue`

**Older names:** `academy_next_lesson`

### Tool annotations

```
{
  "readOnlyHint": true,
  "destructiveHint": false,
  "idempotentHint": true,
  "openWorldHint": false
}
```

### Input schema

`No named fields`

### Output schema

`lesson: object | null (Required); href: string | null (Required); step: object | null (Required)`

[Complete schema in OpenAPI](https://studiomeyer.academy/v1/openapi.json#/paths/~1v1~1me~1continue/get)

The field overview lists names, types and requirement status. Nested structures, variants and validation rules are fully available in the linked OpenAPI contract.

Complete a lesson`POST /v1/me/progress/lessons/{lessonSlug}/complete`

Permissions

learn:write

Credit effect

None

- `POST /v1/me/progress/lessons/{lessonSlug}/complete`

**MCP tools:** `academy_lesson_done`

**Older names:** `academy_progress_complete`

### Tool annotations

```
{
  "readOnlyHint": false,
  "destructiveHint": false,
  "idempotentHint": true,
  "openWorldHint": false
}
```

### Input schema

`level: integer (Required); slug: string (Required)`

### Output schema

`lessonId: string (Required); completedAt: string (Required); firstCompletion: boolean (Required)`

[Complete schema in OpenAPI](https://studiomeyer.academy/v1/openapi.json#/paths/~1v1~1me~1progress~1lessons~1{lessonSlug}~1complete/post)

The field overview lists names, types and requirement status. Nested structures, variants and validation rules are fully available in the linked OpenAPI contract.

Complete a learning step`POST /v1/me/progress/steps/{stepId}/complete`

Permissions

learn:write

Credit effect

None

- `POST /v1/me/progress/steps/{stepId}/complete`

**MCP tools:** `academy_step_done`

### Tool annotations

```
{
  "readOnlyHint": false,
  "destructiveHint": false,
  "idempotentHint": true,
  "openWorldHint": false
}
```

### Input schema

`stepId: string (Required)`

### Output schema

`stepId: string (Required); completedAt: string (Required); firstCompletion: boolean (Required)`

[Complete schema in OpenAPI](https://studiomeyer.academy/v1/openapi.json#/paths/~1v1~1me~1progress~1steps~1{stepId}~1complete/post)

The field overview lists names, types and requirement status. Nested structures, variants and validation rules are fully available in the linked OpenAPI contract.

Read notes`GET /v1/me/notes`

Permissions

learn:read

Credit effect

None

- `GET /v1/me/notes`

**MCP tools:** `academy_notes`

### Tool annotations

```
{
  "readOnlyHint": true,
  "destructiveHint": false,
  "idempotentHint": true,
  "openWorldHint": false
}
```

### Input schema

`cursor: string (Optional); limit: integer (Optional)`

### Output schema

`items: array<object> (Required); nextCursor: string | null (Required)`

[Complete schema in OpenAPI](https://studiomeyer.academy/v1/openapi.json#/paths/~1v1~1me~1notes/get)

The field overview lists names, types and requirement status. Nested structures, variants and validation rules are fully available in the linked OpenAPI contract.

Save a note`POST /v1/me/notes`

Permissions

learn:write

Credit effect

None

- `POST /v1/me/notes`

**MCP tools:** `academy_note_save`

### Tool annotations

```
{
  "readOnlyHint": false,
  "destructiveHint": false,
  "idempotentHint": true,
  "openWorldHint": false
}
```

### Input schema

`level: integer (Required); slug: string (Required); body: string (Required)`

### Output schema

`id: string (Required); lesson: object (Required); locale: string (Required); body: string (Required); createdAt: string (Required); updatedAt: string (Required)`

[Complete schema in OpenAPI](https://studiomeyer.academy/v1/openapi.json#/paths/~1v1~1me~1notes/post)

The field overview lists names, types and requirement status. Nested structures, variants and validation rules are fully available in the linked OpenAPI contract.

Delete a note`DELETE /v1/me/notes/{id}`

Permissions

learn:write

Credit effect

None

- `DELETE /v1/me/notes/{id}`

**MCP tools:** `academy_note_delete`

### Tool annotations

```
{
  "readOnlyHint": false,
  "destructiveHint": true,
  "idempotentHint": false,
  "openWorldHint": false
}
```

### Input schema

`id: string (Required); confirm: boolean (Required)`

### Output schema

`deleted: boolean (Required); id: string (Required)`

[Complete schema in OpenAPI](https://studiomeyer.academy/v1/openapi.json#/paths/~1v1~1me~1notes~1{id}/delete)

The field overview lists names, types and requirement status. Nested structures, variants and validation rules are fully available in the linked OpenAPI contract.

Read a quiz`GET /v1/me/quiz/{lessonSlug}`

Permissions

learn:read

Credit effect

None

- `GET /v1/me/quiz/{lessonSlug}`

**MCP tools:** `academy_quiz`

### Tool annotations

```
{
  "readOnlyHint": true,
  "destructiveHint": false,
  "idempotentHint": true,
  "openWorldHint": false
}
```

### Input schema

`level: integer (Depends on variant); slug: string (Depends on variant); quizSlug: string (Depends on variant)`

### Output schema

`slug: string (Required); kind: string (Required); level: number (Required); lessonSlug: string | null (Required); locale: string (Required); title: string (Required); description: string | null (Required); passingScore: number (Required); questions: array<object> (Required)`

[Complete schema in OpenAPI](https://studiomeyer.academy/v1/openapi.json#/paths/~1v1~1me~1quiz~1{lessonSlug}/get)

The field overview lists names, types and requirement status. Nested structures, variants and validation rules are fully available in the linked OpenAPI contract.

Submit a quiz`POST /v1/me/quiz/{lessonSlug}/submissions`

Permissions

learn:write

Credit effect

None

- `POST /v1/me/quiz/{lessonSlug}/submissions`

**MCP tools:** `academy_quiz_submit`

### Tool annotations

```
{
  "readOnlyHint": false,
  "destructiveHint": false,
  "idempotentHint": false,
  "openWorldHint": false
}
```

### Input schema

`quizSlug: string (Required); answers: object (Required)`

### Output schema

`attemptId: string (Required); score: number (Required); correct: number (Required); total: number (Required); passed: boolean (Required); perQuestion: array<object> (Required)`

[Complete schema in OpenAPI](https://studiomeyer.academy/v1/openapi.json#/paths/~1v1~1me~1quiz~1{lessonSlug}~1submissions/post)

The field overview lists names, types and requirement status. Nested structures, variants and validation rules are fully available in the linked OpenAPI contract.

Read reviews`GET /v1/me/review`

Permissions

learn:read

Credit effect

None

- `GET /v1/me/review`

**MCP tools:** `academy_review`

### Tool annotations

```
{
  "readOnlyHint": true,
  "destructiveHint": false,
  "idempotentHint": true,
  "openWorldHint": false
}
```

### Input schema

`cursor: string (Optional); limit: integer (Optional)`

### Output schema

`items: array<object> (Required); nextCursor: string | null (Required)`

[Complete schema in OpenAPI](https://studiomeyer.academy/v1/openapi.json#/paths/~1v1~1me~1review/get)

The field overview lists names, types and requirement status. Nested structures, variants and validation rules are fully available in the linked OpenAPI contract.

Grade a review`POST /v1/me/review/{cardId}/grade`

Permissions

learn:write

Credit effect

None

- `POST /v1/me/review/{cardId}/grade`

**MCP tools:** `academy_review_grade`

### Tool annotations

```
{
  "readOnlyHint": false,
  "destructiveHint": false,
  "idempotentHint": false,
  "openWorldHint": false
}
```

### Input schema

`id: string (Required); grade: string (Required)`

### Output schema

`id: string (Required); lesson: object (Required); locale: string (Required); dueAt: string (Required); intervalDays: number (Required); repetitions: number (Required)`

[Complete schema in OpenAPI](https://studiomeyer.academy/v1/openapi.json#/paths/~1v1~1me~1review~1{cardId}~1grade/post)

The field overview lists names, types and requirement status. Nested structures, variants and validation rules are fully available in the linked OpenAPI contract.

Create an installation plan`POST /v1/me/installs`

Permissions

learn:write

Credit effect

None

- `POST /v1/me/installs`

**MCP tools:** `academy_install`

### Tool annotations

```
{
  "readOnlyHint": false,
  "destructiveHint": false,
  "idempotentHint": false,
  "openWorldHint": false
}
```

### Input schema

`packageIds: array<string> (Required); existingLockfile: object (Optional); observedFiles: array<object> (Optional); consentDraft: boolean (Optional); consentCandidate: boolean (Optional); consentScripts: boolean (Optional)`

### Output schema

`status: string (Required); files: array<object> (Required); lockfile: object (Required)`

[Complete schema in OpenAPI](https://studiomeyer.academy/v1/openapi.json#/paths/~1v1~1me~1installs/post)

The field overview lists names, types and requirement status. Nested structures, variants and validation rules are fully available in the linked OpenAPI contract.

Read tracked installation plans`GET /v1/me/installs`

Permissions

learn:read

Credit effect

None

- `GET /v1/me/installs`

**MCP tools:** `academy_installs`

### Tool annotations

```
{
  "readOnlyHint": true,
  "destructiveHint": false,
  "idempotentHint": true,
  "openWorldHint": false
}
```

### Input schema

`cursor: string (Optional); limit: integer (Optional)`

### Output schema

`items: array<object> (Required); nextCursor: string | null (Required)`

[Complete schema in OpenAPI](https://studiomeyer.academy/v1/openapi.json#/paths/~1v1~1me~1installs/get)

The field overview lists names, types and requirement status. Nested structures, variants and validation rules are fully available in the linked OpenAPI contract.

Check updates`POST /v1/me/installs/check-updates`

Permissions

learn:read

Credit effect

None

- `POST /v1/me/installs/check-updates`

**MCP tools:** `academy_check_updates`

### Tool annotations

```
{
  "readOnlyHint": true,
  "destructiveHint": false,
  "idempotentHint": true,
  "openWorldHint": false
}
```

### Input schema

`lockfile: object (Required); observedFiles: array<object> (Optional)`

### Output schema

`updates: array<object> (Required)`

[Complete schema in OpenAPI](https://studiomeyer.academy/v1/openapi.json#/paths/~1v1~1me~1installs~1check-updates/post)

The field overview lists names, types and requirement status. Nested structures, variants and validation rules are fully available in the linked OpenAPI contract.

Save feedback`POST /v1/me/feedback`

Permissions

learn:write

Credit effect

None

- `POST /v1/me/feedback`

**MCP tools:** `academy_feedback`

### Tool annotations

```
{
  "readOnlyHint": false,
  "destructiveHint": false,
  "idempotentHint": false,
  "openWorldHint": false
}
```

### Input schema

`itemId: string (Required); disposition: string (Required); text: string (Optional)`

### Output schema

`id: string (Required); savedAt: string (Required)`

[Complete schema in OpenAPI](https://studiomeyer.academy/v1/openapi.json#/paths/~1v1~1me~1feedback/post)

The field overview lists names, types and requirement status. Nested structures, variants and validation rules are fully available in the linked OpenAPI contract.

Prepare a specific credit expense`POST /v1/me/spend-quotes`

Permissions

learn:write, credits:spend

Credit effect

None

- `POST /v1/me/spend-quotes`

**MCP tools:** `academy_prepare_spend`

### Tool annotations

```
{
  "readOnlyHint": false,
  "destructiveHint": false,
  "idempotentHint": true,
  "openWorldHint": false
}
```

### Input schema

`purpose: string (Required); id: string (Depends on variant); level: integer (Depends on variant); slug: string (Depends on variant); message: string (Depends on variant); topic: string (Depends on variant); format: string (Depends on variant); preferredTime: string (Depends on variant)`

### Output schema

`id: string (Required); contentId: string (Required); contentVersion: string (Required); priceVersion: string (Required); credits: integer (Required); expiresAt: string (Required)`

[Complete schema in OpenAPI](https://studiomeyer.academy/v1/openapi.json#/paths/~1v1~1me~1spend-quotes/post)

The field overview lists names, types and requirement status. Nested structures, variants and validation rules are fully available in the linked OpenAPI contract.

Read premium catalog`GET /v1/premium`

Permissions

Public

Credit effect

None

- `GET /v1/premium`

**MCP tools:** `academy_premium_catalog`

### Tool annotations

```
{
  "readOnlyHint": true,
  "destructiveHint": false,
  "idempotentHint": true,
  "openWorldHint": false
}
```

### Input schema

`cursor: string (Optional); limit: integer (Optional)`

### Output schema

`items: array<object> (Required); nextCursor: string | null (Required)`

[Complete schema in OpenAPI](https://studiomeyer.academy/v1/openapi.json#/paths/~1v1~1premium/get)

The field overview lists names, types and requirement status. Nested structures, variants and validation rules are fully available in the linked OpenAPI contract.

Read premium preview`GET /v1/premium/{id}`

Permissions

Public

Credit effect

None

- `GET /v1/premium/{id}`
- `GET /v1/premium/{id}/preview`

**MCP tools:** `academy_premium_preview`

### Tool annotations

```
{
  "readOnlyHint": true,
  "destructiveHint": false,
  "idempotentHint": true,
  "openWorldHint": false
}
```

### Input schema

`id: string (Required)`

### Output schema

`item: object (Required); price: object (Required); preview: string (Required)`

[Complete schema in OpenAPI](https://studiomeyer.academy/v1/openapi.json#/paths/~1v1~1premium~1{id}/get)

The field overview lists names, types and requirement status. Nested structures, variants and validation rules are fully available in the linked OpenAPI contract.

Read credit balance`GET /v1/me/credits`

Permissions

learn:read

Credit effect

None

- `GET /v1/me/credits`

**MCP tools:** `academy_credits`

### Tool annotations

```
{
  "readOnlyHint": true,
  "destructiveHint": false,
  "idempotentHint": true,
  "openWorldHint": false
}
```

### Input schema

`No named fields`

### Output schema

`status: string (Required); bonusCredits: null (Depends on variant); subscriptionCredits: null (Depends on variant); euroValue: null (Depends on variant); spendingEnabled: boolean (Required); purchasesEnabled: boolean (Required); balances: array<object> (Depends on variant)`

[Complete schema in OpenAPI](https://studiomeyer.academy/v1/openapi.json#/paths/~1v1~1me~1credits/get)

The field overview lists names, types and requirement status. Nested structures, variants and validation rules are fully available in the linked OpenAPI contract.

Read ledger`GET /v1/me/credits/ledger`

Permissions

learn:read

Credit effect

None

- `GET /v1/me/credits/ledger`

**MCP tools:** `academy_ledger`

### Tool annotations

```
{
  "readOnlyHint": true,
  "destructiveHint": false,
  "idempotentHint": true,
  "openWorldHint": false
}
```

### Input schema

`cursor: string (Optional); limit: integer (Optional)`

### Output schema

`items: array<object> (Required); nextCursor: string | null (Required)`

[Complete schema in OpenAPI](https://studiomeyer.academy/v1/openapi.json#/paths/~1v1~1me~1credits~1ledger/get)

The field overview lists names, types and requirement status. Nested structures, variants and validation rules are fully available in the linked OpenAPI contract.

Unlock premium`POST /v1/me/premium/{id}/unlock`

Permissions

credits:spend

Credit effect

Spend with approval

- `POST /v1/me/premium/{id}/unlock`

**MCP tools:** `academy_premium_unlock`

### Tool annotations

```
{
  "readOnlyHint": false,
  "destructiveHint": false,
  "idempotentHint": true,
  "openWorldHint": false
}
```

### Input schema

`id: string (Required); consent: object (Required)`

### Output schema

`entitlement: object (Required); ledgerEntryId: string (Required)`

[Complete schema in OpenAPI](https://studiomeyer.academy/v1/openapi.json#/paths/~1v1~1me~1premium~1{id}~1unlock/post)

The field overview lists names, types and requirement status. Nested structures, variants and validation rules are fully available in the linked OpenAPI contract.

List owned content`GET /v1/me/premium`

Permissions

learn:read

Credit effect

None

- `GET /v1/me/premium`

**MCP tools:** `academy_my_premium`

### Tool annotations

```
{
  "readOnlyHint": true,
  "destructiveHint": false,
  "idempotentHint": true,
  "openWorldHint": false
}
```

### Input schema

`cursor: string (Optional); limit: integer (Optional)`

### Output schema

`items: array<object> (Required); nextCursor: string | null (Required)`

[Complete schema in OpenAPI](https://studiomeyer.academy/v1/openapi.json#/paths/~1v1~1me~1premium/get)

The field overview lists names, types and requirement status. Nested structures, variants and validation rules are fully available in the linked OpenAPI contract.

Read owned content`GET /v1/me/premium/{id}`

Permissions

learn:read

Credit effect

None

- `GET /v1/me/premium/{id}`

**MCP tools:** `academy_premium_read`

### Tool annotations

```
{
  "readOnlyHint": true,
  "destructiveHint": false,
  "idempotentHint": true,
  "openWorldHint": false
}
```

### Input schema

`id: string (Required)`

### Output schema

`id: string (Required); requestedLocale: string (Required); content_locale: string (Required); fallback: boolean (Required); version: string | null (Required); status: string | null (Required); updated: string | null (Required); content: object (Required)`

[Complete schema in OpenAPI](https://studiomeyer.academy/v1/openapi.json#/paths/~1v1~1me~1premium~1{id}/get)

The field overview lists names, types and requirement status. Nested structures, variants and validation rules are fully available in the linked OpenAPI contract.

Ask the tutor`POST /v1/me/tutor`

Permissions

learn:write, credits:spend

Credit effect

Spend with approval

- `POST /v1/me/tutor`
- `POST /v1/me/tutor/messages`

**MCP tools:** `academy_tutor`

### Tool annotations

```
{
  "readOnlyHint": false,
  "destructiveHint": false,
  "idempotentHint": true,
  "openWorldHint": true
}
```

### Input schema

`level: integer (Required); slug: string (Required); message: string (Required); consent: object (Required)`

### Output schema

`messageId: string (Required); response: string (Required); ledgerEntryId: string (Required)`

[Complete schema in OpenAPI](https://studiomeyer.academy/v1/openapi.json#/paths/~1v1~1me~1tutor/post)

The field overview lists names, types and requirement status. Nested structures, variants and validation rules are fully available in the linked OpenAPI contract.

Request coaching`POST /v1/me/coaching`

Permissions

learn:write

Credit effect

Depends on input

- `POST /v1/me/coaching`

**MCP tools:** `academy_coaching_request`

### Tool annotations

```
{
  "readOnlyHint": false,
  "destructiveHint": false,
  "idempotentHint": true,
  "openWorldHint": false
}
```

### Input schema

`topic: string (Required); format: string (Required); preferredTime: string (Optional); confirm: boolean (Required); payment: object (Required)`

### Output schema

`id: string (Required); status: string (Required); payment: string (Required)`

[Complete schema in OpenAPI](https://studiomeyer.academy/v1/openapi.json#/paths/~1v1~1me~1coaching/post)

The field overview lists names, types and requirement status. Nested structures, variants and validation rules are fully available in the linked OpenAPI contract.

List legacy levels`GET /v1/legacy/levels`

Permissions

Public

Credit effect

None

- `GET /v1/legacy/levels`

**MCP tools:** `academy_legacy_levels`

**Older names:** `academy_levels`

### Tool annotations

```
{
  "readOnlyHint": true,
  "destructiveHint": false,
  "idempotentHint": true,
  "openWorldHint": false
}
```

### Input schema

`No named fields`

### Output schema

`levels: array<object> (Required)`

[Complete schema in OpenAPI](https://studiomeyer.academy/v1/openapi.json#/paths/~1v1~1legacy~1levels/get)

The field overview lists names, types and requirement status. Nested structures, variants and validation rules are fully available in the linked OpenAPI contract.

List legacy lessons`GET /v1/legacy/levels/{level}/lessons`

Permissions

Public

Credit effect

None

- `GET /v1/legacy/levels/{level}/lessons`

**MCP tools:** `academy_legacy_lessons`

**Older names:** `academy_lessons`

### Tool annotations

```
{
  "readOnlyHint": true,
  "destructiveHint": false,
  "idempotentHint": true,
  "openWorldHint": false
}
```

### Input schema

`level: integer (Required)`

### Output schema

`lessons: array<object> (Required)`

[Complete schema in OpenAPI](https://studiomeyer.academy/v1/openapi.json#/paths/~1v1~1legacy~1levels~1{level}~1lessons/get)

The field overview lists names, types and requirement status. Nested structures, variants and validation rules are fully available in the linked OpenAPI contract.

Read approved purchase offers`GET /v1/commerce/offers`

Permissions

Public

Credit effect

None

- `GET /v1/commerce/offers`

### Input schema

`No named fields`

### Output schema

`status: string (Required); merchant: (string | null) (Required); offers: (array<object> | array<unknown>) (Required); termsUrl: (string | null) (Required); privacyUrl: (string | null) (Required)`

[Complete schema in OpenAPI](https://studiomeyer.academy/v1/openapi.json#/paths/~1v1~1commerce~1offers/get)

The field overview lists names, types and requirement status. Nested structures, variants and validation rules are fully available in the linked OpenAPI contract.

## Sitemap

Public pages of this site as Markdown: [sitemap](https://studiomeyer.academy/sitemap.md). Curated entry point: [llms.txt](https://studiomeyer.academy/llms.txt), full text: [llms-full.txt](https://studiomeyer.academy/llms-full.txt).
