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
7create_courseErstellt 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_curriculumErstellt 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_moduleFügt ein Modul (Kapitel) zu einem bestehenden Kurs hinzu. Die Position wird automatisch ans Ende gesetzt.
{ "courseId": "...", "title": "1. Grundlagen" }courseIdstringpflichtKurs-IDtitlestringpflichtModultitel, z.B. '1. Grundlagen'positionnumberPosition (0-basiert). Wenn leer: ans Ende.create_lessonErstellt eine Lektion in einem Modul. Lektionen sind zunächst leer — füge dann Inhalt (Tiptap) hinzu.
moduleIdstringpflichtModul-IDtitlestringpflichtLektionstitelpositionnumberPosition (0-basiert)add_blockFü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-IDtypestringpflichtheading, text, list, quote, table, video, audio, image, filecontentstringTextinhalt (für text, heading, list, quote, table)positionnumberPositioncreate_course_blockBlock auf der Kurs-Landingpage (nicht in einer Lektion). Wird auf der Verkaufsseite angezeigt.
courseIdstringpflichtKurs-IDtypestringpflichttext, heading, list, quote, table, imagecontentstringTextinhaltenroll_studentSchreibt einen User in einen Kurs ein (kostenlos). Für kostenpflichtige Kurse nutze stattdessen create_checkout_link.
{ "userId": "user_abc", "courseId": "course_xyz" }userIdstringpflichtUser-IDcourseIdstringpflichtKurs-IDLesen
10list_coursesListet alle Kurse auf. Kann optional nach Status gefiltert werden.
statusstringdraft, published oder archived. Wenn leer: alle.get_courseLädt einen Kurs mit dem kompletten Curriculum (Module → Lektionen → Blöcke).
courseIdstringpflichtKurs-ID (UUID)get_course_by_slugWie get_course, aber du gibst den URL-Slug statt der ID an. Praktisch wenn du die ID nicht kennst.
slugstringpflichtz.B. 'react-masterclass'get_lessonLädt eine einzelne Lektion mit allen Inhaltsblöcken.
lessonIdstringpflichtLektions-IDget_lesson_blocksGibt nur die Inhaltsblöcke einer Lektion zurück (ohne Lektion-Metadaten).
lessonIdstringpflichtLektions-IDget_course_blocksLanding-Page-Blöcke eines Kurses (die Verkaufsseite-Inhalte).
courseIdstringpflichtKurs-IDget_enrollmentPrüft ob ein bestimmter User in einen Kurs eingeschrieben ist. Gibt die Einschreibung zurück oder null.
userIdstringpflichtUser-IDcourseIdstringpflichtKurs-IDget_course_progressZeigt den Lernfortschritt: Prozent, abgeschlossene/gesamt Lektionen.
userIdstringpflichtUser-IDcourseIdstringpflichtKurs-IDget_completed_lesson_idsGibt eine Liste aller Lektions-IDs zurück, die ein User abgeschlossen hat.
userIdstringpflichtUser-IDcourseIdstringpflichtKurs-IDlist_enrolled_coursesAlle Kurse, in denen ein bestimmter User eingeschrieben ist.
userIdstringpflichtUser-IDAktualisieren
8update_courseÄndert Kurs-Felder. Du musst nur die Felder angeben, die sich ändern. Bei Preisänderung wird Stripe automatisch synchronisiert.
courseIdstringpflichtKurs-IDtitlestringNeuer TiteldescriptionstringNeue BeschreibungpriceInCentsnumberNeuer Preis in Centpublish_courseSetzt den Status auf 'published'. Ab jetzt im Storefront sichtbar und kaufbar.
courseIdstringpflichtKurs-IDarchive_courseArchiviert den Kurs. Nicht mehr sichtbar, aber bestehende Einschreibungen bleiben bestehen.
courseIdstringpflichtKurs-IDupdate_moduleÄndert Titel oder Position eines Moduls.
moduleIdstringpflichtModul-IDtitlestringNeuer Titelupdate_lessonAktualisiert eine Lektion.
lessonIdstringpflichtLektions-IDtitlestringNeuer Titelupdate_blockAktualisiert den Inhalt eines Blocks.
blockIdstringpflichtBlock-IDcontentstringNeuer Inhaltupdate_course_blockAktualisiert einen Landing-Page-Block.
blockIdstringpflichtBlock-IDmark_lesson_completeMarkiert eine Lektion als abgeschlossen für einen User. Aktualisiert den Kursfortschritt.
userIdstringpflichtUser-IDlessonIdstringpflichtLektions-IDLöschen
5delete_courseLöscht den gesamten Kurs inklusive aller Module, Lektionen, Blöcke und Einschreibungen. NICHT rückgängig machbar!
courseIdstringpflichtKurs-IDdelete_moduleLöscht ein Modul und alle enthaltenen Lektionen.
moduleIdstringpflichtModul-IDdelete_lessonLöscht eine Lektion und alle Blöcke.
lessonIdstringpflichtLektions-IDdelete_blockLöscht einen einzelnen Block.
blockIdstringpflichtBlock-IDdelete_course_blockLöscht einen Landing-Page-Block.
blockIdstringpflichtBlock-IDProdukte
Digitale Produkte zum Download (PDFs, Templates, etc.). Jedes Produkt kann mehrere Dateien haben.
Erstellen
2create_productNeues Produkt erstellen. Startet als Entwurf.
organizationIdstringpflichtOrganisation-IDcreatedByIdstringpflichtErsteller-IDnamestringpflichtProduktnameslugstringpflichtURL-SlugpriceInCentsnumberPreis in Centadd_product_fileQuarantäne-Upload prüfen, freigeben und zum Produkt hinzufügen.
productIdstringpflichtProdukt-IDuploadTokenstringpflichtSigniertes Token aus upload_product_fileLesen
4list_productsAlle Produkte.
publishedbooleanFilterget_productProdukt mit Dateien.
productIdstringpflichtIDget_product_by_slugNach Slug.
slugstringpflichtSluglist_user_purchased_productsGekaufte Produkte eines Users.
userIdstringpflichtUser-IDAktualisieren
1update_productProdukt-Daten ändern.
productIdstringpflichtIDLöschen
2delete_productProdukt löschen.
productIdstringpflichtIDdelete_product_fileDatei entfernen.
fileIdstringpflichtDatei-IDEvents
Events: Online (Zoom/Meet/Teams), Vor Ort (Adresse), oder Hybrid. Mit Ticket-Kategorien und automatischer Warteliste bei voller Kapazität.
Erstellen
3create_eventNeues 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-IDcreatedByIdstringpflichtUser-ID des ErstellerstitlestringpflichtEvent-TitelslugstringpflichtURL-Slug (eindeutig)descriptionstringEvent-Beschreibungtypestring'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 TeamsstartsAtstringpflichtStart-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 Wartelisteadd_ticket_tierTicket-Kategorie (+ Stripe).
eventIdstringpflichtEvent-IDnamestringpflichtz.B. 'VIP'priceInCentsnumberPreisregister_for_eventUser registrieren. Warteliste bei voll.
userIdstringpflichtUsereventIdstringpflichtEventticketTierIdstringpflichtTicketLesen
5list_eventsAlle Events.
get_eventEvent mit Tickets.
eventIdstringpflichtIDget_event_by_slugNach Slug.
slugstringpflichtSlugget_attendeesTeilnehmerliste.
eventIdstringpflichtIDlist_user_registered_eventsEvents eines Users.
userIdstringpflichtUserAktualisieren
1update_eventEvent-Daten ändern. Nur übergebene Felder werden aktualisiert.
eventIdstringpflichtEvent-IDtitlestringNeuer Titeltypestringonline/offline/hybridlocationstringNeue AdresseonlineUrlstringNeuer Meeting-LinkstartsAtstringNeues Start-Datum (ISO 8601)endsAtstringNeues End-Datum (ISO 8601)capacitynumberNeue Max-TeilnehmerpublishedbooleanVeröffentlicht?Löschen
2delete_eventEvent löschen.
eventIdstringpflichtIDdelete_ticket_tierTicket-Kategorie entfernen.
tierIdstringpflichtIDAbonnements
Abo-Stufen mit monatlicher/jährlicher Abrechnung. Stufen enthalten Kurse — User mit aktivem Abo haben automatisch Zugang.
Erstellen
3create_subscription_tierNeue Stufe (+ Stripe).
namestringpflichtNameslugstringpflichtSlugpriceInCentsnumberPreisintervalMonthsnumber1=monatlich, 12=jährlichassign_course_to_tierKurs zuordnen.
tierIdstringpflichtTiercourseIdstringpflichtKurssubscribe_userUser abonnieren.
userIdstringpflichtUsertierIdstringpflichtTierLesen
6list_subscription_tiersAlle Stufen.
get_subscription_tierStufe + Kurse.
tierIdstringpflichtIDlist_tier_coursesKurse in Stufe.
tierIdstringpflichtIDget_user_active_subscriptionAktives Abo.
userIdstringpflichtUserlist_user_subscriptionsAlle Abos.
userIdstringpflichtUsercheck_course_accessZugang prüfen (Enrollment, Abo, kostenlos).
userIdstringpflichtUsercourseIdstringpflichtKursAktualisieren
2update_subscription_tierStufe ändern.
tierIdstringpflichtIDupdate_subscription_statusStatus ändern.
subscriptionIdstringpflichtAbo-IDstatusstringpflichtactive/canceled/past_due/expiredLöschen
3delete_subscription_tierStufe löschen.
tierIdstringpflichtIDremove_course_from_tierKurs entfernen.
tierIdstringpflichtTiercourseIdstringpflichtKurscancel_subscriptionAbo kündigen.
subscriptionIdstringpflichtIDLernpfade
Lernpfade bündeln Kurse, Produkte und Events. Einschreibung schreibt automatisch in alle enthaltenen Kurse ein.
Erstellen
3create_learning_pathNeuen Pfad erstellen.
organizationIdstringpflichtOrganisation-IDcreatedByIdstringpflichtErsteller-IDtitlestringpflichtTitelslugstringpflichtSlugadd_item_to_pathItem hinzufügen.
pathIdstringpflichtPfaditemTypestringpflichtcourse/module/event/assessmentenroll_in_pathEinschreiben (+ alle Kurse).
userIdstringpflichtUserpathIdstringpflichtPfadLesen
6list_learning_pathsAlle Pfade.
get_learning_pathPfad + Items.
pathIdstringpflichtIDget_learning_path_by_slugNach Slug.
slugstringpflichtSlugget_path_progressFortschritt.
userIdstringpflichtUserpathIdstringpflichtPfadlist_enrolled_pathsEingeschriebene Pfade.
userIdstringpflichtUsercheck_path_completionAbschluss prüfen.
userIdstringpflichtUserpathIdstringpflichtPfadAktualisieren
4update_learning_pathPfad ändern.
pathIdstringpflichtIDpublish_learning_pathVeröffentlichen.
pathIdstringpflichtIDarchive_learning_pathArchivieren.
pathIdstringpflichtIDreorder_path_itemsItems sortieren.
pathIdstringpflichtPfaditemIdsstring[]pflichtIDsLöschen
2delete_learning_pathPfad löschen.
pathIdstringpflichtIDremove_item_from_pathItem entfernen.
itemIdstringpflichtIDZahlungen & Stripe
Stripe-Sync, Checkout-Links, Gutscheincode-Anwendung. Produkte werden bei Erstellung automatisch synchronisiert.
Aktionen
5sync_stripe_productEntity manuell synchronisieren.
entityIdstringpflichtIDentityTypestringpflichtcourse/product/ticket_tier/learning_path/subscription_tiersync_all_stripe_productsAlles synchronisieren.
create_checkout_linkCheckout-URL generieren.
userIdstringpflichtUseruserEmailstringpflichtE-MailuserNamestringpflichtNameitemTypestringpflichtcourse/product/ticket/learning_path/subscriptionentityIdstringpflichtEntity-IDsuccessUrlstringpflichtErfolgs-URLcancelUrlstringpflichtAbbruch-URLget_or_create_stripe_customerStripe-Kunden anlegen/abrufen.
userIdstringpflichtUseremailstringpflichtE-MailnamestringpflichtNameapply_promotion_codeGutscheincode anwenden.
paymentIntentIdstringpflichtPI-IDcodestringpflichtCodeGutscheine
Gutscheincodes: Prozent (20%) oder Festbetrag (10 €). Werden in DB + Stripe gespeichert.
Erstellen
1create_couponGutschein erstellen (DB + Stripe).
{ "code": "SOMMER20", "discountType": "percent", "value": 20 }codestringpflichtCodediscountTypestringpflichtpercent/fixedvaluenumberpflichtWertmaxRedemptionsnumberMaxexpiresAtstringAblaufLesen
2list_couponsAlle Gutscheine.
searchstringCode-SucheactivebooleanFilterget_couponEinzelner Gutschein.
couponIdstringpflichtIDAktualisieren
1toggle_coupon_activeAktivieren/Deaktivieren.
couponIdstringpflichtIDactivebooleanpflichtStatusLöschen
1delete_couponLöschen (DB + Stripe).
couponIdstringpflichtIDAnalytics
Statistiken aus der Datenbank. Umsatz, Einschreibungen, Kunden, Bestellungen.
Übersichten
6get_platform_statsGesamtstatistiken.
get_revenue_summaryUmsatz mit Trend.
daysnumberTage (30)get_enrollment_statsEinschreibungen.
get_top_coursesTop-Kurse.
limitnumberAnzahl (5)get_monthly_revenueMonatsumsatz (Charts).
monthsnumberMonate (6)get_monthly_enrollmentsMonats-Einschreibungen.
monthsnumberMonate (6)Kunden & Bestellungen
4list_customersKundenliste.
searchstringSucheget_customer_detailKundenprofil komplett.
userIdstringpflichtUserlist_ordersBestellungen.
statusstringFiltersearchstringSucheget_recent_ordersLetzte Bestellungen.
limitnumberAnzahl (10)Einstellungen
Plattform-Einstellungen: Firma, Rechnungsadresse, Logo, Rechnungsformat.
Lesen & Aktualisieren
2get_platform_settingsEinstellungen laden.
update_platform_settingsEinstellungen ändern (nur übergebene Felder).
companyNamestringFirmavatIdstringUSt-IdNr.billingStreetstringStraßeDozenten
Dozenten-Branding und Custom Domains.
Aktionen
6promote_to_instructorUser zum Dozenten machen.
userIdstringpflichtUserupdate_instructor_brandingBranding ändern.
userIdstringpflichtUseradd_instructor_domainDomain hinzufügen.
userIdstringpflichtUserdomainstringpflichtDomainremove_instructor_domainDomain entfernen.
domainIdstringpflichtIDlist_instructor_domainsDomains.
userIdstringpflichtUserget_instructor_by_slugNach Slug.
slugstringpflichtSlug