API Changelog

Was gibt's Neues in der API?

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

Oktober 2026

Breaking Change

Feld Mandant.users entfernt

Das Feld users am Typ Mandant wurde entfernt, da es aufgrund eines internen Fehlers keine Daten lieferte. Die Nutzer eines Mandanten liefert usersOfMandant.

  • Entfernt: Mandant.users — Ersatz ist usersOfMandant
Breaking Change

bookingEligibility: neue Status und genauere Antworten

bookingEligibility sagt jetzt genauer, ob und warum ein Termin oder Block buchbar ist. Bestehende Aufrufe bekommen dadurch teils andere Antworten — ein voller Termin etwa FULLY_BOOKED statt BOOKABLE.

  • Sechs neue Werte in BookingEligibilityStatus: FULLY_BOOKED (auch die Warteliste ist voll), NOT_ENOUGH_CREDITS, ONLY_BOOKABLE_AS_BLOCK, CANCELLED, ALREADY_STARTED und ONLY_BOOKABLE_AS_SINGLE_EVENTS (Block nach der Freigabe)
  • Volle Termine melden WAITLIST oder FULLY_BOOKED, abgesagte CANCELLED, begonnene ALREADY_STARTED — bisher jeweils BOOKABLE
  • Fehlende Punkte melden NOT_ENOUGH_CREDITS statt BOOKABLE
  • Block-Termine vor der Freigabe melden ONLY_BOOKABLE_AS_BLOCK statt NOT_YET_OPEN
  • DEADLINE_PASSED steht nur noch für den Anmeldeschluss aus dem Buchungsprofil
  • Ausgebucht und Buchungsfenster sehen jetzt auch ausgeloggte Nutzer, vor NOT_AUTHENTICATED
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
Breaking Change

Onlinezahlung nur bei zahlungsbereitem Mandanten

Ein Mandant kann nur noch etwas gegen Onlinezahlung anbieten und verkaufen, wenn er zahlungsbereit ist: mit Mollie verbunden und mit mindestens einem aktiven Zahlungsmittel in seiner Währung. Ob das zutrifft, liefert MandantBilling.canReceivePayments.

  • Ohne Zahlungsbereitschaft scheitern mit mandant-cant-receive-payments: Speichern mit Onlinezahlung (Termin mit canBePurchased, Block mit money, createProduct, updateProduct, setProductActive) und Kaufen mit Onlinezahlung (createBookingV2, createMultiBookingV2, Blockbuchung, buyShoppingCart)
  • Unverändert möglich: Punkte, Flatrate, manuelle Zahlung und Buchungen mit skipInvoice
Deprecated

Mandant.canReceivePayments abgekündigt

Ob ein Mandant Onlinezahlungen annehmen kann, steht jetzt am MandantBilling. Das Feld am Mandant ist abgekündigt und liefert bis zur Entfernung denselben Wert.

  • Neu: MandantBilling.canReceivePayments: Boolean! über getMandantBilling — ersetzt Mandant.canReceivePayments
  • Mandant.canReceivePayments liefert bei verbundenen Mandanten ohne aktives Zahlungsmittel jetzt false statt true

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

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.