chalk|Docs

API Documentation

107 Tools in 10 Modulen. Diese Seite dokumentiert die MCP-/AI-Management-Oberfläche (Claude, Cursor).

REST API (HTTP)

Per HTTP integrieren? Auth, Scopes, Konventionen und curl-Beispiele für /api/v1.

Best Practices

IDs verstehen

Jede Entität (Kurs, Produkt, Event, etc.) hat eine UUID als ID. Du bekommst die ID beim Erstellen zurück, oder findest sie über list_* und get_*_by_slug Tools.

Preise sind in Cent

Alle Preise werden in Cent gespeichert. 9900 = 99,00 €. 0 = kostenlos. So vermeiden wir Rundungsfehler.

Stripe-Sync ist automatisch

Wenn du create_course, create_product, etc. mit einem Preis > 0 aufrufst, wird automatisch ein Stripe-Produkt erstellt. Du musst sync_stripe_product nicht manuell aufrufen.

Slugs müssen einzigartig sein

URL-Slugs (z.B. 'react-masterclass') müssen pro Entitäts-Typ einzigartig sein. Verwende Kleinbuchstaben, Zahlen und Bindestriche.

Reihenfolge: Erst erstellen, dann befüllen

Erst den Kurs erstellen, dann Module, dann Lektionen, dann den Lektionsinhalt (Tiptap). Oder nutze create_course_with_curriculum für alles in einem Schritt.

Veröffentlichen nicht vergessen

Neue Kurse/Events/Produkte sind standardmäßig 'draft'. Sie werden erst im Storefront sichtbar, wenn du publish_course, etc. aufrufst.

Gutscheincodes sind Case-Insensitive

Codes werden automatisch in Großbuchstaben umgewandelt. 'sommer20' und 'SOMMER20' sind derselbe Code.

Einschreibungen sind idempotent

enroll_student zweimal aufrufen erstellt keine doppelte Einschreibung. Du kannst es sicher wiederholen.

Kurse

Kurse sind das Herzstück der Plattform. Jeder Kurs hat Module (Kapitel), die Lektionen enthalten. Lektionen bestehen aus Inhaltsblöcken (Text, Video, Bilder, etc.). Kurse können kostenlos oder kostenpflichtig sein — bei Preis > 0 wird automatisch ein Stripe-Produkt erstellt.

Erstellen

7
create_course

Erstellt einen neuen Kurs. Wenn priceInCents > 0, wird automatisch ein Stripe-Produkt angelegt. Der Kurs startet im Status 'draft' und muss mit publish_course veröffentlicht werden.

{
  "organizationId": "org_abc",
  "createdById": "user_abc",
  "title": "React Masterclass",
  "slug": "react-masterclass",
  "description": "Lerne React von Grund auf",
  "priceInCents": 9900
}
organizationIdstringpflichtDie Organisation-ID. Findest du über die Session.
createdByIdstringpflichtDie User-ID des Erstellers.
titlestringpflichtDer Kurstitel, wie er im Storefront angezeigt wird.
slugstringpflichtURL-Slug. Muss einzigartig sein. z.B. 'react-masterclass'
descriptionstringKursbeschreibung für die Landingpage.
priceInCentsnumberPreis in Cent. 9900 = 99,00 €. Leer oder 0 = kostenlos.
currencystringWährung. Standard: 'eur'
create_course_with_curriculum

Erstellt einen Kurs MIT komplettem Curriculum in einem Schritt. Ideal wenn du einen ganzen Kurs auf einmal importieren möchtest.

dataobjectpflichtKomplettes Kurs-Objekt mit modules[{title, lessons[{title}]}]
create_module

Fügt ein Modul (Kapitel) zu einem bestehenden Kurs hinzu. Die Position wird automatisch ans Ende gesetzt.

{ "courseId": "...", "title": "1. Grundlagen" }
courseIdstringpflichtKurs-ID
titlestringpflichtModultitel, z.B. '1. Grundlagen'
positionnumberPosition (0-basiert). Wenn leer: ans Ende.
create_lesson

Erstellt eine Lektion in einem Modul. Lektionen sind zunächst leer — füge dann Inhalt (Tiptap) hinzu.

moduleIdstringpflichtModul-ID
titlestringpflichtLektionstitel
positionnumberPosition (0-basiert)
add_block

Fügt einen Inhaltsblock zu einer Lektion hinzu. Es gibt 9 Block-Typen: heading (Überschrift), text (Fließtext), list (Liste), quote (Zitat), table (Tabelle), video (Cloudflare Stream), audio (R2), image (R2), file (Download).

lessonIdstringpflichtLektions-ID
typestringpflichtheading, text, list, quote, table, video, audio, image, file
contentstringTextinhalt (für text, heading, list, quote, table)
positionnumberPosition
create_course_block

Block auf der Kurs-Landingpage (nicht in einer Lektion). Wird auf der Verkaufsseite angezeigt.

courseIdstringpflichtKurs-ID
typestringpflichttext, heading, list, quote, table, image
contentstringTextinhalt
enroll_student

Schreibt einen User in einen Kurs ein (kostenlos). Für kostenpflichtige Kurse nutze stattdessen create_checkout_link.

{ "userId": "user_abc", "courseId": "course_xyz" }
userIdstringpflichtUser-ID
courseIdstringpflichtKurs-ID

Lesen

10
list_courses

Listet alle Kurse auf. Kann optional nach Status gefiltert werden.

statusstringdraft, published oder archived. Wenn leer: alle.
get_course

Lädt einen Kurs mit dem kompletten Curriculum (Module → Lektionen → Blöcke).

courseIdstringpflichtKurs-ID (UUID)
get_course_by_slug

Wie get_course, aber du gibst den URL-Slug statt der ID an. Praktisch wenn du die ID nicht kennst.

slugstringpflichtz.B. 'react-masterclass'
get_lesson

Lädt eine einzelne Lektion mit allen Inhaltsblöcken.

lessonIdstringpflichtLektions-ID
get_lesson_blocks

Gibt nur die Inhaltsblöcke einer Lektion zurück (ohne Lektion-Metadaten).

lessonIdstringpflichtLektions-ID
get_course_blocks

Landing-Page-Blöcke eines Kurses (die Verkaufsseite-Inhalte).

courseIdstringpflichtKurs-ID
get_enrollment

Prüft ob ein bestimmter User in einen Kurs eingeschrieben ist. Gibt die Einschreibung zurück oder null.

userIdstringpflichtUser-ID
courseIdstringpflichtKurs-ID
get_course_progress

Zeigt den Lernfortschritt: Prozent, abgeschlossene/gesamt Lektionen.

userIdstringpflichtUser-ID
courseIdstringpflichtKurs-ID
get_completed_lesson_ids

Gibt eine Liste aller Lektions-IDs zurück, die ein User abgeschlossen hat.

userIdstringpflichtUser-ID
courseIdstringpflichtKurs-ID
list_enrolled_courses

Alle Kurse, in denen ein bestimmter User eingeschrieben ist.

userIdstringpflichtUser-ID

Aktualisieren

8
update_course

Ändert Kurs-Felder. Du musst nur die Felder angeben, die sich ändern. Bei Preisänderung wird Stripe automatisch synchronisiert.

courseIdstringpflichtKurs-ID
titlestringNeuer Titel
descriptionstringNeue Beschreibung
priceInCentsnumberNeuer Preis in Cent
publish_course

Setzt den Status auf 'published'. Ab jetzt im Storefront sichtbar und kaufbar.

courseIdstringpflichtKurs-ID
archive_course

Archiviert den Kurs. Nicht mehr sichtbar, aber bestehende Einschreibungen bleiben bestehen.

courseIdstringpflichtKurs-ID
update_module

Ändert Titel oder Position eines Moduls.

moduleIdstringpflichtModul-ID
titlestringNeuer Titel
update_lesson

Aktualisiert eine Lektion.

lessonIdstringpflichtLektions-ID
titlestringNeuer Titel
update_block

Aktualisiert den Inhalt eines Blocks.

blockIdstringpflichtBlock-ID
contentstringNeuer Inhalt
update_course_block

Aktualisiert einen Landing-Page-Block.

blockIdstringpflichtBlock-ID
mark_lesson_complete

Markiert eine Lektion als abgeschlossen für einen User. Aktualisiert den Kursfortschritt.

userIdstringpflichtUser-ID
lessonIdstringpflichtLektions-ID

Löschen

5
delete_course

Löscht den gesamten Kurs inklusive aller Module, Lektionen, Blöcke und Einschreibungen. NICHT rückgängig machbar!

courseIdstringpflichtKurs-ID
delete_module

Löscht ein Modul und alle enthaltenen Lektionen.

moduleIdstringpflichtModul-ID
delete_lesson

Löscht eine Lektion und alle Blöcke.

lessonIdstringpflichtLektions-ID
delete_block

Löscht einen einzelnen Block.

blockIdstringpflichtBlock-ID
delete_course_block

Löscht einen Landing-Page-Block.

blockIdstringpflichtBlock-ID

Produkte

Digitale Produkte zum Download (PDFs, Templates, etc.). Jedes Produkt kann mehrere Dateien haben.

Erstellen

2
create_product

Neues Produkt erstellen. Startet als Entwurf.

organizationIdstringpflichtOrganisation-ID
createdByIdstringpflichtErsteller-ID
namestringpflichtProduktname
slugstringpflichtURL-Slug
priceInCentsnumberPreis in Cent
add_product_file

Quarantäne-Upload prüfen, freigeben und zum Produkt hinzufügen.

productIdstringpflichtProdukt-ID
uploadTokenstringpflichtSigniertes Token aus upload_product_file

Lesen

4
list_products

Alle Produkte.

publishedbooleanFilter
get_product

Produkt mit Dateien.

productIdstringpflichtID
get_product_by_slug

Nach Slug.

slugstringpflichtSlug
list_user_purchased_products

Gekaufte Produkte eines Users.

userIdstringpflichtUser-ID

Aktualisieren

1
update_product

Produkt-Daten ändern.

productIdstringpflichtID

Löschen

2
delete_product

Produkt löschen.

productIdstringpflichtID
delete_product_file

Datei entfernen.

fileIdstringpflichtDatei-ID

Events

Events: Online (Zoom/Meet/Teams), Vor Ort (Adresse), oder Hybrid. Mit Ticket-Kategorien und automatischer Warteliste bei voller Kapazität.

Erstellen

3
create_event

Neues Event erstellen. Unterstützt Online (Zoom, Google Meet, Teams), Vor-Ort (mit Adresse) und Hybrid-Events. Mehrtägige Events: setze startsAt auf den ersten Tag und endsAt auf den letzten Tag.

{
  "organizationId": "org_abc",
  "createdById": "user_abc",
  "title": "React Workshop",
  "slug": "react-workshop",
  "type": "hybrid",
  "location": "TechHub Berlin, Musterstr. 1",
  "onlineUrl": "https://zoom.us/j/123456",
  "startsAt": "2024-03-15T09:00:00Z",
  "endsAt": "2024-03-17T17:00:00Z",
  "capacity": 50
}
organizationIdstringpflichtOrganisation-ID
createdByIdstringpflichtUser-ID des Erstellers
titlestringpflichtEvent-Titel
slugstringpflichtURL-Slug (eindeutig)
descriptionstringEvent-Beschreibung
typestring'online' (Standard), 'offline' oder 'hybrid'
locationstringPhysische Adresse (für offline/hybrid). z.B. 'TechHub Berlin, Musterstr. 1, 10115 Berlin'
onlineUrlstringMeeting-Link: Zoom (https://zoom.us/j/...), Google Meet (https://meet.google.com/...) oder Teams
startsAtstringpflichtStart-Datum und -Uhrzeit (ISO 8601). z.B. '2024-03-15T09:00:00Z'
endsAtstringEnd-Datum und -Uhrzeit. Für mehrtägige Events: letzter Tag + Endzeit. z.B. '2024-03-17T17:00:00Z'
capacitynumberMax. Teilnehmer gesamt. Bei Überschreitung → automatische Warteliste
add_ticket_tier

Ticket-Kategorie (+ Stripe).

eventIdstringpflichtEvent-ID
namestringpflichtz.B. 'VIP'
priceInCentsnumberPreis
register_for_event

User registrieren. Warteliste bei voll.

userIdstringpflichtUser
eventIdstringpflichtEvent
ticketTierIdstringpflichtTicket

Lesen

5
list_events

Alle Events.

get_event

Event mit Tickets.

eventIdstringpflichtID
get_event_by_slug

Nach Slug.

slugstringpflichtSlug
get_attendees

Teilnehmerliste.

eventIdstringpflichtID
list_user_registered_events

Events eines Users.

userIdstringpflichtUser

Aktualisieren

1
update_event

Event-Daten ändern. Nur übergebene Felder werden aktualisiert.

eventIdstringpflichtEvent-ID
titlestringNeuer Titel
typestringonline/offline/hybrid
locationstringNeue Adresse
onlineUrlstringNeuer Meeting-Link
startsAtstringNeues Start-Datum (ISO 8601)
endsAtstringNeues End-Datum (ISO 8601)
capacitynumberNeue Max-Teilnehmer
publishedbooleanVeröffentlicht?

Löschen

2
delete_event

Event löschen.

eventIdstringpflichtID
delete_ticket_tier

Ticket-Kategorie entfernen.

tierIdstringpflichtID

Abonnements

Abo-Stufen mit monatlicher/jährlicher Abrechnung. Stufen enthalten Kurse — User mit aktivem Abo haben automatisch Zugang.

Erstellen

3
create_subscription_tier

Neue Stufe (+ Stripe).

namestringpflichtName
slugstringpflichtSlug
priceInCentsnumberPreis
intervalMonthsnumber1=monatlich, 12=jährlich
assign_course_to_tier

Kurs zuordnen.

tierIdstringpflichtTier
courseIdstringpflichtKurs
subscribe_user

User abonnieren.

userIdstringpflichtUser
tierIdstringpflichtTier

Lesen

6
list_subscription_tiers

Alle Stufen.

get_subscription_tier

Stufe + Kurse.

tierIdstringpflichtID
list_tier_courses

Kurse in Stufe.

tierIdstringpflichtID
get_user_active_subscription

Aktives Abo.

userIdstringpflichtUser
list_user_subscriptions

Alle Abos.

userIdstringpflichtUser
check_course_access

Zugang prüfen (Enrollment, Abo, kostenlos).

userIdstringpflichtUser
courseIdstringpflichtKurs

Aktualisieren

2
update_subscription_tier

Stufe ändern.

tierIdstringpflichtID
update_subscription_status

Status ändern.

subscriptionIdstringpflichtAbo-ID
statusstringpflichtactive/canceled/past_due/expired

Löschen

3
delete_subscription_tier

Stufe löschen.

tierIdstringpflichtID
remove_course_from_tier

Kurs entfernen.

tierIdstringpflichtTier
courseIdstringpflichtKurs
cancel_subscription

Abo kündigen.

subscriptionIdstringpflichtID

Lernpfade

Lernpfade bündeln Kurse, Produkte und Events. Einschreibung schreibt automatisch in alle enthaltenen Kurse ein.

Erstellen

3
create_learning_path

Neuen Pfad erstellen.

organizationIdstringpflichtOrganisation-ID
createdByIdstringpflichtErsteller-ID
titlestringpflichtTitel
slugstringpflichtSlug
add_item_to_path

Item hinzufügen.

pathIdstringpflichtPfad
itemTypestringpflichtcourse/module/event/assessment
enroll_in_path

Einschreiben (+ alle Kurse).

userIdstringpflichtUser
pathIdstringpflichtPfad

Lesen

6
list_learning_paths

Alle Pfade.

get_learning_path

Pfad + Items.

pathIdstringpflichtID
get_learning_path_by_slug

Nach Slug.

slugstringpflichtSlug
get_path_progress

Fortschritt.

userIdstringpflichtUser
pathIdstringpflichtPfad
list_enrolled_paths

Eingeschriebene Pfade.

userIdstringpflichtUser
check_path_completion

Abschluss prüfen.

userIdstringpflichtUser
pathIdstringpflichtPfad

Aktualisieren

4
update_learning_path

Pfad ändern.

pathIdstringpflichtID
publish_learning_path

Veröffentlichen.

pathIdstringpflichtID
archive_learning_path

Archivieren.

pathIdstringpflichtID
reorder_path_items

Items sortieren.

pathIdstringpflichtPfad
itemIdsstring[]pflichtIDs

Löschen

2
delete_learning_path

Pfad löschen.

pathIdstringpflichtID
remove_item_from_path

Item entfernen.

itemIdstringpflichtID

Zahlungen & Stripe

Stripe-Sync, Checkout-Links, Gutscheincode-Anwendung. Produkte werden bei Erstellung automatisch synchronisiert.

Aktionen

5
sync_stripe_product

Entity manuell synchronisieren.

entityIdstringpflichtID
entityTypestringpflichtcourse/product/ticket_tier/learning_path/subscription_tier
sync_all_stripe_products

Alles synchronisieren.

create_checkout_link

Checkout-URL generieren.

userIdstringpflichtUser
userEmailstringpflichtE-Mail
userNamestringpflichtName
itemTypestringpflichtcourse/product/ticket/learning_path/subscription
entityIdstringpflichtEntity-ID
successUrlstringpflichtErfolgs-URL
cancelUrlstringpflichtAbbruch-URL
get_or_create_stripe_customer

Stripe-Kunden anlegen/abrufen.

userIdstringpflichtUser
emailstringpflichtE-Mail
namestringpflichtName
apply_promotion_code

Gutscheincode anwenden.

paymentIntentIdstringpflichtPI-ID
codestringpflichtCode

Gutscheine

Gutscheincodes: Prozent (20%) oder Festbetrag (10 €). Werden in DB + Stripe gespeichert.

Erstellen

1
create_coupon

Gutschein erstellen (DB + Stripe).

{ "code": "SOMMER20", "discountType": "percent", "value": 20 }
codestringpflichtCode
discountTypestringpflichtpercent/fixed
valuenumberpflichtWert
maxRedemptionsnumberMax
expiresAtstringAblauf

Lesen

2
list_coupons

Alle Gutscheine.

searchstringCode-Suche
activebooleanFilter
get_coupon

Einzelner Gutschein.

couponIdstringpflichtID

Aktualisieren

1
toggle_coupon_active

Aktivieren/Deaktivieren.

couponIdstringpflichtID
activebooleanpflichtStatus

Löschen

1
delete_coupon

Löschen (DB + Stripe).

couponIdstringpflichtID

Analytics

Statistiken aus der Datenbank. Umsatz, Einschreibungen, Kunden, Bestellungen.

Übersichten

6
get_platform_stats

Gesamtstatistiken.

get_revenue_summary

Umsatz mit Trend.

daysnumberTage (30)
get_enrollment_stats

Einschreibungen.

get_top_courses

Top-Kurse.

limitnumberAnzahl (5)
get_monthly_revenue

Monatsumsatz (Charts).

monthsnumberMonate (6)
get_monthly_enrollments

Monats-Einschreibungen.

monthsnumberMonate (6)

Kunden & Bestellungen

4
list_customers

Kundenliste.

searchstringSuche
get_customer_detail

Kundenprofil komplett.

userIdstringpflichtUser
list_orders

Bestellungen.

statusstringFilter
searchstringSuche
get_recent_orders

Letzte Bestellungen.

limitnumberAnzahl (10)

Einstellungen

Plattform-Einstellungen: Firma, Rechnungsadresse, Logo, Rechnungsformat.

Lesen & Aktualisieren

2
get_platform_settings

Einstellungen laden.

update_platform_settings

Einstellungen ändern (nur übergebene Felder).

companyNamestringFirma
vatIdstringUSt-IdNr.
billingStreetstringStraße

Dozenten

Dozenten-Branding und Custom Domains.

Aktionen

6
promote_to_instructor

User zum Dozenten machen.

userIdstringpflichtUser
update_instructor_branding

Branding ändern.

userIdstringpflichtUser
add_instructor_domain

Domain hinzufügen.

userIdstringpflichtUser
domainstringpflichtDomain
remove_instructor_domain

Domain entfernen.

domainIdstringpflichtID
list_instructor_domains

Domains.

userIdstringpflichtUser
get_instructor_by_slug

Nach Slug.

slugstringpflichtSlug