API Changelog

Was gibt's Neues in der API?

Alle Änderungen, neue Endpoints und Breaking Changes — chronologisch dokumentiert.

Oktober 2026

Neu

Blockbuchung: Blöcke anlegen und verwalten

Mehrere Termine eines Kurses lassen sich zu einem Block zusammenfassen, den Teilnehmer als Ganzes buchen. Die Funktion wird je Mandant freigeschaltet.

  • Neues optionales Argument eventBlock: EventBlockInput bei addEventsV2 und createCourse — ist es gesetzt, entstehen die Termine als Block. Höchstens 20 Termine
  • Neues Feld eventBlockId: ID bei AddEventsV2Result
  • Neue Query getEventBlock(eventBlockId: ID!): EventBlock
  • Neue Query getEventBlocks(mandantIds: [ID!], offset: Int, limit: Int, fromDate: Date, toDate: Date): EventBlocksResult! — Blöcke, die den Zeitraum überschneiden, sortiert nach dem ersten Termin, höchstens 50 je Seite
  • Neue Mutation updateEventBlock(eventBlockId: ID!, eventBlock: EventBlockInput!, events: EventBlockEventsInput): EventBlock! — ersetzt die Block-Einstellungen, optional auch die gemeinsamen Termin-Einstellungen
  • Neue Mutation releaseEventBlock(eventBlockId: ID!): Boolean! — gibt die Restplätze einzeln frei und beendet den Blockverkauf; automatisch über autoReleaseDaysBefore
  • Neue Mutation extendEventBlock(sourceEventId: ID!, dates: [CopyEventDateInput!]!, numPlaces: Int, credits: Int, suppressNotifications: Boolean): [Event!]! — trägt Termine nach; bestehende Blockbucher bekommen sie ohne Aufpreis
  • Neue Typen EventBlock, EventBlocksResult, EventBlockInput und EventBlockEventsInput
  • Neues Feld eventBlock: EventBlock beim Typ Event
  • Neue Felder beim Typ Mandant: eventBlocksEnabled: Boolean (darf Blöcke anlegen) und hasEventBlocks: Boolean! (hat mindestens einen Block)
  • copyEvent legt bei einem Block-Termin einen Einzeltermin außerhalb des Blocks an
Neu

Blockbuchung: buchen, bezahlen, stornieren

Teilnehmer buchen einen Block mit einem Aufruf: Alle künftigen Termine werden auf einmal gebucht, der Blockpreis wird einmal bezahlt — mit Punkten, online oder direkt beim Anbieter. Mitglieder einer Block-Flatrate buchen kostenlos.

  • Neue Mutation createEventBlockBooking(eventBlockId: ID!, paymentMethod: EventBlockPaymentMethod): CreateEventBlockBookingResult! — bei Onlinezahlung mit paymentUrl und invoiceId im Ergebnis
  • Neue Mutation createEventBlockBookingForUser(userId: ID!, eventBlockId: ID!, paymentMethod: EventBlockPaymentMethod, skipInvoice: Boolean, suppressNotifications: Boolean): CreateEventBlockBookingResult! — der Anbieter bucht für einen Teilnehmer
  • Neue Mutation deleteEventBlockBooking(eventBlockId: ID!): String! — Storno durch den Teilnehmer bis zum ersten Termin, mit Erstattung des Blockpreises in Punkten. Eine mit Geld bezahlte Blockbuchung storniert nur der Anbieter
  • Neue Mutation deleteEventBlockBookingForUser(userId: ID!, eventBlockId: ID!, refundCredits: Boolean): String! — der Anbieter nimmt einen Teilnehmer heraus, mit oder ohne Erstattung des Blockpreises
  • Neue Query availablePaymentMethodsForEventBlock(eventBlockId: ID!): [MolliePaymentMethod!]!
  • Am EventBlock: angebotene Zahlungsarten paymentMethods (leere Liste = kostenlos), Blockpreis in Punkten credits oder Geldpreis, Block-Flatrate über flatrateUsergroups, dazu bookingEligibility und myEventBlockBooking für den Betrachter
  • Neue Typen EventBlockBooking, EventBlockPurchase (Kaufbeleg), EventBlockRefund und CreateEventBlockBookingResult
  • Neue Enums PaymentMethod (free, credits, money, manual), EventBlockPaymentMethod (credits, money, manual), EventBlockBookingStatus und EventBlockBookingEndedBy
  • Neues Feld eventBlockBooking: EventBlockBooking beim Typ Booking
Neu

Blockbuchung: Absage, Ausfall und Protokoll

Anbieter sagen ganze Blöcke ab, lassen einzelne Block-Termine ausfallen oder verschieben sie auf einen Ersatztermin. Dazu kommen eine Anwesenheitsübersicht je Block, ein neuer Nachrichtentyp und Block-Einträge im Protokoll.

  • Neue Mutation cancelEventBlock(eventBlockId: ID!, futureEvents: EventBlockFutureEvents!, refundCredits: Boolean, hint: String, suppressAllNotifications: Boolean, suppressTrainerNotification: Boolean): Boolean! — sagt einen ganzen Block ab, wahlweise mit Erstattung des Blockpreises
  • Neues Enum EventBlockFutureEvents: cancel (künftige Termine fallen mit aus) oder continueAsSingleEvents (sie laufen als Einzeltermine weiter)
  • Neue Mutation refundEventBlockEvent(eventId: ID!): Boolean! — ein Block-Termin fällt aus, Einzelbucher bekommen ihren Terminpreis zurück
  • Neue Mutation createReplacementEvent(eventId: ID!, date: CopyEventDateInput!, numPlaces: Int): Event! — ein Block-Termin fällt aus und bekommt einen Ersatztermin, alle Buchungen wandern mit. Block-Termine fallen nur über diese beiden Wege aus, nicht über cancelEventV2
  • Neue Felder replacedByEvent: Event und replacementFor: Event beim Typ Event
  • Neues Feld attendanceOverview: EventBlockAttendanceOverview am EventBlock — Auslastung und Anwesenheit je Termin und Teilnehmer, nur für Anbieter und Trainer des Blocks
  • Neuer Wert eventBlockCancelled im Enum MessageType
  • Neue Felder eventBlock und eventBlockBooking beim Typ Log, neuer Filter eventBlockId in LogsSearchParams
  • Zwölf neue Werte im Enum LogType: zehn von eventBlockCreated bis eventBlockEventRefunded, dazu creditsAddedEventBlockBooking und creditsRemovedEventBlockBooking
Neu

Buchungsprofile mit Typ: Termin oder Block

Buchungsprofile haben jetzt einen Typ: event für Termine, block für Blöcke. Aufrufe ohne Typ verhalten sich wie bisher und sehen nur Termin-Profile.

  • Neues Enum BookingProfileType mit event und block
  • Neues Feld type: BookingProfileType! beim Typ BookingProfile
  • Neues optionales Argument type bei bookingProfilesOfMandant — ohne Angabe vorerst nur Termin-Profile. Geplant ist, dass ohne type künftig alle Profile kommen; Clients sollten type deshalb schon jetzt mitgeben
  • Neues optionales Argument type bei createBookingProfile (Standard: event) und updateBookingProfile (ohne Angabe bleibt der Typ)
  • Neue Query bookingProfileEventTemplateCount(bookingProfileId: ID!): Int! — wie viele Terminvorlagen ihr Profil verlieren, wenn es gelöscht wird

August 2026

Neu

Widerruf von Shop-Käufen

Käufer können einen Shop-Kauf innerhalb der Widerrufsfrist widerrufen. Terminkäufe sind gesetzlich vom Widerrufsrecht ausgenommen und erscheinen nicht in der Liste.

  • Neue Query getMyRevocablePurchases: [RevocablePurchase!]! — Käufe mit laufender Frist, inklusive revocationDeadline
  • Neue Mutation declareRevocation(invoiceId: ID!): Revocation!
  • Neue Typen RevocablePurchase und Revocation
  • Ein bereits widerrufener Kauf kann nicht erneut widerrufen werden
Neu

Shop-API für native Apps

Neue Felder rund um Buchung, Rechnung und Zahlung. Alle Änderungen sind additiv.

  • Neue Query availablePaymentMethodsForEvent(eventId: ID!): [MolliePaymentMethod!]!
  • Neue Felder invoiceId: ID und invoiceStatus: InvoiceStatus bei Booking — nur für den Buchenden selbst und Event-Admins, sonst null
  • Neues Feld invoiceId: ID bei CreateBookingV2Result
  • Neues Feld myBooking: Booking bei Event — liefert die eigene Buchung unabhängig von der Einstellung publicParticipantNames
  • Neue Felder molliePaymentStatus und molliePaymentMethod bei Invoice, beide null solange keine Online-Zahlung existiert
Neu

TLC-Charge nachträglich korrigieren

Der Betrag einer bestehenden TLC-Charge lässt sich jetzt korrigieren, ohne sie löschen und neu anlegen zu müssen. Gültigkeitszeitraum und Historie bleiben erhalten.

  • Neue Mutation updateTimeLimitedCredit(id: ID!, amount: Int!): Boolean! — der Wert wird absolut gesetzt, nicht addiert
  • Gültiger Bereich 1–10.000; unveränderte Werte werden abgelehnt
  • validFrom und validUntil bleiben unveränderlich
  • Neuer Log-Typ tlcEdited mit altem und neuem Wert
Neu

Freiplätze auf kostenpflichtigen Terminen

Admins können einen Teilnehmer auf einen kostenpflichtigen Termin buchen, ohne dass eine Rechnung entsteht — für Freiplätze, Gutscheine oder Sonderfälle.

  • Neues optionales Argument skipInvoice: Boolean bei createBookingForUserV2
  • Die Buchung entsteht wie eine kostenlose: keine Rechnung, keine Rechnungs-Mail, wasPurchased bleibt false
  • Nur auf dem Admin-Pfad wirksam; im Protokoll als invoice-skipped vermerkt

Juli 2026

Neu

Bild-Varianten und Logo-Upload

Hochgeladene Bilder werden nicht mehr auf 200×200 verkleinert, sondern in mehreren Größen gespeichert. Neu ist außerdem die Bildart logo mit erhaltener Transparenz. Alle Schema-Änderungen sind additiv — bestehende Clients funktionieren unverändert.

  • Neues Enum PictureKind mit coursePicture und logo
  • Neue Felder bei Picture: kind: PictureKind!, mediumUrl: String, width: Int, height: Int — bei Logos bleiben die Medium-Felder leer
  • Neues optionales Argument kind bei mandantPictures und uploadMandantPictureV2 (Standard: coursePicture)
  • Upload-Fehler melden jetzt konkrete Ursachen (z. B. image-too-large) statt pauschal unsupported-image-format
  • Logos werden als Kurs-, Termin- und Produktbild serverseitig abgelehnt
Neu

Neue Statistik-Query topUsersByBookings

Liefert die Nutzer mit den meisten Buchungen eines Mandanten in einem Zeitraum.

  • Neue Query topUsersByBookings(mandantId: ID!, from: Date!, to: Date!, limit: Int = 10, includeWaitlist: Boolean = false): [UserBookingStat!]!
  • Neuer Typ UserBookingStat mit userId, user, numBookings und numWaitlists

API-Änderungen per E-Mail erhalten

Wir informieren dich bei neuen Features, Breaking Changes und Deprecations.

Du erhältst eine Bestätigungsmail. Abmeldung jederzeit möglich.