Changelog
Jede Änderung an der API steht hier, mit Version und Datum. Breaking Changes gibt es nur mit neuer Pfad-Version und mindestens zwölf Monaten Vorlauf.
v1.411.0 · 10. November 2026
- Neu: Berichte der Anwesenheit für eine Auswahl.
learning.createAttendanceReportnimmtcontactListId(eine Klasse; es zählen ihre Mitglieder, die Teilnehmer sind) odercontactIds(1 bis 500 Teilnehmer), nicht beides; ohne beides wie bisher alle Teilnehmer. PDF und CSV nennen nur die Gewählten. Zwei geltende Berichte dürfen sich nur für dieselbe Person nicht überschneiden (409period-overlaps), undattendance-finalizedgilt nur für die Personen im Bericht. Ist niemand in der Auswahl Teilnehmer:no-participants. Jeder Bericht trägtselection(course,contactList,contacts),contactListIdundcontactIds.
v1.410.0 · 10. November 2026
- Neu: Ereignisse
learning.attendance.minimumAtRisk(die Mindestanwesenheit eines Kurses ist nur noch mit allen offenen Terminen zu schaffen) undlearning.attendance.minimumUnreachable(nicht mehr zu schaffen), je Stufe, Kurs und Kontakt einmal, täglich geprüft, nur für Kurse Ihrer Organisation. Nutzlast nur Kennungen und Zahlen:courseId,sharedCourseId(null),contactId,attendedCount,pastCount,totalCount,requiredCount,minimumPercent; dieselbe Rechnung wiestatusinlearning.getCourseAttendance.
v1.409.0 · 10. November 2026
- Neu: festgeschriebene Berichte der Anwesenheit.
learning.createAttendanceReport(POST /learning/courses/{id}/attendance-reports) friert die Liste eines Kurses für einen Zeitraum ein (from,to, Kalendertage einschliesslich) oder ohne Angabe für den ganzen Kurs und stellt ein PDF mit Prüfcode aus (document); jeder Termin des Zeitraums mit Datum muss vorbei sein (409sessions-pending), mindestens einer muss darin liegen (no-sessions), und kein geltender Bericht darf einen Tag teilen (409period-overlaps).learning.listAttendanceReports,learning.getAttendanceReport(mit eingefrorenensessionsunddata),learning.getAttendanceReportCsvundlearning.cancelAttendanceReport(storniert auch das PDF). Nachträge zu Terminen eines geltenden Berichts lehnenlearning.createAttendanceEntryundlearning.revokeAttendanceEntrymit409attendance-finalizedab. Solange Berichte in einer Umgebung nicht freigeschaltet sind, gibt das Festschreibenfeature-not-availablemitreason: "attendance-reports-disabled".
v1.408.0 · 10. November 2026
- Neu: Anwesenheitsliste einer Klasse.
learning.getContactListAttendance(GET /contact-lists/{id}/learning-attendance) liefert je heutigem Mitglied der Klasse und Terminlektion aller Kurse, die die Klasse über einen Zugang hat, dieselben Zellen wielearning.getCourseAttendance, dazu besucht undstatusje Kurs und besucht und Quote über alle Kurse. Jede Sitzung trägtcourseIdundsharedCourseId(nullbei eigenen Kursen); wer in einem Kurs keine Vergabe hat, steht dort mitnotParticipant: trueund ohne Zellen.learning.getContactListAttendanceCsvliefert dieselbe Liste als CSV. Nur lesen; Nachträge und Berichte gehen je Kurs.
v1.407.0 · 10. November 2026
- Neu: Profile des Finders verwalten.
finder.listProfiles(GET /finder/profiles) liefert alle Behandler-Profile der Organisation in jedem Zustand, mit FilterstatusundcontactId; die öffentliche Sicht bleibtGET /finder/practitioners.finder.deleteProfile(DELETE /finder/profiles/{id}, Rechtfinder:write) löscht ein archiviertes Profil endgültig samt Anfragen, Prüfrunden, Zertifikaten und Orten und nennt in der Antwort, wie viele es waren; ein Profil in einem anderen Zustand gibt409 conflictmitreason: "profile-not-archived". - Geändert:
contacts.merge(POST /contacts/{id}/merge) scheitert nicht mehr an einem archivierten Finder-Profil. Es wird beim Zusammenführen gelöscht, samt Anfragen, Prüfrunden, Zertifikaten und Orten; es bleibt höchstens ein Profil (das nicht archivierte, sonst das des Siegers, sonst das zuletzt geänderte).409mitpractitioner-profiles-on-multiplekommt nur noch, wenn zwei nicht archivierte Profile zusammenträfen.
v1.406.0 · 9. November 2026
- Neu: Nachträge zur Anwesenheit.
learning.createAttendanceEntryträgt zu einer Terminlektion „vor Ort“ (onSite, zählt als besucht und hakt die Lektion ab) oder „entschuldigt“ (excused) mit Grund nach; höchstens einer je Teilnehmer und Lektion (409already-recorded).learning.revokeAttendanceEntrynimmt ihn zurück und gibt ihn mitrevokedAtzurück. Jede Zelle der Anwesenheitsliste trägtentry. Die Liste, ihre CSV und die Nachträge nehmen als{id}auch diecourseIdeines freigegebenen Kurses (learning.listSharedCourses), ohne Termin der Anbieterin. Solange Nachträge in einer Umgebung nicht freigeschaltet sind, gibt das Eintragenfeature-not-availablemitreason: "attendance-entries-disabled".
v1.405.0 · 9. November 2026
- Neu: Anwesenheitsliste eines Kurses.
learning.getCourseAttendanceliefert je Teilnehmer und Terminlektion Minuten und Anteil im Termin (gemessen im Live-Raum, nur die Zeit von Beginn bis Ende),measurement(upcoming,measured,absent,notMeasured,cancelled), besucht, Quote undstatusgegen die Mindestanwesenheit des Abschlusses (onTrack,atRisk,unreachable);learning.getCourseAttendanceCsvdieselbe Liste als CSV. Nur für Kurse Ihrer Organisation; ein freigegebener Kurs gibt nochnot-found(kommt mit den Nachträgen). - Geändert: Eine Terminlektion gilt erst als besucht, wenn die Person während des Termins im Live-Raum war (nur die Zeit von Beginn bis Ende), nicht schon im offenen Raum davor oder danach. Das betrifft den Lektionsstand in
learning.getCourseParticipantsofort,completedCountinlearning.getCourseProgress,learning.listCompletionsund das Ereignislearning.course.completed, sobald der Abschluss an Terminlektionen hängt. Bereits festgehaltene Lektionen bleiben erledigt; die Regel greift erst beim nächsten Festhalten.
v1.404.0 · 9. November 2026
- Neu: freigegebene, aber nicht versendete Rechnungen erneut senden.
POST /invoices/plan-runs/resend(Rumpf wierelease,runId) undPOST /invoices/resend-released(ids, 1 bis 200) senden nur Rechnungen, die freigegeben, aber noch nicht versendet sind, mit 200 und{ sent, notSent, notSentInvoices, skipped }:notSentwie bei der Freigabe (Grund → Anzahl),notSentInvoicesje Rechnung mitid,numberundreason(Schlüssel der Versandlogik),skippedfür Kennungen ohne solche Rechnung. Nur ORG_ADMIN. Neu anGET /invoices/plan-runs:releasedNotSentje Lauf. - Geändert:
GET /invoices/plan-runsnennt einen Lauf auch dann, wennwaiting0 ist undreleasedNotSentgrößer als 0. Automatisch versendete Rechnungen (Abo-Folge, Freigabe nachgereichter und Plan-Rechnungen, Anlauf-Einzug) stehen nach dem Versand aufSENTund meldeninvoices.invoice.sent, wie ein Versand mitPOST /invoices/{id}/send; vorher blieben sie aufISSUEDohne Ereignis.
v1.403.0 · 9. November 2026
- Neu: Zahlungsbedingung für viele Kontakte.
POST /contacts/billing-defaults/update(Scopecontacts:write) setzt die Standard-Zahlungsbedingung ancontactIds(1 bis 500) oder an allen Treffern einesfiltermit den Feldern vonGET /contacts(q,type,tag,responsible,directDebitMandate), genau eines von beiden;paymentTermId: nullnimmt die eigene weg. Antwort{ matched, unchanged, overwritten, updated }mit 200.POST /contacts/billing-defaults/update/preview(Scopecontacts:read) zählt mit demselben Rumpf, ohne zu ändern,{ matched, unchanged, overwritten }. Mehr als 5.000 Treffer: 422precondition-failed,reason: too-many-contacts, mitmatched. Eine archivierte Zahlungsbedingung gilt als nicht gefunden (404). WiePATCH /contacts/{id}/billing-defaultslöst der Lauf kein Ereignis aus. Neu anGET /contacts:directDebitMandate=valid|notValid, Kontakte mit oder ohne gültiges SEPA-Lastschriftmandat (Status GUELTIG und nicht nach 36 Monaten ohne Nutzung verfallen).
v1.402.0 · 7. November 2026
- Geändert: Zugänge, Vergaben, Klassen am Zugang und Zugänge am Artikel gehen jetzt mit einem der Rechte
LERN_BIBLIOTHEK(Bibliothek) oderLERN_KURSE(Kurse), wie sieGET /organization/entitlementszeigt; vorher nur mitLERN_BIBLIOTHEK. Betroffen:learning.listAccesses,learning.createAccess,learning.updateAccess,learning.archiveAccess,learning.unarchiveAccess,learning.listGrants,learning.grantAccess,learning.revokeAccess,learning.revokeAccessOfContact,learning.getAccessContactLists,learning.setAccessContactLists,learning.getArticleAccesses,learning.setArticleAccesses. Eine Sammlung im Zugang braucht weiterLERN_BIBLIOTHEK, ein KursLERN_KURSE; wer einen Zugang mit Sammlung UND Kurs anlegt, braucht beide, sonstfeature-not-available. Ausnahme:learning.setAccessCollectionsundlearning.setAccessCoursesmit leerer Liste gehen mit einem der beiden. Die Automations-Aktionenlern-zugang-gewaehrenundlern-zugang-entziehenrufenlearning.grantAccessundlearning.revokeAccessOfContactund folgen damit derselben Regel.
v1.401.0 · 7. November 2026
- Neu:
responsibleContactId(nullable) am Kurs (learning.getCourse,learning.listCourses,learning.updateCourse): ein Kontakt, der als Lehrkraft geführt wird; er beantwortet Fragen und Abgaben im Portal unter „Als Lehrkraft“. Die beiden Felder schliessen sich aus; das Setzen des einen leert das andere. Beide mit einem Wert zugleich gibtinvalid_combination, ein Kontakt ohne Lehrkraft-Eintragnot-foundanbody.responsibleContactId. - Neu:
feedback.contactId(nullable) an jeder Runde inlearning.getSubmission: die Kontakt-Lehrkraft, wenn sie im Portal zurückgemeldet hat; dann istuserIdnull.
v1.400.0 · 7. November 2026
- Neu:
sharedCourseId(nullable) an jeder Abgabe (learning.listSubmissions,learning.getSubmission) und jedem Abschluss (learning.listCompletions) sowie in den Ereignissenlearning.submission.submitted,learning.submission.reviewedundlearning.course.completed: die Freigabe, wenn der Kurs einer anderen Organisation gehört (dann direkt zulearning.getSharedCourse), bei eigenen Kursennull. - Neu:
certificateTemplateIdauch an jedem Eintrag vonlearning.listSharedCourses, nicht nur inlearning.getSharedCourse.
v1.399.0 · 7. November 2026
- Neu:
learning.setSharedCourseCertificatesetzt Ihre eigene Zertifikat-Vorlage für einen freigegebenen Kurs oder entfernt sie (null); schon Abgeschlossene ohne Zertifikat bekommen es nachträglich (issuedCount). DazucertificateTemplateIdanlearning.getSharedCourse. Die Vorlage der anbietenden Organisation gilt bei Ihnen nicht. - Geändert:
learning.listCourseParticipants,learning.getCourseParticipant,learning.completeParticipantLesson,learning.reopenParticipantLesson,learning.getCourseProgressundlearning.resetQuizAttemptsnehmen auch diecourseIdeines freigegebenen Kurses (auslearning.listSharedCourses); Teilnehmer sind Ihre Kontakte mit einer Vergabe über diese Freigabe.learning.getCoursegibt für diese Kennung weiter 404. - Geändert:
learning.listSubmissionsundlearning.listCompletionsliefern auch Abgaben und Abschlüsse zu freigegebenen Kursen; ihrcourseIdist die Kennung des Kurses der anbietenden Organisation, der FiltercourseIdwirkt auf beide. Dieselbe Kennung steht inlearning.submission.*undlearning.course.completed.
v1.398.0 · 6. November 2026
- Neu:
learning.releaseSharedCourseItemgibt eine Stelle (course,module,lesson) eines freigegebenen Kurses allen frei, die ihn gerade über einen Zugang haben, je Person ein Eingriff „Jetzt freigeben“ mit Grund (releasedzählt sie, 0 ist kein Fehler). DazuwaitsForAppointmentam Kurs, an jedem Modul und an jeder Lektion inlearning.getSharedCourse. - Geändert: In freigegebenen Kursen erscheint eine Bedingung „nach Termin“ der anbietenden Organisation bei Ihnen als
manual(nieafterAppointment). Erkennbar ist sie anwaitsForAppointmentinlearning.getSharedCourse; freigeben mitlearning.releaseSharedCourseItemoderlearning.createIntervention. - Geändert:
learning.createInterventionnimmt jetzt auch Kurs, Modul und Lektion eines freigegebenen Kurses an, wenn der Zugang der Vergabe die Freigabe trägt.
v1.397.0 · 6. November 2026
- Neu: Kurse, die andere Organisationen Ihrer Organisation freigegeben haben.
learning.listSharedCourses(mitproviderName,createdAt,endedAt,active; beendete Freigaben, solange bei Ihnen Zugänge laufen),learning.getSharedCourse(Kopf und Gliederung nur lesend, in der Form eigener Kurse) undlearning.setAccessSharedCourses.sharedCourseIdsan jedem Zugang und anlearning.createAccess. Eine beendete Freigabe lässt sich nicht neu hinzufügen (422shared-course-ended), eine unbekannte steht als Fehler anbody.sharedCourseIds.
v1.396.0 · 6. November 2026
- Neu: Kurse an andere Organisationen freigeben, Seite der Anbieterin.
learning.listCourseShareConnections(aktive Verbindungen zur Kursfreigabe),learning.listCourseShares(Freigaben eines Kurses mitparticipantCount, der Zahl der Teilnehmer mit laufendem Zugang bei der anderen Organisation, ohne Namen),learning.shareCourse(201,created) undlearning.endCourseShare(laufende Zugänge dort laufen bis zu ihrem Ende weiter; schon beendet: 409already-ended). Alle nur Administration. Fehler: 404connection-unknown, 422connection-not-active,connection-revoked,connection-wrong-purpose,course-not-published. - Geändert:
learning.archiveCoursebeendet die Freigaben des Kurses an andere Organisationen; laufende Zugänge dort laufen bis zu ihrem Ende weiter. Zurückholen (learning.unarchiveCourse) öffnet sie nicht wieder.
v1.395.0 · 6. November 2026
- Neu an jeder Sammlung (
learning.listCollections,learning.createCollection,learning.updateCollectionund alle Antworten mit einer Sammlung):recommendation(„Passend dazu“, dieselbe Form wie am Kurs: eine andere Sammlung, ein Kurs oder ein eigener Link), schreibbar beim Anlegen und Ändern;nullentfernt die Empfehlung, fehlt das Feld, bleibt sie. Eine Sammlung kann sich nicht selbst empfehlen (422 anrecommendation.collectionId).
v1.394.0 · 6. November 2026
- Neu an jedem Kurs (
learning.*Course*):withoutLearningControl(„Ohne Lernkontrolle“: keine Fragen an die Lehrkraft und keine Abgabe-Lektionen; Quiz und Termin-Lektionen bleiben; Vorgabefalse), schreibbar anlearning.createCourseundlearning.updateCourse. Einschalten, solange der Kurs Abgabe-Lektionen hat (Entwürfe eingeschlossen): 422precondition-failedmitassignments-present,lessonIds(höchstens 100) undassignmentCount. - Geändert: In einem Kurs mit
withoutLearningControllehntlearning.createLessonmittype: "assignment"ab (422precondition-failed,without-learning-control), und der Kurs-Import legt Abgabe-Lektionen der Quelle nicht an bzw. stellt keine auf Abgabe um; sie stehen unterkeptmitreason: "without-learning-control". Clients sollen unbekannte Gründe inkeptallgemein behandeln.
v1.393.0 · 6. November 2026
- Neu an
learning.getAppointmentMaterialundlearning.updateAppointmentMaterial:recordingCollectionId(wirksame Sammlung der Aufzeichnung) und die ÜbersteuerungrecordingCollectionOverride({ collectionId }odernull= wie die Terminart; „keine Sammlung“ gibt es am Termin nicht, unbekannt: 422 anbody.recordingCollectionOverride.collectionIdmitnot-found). Wechselt die wirksame Sammlung ohnerecordingFolderOverride, gilt am Termin wieder der Ordner der Terminart. - Neu:
learning.addAppointmentRecordings(POST /appointments/{id}/learning-material/recordings) legt fertige Video-Aufzeichnungen des Termins ohne Lerninhalt nachträglich als Entwurf in Sammlung, Ordner und Frist des Termins; Antwort 200 mitcreatedundrecordings. 422recording-consent-incomplete(behebbar mitconfirmIncompleteConsent: true) undno-target-collection. Dazu anlearning.getAppointmentMaterialdie Listerecordings(nur, was der Zugang sehen darf). - Geändert:
visibleDaysAfterReleaseist jetzt anlearning.createContentundlearning.updateContentschreibbar (1 bis 3650 odernull) und gilt für jeden Inhalt, nicht nur für Aufzeichnungen; bisher nur lesend an Aufzeichnungen. Ungültig: 422 anbody.visibleDaysAfterRelease.
v1.392.0 · 6. November 2026
- Neu an den Unterzeichner-Plätzen einer PDF-Vorlage (
templates.getPdf,templates.updatePdf,signerSlots):contactId, ein vorgeschlagener Kontakt mit E-Mail-Adresse, der über den Link der E-Signatur unterschreibt (etwa eine Lehrkraft, die kein Mitglied ist). Ein Platz trägtuserIdodercontactId, nie beides. Fehlt der Kontakt oder hat er keine E-Mail-Adresse: 422 anbody.signerSlotsmitinvalid_reference. - Neu an ausgestellten Dokumenten (
letters.getIssuedund die übrigen Antworten mit dem Dokument,signature.slots):suggestedContactId, der Kontakt, den die Vorlage für den Platz vorschlägt (null, wenn sie ein Mitglied oder niemanden vorschlägt).
v1.391.0 · 6. November 2026
- Geändertes Verhalten: Gehört eine Aufgabe zu einer Wiedervorlage aus der Anrufliste (die Pipeline legt sie an), folgt die Karte ihr:
PATCH /tasks/{id}mit neuerdueDateverschiebt die Wiedervorlage der Karte;statusDONE,DELETE /tasks/{id}oderdueDate: nullnehmen sie zurück (eine geparkte Karte behält sie); wieder geöffnet kommt sie mit der Fälligkeit der Aufgabe zurück. Gilt auch fürPOST /tasks/{id}/status. Andere Felder ändern an der Karte nichts.
v1.390.0 · 6. November 2026
- Geändert: Für einen Metabolic-Balance-Fall zählt die jüngste Einreichung des Bogens, die noch keinem früheren Fall dieser Akte gedient hat, auch wenn sie vor dem Start kam; bisher nur eine nach dem Start.
form.responseId/form.submittedAtanclients.listMetabolicBalanceCasesundstartMetabolicBalanceCasesowie die Übergabe (…/handover,…/handover/send) folgen dieser Regel;submittedAtkann vorstartedAtliegen. Das gilt auch für bereits laufende Fälle. - Geändert: In die Übergabe an Metabolic Balance (
…/handover,bloodValues, und…/handover/send) gehen nur Werte aus freigegebenen Berichten, ausgelesen oder von Hand; bisher genügte ein gelesener Bericht, auch im Entwurf. Abgelehnte Berichte zählen nirgends. Im Fall (report) zählen Berichte von Hand ab eingereicht; ist schon alles gelesen, aber noch nicht alles freigegeben, sagt der Schrittreportdas.
v1.389.0 · 5. November 2026
- Neu an
learning.getAppointmentTypeMaterialundlearning.setAppointmentTypeMaterial:recordingFolderId(Ordner der Ziel-Sammlung für die Aufzeichnung,null= oberste Ebene; nicht in der Sammlung: 422) undrecordingVisibleDays(sichtbar für N Tage nach der Freigabe, 1 bis 3650,null= unbefristet). WechseltrecordingCollectionIdohne neuen Ordner, wird der Ordnernull. - Neu an
learning.getAppointmentMaterialundlearning.updateAppointmentMaterial: wirksamrecordingFolderIdundrecordingVisibleDays, dazu die ÜbersteuerungenrecordingFolderOverride({ folderId }odernull= wie die Terminart) undrecordingVisibleDaysOverride({ days }odernull). Ein Ordner, der nicht mehr in der Sammlung liegt, wirkt als oberste Ebene. - Neu am Inhalt:
visibleDaysAfterRelease(nur lesend, nur an Aufzeichnungen, sonstnull). Geändertes Verhalten in der Kontakt-Sicht: Eine Aufzeichnung mit Frist erscheint nach so vielen Tagen ab der Freigabe des Kontakts nicht mehr (Suche mitcontactId, Medien); die Freigabe bleibt inlearning.listReleasesstehen, in der Bibliothek der Organisation bleibt der Inhalt.
v1.388.0 · 5. November 2026
- Geändertes Verhalten: Das Material nach der Stunde (Lauf zum Ende des Termins und
learning.releaseAppointmentMaterial) geht je Inhalt an alle mit laufendem Zugang zu seiner Sammlung, ob am Termin eingetragen oder nicht; beiattendeesOnlyan die gemessen Anwesenden mit Zugang. Bisher ging es an die Eingetragenen, und wer keine Rückmeldung gegeben hatte, fiel heraus.recipientCountzählt verschiedene Kontakte. - Geändertes Verhalten: Die Freigabe des Materials veröffentlicht unveröffentlichte Inhalte (Entwürfe nicht). Bei
attendeesOnlybleiben sie unveröffentlicht und sind in der Kontakt-Sicht nur für die Empfänger sichtbar; ein solcher Inhalt erscheint bei Abwesenden nicht, auch nicht nach dem Zeitplan der Sammlung.
v1.387.0 · 5. November 2026
- Lehrkräfte halten Termine:
resourceIdanappointments.create(und an Terminreihen) nimmt jetzt auch eine Lehrkraft (teacheran der Ressource), für jede Terminart und zu jeder Zeit, ohne Besetzung und ohne Arbeitszeit; geprüft wird nur, ob sie dann schon einen Termin hat (sonst409 conflictmitslot-taken).appointments.reschedulebehält die Lehrkraft eines Termins auch ohneresourceId. Online-Termine einer Lehrkraft bekommen den Live-Raum. Bisher antwortete eine solcheresourceIdmit dem Fehler, dass die Ressource die Terminart nicht hält.
v1.386.0 · 5. November 2026
- Lehrkräfte (Kontakt als Gastgeber von Unterricht, ohne freie Zeiten):
GET,PUTundDELETE /appointment-teachers/{contactId}(appointments.getTeacher,appointments.setTeacher,appointments.removeTeacher).getTeacherliefertisTeacher,resourceId,removable,upcomingCountund die nächsten höchstens 20 Termine (upcomingmitparticipantCount, ohne Namen); ein Kontakt, der keine Lehrkraft ist, antwortet mitisTeacher: false.setTeacherist wiederholbar und antwortet mit200;removeTeacherantwortet mit204, bei künftigen Terminen409 conflictmitreasonupcoming-appointmentsundextra.count. Ein fehlender oder fremder Kontakt gibt404, eine Firmavalidation-failedanparams.contactIdmitcodenot-a-person. An jeder Ressource neuteacher(appointments.listResources,appointments.getResource).
v1.385.0 · 5. November 2026
- Neu:
POST /clients/{id}/metabolic-balance-client/plans/{planId}/copy-pdf(clients.copyMetabolicBalancePlanPdf, ohne Rumpf, 200) übernimmt das PDF eines Plans des verknüpften Klienten bei Metabolic Balance als geschützte Kopie in die Akte, nur auf diesen ausdrücklichen Aufruf je Plan. Antwort{ planId, documentId, copiedAt, created }; liegt das PDF schon in der Akte (eigene Kopie oder PDF eines Falls), kommt dieselbe Kennung mitcreated: false, und nichts wird neu geholt. Gründe: 404, wenn der Plan nicht zum verknüpften Klienten gehört; 422metabolic-balance-client-not-linkedundmetabolic-balance-plan-without-pdf(mitextra.planState); 409metabolic-balance-pdf-failed(mitextra.error) undmetabolic-balance-copy-in-progress(ein liegengebliebener Vorgang verfällt nach fünf Minuten). - An
clients.listMetabolicBalanceClientPlansneu je PlandocumentId: das PDF des Plans in der Akte (PDF eines Falls oder übernommene Kopie), sonstnull; die Datei überdocuments.downloadUrl.
v1.383.0 · 5. November 2026
- Neu: der Bestand bei Metabolic Balance an der Akte.
GET /clients/{id}/metabolic-balance-client(clients.getMetabolicBalanceClient) liest, mit welchem Klienten bei MBG die Akte verknüpft ist (nicht verknüpft: 200 mitlinked: false).GET …/metabolic-balance-client/candidates(clients.searchMetabolicBalanceClients,search2 bis 100 Zeichen) sucht im ganzen Konto bei MBG: höchstens 10 Kandidaten, anonymisierte nie, eingeordnet mitmatch.PUT …/metabolic-balance-client(clients.linkMetabolicBalanceClient,{ patientId }, 200) verknüpft nur auf diesen ausdrücklichen Aufruf; claritos liest den Klienten vorher bei MBG: 422validation-failedanbody.patientId, 409metabolic-balance-client-linked-elsewheremitextra.clientId.DELETE …/metabolic-balance-client(clients.unlinkMetabolicBalanceClient, 204) löst nur die Verknüpfung bei claritos.GET …/metabolic-balance-client/plans(clients.listMetabolicBalanceClientPlans) und…/blood-tests(clients.listMetabolicBalanceBloodTests, neueste zuerst, höchstens 20) lesen bei jedem Aufruf bei MBG, gespeichert wird nichts; ohne Verknüpfung{ data: [] }. - Ist die Akte verknüpft, nimmt
…/handover/senddiesen Klienten und fragt nicht nach Dubletten; wählt oder legt die Coach beim Senden einen Klienten an, wird eine freie Akte damit verknüpft.
v1.381.0 · 5. November 2026
- Neu:
POST /clients/{id}/metabolic-balance-cases/{caseId}/handover/release-plan(clients.releaseMetabolicBalancePlan,{ phase, allowedTreatMeals, allowedOils }, 200) gibt den Plan bei MBG frei und an die Klientin weiter; claritos schickt ihr eine Mail ohne Gesundheitsangaben und zeigt den Plan in ihrem Kundenportal. Ob MBG sie selbst benachrichtigt, ist offen; claritos nimmt eine Freigabe nicht zurück; nie zweimal, ein erneuter Aufruf nach einem Teilfehler setzt fort. Gründe: 422metabolic-balance-not-generated(mitextra.planState), 409metabolic-balance-already-released, dazu die bekannten. - An
mbgder Übergabe neu:releaseDefaults(die Werte des Plans bei MBG als Vorbelegung) undreleasedAt.
v1.380.0 · 5. November 2026
- Neu: der Chat der Prüfung mit dem Backoffice von Metabolic Balance.
GET /clients/{id}/metabolic-balance-cases/{caseId}/handover/chat(clients.listMetabolicBalanceChatMessages) liest die letzten 100 Nachrichten, älteste zuerst, bei jedem Aufruf bei MBG (claritos speichert keine Nachrichten; Lesen markiert nichts als gelesen; ohne Chat eine leere Liste).POST …/handover/chat(clients.postMetabolicBalanceChatMessage,{ text }, 200) sendet eine Nachricht; 409metabolic-balance-no-chatohne Chat. Den Schutz gegen doppeltes Senden gibt derIdempotency-Key. - An
mbgder Übergabe neu:chatAvailableundchatUnreadSince.
v1.379.0 · 5. November 2026
- An
mbgder Übergabe neu:planDocumentId(das Plan-PDF in der Akte, kopiert in die geschützte Ablage, sobald der Plan bei MBG erzeugt ist; erzeugt MBG ihn neu, ersetzt claritos die Datei unter derselben Kennung, und scheitert das, bleibt die bisherige) undplanPdfError(no-pdf,fetch-failed,not-a-pdf,too-large; nach fünf Fehlversuchen kein weiterer). Die Datei kommt überdocuments.downloadUrlmit dieser Kennung, nur für Schlüssel mit Klientendaten-Freigabe; die Links von MBG gibt claritos nie heraus.
v1.378.0 · 5. November 2026
- Neu:
POST /clients/{id}/metabolic-balance-cases/{caseId}/handover/generate-plan(clients.generateMetabolicBalancePlan) erzeugt den Plan bei Metabolic Balance. Jeder Aufruf, der erzeugt, kostet einen Plan auf dem Konto der Organisation bei MBG; der Rumpf verlangtconfirmCost: true, ein doppelter Aufruf erzeugt nie zweimal. Antwort 200 mit der Übergabe. Gründe: 422metabolic-balance-not-sent,metabolic-balance-not-ready(mitextra.checkErrors); 409metabolic-balance-already-generated(mitextra.planState), dazu die bekannten. - An
mbgder Übergabe neu:generationRequestedAt,verificationReason(eigene Schlüssel),blockReason(Text von MBG, höchstens 500 Zeichen) undlastCheckedAt. claritos fragt Pläne ab, die etwas erwarten (Erzeugung, Prüfung): kurz nach dem Erzeugen und alle fünf Minuten.
v1.377.0 · 5. November 2026
- Neu:
POST /clients/{id}/metabolic-balance-cases/{caseId}/handover/laboratory(clients.createMetabolicBalanceLaboratory) legt ein neues Labor im Labormanagement des Coaches bei Metabolic Balance an und wählt es im Fall. Das Eingabeprofil kommt aus dem Bericht: Einheit und Normbereich für das Geschlecht der Klientin, sonst die Vorbelegung von MBG; keine Personendaten. Antwort 200 mit der Übergabe. 409metabolic-balance-laboratory-existsmitextra.laboratoryId, wenn es ein Labor gleichen Namens schon gibt (wählen mitPATCH …/handover); scheitert nur das Profil, setzt ein erneuter Aufruf fort. Weitere Gründe: 422metabolic-balance-not-connected,validation-failed(etwabody.countryId); 409case-closed,metabolic-balance-rejected,metabolic-balance-unavailable. - An der Übergabe (
GET,PATCH,send) neuoptions.countries(Länder von MBG) undoptions.reportLaboratory(name,matchedLaboratoryId,suggestedCountryId).
v1.376.0 · 5. November 2026
- Geändert:
affiliates.createCoupon(POST /affiliate-coupons),affiliates.updateCoupon(PATCH /affiliate-coupons/{id}) undaffiliates.updateClimateContribution(PUT /affiliate-climate-contribution) verlangen das RechtAFFILIATE_VERWALTUNG(sieheGET /organization/entitlements). Ohne es antworten sie403 feature-not-availablemitreasonaffiliate-license, wieaffiliates.activity. Ausnahme:updateCouponmitactive: false(Abschalten) geht weiter ohne das Recht, ebensoaffiliates.deleteCouponundaffiliates.disableTracking. Dieselbe Regel gilt in der Oberfläche.
v1.375.0 · 5. November 2026
- Neu:
POST /clients/{id}/metabolic-balance-cases/{caseId}/handover/sendsendet die Übergabe an Metabolic Balance: Klient und Plan anlegen oder die vorhandenen nehmen, alle Abschnitte und den Bluttest übertragen, MBG fragen, ob erzeugt werden kann. Erzeugt wird nichts. Ein erneuter Aufruf setzt fort und legt nichts doppelt an. Vorher sucht claritos den Klienten im Konto bei MBG; ein Treffer wird nie still übernommen: 409metabolic-balance-duplicatemit bis zu fünf Kandidaten inextra.candidates, dann mitpatient({ mode: "existing", patientId }oder{ mode: "new" }) wählen. Danach fragt claritos nach einem offenen Entwurf bei MBG, der nicht aus diesem Fall stammt (MBG erlaubt einen je Klient): 409metabolic-balance-draft-existsmitextra.draft(planId,createdAt,state), auch hier vor jedem Schreiben; mitoverwriteDraftPlanIdübernehmen und überschreiben, beim zweiten Aufruf zusammen mitpatient. Weitere Gründe: 422handover-incomplete(mitextra.missing),collection-too-old,metabolic-balance-not-connected; 409case-closed,metabolic-balance-rejected(mitextra.providerMessage),metabolic-balance-unavailable. - An der Übergabe (
GET,PATCH,send) neumbg: Klient und Plan bei MBG (patientId,planId),planStatein eigenen Schlüsseln,canGenerate,checkErrorswie von MBG geliefert,sentAt,outOfGlobalRange;null, bis gesendet wurde.
v1.374.0 · 5. November 2026
- Geändert:
couplings.prospectsRequiredanpipelines.update(PATCH /pipelines/{id}) gilt als erfüllt, sobald der Interessent irgendeine Karte in einer Pipeline der Organisation hat, gleich in welchem Zustand (offen, geparkt, abgeschlossen), nicht mehr nur eine Karte in dieser Pipeline. Erst ein Interessent ganz ohne Karte bekommt die Bitte um Zuordnung oder, mitprospectsAutomatic, eine Karte. Das verhindert doppelte Karten für dieselbe Person. - Geändert: Der Nachzug der Pflicht (
pipelines.getBackfillundpipelines.startBackfill,GET/POST /pipelines/{id}/backfill) nimmt nur noch Interessenten ohne jede Karte in der Organisation; wer schon in einer anderen Pipeline eine Karte hat, auch eine abgeschlossene, kommt nicht mehr hinzu.candidateszählt entsprechend.
v1.373.0 · 5. November 2026
- Impressum und Datenschutzerklärung: Ergänzungen zur laufend erzeugten Vorlage.
GET /organization/legal-textsnennt an jedem Eintragmode,supplementsundsections(bei anderen Artennull) sowiedpoNotAppointed. NeuPUT /organization/legal-texts/{kind}/supplements.DELETE /organization/legal-texts/{kind}verwirft den eigenen Text; Ergänzungen bleiben, ohne Ergänzungen wie bisher.PATCH /organization/legal-textsnimmtdpoNotAppointed.isCustomizedist weiter nur bei eigenem Text wahr (gleichmodeown), Ergänzungen allein ändern es nicht;versionsteigt auch, wenn sich die Ergänzungen ändern.
v1.371.0 · 5. November 2026
- Neu: die Übergabe eines Falls an Metabolic Balance lesen und vorbereiten.
GET /clients/{id}/metabolic-balance-cases/{caseId}/handoverliefert die Abschnitte wie im MB-Portal mit Ampel (ready,unclear,optional,attention), die Einstellungen des Plans, die Auswahlen (options: Labore, Sprachen, Listen von MBG), die Blutwerte mit Einheit des Berichts in der Schreibweise von MBG (keine Umrechnung) und zwei Stufen (outside-norm,outside-global), die freien Angaben des Bogens zum Zuordnen undblockers.PATCHdesselben Pfads ändert Einstellungen und Zuordnungen teilweise. Eigene Schlüssel:dietGoalnone/lose/regulation/gain,healthTriggerin camelCase; Kennungen bei Metabolic Balance kommen ausoptions. Gesendet wird noch nichts.
v1.370.0 · 5. November 2026
- Neu:
POST /clients/{id}/metabolic-balance-cases/{caseId}/request-reportfordert den Laborbericht bei der Klientin nach. Der Aufruf schreibt sie sofort über den Kanal des Falls an, mit dem Upload-Link; ist ein Bericht gelesen, nennt die Nachricht die fehlenden Pflichtwerte. Nimmt die bisherige Datei-Anfrage keine Uploads mehr an, entsteht eine neue (dann infileRequest). Jeder Aufruf schreibt erneut an. Antwort 200 mit dem Fall; 409case-closedodersend-failed, 422case-not-sent,contact-without-email,sender-missing,metabolic-balance-not-connected. - Am Fall-Objekt (
GETundPOST /clients/{id}/metabolic-balance-cases) neureport: Phase (none,reading,redaction,failed,read),requiredCount,receivedCount,missing,optionalRequested,optionalReceivedals{ key, name }(keywiemarkerKeyinbiomarkers.listProfileItems) undlastRequestedAt. Berichte, die im Labor-Reiter mit der Laboranforderung des Falls verknüpft werden, zählen mit.
v1.369.0 · 5. November 2026
- Neu: Fälle von Metabolic Balance an der Akte.
GET /clients/{id}/metabolic-balance-casesnennt die Fälle mit ihrem Stand (Versand, Anamnesebogen, Laborbericht, Übergabe, Plan).POST /clients/{id}/metabolic-balance-casesstartet einen Fall: gibt die Laboranforderung aus dem Profil frei, stellt den Link zum Anamnesebogen aus und legt die Datei-Anfrage für den Laborbericht an (channelemailoderportal). Die Nachricht an die Klientin geht im Hintergrund hinaus, sobald die PDFs der Laboranforderung fertig sind;delivery.sentAtsteht deshalb erst danach und lässt sich mit dem GET nachlesen. Voraussetzung: das RechtMETABOLIC_BALANCE(sonst 403metabolic-balance-license) und ein verbundener Zugang (sonst 422metabolic-balance-not-connected); ein offener Fall je Akte (409case-open).
v1.368.0 · 5. November 2026
- Neues Recht
METABOLIC_BALANCE(Anbindung an das Metabolic-Balance-Portal) inGET /organization/entitlementsund in den Lizenz-Endpunkten. Es hat keine Voraussetzung und schaltet die Verbindung zum Portal in den Einstellungen der Organisation frei; den Schlüssel trägt man dort ein, nicht über die API. GET /organization/integrationsnennt bei Geschäftsorganisationen die AnbindungmetabolicBalance(Einstellungen unterbereich=schnittstellen): ohne das RechtMETABOLIC_BALANCEmitstatenot-enabled, sonstnot-connected,faulty(letzte Prüfung fehlgeschlagen) oderconnected.
v1.367.0 · 4. November 2026
- Neu:
courseIdanlearning.searchCoursesbeschränkt die Suche auf einen Kurs. - Die Suche über Kurse findet jetzt auch Seiten der PDF-Dateien einer Lektion (
matchIn: "pdfPage"), mit dem neuen FeldlessonMaterialId; bei Seiten des PDF-Mediums der Lektion bleibt esnull.
v1.366.0 · 4. November 2026
- Terminarten lassen sich duplizieren:
POST /appointment-types/{id}/duplicate(appointments.duplicateType, Scopeappointments:write, dasselbe Recht wiecreateType) legt eine inaktive Kopie an, mit „(Kopie)“, „(copy)“ bzw. „(копия)“ am Namen in jeder gespeicherten Sprache und neuemslug(…-kopie,…-kopie-2); Antwort 201 mit der Kopie. Übernommen werden die Einrichtung samt Besetzung und Leistungen; Marke, Formular, Leitfaden, Ort, Telefon, Erinnerungsplan und Checkout-Link verweisen auf dieselben Objekte. Termine, Buchungslinks und die Partnerfreigabe gehen nicht mit (partnerReleaseNONE). Zeigt die Vorlage auf einen Leitfaden, Checkout-Link oder Erinnerungsplan, dencreateTypenicht annähme, kommt derselbe Fehler wie dort.
v1.365.1 · 4. November 2026
- Behoben:
includeArchived=falseanpipelines.list(GET /pipelines) undpipelines.listSlas(GET /pipelines/slas) lieferte bisher auch Archiviertes (jeder nicht leere Wert galt alstrue). Der Parameter nimmt jetzttrueoderfalse.
v1.365.0 · 4. November 2026
- Kurse können ihre beiden Ebenen der Gliederung benennen (
levelNames:firstfür Module,secondfür Untermodule), gesetzt in der Sprache der Anfrage und übersetzt wie die übrigen Kurstexte;nulloder ein leerer Text setzt alle Sprachen auf die Vorgabe zurück. Namen tragen keine Nummer: Das Portal nummeriert selbst, und nur dort, wo die Titel keine tragen.
v1.364.0 · 4. November 2026
- Lernplattform, Kurse:
descriptionundinstructor.descriptionsind formatierter Text (HTML; Klartext bleibt erlaubt und wird zu Absätzen) und nehmen inlearning.createCourseundlearning.updateCoursebis 20.000 Zeichen statt 5.000. claritos säubert das HTML beim Speichern. Verhalten: Werdescriptionbisher als Klartext angezeigt hat, sieht jetzt Auszeichnung wie<p>; vor der Anzeige als HTML behandeln. Auch der Kurs-Import (learning.startCourseImport) säubert beide Texte jetzt beim Speichern und macht Klartext zu Absätzen; dort gilt die Grenze von 20.000 nicht. Wird ein Text erst durch das Säubern länger als 20.000 Zeichen, meldetcreateCourse/updateCourseam Feldtoo_big.
v1.363.0 · 4. November 2026
- Lernplattform, Kursordner und Kurse in Sammlungen: neue Endpunkte
learning.listCourseFolders,createCourseFolder,updateCourseFolder,moveCourseFolder,deleteCourseFolder(Ordner der Kurse, höchstens zwei Ebenen, ohne Freigaberegel),learning.orderCourseItems(POST/learning/courses/order) undlistCollectionCourses,addCollectionCourse,updateCollectionCourse,removeCollectionCourse(Kurs als Kachel in einer Sammlung; gibt keinen Zugang). Am Kurs neufolderId,positionundcollections,learning.updateCoursenimmtfolderId. An Sammlungsordnern neucourseCount,learning.deleteFoldermeldetmovedCourseCount,learning.orderItemskennttypecourse. Verhalten: Ordner, Inhalte und Kurs-Kacheln einer Sammlungsebene teilen sich jetzt die Zahlen inposition. Ein Import legt keine Kursordner an und verschiebt nichts Einsortiertes.
v1.362.0 · 4. November 2026
- Lernplattform, Suche über Kurse: neuer Endpunkt
learning.searchCourses(GET/learning/courses/search), additiv. Sucht in Kursen, Modulen und Lektionen (Titel, Beschreibungen, Name, Zeile und Text des Dozenten, Texte der Lektionen, Gesprochenes und PDF-Seiten ihrer Medien); flache Zeilen wie beilearning.searchContents, mittype(course,module,lesson),modulePathundlessonType; mitcontactIdaus der Sicht des Kontakts (locked,unlockReasons), ohne mitdraft.learning.searchContentsbleibt unverändert und liefert KEINE Kurstreffer; wer beides will, ruft beide Suchen.
v1.361.0 · 4. November 2026
- Lernplattform, Kurse:
instructorhat zwei neue Felder,jobTitle(Zeile unter dem Namen auf der Karte im Portal, je Sprache) undimageAssetId(Foto aus der Medienbibliothek,null= Initialen); in der Antwort immer, inlearning.updateCourseoptional. Der Importbaum (learning.startCourseImport) bringt weder Foto nochjobTitlemit; ein späterer Import lässt beide stehen. Neues Feldrecommendation(„Passend dazu“, höchstens ein Eintrag,oneOfnachtype: Sammlung, anderer Kurs oder eigener Link mit Titel und Bild), in der Antwort immer (nullohne Eintrag), inlearning.updateCourseoptional (nullentfernt ihn);learning.createCoursesetzt es nicht. Wird das Ziel gelöscht, ist der Eintragnull.
v1.360.0 · 4. November 2026
- Lernplattform, Vorspulen: neues Feld
allowSeeking(boolean, Vorgabetrue) an der Sammlung (lesen,learning.createCollection,learning.updateCollection) und am Kurs (lesen,learning.updateCourse). Beifalselässt das Portal bei Video und Ton nur Sprünge bis zur weitesten schon gesehenen Stelle zu. Verhalten: Der Fortschritt steigt dann je Meldung höchstens um die seit der letzten Meldung vergangene Zeit (mal 1,25, plus 15 Sekunden); eine einzelne Meldung macht ein Video also nicht mehr „angesehen“. Beitrue, also bei allen bestehenden Sammlungen und Kursen, verhält sich der Fortschritt wie bisher; die Grenze greift nur beifalse.
v1.359.0 · 3. November 2026
- Grösse des Rumpfs je Endpunkt:
learning.startCourseImport(POST/learning/course-imports) nimmt jetzt bis 4 MB an (4.194.304 Bytes), alle anderen Aufrufe weiter bis 1 MB. Bisher lehnte der Rahmen jeden Rumpf über 1 MB mit413ab, auch am Kurs-Import, der 4 MB zusagt; ein Kurs mit rund 250 Lektionen scheiterte daran. Jede Operation mit Rumpf nennt ihre Grenze in der Spec alsx-max-body-bytes, die Antwort413(payload-too-large) nennt sie alsmaxBodyBytes. Gezählt wird in Bytes (UTF-8), auch bei einer Anfrage ohneContent-Length.
v1.358.0 · 3. November 2026
- Lernplattform, Materialien einer Lektion:
learning.createLessonMaterial(POST/learning/lessons/{id}/materials, 201) hängt eine Datei aus der Medienbibliothek an (ohnetitleder des Mediums, höchstens 50, darüberconflictmittoo-many-materials),learning.updateLessonMaterialundlearning.deleteLessonMaterial(/learning/lesson-materials/{id}),learning.orderLessonMaterials(POST…/materials/order). Ein Material aus dem Import wird nicht geändert (conflict,material-from-import); entfernt kommt es mit dem nächsten Import wieder, von Hand angelegte lässt jeder Import stehen. Neumaterialsan jeder Antwort mit einer Lektion, immer geliefert ([]ohne Material), je Material mitmediawie an der Lektion.
v1.357.0 · 3. November 2026
- Biomarker, vor der Auslieferung umbenannt: Die Zählfelder an
biomarkers.listAxes(und in den Antworten voncreateAxis,updateAxis,orderAxes) heissendraftEntryCount,lockedEntryCountundruleCountstattdraftEntries,lockedEntriesundrules, wiemarkerCountundruleCountim Bereich (1.356.0 war nie auf einer Umgebung).
v1.356.0 · 3. November 2026
- Biomarker, Achsen von Hand: Die Achsen der Biomarker-Profile lassen sich jetzt ohne Import der Profil-Mappe pflegen. Neu
biomarkers.listAxes(GET/biomarker-axes, mit Zahl der Einträge in EntwürfendraftEntryCountund in freigegebenen, zurückgezogenen oder übernommenen ProfilenlockedEntryCount, RegelnruleCount,deletable,deleteBlockedBy),biomarkers.createAxis(POST, ohnekeyder nächste freie wie „A18“; vergeben gibt 409axis-key-taken, der Schlüsselorderist nicht erlaubt),biomarkers.updateAxis(PATCH/biomarker-axes/{key}, Name und Notiz; der Schlüssel bleibt),biomarkers.orderAxes(PUT/biomarker-axes/order, alle Schlüssel genau einmal, Antwort die geordnete Liste) undbiomarkers.deleteAxis(DELETE; Einträge in Entwürfen verlieren die Achse; 409axis-in-locked-profile, solange ein freigegebenes, zurückgezogenes oder übernommenes Profil sie nennt,axis-in-rule, solange eine Regel mit ihr rechnet). Am Eintrag:biomarkers.listProfileItems(GET/biomarker-profiles/{id}/items, Marker, Geschlecht,axisKey,familyKey,assignment) undbiomarkers.setItemAxis(PUT/biomarker-profiles/{id}/items/{itemId}/axis, nur in eigenen Entwürfen, sonst 409profile-not-draftoderprofile-licensed;axisKey: nullentfernt die Zuordnung; Antwort der Eintrag wie beilistProfileItems); eine Änderung stelltassignmentaufACHSE_FESTGELEGT.
v1.355.0 · 3. November 2026
- Lernplattform, Kurse am Zugang:
learning.setAccessCourses(PUT/learning/accesses/{id}/courses) setzt die Kurse eines Zugangs, ersetzt die Liste in der übergebenen Reihenfolge und lässt die Sammlungen stehen; ein unbekannter Kurs gibtnot-foundanbody.courseIds, ohne Recht für Kursefeature-not-available. NeucourseIdsin den Antworten von Zugang und Vergabe, immer geliefert ([]ohne Kurse), und optional inlearning.createAccess(eine leere Liste braucht kein Recht). Entwürfe und archivierte Kurse wie bei den Sammlungen. Ereignisse unverändert.
v1.354.0 · 3. November 2026
- Lernplattform, Kurs anlegen:
learning.createCourse(POST/learning/courses, 201) legt einen leeren Kurs an, als Entwurf mit Freigabe sofort und ohnesource; ein späterer Import trifft ihn nicht. Feldertitle(Pflicht),description,typeundselfPacedStartwie beilearning.updateCourse, Antwort wielearning.getCoursemit leerer Gliederung.
v1.353.0 · 3. November 2026
- Konversationen, Zuständigkeit und Bezug:
inbox.listConversationsundinbox.getConversationtragen neuassigneeUserId, die zuständige Person (Mitglied der Organisation; nur solange sie Mitglied ist), undrelatedTo, worauf sich die Konversation bezieht, als Vereinigung übertype. Heute gibt es nur{ type: "lesson", courseId, lessonId }: eine Frage, die ein Kunde im Portal zu einer Lektion gestellt hat; zuständig ist dann die Lehrkraft des Kurses (responsibleUserId, 1.352.0). Fällt Kurs oder Lektion, steht dortnull. Ohne Zuständigkeit bzw. Bezug sind beide Feldernull, also bei allen bisherigen Konversationen. Neuer FilterassigneeUserIdaninbox.listConversations,assigneeUserId=nonefür niemand zugewiesen. Setzen der Zuständigkeit kommt mit einer späteren Fassung.
v1.352.0 · 3. November 2026
- Lernplattform, Lehrkraft am Kurs: Kurse tragen
responsibleUserId, das Mitglied der Organisation, dem Fragen aus dem Portal zu Lektionen dieses Kurses zugehen (assigneeUserIdder Konversation);null= niemand. Setzbar perlearning.updateCourse; kein Mitglied gibtnot-foundanbody.responsibleUserId. Verlässt die Person die Organisation, bleibt der Wert stehen, gilt aber als niemand. Unabhängig voninstructor(dem angezeigten Dozenten). - Lizenz, Verhalten (Spec unverändert): Für Lizenzen mit Fassung (
model: version) ergibt sich das RechtLIVE_RAUMjetzt aus der Video-Stufe der Organisation (enthalten, gebucht oder als Einzelausnahme am Tenant mit Start); eine eigene Freigabe an der Organisation ist dafür nicht mehr nötig. Fassungen führenLIVE_RAUMnicht mehr inchoiceListund nicht als buchbaren Baustein (bookable), das gilt beim Lesen für jede Fassung, auch für schon veröffentlichte; eine Buchung des Moduls wird abgelehnt (conflict,reasonrejected). Neu gespeicherte Fassungen enthalten es auch nicht mehr. Zubuchbar sind die Video-Stufen. Lizenzen ohne Fassung (model: existing) bleiben unverändert.
v1.351.0 · 3. November 2026
- Lizenz, Video-Stufen mit Namen und Fassung: Neben dem Schlüssel (
tier) steht der Name in der Sprache der Anfrage (tierName; eigene Stufen mit ihrem Namen,START,PLUS,PROmit festem Text) anorganization.getLicenseChoices(auch in den Antworten vonsetLicenseChoicesundsetVideoTier:video.tierName,video.booked[].tierName),organization.getLicense(modules[].tierName,bookable[].tierName,perOrganization[].videoTierName) und der Vorschau des Taktwechsels (modules[].tierName). Die Nummer der Fassung der Stufe steht, wo eine Organisation ihre Stufe sieht:video.tierVersionNumber,perOrganization[].videoTierVersionNumber, und beibookable[]die Fassung, die eine neue Buchung heute bekäme (tierVersionNumber). Eigene Stufen haben einen Schlüssel aus ihrem ersten Namen, der sich danach nicht ändert; angezeigt wird deshalb der Name.
v1.350.0 · 3. November 2026
- Konversationen: Neuer Kanal
portal(channelaninbox.listConversationsundinbox.getConversation, Filterchannel=portal,channels.portalininbox.getConversationCounts). Er umfasst die Nachrichten im Kundenportal im Bereich Kommunikation, je Faden eine Unterhaltung; Akte-Post erscheint nicht.subjectist der Betreff des Fadens,counterpartistnull, die Nachrichten im Verlauf tragen HTML. Wer überchannelverzweigt, bekommt damit einen neuen Wert.
v1.349.0 · 3. November 2026
- Lernplattform, Lückentext und Fragenpool:
typeeiner Quizfrage bekommt den Wertblanks(Lückentext); Clients, die nach der Art verzweigen, brauchen einen Zweig dafür. Neu an der Frageblanks(je Lückeanswers, die akzeptierten Antworten;nullbeisingleundmultiple, beiblanksistoptionsleer). Die Lücken stehen im Text als {{1}}, {{2}} …, ab 1 fortlaufend; verglichen wird ohne Gross- und Kleinschreibung, Leerraum zusammengefasst.learning.createQuestionundlearning.updateQuestionnehmentypeblanksmitblanks(1 bis 20 Lücken, je 1 bis 10 Antworten bis 100 Zeichen); Platzhalter, die nicht zu den Lücken passen, gebeninvalidanbody.blanks, eine Lücke ohne Antwortrequiredanbody.blanks[i].answers, zu viele oder zu lange Antwortentoo-large.PUT /learning/questions/{id}/answersgibt am Lückentextwrong-typeanparams.id. Am Quiz neuquestionsPerAttempt(Fragenpool: so viele Fragen zieht jeder Versuch zufällig,nullalle; beim Speichern höchstens so viele, wie das Quiz hat, sonstinvalidanbody.questionsPerAttempt; werden später Fragen gelöscht, nimmt jeder Versuch alle). Import undgetCourseMissingbleiben beisingleundmultiple.
v1.348.0 · 3. November 2026
- Lernplattform, Quiz erweitert: Am Quiz einer Lektion (
learning.updateQuiz, lesbar an der Lektion) neumaxAttempts(Höchstzahl der Versuche je Person, 1 bis 100,nullunbegrenzt; zurückgesetzte zählen nicht),timeLimitMinutes(1 bis 600,nullohne; gerechnet auf dem Server ab „Quiz starten“ im Portal, nach Ablauf und kurzer Toleranz zählt eine Abgabe als nicht bestanden) undshowSolution(neverVorgabe wie bisher,afterSubmit,afterPass: wann das Portal die richtigen Antworten zeigt). Ausserhalb der Grenzeninvalidanbody.maxAttemptsbzw.body.timeLimitMinutes.learning.getCourseParticipantträgt je Quiz-LektionquizmitattemptCount,lastScore,passed,remainingAttempts(sonstnull). NeuPOST /learning/courses/{id}/participants/{contactId}/lessons/{lessonId}/quiz-attempts/reset(learning.resetQuizAttempts): Die Versuche bleiben im Verlauf, zählen aber nicht mehr; ein laufender Versuch endet; keine Quiz-Lektion gibtwrong-typeanparams.lessonId.
v1.347.0 · 3. November 2026
- Zertifikate und PDF-Vorlagen: Neue Feldart
TRIGGER_VALUEinpdfFieldKind(templates.*,letters.getIssued) für einen Wert, den der Ablauf beim Ausstellen mitgibt;bindingist heute nurcourse.title, der Kurstitel beim Kursabschluss der Lernplattform. Von Hand ausgestellt bleibt ein solches Feld leer. Wer überkindverzweigt, bekommt damit einen neuen Wert. Am Zertifikat neusourceKind(COURSE_COMPLETION) undsourceId(dieidauslearning.listCompletionsbzw.completionIdauslearning.course.completed), wenn ein Ablauf ohne angemeldete Person ausgestellt hat, sonst beidenull. Ein Abschluss ergibt höchstens ein Zertifikat.
v1.346.0 · 3. November 2026
- Lernplattform, Teilnehmer:
GET /learning/courses/{id}/participants(learning.listCourseParticipants, nach Name, Filteractivealstrue/false, mitlessonCount,completedLessonCount,progressPercent,lastActivityAt,completedAt,grantIdder geltenden Vergabe) undGET /learning/courses/{id}/participants/{contactId}(learning.getCourseParticipant: je Lektionstatuscompleted/open/locked,completedAt,completedManually,unlocksAt,unlockReasons, dazuinterventions). Von Hand abhaken:POST …/participants/{contactId}/lessons/{lessonId}/completemitreason(learning.completeParticipantLesson, schon erledigt bleibt unverändert) und…/reopen(learning.reopenParticipantLesson, nur von Hand Abgehaktes, sonst 422precondition-failedmitreasonnot-manual). Eingriffe in den persönlichen Zeitplan (auch für die Bibliothek):POST /learning/grants/{id}/interventions(learning.createIntervention, 201, Vereinigung übertype:pausemitstartDate/endDate,movemittargetType/targetId/date,releaseNowmittargetType/targetId,extendEndmitendDate;reasonPflicht; eine Stelle, die nicht zur Vergabe gehört, gibtnot-foundanbody.targetId),GET /learning/grants/{id}/interventions(learning.listInterventions) undPOST /learning/interventions/{id}/revoke(learning.revokeIntervention, wiederholbar).GET /learning/courses/{id}/progress(learning.getCourseProgress): je LektionstartedCountundcompletedCount, dazuparticipantCount.unlockReasonstragen beiafterItemjetzttargetType.
v1.345.0 · 3. November 2026
- Lernplattform, Abschluss und Zertifikat: Am Kurs (
learning.getCourse, schreibbar überPATCH /learning/courses/{id}) neucompletionRulemitrequiredLessons(allalle Lektionen ohne Entwürfe,selectednurrequiredLessonIds) undminAttendancePercent(1 bis 100 % der Terminlektionen, aufgerundet; beiallzählen Termine dann über den Anteil;nullkeine), immer gesetzt, im PATCH ersetzt sie die ganze Regel; dazucertificateTemplateId(PDF-Vorlage,templates.getPdf). Eine Lektion ausserhalb des Kurses gibtnot-foundanbody.completionRule.requiredLessonIds[i], ein Prozentwert ausserhalbinvalid, eine unbekannte Vorlagenot-found, eine stillgelegteinvalidanbody.certificateTemplateId. NeuGET /learning/completions(learning.listCompletions): Abschlüsse, die zuletzt geänderten zuerst, FiltercourseId,contactId,updatedSince, mitcertificate(statusnone/pending/issued/failed,issuedDocumentIdlesbar überletters.getIssued,failureReason). Neues Ereignislearning.course.completed(einmal je Teilnehmer und Kurs). Hat der Kurs eine Vorlage, wird das Zertifikat beim Abschluss ausgestellt (statusissuedmitissuedDocumentId, gescheitertfailedmitfailureReason); setzt das Team eine Vorlage, bekommen Abschlüsse ohne Zertifikat es nachträglich. - Automationen: Die Auslöser
learning.course.completed,learning.submission.submittedundlearning.submission.reviewedlassen sich auf Kurse einschränken (FiltercourseId, Artcourse, „eines von“), etwa um nur beim Abschluss eines bestimmten Kurses einen nächsten Schritt anzustossen.
v1.344.0 · 3. November 2026
- Lernplattform, Abgaben:
GET /learning/submissions(learning.listSubmissions) listet die Abgaben der Teilnehmer in Lektionen der Artassignment, die zuletzt geänderten zuerst, mit FilterncourseId,lessonId,contactId,status(submitted,returned,accepted) undupdatedSince; Entwürfe nie.GET /learning/submissions/{id}(learning.getSubmission) liefert die abgegebenen Runden mit Text, Dateien (documentId,filename,mimeType,sizeBytes; Abruf überGET /documents/{id}/download-url) und der Rückmeldung je Runde.POST /learning/submissions/{id}/feedback(learning.createSubmissionFeedback, 201) meldet auf die zuletzt abgegebene Runde zurück:resultacceptedschliesst die Lektion ab,returnedgibt zurück,gradewahlweise; ohne abgegebene Runde 422precondition-failedmitreasonnot-submitted, mit Rückmeldungalready-answered. Neue Ereignisselearning.submission.submittedundlearning.submission.reviewed. - Automationen: Der Auslöser
learning.submission.reviewedlässt sich nach dem Ergebnis der Rückmeldung filtern (result:accepted,returned), etwa um nur bei angenommenen Abgaben einen nächsten Schritt anzustossen.
v1.343.0 · 3. November 2026
- Lernplattform, Kursarten:
type(selfPaced,class) ist anPATCH /learning/courses/{id}(learning.updateCourse) schreibbar; neuselfPacedStart(accessmit dem Zugang, Vorgabe;firstOpenbeim ersten Öffnen im Portal), lesbar am Kurs und schreibbar. Es wirkt nur beiselfPacedund bleibt am Klassenkurs gespeichert; ein Klassenkurs beginnt am gemeinsamen Start der Klasse, über die der Teilnehmer kam, ohne Start der Klasse mit dem Zugang. „Ab Tag n“ undimmediatelyzählen ab diesem Start, ein Start in der Zukunft sperrt bis dahin. - Lernplattform, Termin-Lektionen:
POST /learning/courses/{id}/lessons(learning.createLesson) nimmttype: "appointment";appointmentIdancreateLessonundPATCH /learning/lessons/{id}(learning.updateLesson,nullentfernt ihn); an einer Lektion anderer Artinvalid, ein Termin, den es in der Organisation nicht gibt,not-found, jeweils anbody.appointmentId. NeuGET /learning/lesson-appointments/options(learning.lessonAppointmentOptions: aktive Terminarten mitkindundcapacity, laufende Terminreihen) undGET /learning/lesson-appointments(learning.listLessonAppointments: Termine zur Auswahl mit genau einem vonappointmentTypeIdundrecurrenceId, keinerrequired, beideinvalid; kommende zuerst, Seiten übercursor). In Kursregeln istafterAppointmentjetzt wählbar; ein Termin ausserhalb der Organisation gibtnot-foundanbody.rule.conditions[i].appointmentId.
v1.342.0 · 3. November 2026
- Klassen, gemeinsamer Start:
GET /contact-lists,GET /contact-lists/{id},POST /contact-listsundPATCH /contact-lists/{id}tragenstartDate, den gemeinsamen Start der Klasse als Kalendertagyyyy-mm-ddin der Zeitzone der Organisation (null: noch kein Start); Kurse der Lernplattform für diese Klasse beginnen an diesem Tag.PATCH /contact-lists/{id}(contacts.updateList) nimmt jetzt{ name?, startDate? }, mindestens eines von beiden (sonstvalidation-failedmitrequired);startDate: nulllöscht den Start, ein Tag, den es nicht gibt, oder ein Jahr ausserhalb 2000 bis 2100 ergibtvalidation-failedanbody.startDate, und dann wird auch der Name nicht geändert. Untergruppen haben keinen Start.
v1.341.0 · 2. November 2026
- Lernplattform, Freigaberegeln je Stelle im Kurs:
ruleunddisplayanPATCH /learning/courses/{id}(learning.updateCourse; am Kurs immer gesetzt, Vorgabe sofort),PATCH /learning/modules/{id}undPATCH /learning/lessons/{id}(learning.updateModule,learning.updateLesson;null= keine eigene, es gilt die darüber) und in ihren Antworten;hasOwnRulean Modulen und Lektionen inlearning.getCourse. Im Kurs zeigtafterItemaufmoduleoderlesson,afterQuiz.quizIdist die Kennung der Lektion vom Typquiz. Ein Bezug, den es im Kurs nicht gibt, gibtnot-found, eine Stelle, die auf sich selbst oder etwas unter sich wartet,cycle, eine Lektion anderen Typs beiafterQuizwrong-type, jeweils anbody.rule.conditions[i].POST /learning/releases/preview(learning.previewRule) nimmt stattcollectionIdauchcourseId(mitmoduleIdoderlessonId); genau eins von beiden. - Das Schema der Bedingung ist geteilt und wird breiter:
afterItem.targetTypekennt jetzt auchmoduleundlesson. Regeln einer Sammlung, ihrer Ordner und Inhalte enthalten niemodule/lesson(sie werden dort mitinvalidanbody.rule.conditions[i].targetTypeabgelehnt), Regeln eines Kurses niecollection/content. Die Freigabe-Endpunkte (targetTypebeilistReleases,release,withdrawRelease) bleiben beicollection/content.
v1.340.0 · 2. November 2026
- Terminarten tragen in
liveRoomjetztwaitingRoom(AUTO,ON,OFF; VorgabeAUTO): den Warteraum im claritos Live-Raum. Wer nicht Gastgeber oder Co-Moderator ist, wartet, bis der Termin live geht.AUTOlässt den Live-Raum nach Art entscheiden: an bei Unterricht und Gruppenterminen, sonst aus. Fehlt das Feld im PATCH, bleibt der gespeicherte Wert. Gilt bei jedem Eintritt, also auch für schon gebuchte Termine; schaltet der Gastgeber im Raum um, geht das vor. Lesen inappointments.getType/listTypes, setzen increateType/updateType.
v1.339.0 · 2. November 2026
- Lernplattform: Ein Kurs aus GoHighLevel lässt sich in der Oberfläche auch als Sammlung der Bibliothek übernehmen; je Lektion entsteht ein offener Eintrag, bis eine Datei zugeordnet ist. Neu:
GET /learning/collections/{id}/missing(learning.getCollectionMissing, offene und geschlossene Einträge mitpathundexpectedType),PUT /learning/collection-entries/{id}/media(learning.setCollectionEntryMedia, legt den Inhalt an; idempotent für dasselbe Medium,409bei einem anderen,wrong-typeodermedia-not-readyanbody.assetId),POST /learning/collection-entries/{id}/dismissund/reopen(learning.dismissCollectionEntry,learning.reopenCollectionEntry,204). - Kurs-Import-Läufe (
learning.getCourseImport,learning.listCourseImports,learning.startCourseImport) haben neutargetType(courseodercollection) undcollectionId. Läufe können jetzt auch Sammlungen sein (nur aus dem GoHighLevel-Importer der Oberfläche): dann istcourseIdleer, ohne dass der Lauf gescheitert wäre, undmissingVideoszählt die offenen Einträge.listCourseImportsfiltert mittargetType; für Sammlungsläufe gibt es keine Ereignisselearning.courseImport.*.
v1.338.0 · 2. November 2026
- Lernplattform, Gliederung eines Kurses: Module mit
POST /learning/courses/{id}/modules(learning.createModule),PATCH /learning/modules/{id}(learning.updateModule),POST /learning/modules/{id}/move(learning.moveModule),DELETE /learning/modules/{id}(learning.deleteModule; ohnecascaderücken Untermodule und Lektionen eine Ebene hoch, mit?cascade=truewerden sie gelöscht, Antwort mitmovedLessonCount,movedModuleCount, beicascadedazudeletedLessonCount,deletedModuleCount),POST /learning/courses/{id}/modules/order(learning.orderModules). Lektionen mitGET/PATCH/DELETE /learning/lessons/{id}(learning.getLesson,learning.updateLesson,learning.deleteLessonmit204),POST /learning/courses/{id}/lessons(learning.createLesson),POST /learning/lessons/{id}/move(learning.moveLesson),POST /learning/courses/{id}/lessons/order(learning.orderLessons). Quiz mitPATCH /learning/lessons/{id}/quiz(learning.updateQuiz:passMark,passedText,failedText),POST /learning/lessons/{id}/questions(learning.createQuestion),PATCH/DELETE /learning/questions/{id}(learning.updateQuestion,learning.deleteQuestionmit204),POST /learning/lessons/{id}/questions/order(learning.orderQuestions). Eine dritte Modulebene meldetvalidation-failedmitcodetoo-deepanbody.parentId, unpassende Antworteninvalidanbody.options. - Behoben:
includeArchived=falseanlearning.listAccesses,learning.listCollections,learning.listContentsundlearning.listCourseslieferte bisher auch Archiviertes (jeder nicht leere Wert galt alstrue). Der Parameter nimmt jetzttrueoderfalse.
v1.337.0 · 2. November 2026
- Lernplattform, Kurse: neue Endpunkte
GET /learning/courses(learning.listCourses),GET/PATCH /learning/courses/{id}(learning.getCoursemit Gliederung,learning.updateCourse),POST /learning/courses/{id}/publish(learning.publishCourse; fehlen Videos oder richtige Antworten,422mitreasoncourse-incomplete,missingVideoCount,missingAnswerCount, behebbar mitconfirmIncomplete: true),POST /learning/courses/{id}/archiveund/unarchive,GET /learning/courses/{id}/missing(learning.getCourseMissing),PUT /learning/lessons/{id}/media(learning.setLessonMedia,409wenn schon ein Medium da ist) undPUT /learning/questions/{id}/answers(learning.setQuestionAnswers,correctIndexesals Stellen ab 0).
v1.336.0 · 2. November 2026
- Lernplattform, Kurs-Import: claritos holt die Dateien eines Imports (Bilder, Videos, Ton, Materialien) jetzt in die Medienbibliothek. Neu je Eintrag in
files[](GET /learning/course-imports/{id},learning.listCourseImports):failureReason(nur beifailed:not-https,blocked-network,too-large,timeout,wrong-type,source-error,invalid-url,dns-failed,too-many-redirects,connection-aborted,empty,internal-error),httpStatus(nur beisource-error) undassetId(beidone). Neucounts.filesPending, auch im Ereignislearning.courseImport.completed: Die Dateien kommen nach diesem Ereignis,filesPending> 0 heisst, es läuft noch. Video und Ton bis 2 GiB, sonst 200 MB.
v1.335.0 · 2. November 2026
- Lernplattform, Klassen am Zugang: neue Endpunkte
GET /learning/accesses/{id}/contact-lists(learning.getAccessContactLists) undPUT /learning/accesses/{id}/contact-lists(learning.setAccessContactLists, ganze MengecontactListIds, Antwort mitgrantedCountundrevokedCount). Eine gewählte Klasse gewährt allen heutigen Mitgliedern den Zugang (sourceclass), eine abgewählte beendet nur diese Vergaben (Ereignislearning.access.endedmitreasonclass); Vergaben aus anderen Quellen bleiben. NeucontactListIdsam Zugang.learning.listAccessesliefert jetzt auchnotifyOnGrant, wie der Einzelabruf.
v1.334.0 · 2. November 2026
- Lernplattform, Ordner in Sammlungen (zwei Ebenen: Ordner und Unterordner): neue Endpunkte
GET/POST /learning/collections/{id}/folders(learning.listFolders,learning.createFolder),PATCH/DELETE /learning/folders/{id}(learning.updateFolder,learning.deleteFoldermitmovedContentCountundmovedFolderCount; Inhalte und Unterordner rücken eine Ebene nach oben),POST /learning/folders/{id}/move(learning.moveFolder) undPOST /learning/collections/{id}/items/order(learning.orderItems, Ordner und Inhalte einer Ebene). NeufolderIdan Inhalten (lesen,createContent,addContents,updateContent;null= oberste Ebene),folderPathan Suchtreffern undfolderIdinlearning.previewRule. Eine dritte Ebene lehnt die Schnittstelle mit dem Codetoo-deepab.learning.orderContentsordnet weiter nur die übergebenen Inhalte.
v1.333.0 · 2. November 2026
- Neu: Passkeys des Kontakts im Kundenportal
GET /contacts/{id}/portal-passkeys(contacts.getPortalPasskeys,contacts:read):passkeyCount,lastUsedAtund je Passkeydata[]mitid(Kennung des Eintrags bei claritos, nicht die Credential-Kennung),label(Anbieter oder Gerät),createdAt,lastUsedAt. Öffentliche Schlüssel und Credential-Kennungen gibt die API nie heraus. DazuDELETE /contacts/{id}/portal-passkeys(contacts.removePortalPasskeys,contacts:write): entfernt alle Passkeys, etwa nach einem verlorenen Telefon; die Person meldet sich danach wieder mit Code an. Antwort{ removedCount }mit Status 200, ohne PasskeysremovedCount: 0; unbekannter Kontaktnot-found.
v1.332.0 · 2. November 2026
- Konversationen, Stimmung: Jede Unterhaltung in
GET /inbox/conversationsundGET /inbox/conversations/{id}trägtsentiment(positive,neutral,negative,null= noch nicht eingestuft), die Stimmung der zuletzt eingestuften eingehenden E-Mail. Neuer Filtersentiment(positive,neutral,negative,none= noch nicht eingestuft); er setzt den Kanal aufemail, weil SMS nie eingestuft werden.GET /inbox/conversation-countsnennt dazusentiments{ positive, neutral, negative, none }, gezählt über offene E-Mail-Unterhaltungen.
v1.331.0 · 2. November 2026
- Lernplattform, Kurs-Import: neue Endpunkte
POST /learning/course-imports(learning.startCourseImport, 202),GET /learning/course-imports/{id}(learning.getCourseImport) undGET /learning/course-imports(learning.listCourseImports, FiltersourceSystem,sourceCourseId). Ein Programm schickt einen ganzen Kurs (Module, Untermodule, Lektionen, Quiz samt richtiger Antwort; Dateien als Adresse), claritos importiert ihn im Hintergrund als Entwurf; ein zweiter Import derselben Herkunft ergänzt. Neue Ereignisselearning.courseImport.completedundlearning.courseImport.failed(mitreason).
v1.330.0 · 2. November 2026
- Lernplattform, mehrere Inhalte auf einmal: neuer Endpunkt
POST /learning/collections/{id}/contents(learning.addContents) mitassetIds(1 bis 50 Dateien der Medienbibliothek). Je Datei entsteht ein unveröffentlichter Inhalt am Ende der Sammlung, in der Reihenfolge vonassetIds; Titel ist der Name der Datei in der Medienbibliothek. Antwort 201{ created, failed }; ein Fehler bei einer Datei hält die anderen nicht auf,failednennt je Datei den Grund (not-found,media-not-ready,limit-reached,failed).
v1.329.0 · 2. November 2026
- Lernplattform, Mail bei neuem Zugang: Jeder Zugang trägt
notifyOnGrant(ab Werk an, schreibbar inPOST /learning/accessesundPATCH /learning/accesses/{id}). Ist es an, bekommt ein Kontakt eine Mail mit dem Link ins Portal, sobald der Zugang für ihn wirksam wird. Jede Vergabe trägt dazuaccessEmailStatus(pending,sent,skipped,failed),accessEmailSkipReason(beiskipped:disabled,alreadyActive,noEmail,companyWithContacts,ambiguousEmail,beforeIntroduction) undaccessEmailAt.
v1.328.0 · 2. November 2026
- Lernplattform, Aufzeichnungen ohne volle Kurs-Zustimmung:
POST /learning/contentsmit einem Dokument einer Live-Sitzung, dem nicht alle Teilnehmer zugestimmt haben, antwortet 422precondition-failedmitreasonrecording-consent-incomplete,consentedCount,participantCountundfixable: true; mit dem neuen FeldconfirmIncompleteConsent: truewird angelegt und die Bestätigung festgehalten. Jeder Inhalt trägt dazuconsentConfirmation(nulloderconfirmedAt,consentedCount,participantCount,confirmedByUserId,confirmedByApiKeyId).
v1.327.0 · 2. November 2026
- Lernplattform, Suche:
GET /learning/contents/search(q2 bis 100 Zeichen,limit1 bis 100 ohne Blättern). Treffer in Titel, Beschreibung, Gesprochenem (positionMs) und PDF-Seiten (pdfPage), FeldmatchIn,excerpt. MitcontactIdnur, was dieser Kontakt sieht, gesperrte Treffer mitlockedundunlockReasons; ohne die ganze Bibliothek samt Entwürfen (draft). Zu kurzer Begriff: 422validation-failedanquery.q.
v1.326.0 · 2. November 2026
- Lernplattform, Material nach der Stunde:
GET/PUT /appointment-types/{id}/learning-material(Liste aus der Bibliothek, die zum Ende jedes Termins dieser Art frei wird,recordingCollectionIdfür die Aufzeichnung als Entwurf,attendeesOnly),GET/PATCH /appointments/{id}/learning-material(add,hide,attendeesOnlyabweichend,withheld; Antwort mitreleasedAtundrecipientCount) undPOST /appointments/{id}/learning-material/release(jetzt freigeben; mit „nur Anwesende“ ohne Messung 422precondition-failed,reasonattendance-not-measured). Die Freigaben melden sich überlearning.content.releasedmitsourceappointment.
v1.325.0 · 2. November 2026
- Lernplattform: Sammlungen tragen
notifyDelivery, die Vorgabe des Teams für Benachrichtigungen an Teilnehmende (bellOnly,push,emailNow,emailDaily,emailWeekly,sms;nullheisst Vorgabe von claritos, also Wochenüberblick). Lesen inGET /learning/collections, setzen überPOST /learning/collectionsundPATCH /learning/collections/{id}. Die Glocke im Portal kommt immer dazu; jedes Mitglied kann es für sich ändern. Beinotify: falsewird das Feld nicht gelesen.
v1.324.0 · 2. November 2026
- Lernplattform: die Bibliothek vollständig über die API. Sammlungen (
GET/POST /learning/collections,PATCH /learning/collections/{id},…/publish,…/archiveund…/unarchive,POST /learning/collections/order) mit Freigaberegel alsrule(matchalloderany, höchstens fünfconditions:immediately,afterDays,fromWeek,onDate,afterItem,afterQuiz,afterAppointment,fromLevel,manual), Anzeigedisplayund Dauerduration. Inhalte (GET /learning/collections/{id}/contents,POST /learning/contentsaus MedienbibliothekassetId, Dokument oder https-Link,PATCH,…/mediafür eine neue Fassung,…/publish,…/archive,…/unarchive, Reihenfolge) mit NutzungreleasedTo/seenBy. Zugänge anlegen und pflegen (POST /learning/accesses,PATCH,…/archive,…/unarchive,PUT …/collections). Freigaben:GET /learning/releases,POST /learning/releases(von Hand),POST /learning/releases/withdraw,POST /learning/releases/preview(Regel vorab rechnen, schreibt nichts). Zugänge eines Artikels:GET/PUT /articles/{id}/learning-accesses.
v1.323.0 · 2. November 2026
- Neu: Konversationen, E-Mail-Fäden und SMS-Verläufe in einer Liste.
GET /inbox/conversationsfiltert nach Ansicht (open,starred,closed), Kanal, Postfach, Ungelesen, Kontakt-Tag oder Tag-Gruppe (contactTagModeany/all), Kampagne (campaignId: Antworten seit dem Versand, wie im Kampagnen-Bericht) und Suche;sortwaitingstellt voran, wer am längsten wartet (waitingSince); geblättert wird mitcursorundlimitwie überall.GET /inbox/conversations/{id}liefert den Verlauf,POST /inbox/conversations/updatesetzt für viele auf einmalread,unread,star,unstar(für die Person hinter dem Zugang) sowiecloseundreopen(für alle), mitresultsje Kennung (updated,notFound),GET /inbox/conversation-countsdie Zahlen je Ansicht, Kanal, Postfach, Kontakt-Tag und Kampagne,PUT /inbox/conversations/{id}/contactordnet einen Kontakt zu.inbox.listThreadsund Verwandte bleiben unverändert.
v1.322.0 · 2. November 2026
- Neu bei den Automationen: zwei Aktionen der Lernplattform. „Zugang zur Lernplattform gewähren“ ruft
POST /learning/grants, „Zugang zur Lernplattform entziehen“ ruftPOST /learning/grants/revoke; dieses entzieht nur Vergaben aus Hand, API oder Automation, Vergaben aus einem Kauf oder einer Klasse bleiben.GET /automation-catalognennt beide, das FeldaccessIdmit der QuellelearningAccess. Ausserdem tragen die Ereignisselearning.access.grantedundlearning.access.endeddie Tage der Vergabe alsgrant.startDateundgrant.endDate, wie die Vergabe inGET /learning/grants.
v1.321.0 · 2. November 2026
- Neuer Bereich
learning(Lernplattform, Rechtelearning:readundlearning:write):GET /learning/accesseslistet die Zugänge,GET /learning/grantsdie Vergaben eines Kontakts oder eines Zugangs,POST /learning/grantsgewährt einen Zugang (wiederholbar; über die API mit Quelleapi, aus einer Automation mit Quelleautomation),POST /learning/grants/{id}/revokeentzieht ihn mit Grund,POST /learning/grants/revokeentzieht einem Kontakt einen Zugang. Entzogen werden nur Vergaben aus Hand, API und Automation; Vergaben aus einem Kauf oder einer Klasse antworten 422precondition-failedmitreasongrant-source-protected. Verlangt das RechtLERN_BIBLIOTHEKder Organisation, sonst 403feature-not-available.
v1.320.0 · 2. November 2026
- Neu: drei Ereignisse der Lernplattform für Webhooks und Automationen.
learning.access.granted, wenn ein Kontakt einen Zugang bekommt, aus jeder Quelle (grant.source:manual,api,automation,purchaseoderclass).learning.access.ended, wenn ein Zugang wirklich endet, durch Entzug oder Ablauf, auch zu einem späteren Zeitpunkt, mitgrant.endedAtundgrant.reason(manual,api,automation,payment,cancelled,ended,classoderexpired).learning.content.released, wenn eine Sammlung oder ein Inhalt für einen Kontakt frei wird (release.targetTypecollectionodercontent,release.sourcerule,appointmentodermanual). Je Kontakt ein Ereignis; die Nutzlast trägt Kennungen, Namen und Zeitpunkte, keinen Lernfortschritt. Gemeldet wird, sobald die Lernplattform in Betrieb ist.
v1.319.0 · 2. November 2026
- Drei neue Rechte für die Lernplattform in
GET /organization/entitlementsund in den Lizenz-Endpunkten:LERN_BIBLIOTHEK(Bibliothek),LERN_KURSE(Kurse) undLERN_COMMUNITY(Community). Sie haben keine Voraussetzung; Endpunkte der Lernplattform selbst folgen. DELETE /articles/{id}antwortet 409in-usejetzt auch, wenn ein Kauf des Artikels einen Zugang der Lernplattform gewährt (usage.learningAccesses).
v1.318.0 · 1. November 2026
- Neu: Antworten aus dem CRM über eine SendGrid-Domain.
PUT /sendgrid/domains/{id}/crm-repliesmitenabledwählt eine Domain mit bereitem Antwortbereich (höchstens eine; eine andere verliert die Wahl) oder löst sie; die Domain trägtcrmReplies. Reply-To der Mails aus dem Kontakt ist dann der Absender vor dem @ auf dem Antwort-Host (eigener Absendername, sonst der Teil vor dem @ seiner Absenderadresse, nur wenn eindeutig, sonst der Antwort-Alias der Organisation); die Antwort landet bei dieser Person. Ohne bereiten Antwortbereich 422precondition-failedmitreasonsendgrid-replies-not-set-up; in Production bis zum Nachtrag der Datenschutzerklärungreasonsendgrid-personal-not-released.
v1.317.0 · 1. November 2026
- Neu: Zustimmung zu Terminerinnerungen eintragen
POST /contacts/{id}/reminder-service/subscribe(contacts.subscribeReminders,contacts:write), das Gegenstück zucontacts.unsubscribeReminders, etwa für eine Zustimmung aus dem Onboarding vor dem ersten Termin. Body:channels(email,sms; ohne Angabe beide, soweit der Kontakt einen Wert hat) undnote(Pflicht, wie zugestimmt wurde). Antwort wiegetReminderServiceplusrevocationKept: Kanäle, die der Kontakt selbst abbestellt hat; dort wird nichts eingetragen. Die handelnde Person steht im Eintrag, ohne Personno-acting-user; ohne Wert am Kontaktvalidation-failed.
v1.316.0 · 1. November 2026
- Geändert, Spec gleich:
conversation.sendEmail,conversation.getComposeOptionsundconversation.checkPermissiongehen auch an einen Kontakt mit Klientenakte ohne Freigabe der Klientendaten (vorher 404not-found). Die Mail ist eine normale Mail im Gespräch und steht im allgemeinen Postausgang; Akte-Post ist dann nicht möglich. Den Verlauf eines solchen Kontakts (conversation.list,getEntry,getReplyBasis) liest weiter nur, wer die Freigabe hat.qinGET /outbound-emailssucht jedes Wort für sich in Betreff, Empfängeradresse und Name des Kontakts, an den die Mail ging, mit Umlauten auch in der Schreibweise mit e. E-Mail-Kampagnen: Eine neue Kampagne startet mit Klientenschutz aus (clientProtection.enabledfalse);POST /email-campaigns/{id}/client-protectionmitenabled: falsebraucht Klientendaten undclients:readnur noch, wenn schon Mails der Kampagne im Klientenbereich stehen.
v1.315.0 · 1. November 2026
- Neu: Co-Moderatoren zu Gruppenterminen.
POST /appointments/{id}/co-moderators/checkzeigt vor dem Einladen je Terminfree,busyoderalready;POST /appointments/{id}/co-moderatorslädt ein Teammitglied (userId) oder einen Kontakt (contactId) ein,scopeappointmentoderseries(dieser und alle folgenden der Terminreihe; spätere Termine der Reihe übernehmen ihn), belegte und schon eingeladene Termine stehen inskipped;POST /appointments/{id}/co-moderators/removelädt aus (removed). Der Co-Moderator bekommt eine eigene Einladung mit Kalenderdatei und Link, ist im claritos Live-Raum ab dem Eintritt Co-Host und belegt keinen Platz; ein Teammitglied mit Ressource ist für die Zeit belegt. 422co-moderator-without-email,not-a-group-appointment,appointment-not-open. Teilnehmer tragenisCoModerator(sidePROVIDER);hostsund der FiltercontactIdinGET /appointmentszählen Co-Moderatoren nicht.
v1.314.0 · 1. November 2026
- Terminarten tragen
practiceRelevant(Vorgabefalse): Betrifft die Terminart den Praxisbetrieb? Nur dann stehen ihre Mails in einer Organisation mit Praxisbetrieb im Postausgang des Klientenbereichs, sonst im allgemeinen (letters.listEmails). Lesen inappointments.getType/listTypes, setzen increateType/updateType. Beim Umschalten wandern die schon versendeten Mails mit. Ausschalten nur mit Klientendaten (clients:read, für die API freigegeben), sonst 403forbiddenmitreasonpractice-off-needs-client-access. Geändert, Spec gleich: Termine, die per Telefon, in der Praxis oder als Hausbesuch stattfinden, bekommen keinen Video-Raum mehr;meetingUrlbleibt dort leer.
v1.313.0 · 1. November 2026
- Geändert in der Regelsprache, Spec gleich: Ein Name in einer Formel, der bei genau einem Laborwert der Hauptname ist, meint diesen, auch wenn andere Werte ihn als Suchbegriff tragen (
{{Kreatinin}}ist das Serum-Kreatinin, nicht mehrmehrdeutigerName). Zwei Werte mit demselben Hauptnamen bleiben mehrdeutig.formulain den Antworten zu Regeln schreibt einen Namen nur, wenn er beim Lesen zum selben Ziel führt, sonst die Kennung ({{loinc:2160-0}},{{G-A1-01}}); jedeformulalässt sich unverändert wieder senden. Laborwerte der Art Index oder Verhältnis ohne eigene Einheit sind in Formeln ohne Einheit ({{HOMA-IR}} >= 2,5); vorher galt die Beschriftung des Systemkatalogs als Einheit undeinheitFehltkam.
v1.312.0 · 31. Oktober 2026
- Neu bei den Automationen: ein Filter auf eine Antwort im Formular am Auslöser
forms.response.submitted. Imtrigger.filtersteht dafürresponse.answers.‹feld›mit dem Schlüssel einer Option als Wert, Feld und Option wie inGET /forms/{id}/analysis(das Feld hat die Formart:kennung, etwadef:…oderstd:…). Der Filter passt, wenn die Antwort die Option enthält, bei Mehrfachauswahl also auch neben anderen; Ja/Nein heissttruebzw.false. Höchstens zehn solche Einträge je Regel, alle müssen passen.GET /automation-catalognennt den Filter mitkindformAnswerundpathresponse.answers. Bögen an der Akte melden keine Antworten, dort trifft der Filter nie.
v1.311.0 · 31. Oktober 2026
- Geändert:
DELETE /appointments/{id}/participants/{contactId}entfernt auch den letzten Teilnehmer eines Unterrichts oder eines Gruppentermins „nur intern“; der Termin bleibt mit freien Plätzen stehen. Bisher kam dortlast-participant(beim Event durfte der Letzte schon gehen). Der Ausgetragene bekommt wie bisher seine Absage.
v1.310.0 · 31. Oktober 2026
- Neu: Wortwolke der Freitexte in
GET /forms/{id}/analysis. Jede Freitextfrage trägtterms(itemsmitterm,display,count,kindword,pairoderanswer, dazubelowThresholdundhidden), ohne KI gezählt: je Einreichung, erst ab 3 Einreichungen, höchstens 40, ohne E-Mail-Adressen, Web-Adressen, Telefonnummern, Zahlen und Füllwörter; andere Fragen habenterms: null. Neu auf oberster EbenehiddenTerms.PUT /forms/{id}/analysis/hidden-termsmittermsersetzt die Liste der ausgeblendeten Begriffe (nur Admins,forms:write); ein Einzelwort blendet jedes Wortpaar mit aus, in dem es steht.
v1.309.0 · 31. Oktober 2026
- Neu:
GET /forms/{id}/analysis/groupliefert die Kontakte hinter den Filtern einer Auswertung (Zeitraum, Link, Sprache, Antwort wie beiGET /forms/{id}/analysis) alscontactIds, dazuwithoutContactfür Einreichungen ohne Kontakt. Damit legt man wie der Reiter „Handeln“ eine Kontaktliste (POST /contact-lists,POST /contact-lists/{id}/members) oder eine Aufgabe (POST /tasks) an.
v1.308.0 · 31. Oktober 2026
- Neu: Rücklauf der persönlichen Links eines Formulars.
GET /forms/{id}/follow-upliefert je Link an einen Kontakt oder Interessenten den Stand (submitted,started,opened,not-opened,expired), wann und wie oft erinnert wurde undremindBlockedBy; Links an eine Akte zählen nicht.POST /forms/{id}/follow-up/remindmitlinkIds(höchstens 50) undtemplateId(Nachrichtenvorlage für Kontakte) schickt jeder Person die Vorlage mit ihrem persönlichen Link, im Namen der handelnden Person über dieselbe Sendestelle wiePOST /contacts/{id}/conversation/email; brauchtemail:write. Übersprungen wird, was eingereicht, abgelaufen, ohne Kontakt oder Adresse ist oder in den letzten 24 Stunden erinnert wurde (skipped); ohne Absender 422precondition-failedmit Grundno-sender.
v1.307.0 · 31. Oktober 2026
- Neu: Zusammenhänge in den Antworten eines Formulars.
GET /forms/{id}/analysis/relationsprüft jedes Paar aus zwei Fragen (Auswahl, Ja/Nein, Optionen einer Mehrfachauswahl mit mindestens 3 Nennungen, Zahlen; Angaben zur Person nie) und, mitcontacts:read, Merkmale des Kontakts hinter der Einreichung (Land, Schlagworte, Klassen, betreuender Partner, Phase je Pipeline, Jahr der Anlage;contactFeatures). Geprüft wird über die Einreichungen, die beide Merkmale haben (mindestens 10, Gruppen mit mindestens 5), mit exaktem Test nach Fisher, Chi-Quadrat, Mann-Whitney oder Kruskal-Wallis und danach der Korrektur nach Benjamini-Hochberg über alle Paare:findingsmitlevelrelationship(q unter 0,05) oderhint(unter 0,1), höchstens 20, dazucheckedundtooSmall. MitcompareAundcompareBzusätzlichcomparison: Kreuztabelle oder Gruppen mit Median und Spanne, Stufe aus derselben Korrektur. Filter wie beiGET /forms/{id}/analysis.
v1.306.0 · 31. Oktober 2026
- Neu: KI-Auswertung eines Formulars.
GET /forms/{id}/analysis/ailiefert die Zusammenfassung des jüngsten Laufs: Aussagen mit Art (countedgezählt,classifiedKI-Einordnung) und Belegen (Optionen, Einreichungen), Themen der Freitexte mit ihren Einreichungen, Vorschläge für neue Optionen; jede Zahl einer Aussage steht im Faktenblatt, andere werden nicht geliefert (discarded).POST /forms/{id}/analysis/aistartet einen Lauf (202,runId),PUT /forms/{id}/analysis/ai/settingschaltet ihn je Formular ein oder aus (Admins; Ausschalten löscht Zusammenfassungen). An die KI gehen die Fragen, gezählte Ergebnisse und Freitexte; Felder für Name, Anschrift, Geburtsdatum, E-Mail-Adresse und Telefonnummer bleiben weg, soweit sie als solche erkennbar sind (vorgefertigte Felder zur Person, Felder der Art E-Mail, Telefon, Internetadresse, eigene Felder, deren Beschriftung danach klingt). Braucht das Recht der Organisation für die KI-Auswertung (403feature-not-available). Dazu inGET /forms/{id}/analysisneudataQuality: Antworten bei verborgenen Fragen, mehrfach eingereicht, Pflicht fehlt.
v1.305.0 · 31. Oktober 2026
- Neu: Bewegung als Katalog
sportder Regelsprache, das Compendium of Physical Activities 2024 (noch nicht ausgeliefert).GET /physical-activitiessucht einen Code (auch angefangen) oder Wörter der englischen Beschreibung; jeder Treffer nenntcompendium(adult,older-adult,wheelchair),group,metmitmetBasis(MET,MET60,METWC, nicht untereinander vergleichbar) und die Quellenangabe insource. Ein Eintrag ist der Code mit führender Null (01003); beim Speichern und Genehmigen einer Regel muss er eingespielt sein, sonsteintragUnbekannt.GET /standard-catalogszeigtactivities(Anzahl, Kompendien,inPlan,planRelease, Quellen).PATCH /standard-catalogs/sportmit{ inPlan }gibt Bewegung für den Plan des Klienten frei oder nimmt das zurück, nur eine Person mit dem Recht „Regeln genehmigen“, nie eine Automation und nie der MCP (403forbidden); im Plan stehen Name, Dauer und Häufigkeit, kein MET-Wert. Ohne Freigabe zählt Bewegung ininternalLeftOut.
v1.304.0 · 31. Oktober 2026
- Neu: die ICD-11 der WHO als Katalog
icd11der Regelsprache, nebenicd10gm(noch nicht ausgeliefert).GET /diagnosis-codesnimmtcatalog(icd10gmals Vorgabe odericd11); jeder Treffer trägt jetzttitleDeMissing(nur ICD-11: die deutsche Vorabversion hat für den Code noch keinen Titel,titleist dann der englische),titleEnunduri(nur ICD-11; Code, Titel und URI gehören bei jeder Weitergabe zusammen, Lizenz der WHO). Beim Speichern und Genehmigen einer Regel muss ein ICD-11-Code in der aktiven Fassung stehen, sonsteintragUnbekannt; in einem persönlichen Plan steht eine Diagnose nie, sie zählt ininternalLeftOut. Geändert:GET /standard-catalogsliefertdiagnosesals Liste der aktiven Diagnosen-Kataloge (id,version,count) statt als einzelnes Objekt; 1.303.0 war noch nicht ausgeliefert.
v1.303.0 · 31. Oktober 2026
- Neu: Lebensmittel als Katalog
lebensmittelder Regelsprache (noch nicht ausgeliefert). Ein Eintrag ist derslugeines Lebensmittels ausGET /foods/search; beim Speichern und Genehmigen einer Regel muss er in der Datenbank stehen, sonsteintragUnbekannt.GET /rulebook-catalogslistetlebensmittelmit den Einträgen, die Regeln der Organisation verwenden.GET /standard-catalogszeigt Lebensmittel (Anzahl,inPlan,planRelease, Quellen) und die aktive ICD-10-GM;PATCH /standard-catalogs/lebensmittelmit{ inPlan }gibt Lebensmittel für den Plan des Klienten frei oder nimmt das zurück, nur eine Person mit dem Recht „Regeln genehmigen“, nie eine Automation und nie der MCP (403forbidden). Ohne Freigabe bleiben Lebensmittel intern und zählen ininternalLeftOutder persönlichen Pläne.
v1.302.0 · 31. Oktober 2026
- Neu: Diagnosen der ICD-10-GM als Katalog
icd10gmder Regelsprache (noch nicht ausgeliefert).GET /diagnosis-codes?q=sucht in der aktiven Fassung nach einem Code (auch angefangen,E11) oder Wörtern im Titel, deutsch oder russisch, und liefert Code, amtlichen Titel, russischen Titel (titleRuFromnennt den übergeordneten Code, wenn der eigene fehlt), Ebene und ob der Code kodierbar ist;catalogmit Fassung und Quellenangabe,null, solange keine Fassung eingespielt ist.GET /rulebook-catalogslisteticd10gm, sobald eine Fassung da ist;entriesnennt dort nur die Codes, die Regeln der Organisation verwenden. Beim Speichern und Genehmigen einer Regel muss jeder Code inempfehlung(icd10gm; <Code>)in der aktiven Fassung stehen, sonsteintragUnbekannt. Diagnosen stehen nie im Plan eines Klienten.
v1.301.0 · 31. Oktober 2026
- Neu:
GET /forms/{id}/responses/export, die Einreichungen eines Formulars als CSV. Eine Zeile je Einreichung, älteste zuerst: Kennung, Zeitpunkt (Berlin), Link, Sprache, dann je Frage eine Spalte in der Reihenfolge des Formulars. Auswahl als Wort von heute (sonst das Wort der Einreichung), Zahlen als Zahlen, Messwert und Raster in eigenen Spalten, eine Wiederholgruppe in einer Zelle, Berichtigungen eingerechnet. Dieselben Filter wieGET /forms/{id}/analysis. Spaltenköpfe inlocale; beienKomma, sonst Semikolon mit Dezimalkomma; BOM vorn. Formulare der Klientenakte nur mit Klientendaten-Freischaltung undclients:read.
v1.300.0 · 31. Oktober 2026
- Neu:
GET /forms/{id}/analysis, die Auswertung eines Formulars mit denselben Zahlen wie die Seite „Auswertung“. Je Frage der Nenner (shown: wem sie gezeigt wurde, bei bedingten Fragen nur bei zutreffender Bedingung), Zählung nach Options-Schlüssel samt Optionen, die es nicht mehr gibt (inForm: false), Freitexte einer „Andere“-Option an der Option (otherTexts), Kennzahlen für Zahlen und Messwerte, Freitexte im Wortlaut; Angaben zur Person nur gezählt (kind: personal). Dazu Einreichungen je Tag und Sprache unddropOff, die Abbruch-Kette aus der Messung des Formulars. Filterfrom,to,link(personal,noneoder die Kennung eines öffentlichen Links),language,questionmitoption. Formulare der Klientenakte nur mit Klientendaten-Freischaltung undclients:read.
v1.299.0 · 30. Oktober 2026
- Einwilligungs-Protokoll (
GET /consent-log): neuer Zweckpurposes.partnerAttribution(Partner-Zuordnung: ein Kauf wird dem Partner zugeordnet, über dessen Werbe-Code der Besucher kam). Fehlt er in älteren Einträgen, steht er auffalse. Die Ausfuhr (GET /consent-log/export) hat dafür eine Spalte mehr, „Partner-Zuordnung“, nach „Auf diesem Geraet angemeldet bleiben“.
v1.298.0 · 30. Oktober 2026
- Neu: Klientenschutz an E-Mail-Kampagnen. Feld
clientProtection(enabled,changedAt;nullohne wirksamen Praxisbetrieb) undPUT /email-campaigns/{id}/client-protectionmit{ enabled }, in jedem Stand. Aus: Mails an Empfänger mit Akte stehen im allgemeinen Postausgang und am Kontakt; die schon versendeten wandern mit, an bringt sie zurück in den Klientenbereich. Ausschalten nur mit Freischaltung der Klientendaten,clients:readund Zugang der handelnden Person zum Klientenbereich (403client-access-required); ohne Praxisbetrieb 422practice-module-inactive.
v1.297.0 · 30. Oktober 2026
GET /organization/invitations: Nie angenommene Einladungen (offen, abgelaufen, zurückgezogen) werden am Tag nach ihrem Ablauf gelöscht und erscheinen danach nicht mehr, auch nicht mitstatus=EXPIRED;DELETE /organization/invitations/{id}auf eine solche Einladung antwortet dann 404 statt 204. Angenommene Einladungen bleiben. Die Beschreibung des Feldsstatussagt es.
v1.296.0 · 30. Oktober 2026
- Neu: Herleitung (noch nicht ausgeliefert).
GET /personal-plans/{id}/derivationliefert den Lauf, aus dem ein persönlicher Plan angelegt wurde, in der Form vonPOST /rulebooks/{id}/compute, dazu je gelesenem Wert die Herkunft (origins: Datum, Laborbericht); nur Personen mit dem Recht „Regeln genehmigen“, sonst 403physicians-only.GET /care-enrollments/{id}/derivationliefert den Vorschlag, aus dem eine Betreuung gestartet wurde: Regelwerk, Fassung und Regel je Vorlage und Baustein, mit der Spur als Liste (Tiefe, Wert, Herkunft, Datum); ohne dieses Recht nur Regelwerk und Fassung (physicianView: false). Pläne und Betreuungen von vorher haben keine Herleitung (runbzw.derivationleer).
v1.295.0 · 30. Oktober 2026
- Neues Recht
FORMULAR_KI(KI-Auswertung von Formularen) inGET /organization/entitlementsund in den Lizenz-Endpunkten. Es hat keine Voraussetzung und schaltet die KI-Teile der Formular-Auswertung frei, sobald diese ausgeliefert sind; Zahlen und Diagramme hängen nicht daran.
v1.294.0 · 30. Oktober 2026
- Geändert (Entscheidung des Betreibers, noch nicht ausgeliefert): Was Regeln über einen Menschen sagen, lesen nur Personen mit dem Recht „Regeln genehmigen“.
POST /rulebooks/{id}/computeundGET /rule-runs/{id}antworten sonst 403physicians-only(über den MCP mit einer solchen Person erlaubt, für eine Automation ohne Person nie);GET /clients/{id}/rule-runsbleibt. Persönliche Pläne kommen für alle anderen ohnerulesan den Empfehlungen, und Empfehlungen, die inzwischen intern sind, ohne Namen, Text und Angaben.
v1.293.0 · 30. Oktober 2026
- Persönliche Pläne enthalten nur Lebensstil und Wohlbefinden (Entscheidung des Betreibers, noch nicht ausgeliefert): Eigene Kataloge sind intern, bis eine Person mit dem Recht „Regeln genehmigen“ sie für den Plan freigibt (
inPlanimPATCH /rulebook-catalogs/{key}, gelesen mitinPlanundplanRelease; nur in den Lebensstil-Bereichen,otherantwortet 409area-never-in-plan). Einträge tragendoctorsOnly(setzen nur dieselben Personen,PATCH …/entries/{entryKey}). Beides nie über eine Automation oder den MCP (403release-needs-person).professionalOnlyentfällt. An den Plänen:internalLeftOutstattprofessionalOnlyLeftOut,internalEntries,lifestyleConfirmation, Lückerecommendations-internal, 409all-internalstattprofessional-only;POST /personal-plans/{id}/releaseverlangtconfirmLifestyle: true.
v1.292.0 · 30. Oktober 2026
- Geändert gegenüber 1.291.0 (noch nicht ausgeliefert):
release.waitingForinGET /organization/licenseträgt englische Werte (receivables,payables,subscriptions,affiliate-sales,affiliate-claims,affiliate-credit-notes,affiliate-drafts,affiliate-clawbacks,affiliate-other, sonstother). Abgeben und Zurücknehmen einer Organisation bleiben in der Anwendung (Entscheidung des Betreibers), weil am Ende eine Löschung steht.
v1.291.0 · 30. Oktober 2026
- Neu in
GET /organization/license: je Organisationrelease(läuft eine Abgabe: seit, Lesephase bis, Phaseread-onlyoderstopped, Sicherung angefordert und verschickt, was die Löschung aufhält, ob sie sich zurücknehmen lässt) undreleasable(ob sie sich abgeben lässt). Abgeben und Zurücknehmen selbst gehen vorerst nur in der Anwendung.
v1.290.0 · 30. Oktober 2026
- Neu: Änderungen der Lizenz über die API, immer in zwei Schritten.
POST /organization/license/changes/previewrechnet die Änderung eines Bausteins (Menge, Takt) vorab: Wirkung sofort mit anteiliger Rechnung oder zum Stichtag, Betrag jetzt und je Zeitraum, mitchecksum;POST /organization/license/changesbestätigt sie mit dieserchecksum.POST /organization/license/cycle-change/previewundPOST /organization/license/cycle-changewechseln den Takt des Pakets zwischen monatlich und jährlich (continuefür wählbare Jahresbausteine). Beim Bestätigen ist der KopfIdempotency-KeyPflicht (422 anheaders.idempotency-key), hat sich seit der Vorschau etwas geändert, kommt 409preview-outdated. Nur der Tenant-Owner; das Bestätigen geht auch in der Lesephase. Neue Gründe (409):no-contract,package-ending,below-usage,change-pending,contract-error; 422 anbody.cycleundbody.quantity.
v1.289.0 · 30. Oktober 2026
- Neu: die Lizenz der Organisation über die API (Lizenzmodell).
GET /organization/licensezeigt die Lizenz des Verbunds wie der Reiter „Lizenz“ (Paket mit Fassung, Takt, Preis, Zustand, Stichtag, Organisationen, Bausteine, je Organisation Wahl und Video-Stufe), nur für den Tenant-Owner.GET /organization/license/choiceszeigt Wahlplätze, Wahl und Video-Stufe dieser Organisation (Tenant-Owner oder ORG_ADMIN).PUT /organization/license/choiceswählt Module für die Wahlplätze,PUT /organization/license/video-tierordnet eine gebuchte Video-Stufe zu; beides nur der Tenant-Owner, ein freier Platz gilt sofort, ein Wechsel ab dem nächsten Monatsstichtag, und beides geht auch in der Lesephase. Ohne Tenant-Owner 403forbiddenmitreasontenant-owner-required.
v1.288.0 · 30. Oktober 2026
- Neu: Die Lesephase des Lizenzmodells gilt auch für die API und den API-MCP. Ist die Lizenz einer Organisation zu Ende, nimmt die API 30 Tage lang nur lesende Aufrufe an, danach ist auch das Schreiben gesperrt. Ein schreibender Aufruf bekommt dann 403
forbiddenmitreasonlicense-read-only,phase(read-onlyoderlocked) unduntil(letzter Tag der Lesephase). Durch kommen nur Endpunkte mit einer Ausnahme der Phase; heute in der LesephasePOST /backups/runsundPUT /backups/password(Datensicherung als Export) sowieDELETE /affiliate-coupons/{id},PATCH /affiliate-coupons/{id}mitactive: falseundDELETE /affiliate-tracking/webhook(Beenden). Nach der Lesephase geht keiner davon mehr durch. Lesende Aufrufe, auchPOST …/validateund Vorschauen, ändern sich nicht; Automationen der Organisation laufen in der Lesephase weiter.
v1.287.0 · 30. Oktober 2026
- Neu in
GET /rooms/settings:recordingStoragemit dem Aufnahmespeicher der Organisation für Video-Aufzeichnungen im Live-Raum:tier(Video-Stufe,nullohne Stufe),usedBytes,limitBytes(nullohne Grenze) undstate(free,warningab 80 %,fullab 100 %,unlimited). Es zählen nur Video-Aufnahmen, deren Dokument besteht; der Ton-Mitschnitt für die Zusammenfassung zählt nicht. Ist der Speicher voll, startet keine neue Video-Aufzeichnung, Meetings laufen ohne weiter.PATCH /rooms/settingsantwortet unverändert nur mitsummary. - Geändertes Verhalten, Spec unverändert:
PATCH /organization/members/{userId}mitclientAccess: trueantwortet403 forbiddenmitreason: practice-read-only, wenn die Praxis der Organisation nur noch liest (Modul beendet oder Lesephase). Ein bestehendes Recht bleibt, Entziehen (false) geht immer.
v1.286.0 · 30. Oktober 2026
- Geändertes Verhalten an den Endpunkten der Praxis (Regelwerke und Kataloge, Rechenverbindungen und -fälle, persönliche Pläne, Betreuungspläne, Betreuungen und Sitzungen, Biomarker-Profile und -Regelsätze), Spec unverändert: Ist das Praxis-Modul einer Organisation beendet oder die Organisation in der Lesephase (Lizenzmodell), bleiben lesende Endpunkte, das Anfordern des PDFs eines persönlichen Plans, das Rechnen ohne Speichern (
POST /rulebooks/{id}/compute) und das Beenden erreichbar (POST /rule-cases/{id}/withdraw,DELETE /rule-connections/{id},POST /personal-plans/{id}/withdraw,POST /care-plans/{id}/retire); vorher antworteten siefeature-not-available. Schreibende Endpunkte antworten dann 403forbiddenmitreasonpractice-read-only. Ohne Praxis bleibt es beifeature-not-available.
v1.285.0 · 30. Oktober 2026
- Neu:
PATCH /rule-connections/{id}mitcreditAccountId(odernull) legt das Credit-Konto des Partners an einer Rechenverbindung fest, nur die rechnende Organisation, nur ORG_ADMIN. Ab dann bucht jede Freigabe eines persönlichen Plans aus einem Fall dieser Verbindung 1 Credit auf dieses Konto (Verbrauch), das Zurückziehen des Plans oder des Falls nimmt ihn zurück; ohne Konto wird nichts gebucht. Ein unbekanntes oder geschlossenes Konto ergibt 422 anbody.creditAccountId(invalid_reference).GET /rule-connectionsträgt inasComputingneucreditAccount({ id, program, customer }odernull). - Neuer Wert
PERSONAL_PLANinsourceder Credit-Buchungen (GET /credits/accounts/{id}): Verbrauch und Rücknahme aus einem persönlichen Plan, der an eine Partner-Organisation zugestellt wurde.
v1.284.0 · 30. Oktober 2026
- Neu an den Betreuungsplan-Vorlagen: Bausteine.
GET,POST,PUT /care-plansundPOST /care-plans/validatetragenmodules([{ key, name }]) und an Phase und SitzungmoduleKey: Teile, die nur auf Empfehlung in eine Betreuung kommen. Eine Phase mit Baustein nimmt ihre Sitzungen mit; eine Sitzung bekommt einen eigenen Baustein nur in einer Phase ohne. Der Schlüssel (Kleinbuchstaben, Ziffern, Bindestrich) entsteht ohne Angabe aus dem Namen und bleibt über Fassungen, weil Regeln den Baustein über ihn empfehlen. Neue 422-Fehler anbody.modules(too_big,required,duplicate) und anmoduleKeyvon Phase oder Sitzung (invalid_reference). - Neu: Varianten je Sitzung,
variants([{ moduleKey, callGuideId, durationMinutes }], höchstens 5, je Baustein eine). Ist der Baustein beim Start gewählt, gelten Leitfaden und Dauer der Variante; die erste gewählte gewinnt. 422 anbody.sessions.{n}.variants(invalid_value,requiredohne Leitfaden und Dauer); ein fremder Leitfaden oder eine Dauer, die die Terminart nicht anbietet, kommen wie bei der Sitzung ancallGuideIdbzw.durationMinutes. - Geändert gegenüber 1.282.0: Speichern eines Entwurfs mit Bausteinen ohne
modulesbzw. mit Varianten, ohne dass eine Sitzungvariantsnennt, antwortet jetzt mit 422requiredanbody.modulesbzw.body.sessionsstatt 409rejected. Eine leere Listemodulesentfernt alle Bausteine; eine Sitzung ohnevariantsverliert ihre Varianten, sobald eine andere Sitzung das Feld nennt. - Neu beim Start einer Betreuung (
POST /care-enrollments):modules, die Schlüssel der gewählten Bausteine. Teile anderer Bausteine kommen nicht in die Betreuung, die Sitzungen werden neu gezählt; ohne Angabe keiner. Empfohlene nenntGET /clients/{id}/care-plan-suggestions. 422 anbody.modules:invalid_referencefür einen Schlüssel, der nicht zur Fassung gehört,too_small, wenn weniger als zwei Sitzungen blieben. Die Abschriftcopyträgtmodules(die gewählten) und an Phase und SitzungmoduleKey, an der Sitzung dazuvariantModuleKey(Baustein, dessen Variante gilt); Varianten selbst stehen dort nicht.
v1.283.0 · 30. Oktober 2026
- Neu an
GET /rule-cases:retainUntil, das Ende der Aufbewahrungsfrist eines Falls bei der rechnenden Organisation: zehn Jahre nach seinem letzten Ereignis (Rechnen oder Zurückziehen), wie bei der Akte (§ 630f Abs. 3 BGB). Gelöscht wird nicht automatisch.
v1.282.0 · 30. Oktober 2026
- Geändertes Verhalten an
POST /care-plansundPUT /care-plans/{id}(Spec unverändert): Hat ein Entwurf Bausteine oder Varianten je Sitzung (in der Oberfläche angelegt), lehnt das Speichern ohne sie mit 409conflictundreasonrejectedab, statt sie still zu entfernen. Bausteine und Varianten in den Vorlagen-Endpunkten folgen in einer späteren Version; die Vorschläge tragen sie seit 1.281.0 (modules).
v1.281.0 · 30. Oktober 2026
- Neu an
GET /clients/{id}/care-plan-suggestions:whole(ob die ganze Vorlage empfohlen ist) undmodules, die empfohlenen Bausteine der Vorlage mitkey,nameundsources. Ein Baustein ist ein Teil einer Vorlage (Phasen oder Sitzungen), der nur auf Empfehlung in eine Betreuung kommt; eine Vorlage erscheint auch, wenn nur ein Baustein darin empfohlen ist.
v1.280.0 · 29. Oktober 2026
- Neu: Urteile über Hinweise aus Läufen anderer Organisationen gehen an die rechnende Organisation zurück, mit Grund und Name der Partner-Organisation, ohne den Namen der Person; nicht bei widerrufener Verbindung oder zurückgezogenem Fall.
PUT /care-sessions/{id}/foreign-hints/{runId}/{rule}antwortet mitsent,foreignHintstragenjudgementSent. Bei der rechnenden Organisation zähltGET /rulebooks/{id}/hint-statssie mit (accurate/notAccurateüber alle,fromPartnersder Anteil der Partner); neuGET /rulebooks/{id}/hint-objections(Klientendaten,clients:read): die jüngsten Widersprüche je Regel mit Grund,byundfromPartner.
v1.279.0 · 29. Oktober 2026
- Neu: Hinweise aus Läufen anderer Organisationen im Cockpit.
GET /care-sessions/{id}/hintsliefertforeignHints: je rechnender Organisation und Regelwerk der jüngste gültige Lauf an der Akte, mitrunId,computedBy,rulebook,versionNumber,approvedBy,computedAt,reportIdund denselben Feldern wiehints.PUT /care-sessions/{id}/foreign-hints/{runId}/{rule}speichert das Urteil (judgement,reason,runHash; nur eine Person, nie Automation oder MCP, 403judgement-needs-person; ein zurückgezogener Lauf: 409conflictmitreasonrun-withdrawn). Das Urteil bleibt in der eigenen Organisation.
v1.278.0 · 29. Oktober 2026
- Neu: das PDF eines persönlichen Plans.
POST /personal-plans/{id}/pdffordert es an (202; nur für freigegebene oder zurückgezogene Pläne, ein Entwurf: 409conflictmitreasonnot-released),GET /personal-plans/{id}/pdfliest den Stand (status:none,pending,ready,failed, dazudocumentId); fertig mit einem signierten Link (url,filename,expiresAt, wenige Minuten gültig). Je Stand des Plans entsteht ein PDF; nach dem Zurückziehen meldet der Standnone, ein neues trägt den Vermerk. Klientendaten, Zugriffsprotokoll.
v1.277.0 · 29. Oktober 2026
- Neu: persönliche Pläne aus dem Fall einer Partner-Organisation (Rechnen über die Grenze,
/rule-cases).GET /rule-cases/{id}/personal-planslistet sie,POST /rule-cases/{id}/personal-planslegt einen Entwurf aus dem beim Fall gespeicherten Ergebnis an (language,title); ein zurückgezogener Fall: 409conflictmitreasoncase-withdrawn. MitPOST /personal-plans/{id}/releasegeht eine unveränderliche Kopie in die Akte beim Partner; fehlt die Akte dort: 409partner-record-missing. - Neu an Plänen:
fromOrganization(Kopie aus einer anderen Organisation, deren Name; sonstnull),fromCase(aus einem Fall angelegt) und am einzelnen Plandelivered(an den Partner zugestellt).POST /personal-plans/{id}/withdrawzieht eine zugestellte Kopie mit zurück; eine Kopie zieht nur die Quelle zurück (409foreign-plan). Zieht die rechnende Organisation den Fall zurück (POST /rule-cases/{id}/withdraw), gelten auch seine Pläne nicht mehr.
v1.276.0 · 29. Oktober 2026
- Neu: persönliche Pläne (Klientendaten,
biomarkers:*undclients:*, Zugriffsprotokoll).POST /clients/{id}/personal-plansrechnet die wirksame Fassung eines Regelwerks (rulebookId, optionalreportId) und legt einen Entwurf mit den Empfehlungen aus eigenen Katalogen und ihren Texten an (409no-recommendation,professional-only);GET /clients/{id}/personal-plans,GET/PATCH/DELETE /personal-plans/{id}(Titel,coverNote,remove,texts; nur Entwurf, 409not-draft).POST /personal-plans/{id}/releaseund…/withdrawnur durch eine Person mit dem Recht „Regeln genehmigen“, nie Automation oder MCP (403release-needs-person,approve-right-missing); Freigabe nur ohne Lücken (409plan-incompletemitgaps). Hinweistext der Organisation:GET/PATCH /personal-plan-settings(Festlegen wie Freigeben). - Neu an den eigenen Katalogen:
professionalOnly(nur für Fachpersonal) inGET/POST/PATCH /rulebook-catalogs…; Einträge solcher Kataloge erscheinen nie in einem persönlichen Plan.
v1.275.0 · 29. Oktober 2026
- Neu: eigene Empfehlungs-Kataloge mit Texten.
POST /rulebook-catalogslegt einen Katalog an (names,area:nutrition,exercise,sleep,mental,supplements,other; der Schlüssel entsteht aus dem ersten Namen und bleibt),GET /rulebook-catalogs/{key}liest ihn mit allen Einträgen und Texten,PATCH /rulebook-catalogs/{key}ändert Namen, Bereich, Reihenfolge oderarchived. Einträge:POST /rulebook-catalogs/{key}/entries(names,textsje Sprache als HTML, beim Speichern gesäubert) undPATCH /rulebook-catalogs/{key}/entries/{entryKey}. Ein Name darf in einem Katalog nur einmal vorkommen (422duplicateanbody.names), zu viele Kataloge oder Einträge 409too-many. - Geändert:
GET /rulebook-catalogsnennt neben dem Katalog der Wege auch die eigenen Kataloge, die nicht archiviert sind (ohne archivierte Einträge). Eine Regel empfiehlt einen Eintrag wie einen Weg; ein Name aus mehreren Wörtern darf in der Formel auch ohne Anführungszeichen stehen (empfehlung(Schlaf; Ruhe und Atmung)).
v1.274.0 · 29. Oktober 2026
GET /clients/{id}/care-plan-suggestionsnimmt jetzt auch die Wege aus Läufen anderer Organisationen (rule-runs, je rechnender Organisation und Regelwerk der jüngste), wenn ihr deren Betreuungsplan übernommen habt: Vorgeschlagen wird eure eigene Kopie. Neu je QuellecomputedBy(Name der rechnenden Organisation, sonstnull);rulebookIdist bei solchen Quellennull. Übernommen werden Betreuungspläne nur in der Oberfläche.
v1.273.0 · 29. Oktober 2026
- Neu: Rechnen über die Grenze einer Organisation.
GET /rule-connections,POST /rule-connections(eine Verbindung mit den eigenen Regelwerken anlegen, der Coderech_…kommt einmal zurück und ist sieben Tage einlösbar),POST /rule-connections/redeem(Code einer anderen Organisation einlösen,legalBasisConfirmed: truebestätigt die Rechtsgrundlage) undDELETE /rule-connections/{id}. Anlegen, Einlösen und Widerrufen nur ORG_ADMIN; Anlegen und Einlösen nur eine Person, nie eine Automation und nie über den MCP (403forbiddenmitreasonconnection-needs-person). - Neu:
POST /clients/{id}/rule-runslässt über eine aktive Verbindung bei der anderen Organisation rechnen: Es reisen nur die Werte, die die wirksame Fassung des Regelwerks liest, dazu Name, Geburtsdatum, Alter und Geschlecht; nie aus einer Automation (403request-needs-person). Zurück kommt ein Lauf ohne Formeln:GET /clients/{id}/rule-runs,GET /rule-runs/{id}(Ergebnisobjekt wie beicompute, Regeln mit Namen, Einheit, Gruppen und Hinweis). Die rechnende Organisation sieht ihre Fälle unterGET /rule-casesund zieht einen mitPOST /rule-cases/{id}/withdrawzurück (Recht „Regeln genehmigen“, nur eine Person); der Lauf beim Partner trägt dannstatus: withdrawn.
v1.272.0 · 29. Oktober 2026
GET /rulebook-sourcesnennt jetzt auch Raster und Wiederholgruppen der Bögen an der Akte: je Zelle eines Rastersanamnese:<Block>.<Zeile>.<Spalte>(mit nur einer Spalteanamnese:<Block>.<Zeile>), je Auswahl-Spalte einer Wiederholgruppe eine Mengeanamnese:<Block>.<Spalte>über alle Zeilen undanamnese:<Block>.anzahl.POST /rulebooks/{id}/computeliest sie aus der jüngsten Einreichung, die den Block beantwortet hat, mit Korrekturen.- Neu:
GET /rulebook-catalogsmit den Katalogen, aus denen Regeln Empfehlungen geben, heute der Katalog der Wege (weg: die Betreuungsplan-Vorlagen, Schlüssel ist die erste Fassung einer Vorlage). Neu:GET /clients/{id}/care-plan-suggestions(careplans:readundclients:read, Klientendaten, Zugriffsprotokoll) mit den Wegen, die die genehmigten Regelwerke für einen Klienten vorschlagen, je mit den Regeln und der jüngsten freigegebenen Fassung (plan). Ein Vorschlag startet nichts; gestartet wird mitPOST /care-enrollments.
v1.271.0 · 29. Oktober 2026
- Hinweise im Cockpit: Jede Regel in den Antworten unter
/rulebooksträgthint({ color, action }mitcolorred,goldodergrey, sonstnull). Beim Speichern (PUT /rulebooks/{id}/draft/rules/{key},POST /rulebooks/{id}/draft/validate) setzthintden Hinweis,nullnimmt ihn weg, ohne Angabe bleibt er. Nur eine Regel, die ja oder nein ergibt, kann ein Hinweis sein (422 aufbody.hint); der Hinweis gehört zur Prüfsumme. Neu:GET /rulebooks/{id}/hint-statsmit den Urteilen der Coaches je Regel (accurate,notAccurate). - Neu im Bereich
careplans:GET /care-plans/{id}/rulebooks,POST /care-plans/{id}/rulebooks(Regelwerk verknüpfen, nur im Entwurf einer eigenen Vorlage, sonst 409plan-not-editable),PATCH /care-plans/{id}/rulebooks/{rulebookId}(active, immer) undDELETE /care-plans/{id}/rulebooks/{rulebookId}.GET /care-sessions/{id}/hintsliefert die Hinweise einer Sitzung (Rot, Gold, Grau,stateappliesodercannot-assessmitmissing, Urteil,runHash;clients:read, Zugriffsprotokoll).PUT /care-sessions/{id}/hints/{versionId}/{rule}speichert das Urteil (accurate, odernot-accuratemitreason), nur durch eine Person: nie eine Automation, nie ein KI-Agent über den MCP (403forbiddenmitreasonjudgement-needs-person).
v1.270.0 · 29. Oktober 2026
GET /rulebook-sourcesnennt neben Laborwerten und Angaben zur Person jetzt auch die Anamnese aus den Feldern der Akte (anamnese:<Schlüssel des Feldes>, bei Messwerten mit mehreren Teilenanamnese:<Schlüssel>.<Teil>) und den Stand einer Betreuung (plan:sitzung,plan:tag,plan:phase). Regeln dürfen sie lesen.POST /rulebooks/{id}/computeliest die Anamnese mit; den Stand einer Betreuung kennt er nicht, weil er ohne Sitzung rechnet: Regeln, die ihn brauchen, ergeben dort „unbekannt“ (unknown).- Geändert:
callMinutesinGET /affiliates/activityzählt nur noch die Dauer von Gesprächen: Telefonate mit einer fertigen Gesprächsnotiz, die nicht nur eine Mailbox festhält, oder mit einem Leitfaden samt Ergebnis, und angenommene Telefonate ohne Notiz ab 30 Sekunden, die keine Mailbox sind. Bisher zählte die Dauer jedes angenommenen Telefonats, auch einer Mailbox; die Werte können deshalb kleiner ausfallen.callsist unverändert. - Geändert:
PATCH /organizationlehnt einen Wechsel vontypeaufBUSINESSoderHOLDINGmit409 conflictundreason: organization-limitab, wenn das Lizenzpaket keinen freien Platz für eine weitere Geschäfts- oder Holding-Organisation hat. Das gilt nur für Pakete mit festgelegter Zahl an Organisationen; bestehende Lizenzen ohne diese Zahl sind nicht betroffen.
v1.269.0 · 29. Oktober 2026
- Neu: Regelwerke der Regelsprache unter
/rulebooks(biomarkers:read,biomarkers:write), dieselben wie im Bereich „Regeln“ der Anwendung. Lesen und Pflegen:GET /rulebooks,GET /rulebooks/{id}(mit?version=eine bestimmte Fassung),POST /rulebooks,PATCH /rulebooks/{id},DELETE /rulebooks/{id}undGET /rulebook-sources(was Regeln lesen können: Laborwerte und Angaben zur Person, mit Namen und Einheiten). Regeln im Entwurf:PUT /rulebooks/{id}/draft/rules/{key}als Formel (formula, in der Sprache der Anfrage, wie in der Formelzeile) oder als Baum (expression),POST /rulebooks/{id}/draft/validateals Probelauf undDELETE /rulebooks/{id}/draft/rules/{key}. Jede Regel kommt als Formel in drei Sprachen und als Baum zurück. Fassungen:POST /rulebooks/{id}/versions(Entwurf als Kopie der wirksamen),DELETE /rulebooks/{id}/draftundPOST /rulebooks/{id}/draft/approve. - Genehmigen (
POST /rulebooks/{id}/draft/approve) darf nur eine Person mit dem Recht „Regeln“ der Organisation (sonst 403forbiddenmitreasonapprove-right-missing), nie eine Automation und nie ein KI-Agent über den MCP (403forbiddenmitreasonapprove-needs-person): Die Genehmigung ist die Entscheidung einer Ärztin oder eines Arztes. Eine Fassung mit Fehlern antwortet 422, eine ohne Regeln 409version-empty. Beim Genehmigen wird eine Prüfsumme über die Regeln gespeichert (checksum). - Neu:
POST /rulebooks/{id}/computemit{ clientId, rules? }(biomarkers:readundclients:read, dazu die Freischaltung der Klientendaten; der Zugriff steht im Zugriffsprotokoll) rechnet die wirksame Fassung mit den freigegebenen Laborwerten des Klienten und liefert das Ergebnisobjekt:values,inputs,groups,trace, die Fassung mitchecksumund Genehmigung sowiehash. Ohne genehmigte Fassung 409no-effective-version; passen die Regeln nicht mehr zu ihrer Prüfsumme, 409checksum-mismatch, und es wird nicht gerechnet. - Veraltet: die acht Endpunkte unter
/biomarker-rule-sets(biomarkers.listRuleSets,getRuleSet,createRuleSet,validateRules,replaceRules,deleteRuleSet,confirmRuleSet,unconfirmRuleSet). Sie antworten bis zum 31.12.2026 weiter, mit den KöpfenDeprecationundSunset, und entfallen danach. Im API-MCP sind sie ab dieser Version ausgeblendet. Ihre Regelwerke werden nicht übertragen; legen Sie Regeln unter/rulebooksan.
v1.268.0 · 27. Oktober 2026
- Behoben:
POST /email-campaigns/{id}/report/fetch-reasonsordnet jetzt auch Rückläufer zu, die SendGrid in derselben Sekunde wie den Versand meldet (etwa sofortige Abweisungen von Gmail). SendGrid führt den Zeitpunkt in den Sperrlisten in ganzen Sekunden; solche Einträge galten bisher als vor dem Versand und zählten unterwithoutEntry.
v1.267.0 · 27. Oktober 2026
- Geändert:
POST /email-campaigns/{id}/report/fetch-reasonsliest nach Bounces und Blocks auch SendGrids Liste Invalid Emails, aber nur für Rückläufer, die noch keinen Grund und keinen Eintrag in Bounces haben; ein Treffer wird wie ein Rückläufer gespeichert (typebounce,sourcesuppression-list). Neu in der Antwort:read.invalidEmails. Ein eingeschränkter Schlüssel braucht dafürsuppression.invalid_emails.read; fehlt das Recht oder antwortet SendGrid mit einem Fehler, istread.invalidEmailsnull(statt 0 für „gelesen und leer“ oder „nicht nötig“), die Gründe aus Bounces und Blocks bleiben erhalten und diese Mails zählen unterwithoutEntry.
v1.266.0 · 27. Oktober 2026
- Neu: Grundeinstellung des Finders
GET /finder/settings(finder:read:enabled,brandId,taxonomyCount) undPATCH /finder/settings(finder:write, Rumpf{ brandId },nullfür das Standard-Board der Organisation). Ändern nur Admins der Organisation (sonst 403forbidden); ist der Finder nicht eingeschaltet, 403feature-not-available; ein Board, das es in der Organisation nicht gibt, 422validation-failedmitinvalid_referenceanbody.brandId. Die Boards liefertGET /sites/brands. Neues Rechtfinder:write: Erweitern Sie Ihre Schlüssel, wenn Sie die Einstellung setzen wollen.
v1.265.0 · 27. Oktober 2026
- Neu: Kontakte zusammenführen
POST /contacts/{id}/merge(contacts:write). Der Kontakt im Pfad bleibt, die Kontakte inmergeContactIds(1 bis 20, gleicher Typ) werden mit allen Verweisen auf ihn umgehängt und gelöscht; endgültig.fieldSourcesnennt je Feld die Kennung des Beteiligten, dessen Wert gilt; Tags werden vereinigt. Antwort{ contact, mergedContactIds, reassignedReferences }.409mitreasontype-mismatch,bookings-on-multipleoder je Sperre (client-records-on-multiple,practitioner-profiles-on-multiple,sales-profiles-on-multiple,company-profiles-on-multiple,marketplace-subscriptions-on-multiple,calendars-on-multiple). Derselbe Ablauf wie in der Anwendung. - Neu: Ereignis
contacts.contact.merged, einmal je Zusammenführung, auch aus der Anwendung, mit dem bleibenden Kontakt (contact, Form wie beicontacts.contact.updated),mergedContactIdsundreassignedReferences. Für die gelöschten Kontakte kommt keincontacts.contact.deletedund für den bleibenden keincontacts.contact.updated: Hängen Sie Ihre Datensätze der gelöschten Kennungen auf den bleibenden Kontakt um. Bisher meldete das Zusammenführen kein Ereignis. - Geändert: Die beiden
409beiDELETE /contacts/{id}(in-use,client-record-retained) nennen imdetailden WegPOST /contacts/{id}/merge. - Geändert:
contacts.contact.createdkommt jetzt auch für Behandler, die der Longevity-Finder beim Prüfen eines Zertifikats neu anlegt, und für Profile, die einzeln aus einem anderen Verzeichnis übernommen werden. Damit meldet jede Neuanlage eines Kontakts, gleich auf welchem Weg; ausgenommen bleiben Massen-Importe und Massen-Übernahmen (1.263.0) sowie Testfälle, die claritos zum Üben in eine Organisation übergibt.
v1.264.0 · 27. Oktober 2026
- Neu: Bericht einer Kampagne
GET /email-campaigns/{id}/reportmit Zustellung, Gründen der Rückläufer (SMTP-Code, Kategorie von SendGrid, Antwort des Servers ohne E-Mail-Adressen), Tranchen, Anbietern, Domains, Folgen (Sperrliste, Widerrufe ohne die Rücknahme der Einwilligungen eines Imports), Antworten, Klicks je Link, Öffnungen und gebuchten Terminen; dazu das Anhalten mit der Meldung von SendGrid (run.providerMessage,run.haltMeaning). Abrufe, die vermutlich kein Mensch waren (Sicherheitsfilter, Vorabrufe), zählen getrennt (botClicks,prefetches). - Neu:
GET /email-campaigns/{id}/recipients(Seiten über den Cursor, Filtergroup,batch,domain,provider,reasonType,smtpCode,reasonCategory,search,updatedSince) undGET /email-campaigns/{id}/recipients/{recipientId}mit dem Verlauf aller Meldungen, Sperre, Einwilligung, Antworten (nur Gespräch, Zeit, Stimmung), Klicks, Öffnungen und Terminen (appointmentId,appointmentTypeId,appointmentTypeNamein der Hauptsprache der Organisation,statuswie beiGET /appointments). Beide brauchen zusätzlichcontacts:read. - Neu:
POST /email-campaigns/{id}/report/fetch-reasonsholt Gründe der Rückläufer aus SendGrids Sperrlisten nach (bei SendGrid wird nichts geändert; wiederholbar);409mit Grundsendgrid-suppression-forbidden, wenn der Schlüssel die Listen nicht lesen darf. Neu:GET/PUT /email-campaigns/trackingmitclicksPerPerson(Klicks je Person oder nur je Link, Schalter der Organisation; ändern nur Admins). - Neu: Ereignisse
campaigns.email.clickedundcampaigns.email.opened, nur für Abrufe, die vermutlich von Menschen stammen; gesendet rund acht Sekunden nach dem Abruf, damit ein Sicherheitsfilter, der alle Links einer Mail auf einmal abruft, vorher erkannt ist.occurrencesagtfirstbeim ersten Klick eines Empfängers auf diesen Link bzw. seiner ersten Öffnung, sonstrepeat.contactId,recipientIdundoccurrencestehen nur darin, wenn die Organisation Klicks je Person zählt (sonstnull); zählt sie nur je Link, filtert claritos Programme ohne Browser, zu frühe Abrufe undHEAD, aber keine Serien, weil kein Abruf eine Person trägt. Beide sind Auslöser der Automationen, mit Filter auf eine Kampagne und aufoccurrence. Geändert: Kampagnen haben das FeldmeasureOpens(Öffnungen mit eigenem Bild messen, Vorgabe aus), lesbar und beim Anlegen und Ändern setzbar.
v1.263.0 · 27. Oktober 2026
- Geändert:
contacts.contact.createdkommt jetzt auch bei diesen Neuanlagen: ein neuer Käufer aus einem Checkout (auch bei der Einrichtung einer Lizenz), im Affiliate-Programm (Freigabe einer Bewerbung, Closer-Service, Team im Partner-Portal, eine weitere Person aus dem Bewerbungsformular, ein übernommener Interessent), eine aus einem Brief übernommene Ansprechperson, ein neuer Geschäftspartner bei der Anlage eines Belegs und Angehörige, die ein Kunde im Portal anlegt. Trägt der neue Kontakt Tags, kommt je Tagcontacts.tag.addedwie beiPOST /contacts. Wird ein vorhandener Kontakt verwendet, kommt kein Ereignis. - Geändert: Massen-Übernahmen senden keine Ereignisse mehr, weder
contacts.contact.creatednochcontacts.tag.added: die Übernahme der Stripe-Kunden, der DATEV-Stammdaten und der Partnerliste des Portals in der Buchhaltung sowie der Stammdaten-Import der Credits, auch überPOST /credits/import-profiles/{id}/master-data. Bisher kam je neuem Kontakt ein Ereignis, und ein Lauf legt oft Hunderte an. Das gilt auch für den Ansprechpartner, den eine solche Übernahme anlegt, wenn aus einer Person mit USt-IdNr. ein Unternehmen wird. Teilt claritos dagegen einen schon vorhandenen Kontakt so auf (Zuordnung zu DATEV, geänderte USt-IdNr. in der Partnerliste, Personenunternehmen ordnen, Kontaktformular), kommt für den neuen Ansprechpartner weiterhincontacts.contact.created. Wer diese Kontakte braucht, liest sie nach dem Lauf überGET /contacts.
v1.262.0 · 27. Oktober 2026
- Geändert:
contacts.contact.createdkommt jetzt auch, wenn ein Formular einen neuen Kontakt anlegt: Einsendungen über einen Formular-Link (/f/…), ein Funnel-Formular oderPOST /forms/{id}/responses, ein persönlicher Link (POST /forms/{id}/personal-links) sowie Firmen- und Vertriebler-Profile. Bisher meldeten nur Anlagen von Hand, überPOST /contactsund aus Dokumenten. Findet das Formular einen vorhandenen Kontakt, kommt kein Ereignis. Die Regel lautet: Jede Neuanlage meldet, Massen-Importe nicht; weitere Anlagewege folgen und stehen dann hier.
v1.261.0 · 27. Oktober 2026
- Neu: Lizenz-Logo eines Formulars in zwei Schritten,
POST /forms/{id}/license-logo/upload(signierte Adresse) undPOST /forms/{id}/license-logo/confirm(erst danach zeigt das Formular das Logo; Datei noch nicht da: 422 anbody.storageKey), entfernen mitDELETE /forms/{id}/license-logo;GET /forms/{id}trägtlicenseLogoUrl.POST /forms/{id}/personal-linkslegt aus den Angaben einer Person (valuesmitstd:-Feldern, optionaldocumentId) den Kontakt an oder findet ihn und liefert einen vorausgefüllten Link für sieben Tage (url,contactId,validUntil; 201, brauchtforms:writeundcontacts:write). Neuer Grundtarget-not-supported(409) für Formulare, deren Ziel keinen persönlichen Link kennt. Archivierte Formulare: 409archivedbei allen vier.
v1.260.0 · 27. Oktober 2026
- Neu:
PATCH /forms/{id}ändert die Einstellungen eines Formulars wie der Baukasten (Name, Anrede, öffentlicher Link, Portal,consentMode, Anzeige, Adressfinder, Lizenz-Hinweis, Abschluss); Kurzname, Ziel, Seiten und Einwilligungen setzt weiterPUT(mitgeschickt 422invalid_combination); ein archiviertes Formular ergibt 409archived.GET /forms/{id}/share-linkliest,POST /forms/{id}/share-linklegt den Teilen-Link der Organisation an (wiederholbar; neuer Grundpublic-access-disabled, 409).GET /forms/{id}und die Antworten vonPOST /forms,PUT /forms/{id}und dem Einfügen einer Vorlage tragen die Einstellungen mit:showProgress,showSummary,showFieldLabels,showClientHeader,reminderService,recognitionCard,translateResponses,thirdPartyMode,addressFinderMode,addressFinderPlaceholder,licenseLabel,completion. Geändert:publicUrlinGET /formsundGET /forms/{id}ist nur noch der Link der Organisation; bisher konnte dort der Werbe-Link eines Vermittlers stehen, über den jede Einsendung diesem Vermittler zugeschrieben wurde. Ohne Link der Organisation steht dortnull.
v1.259.0 · 26. Oktober 2026
- Neue Ereignisse
contacts.websiteAnalysis.completedundcontacts.websiteAnalysis.failed, genau einmal je Lauf der Webseiten-Analyse, auch für Läufe aus Portal, Leitfaden, Meeting und API. Die NutzlastwebsiteAnalysisträgt nur Kennungen und Zustand:contactId(angefragt),targetContactId(mit dem Ergebnis),topicId,topicName,language,source(app,portal,callGuide,meeting,api),userId,partnerContactId,affiliateId,startedAt,finishedAt; beicompleteddazupagesReadundunverifiedQuotes, beifailedder festereasonwiefailure.reasonim GET. Kein Seiten- oder Ergebnistext: das Ergebnis liefertGET /contacts/{id}/website-analysis. In Automationen als Auslöser mit Filtern auf Weg und Grund.
v1.258.2 · 26. Oktober 2026
- Geändert: Die Webseiten-Analyse hat keinen Freigabe-Schalter mehr.
enabledentfällt in den Antworten vonGET/POST/PUT /contacts/{id}/website-analysisundGET/PUT /website-analysis/settings, der Start antwortet nicht mehr403 feature-not-available. 1.258.0 und 1.258.1 waren nie in Production.
v1.258.1 · 26. Oktober 2026
- Geändert:
POST /contacts/{id}/website-analysisnimmt ohnelanguagedie Sprache der Organisation (wennde,enoderru, sonstde) und antwortet403 feature-not-availablevor jeder anderen Prüfung, solange die Funktion in der Umgebung nicht freigegeben ist.
v1.258.0 · 26. Oktober 2026
- Neu: Webseiten-Analyse am Kontakt.
GET /contacts/{id}/website-analysis(contacts.getWebsiteAnalysis) liest Gesprächsanlässe aus der Webseite des Kontakts (currentals HTML mit gelesenen Seiten,running,failure,history,dailyLimit); beim Interessenten eines Partners liegt das Ergebnis am Firmenkontakt (targetContactId).POST(contacts.startWebsiteAnalysis, 202) startet sie mittopicIdundlanguage,PUT(contacts.updateWebsiteAnalysis) speichert einen Stand von Hand; beides nur mit handelnder Person. Fehler: 422precondition-failedmitreason: no-websiteoderdaily-limit-reached, 409analysis-running, 403feature-not-available, solange die Funktion in der Umgebung nicht freigegeben ist. - Neu:
GET/PUT /website-analysis/topics(contacts.listWebsiteTopics,contacts.setWebsiteTopics) liest und ersetzt die Themen-Prompts der Organisation oder mitcampaignIddie einer Affiliate-Kampagne (name,prompt,isDefault, höchstens 20, eine Vorgabe).GET/PUT /website-analysis/settings(contacts.getWebsiteAnalysisSettings,contacts.setWebsiteAnalysisSettings) liest und setzt die Tagesgrenze (dailyLimit0 bis 500). Ändern nur ORG_ADMIN.
v1.257.0 · 26. Oktober 2026
- Gesprächsleitfäden:
nextCallGuideIdan Punkten und Antworten imcontentvon/call-guides(lesen und schreiben), „Weiter mit Leitfaden …“. Der Ausgang wird damit zum Ende: Der Lauf schliesst mit seinem Ergebnis, der Ziel-Leitfaden beginnt im selben Gespräch. Einnextungleichnulldaneben ergibt 422invalid_combinationan diesem Ausgang; ein Ziel, das kein aktiver Leitfaden der Organisation ist, 422sprung-ziel-unbekannt. - Ereignis
callguides.run.completed:guideRun.previousRunId(der Lauf, aus dem mit „Weiter mit Leitfaden …“ hierher gesprungen wurde, sonstnull) undguideRun.nextGuideId(der Ziel-Leitfaden, wenn der Lauf mit einem Sprung endet, sonstnull).
v1.256.0 · 26. Oktober 2026
- Eigene Felder:
GET /organization/custom-fields(mit Ordnern),POST /organization/custom-fields,PATCH /organization/custom-fields/{id},POST /organization/custom-fields/{id}/archiveund/unarchive. Lesen mitorganization:read, Schreiben mitorganization:writeund ORG_ADMIN. Kurzname, Typ und Entitäten sind nach dem Anlegen fest (422immutable); Auswahlen tragen einen festenkey, Umbenennen über den Schlüssel lässt gespeicherte Werte unberührt. Neue Gründecustom-field-slug-takenundsystem-field(beide 409).
v1.255.0 · 26. Oktober 2026
- Pipelines (PI.37): Phasen tragen
partnerRights(view,moveIn,moveOut,edit,delete), lesbar und schreibbar über die Phasen-Endpunkte (nur vollständig; ohneviewkein anderes Recht). Bei einer Abschluss-Phase heisstmoveInabschliessen undmoveOutwieder aufnehmen.partnerVisibilitybleibt lesbar (aus den Rechten abgeleitet) und schreibbar (wird in Rechte überführt,deletenie);partnerRightsgeht vor.
v1.254.0 · 26. Oktober 2026
- Pipelines (PI.31, Anrufliste):
callList.businessOnly(nur Unternehmer und Freiberufler, B2B; der Dialer fragt in dieser Pipeline nie nach einer Einwilligung, ein Widerruf sperrt weiter), schreibbar überPATCH /pipelines/{id}. Jede Änderung wird protokolliert;callList.businessOnlyChangenennt die letzte (at,via,userId, nur lesbar).
v1.253.0 · 26. Oktober 2026
- Pipelines (PI.28, Anrufliste): Phasen tragen
onCallList(Karten der offenen Phase stehen auf der Anrufliste), PipelinescallListmitbusy(followUpmitbusyFollowUpMinutesoderend),noAnswerRetryMinutes,ringSeconds,hours(days1–7,from,to) undfirstCallStageId; schreibbar überPATCH /pipelines/{id}(callList, Teilangaben) und an den Phasen (onCallList). Die Liste selbst wählt der Dialer im Portal bzw. CRM.
v1.252.0 · 25. Oktober 2026
- Pipelines (PI.27): neu
GET /pipelines/lead-quality(from,to, optionalpipelineId): Einträge der Vertriebs-Pipelines, die im Zeitraum angelegt wurden, je Quelle (kindform/funnel/existing mitsourceIdundname, sonstvia) und je Kampagne (utmCampaign,utmSource) mitleads,open,parked,won,lost,unqualifiedund den AnteilenunqualifiedShare,wonShare(0 bis 1 an allen Leads der Gruppe).
v1.251.0 · 25. Oktober 2026
- Pipelines (PI.26): Einträge tragen
leadSource(form,funneloderexistingfür den Bestand, mitsourceIdundutmaus dem Funnel-Besuch:source,medium,campaign), ab jetzt für neue Einträge. NeuGET/POST /pipelines/{id}/backfill: Nachzug der Pflicht-Pipeline, übernimmt Interessenten der freigegebenen Häuser ohne offenen oder geparkten Eintrag in die Eingangsphase (running/finished/failed,candidates,created,failed); startet auch von selbst beim Einschalten voncouplings.prospectsRequired. Ohne eingeschaltete Pflichtprecondition-failed(prospects-not-required), bei laufendem Nachzugconflict.
v1.250.0 · 25. Oktober 2026
- Gesprächsleitfäden (Telefonie TW.48b):
notReached[].cardStatusEventkenntabsence(Abwesenheitsansage); die Vorlage der Situationen setzt es an der Abwesenheit. Die Werte folgen den Auslösern des Kartenstatus der Pipelines (PI.22b).
v1.249.0 · 25. Oktober 2026
- Pipelines (PI.22b): neuer Auslöser des Kartenstatus
absence(Anruf: Abwesenheitsansage) nebenbusy,noAnswer,voicemailundinvalidNumber, an Kartenstatus (trigger), im Ereignispipelines.entry.cardStatusChangedund alssituationvonPOST /pipelines/entries/{id}/outcome(ein Versuch, kein Phasenwechsel).
v1.248.0 · 25. Oktober 2026
- Pipelines, Vertriebsablauf (PI.25): Phasen nennen
appointmentTypeIds(Terminarten) undrole(preSetter,setter,closer). Wird ein Termin einer genannten Art für den Kontakt eines offenen Eintrags gebucht, umgebucht, abgesagt oder nicht wahrgenommen, folgt der Kartenstatus; bei einer Buchung wird der Gastgeber zuständig und hält die Rolle der Phase, wer bis dahin zuständig war, die Rolle davor. Neue AnforderungsartappointmentmitappointmentTypeId(null= irgendeine). Einträge tragenbookedAppointmentTypeIdsundroles(Person, Name, Termin). Eine fremde Terminart ergibtinvalid_reference.
v1.247.0 · 25. Oktober 2026
- Gesprächsleitfäden (
/call-guides, lesen und schreiben):content.results[].pipelineEffectmitpipelineId,stageId,reasonId,packageId,cardStatusIdist die Wirkung des Ergebnisses in der Pipeline beim Abschliessen.content.notReached[].cardStatusEvent(busy,noAnswer,voicemail,invalidNumber, dieselben Werte wietriggerinpipelines.entry.cardStatusChanged) ist das Ereignis, mit dem eine Situation den Kartenstatus setzt. Bisher zeigte die API beide nicht, und einPATCHmitcontentverlor sie.
v1.246.0 · 25. Oktober 2026
- Pipelines, Vertriebsablauf (PI.24):
POST /pipelines/entries/{id}/outcomehält ein Ergebnis an der Karte fest: Kartenstatus, Phase mit Grund (dieselben Anforderungen wiemoveEntry), Paket und Wiedervorlage in einem Aufruf, odernotReachedmitsituation(busy,noAnswer,voicemail,invalidNumber): ein Versuch, nie ein Phasenwechsel. Einträge tragenattemptsInStageundlastAttemptAt(jeder Phasenwechsel setzt die Versuche auf 0). Neuer Wegguideinvia(Ergebnis eines Leitfadens) im Verlauf und inpipelines.entry.stageChanged/cardStatusChanged.
v1.245.0 · 25. Oktober 2026
- Neu:
GET /contacts/{id}/phone-consentundPUT /contacts/{id}/phone-consent(contacts.getPhoneConsent,contacts.setPhoneConsent): die Einwilligung des Kontakts in Anrufe, getrennt von E-Mail und SMS. Antwort mitstate(granted,revoked,none),since,number,callable(yeswählen: Unternehmen oder dokumentierte Einwilligung;askvorher fragen: Verbraucher ohne Einwilligung;nonicht wählen: widerrufen, auch bei Unternehmen) undhistorymitreasonundby(userIdodercontactId,name).PUTnimmtgranted,reason(Pflicht, höchstens 2.000 Zeichen) und optionalnumber, nur mit handelnder Person (no-acting-user), ein Nicht-Mitglied bekommt 403. - Neu:
GET /contacts/{id}/reminder-service(contacts.getReminderService) undPOST /contacts/{id}/reminder-service/unsubscribe(contacts.unsubscribeReminders): ob der Kontakt Terminerinnerungen per E-Mail und SMS bekommen darf (email,smsje mitstate,value,since), und das Abbestellen beider Kanäle, wiederholbar, nur mit handelnder Person, die Mitglied ist.
v1.244.0 · 25. Oktober 2026
- Automationen: Der Auslöser
pipelines.entry.cardStatusChangedhat den Filter „Kartenstatus: eines von“, im Katalog (GET /automation-catalog) als PfadtoCardStatus.idmitkindpipelineCardStatus. Gespeichert wird er wiepipelineStageals Liste von Kennungen (der neue Kartenstatus); Kennungen, die nicht zur Organisation oder zu den gewählten Pipelines gehören, weist das Speichern ab.
v1.243.0 · 25. Oktober 2026
- Gesprächsleitfäden: (1)
callguides.run.completedkommt jetzt beim ersten ausdrücklichen Abschluss eines Laufs („Gespräch abschliessen“) mit dem Ergebnis, das die Person wählt (resultId/resultName), nicht mehr von selbst, sobald der Hauptweg am Ende ist; weiterhin einmal je Lauf, Wiederöffnen und erneutes Abschliessen melden nichts. (2) Neucontent.notReachedan/call-guides(lesen und schreiben): Situationen „Nicht erreicht“ mitid,nameundsuggestion(hours,businessDays,manual,none). Ein Abschluss mit einer solchen Situation meldet keincallguides.run.completed, ein späterer Abschluss mit Ergebnis meldet einmal. Bisher zeigte die API die Liste nicht, und einPATCHmitcontentverlor sie. (3) Eine Checkout-Aktion darflinks: []tragen: Dann gilt nur der Checkout-Link des Pipeline-Eintrags; trägt der Eintrag einen, gewinnt er auch gegen eigene Links der Aktion. Unvollständig ist eine Checkout-Aktion nur noch ohnetemplateId.
v1.242.0 · 25. Oktober 2026
- SendGrid-Rückmeldungen (SV.198):
POST /sendgrid/eventslegt je SendGrid-Konto nur noch EINEN Webhook an. Steht im Konto schon einer von claritos (etwa von einer anderen Organisation am selben Konto), hängt sich die Verbindung daran; weitere werden zusammengeführt. Neue Gründe in422 precondition-failed:sendgrid-webhook-limit(der SendGrid-Tarif erlaubt keinen weiteren Webhook) undsendgrid-webhook-forbidden(SendGrid hat den Schlüssel für Webhooks abgewiesen); beide kamen bisher alssendgrid-events-failed, das jetzt den Grund von SendGrid imdetailträgt.checkErrorkann neusendgridVerbindung.fehler.ereignisseTarifodersendgridVerbindung.fehler.ereignisseRechtsein. Meldungen gehen nur noch an die Organisation, deren Mail sie betreffen: Rückläufer einer anderen Organisation am selben Konto sperren keine Adresse mehr.
v1.241.0 · 25. Oktober 2026
- Pipelines, Vertriebsablauf (PI.23): Pakete. Pipelines tragen
packages(Name, Artikel, Checkout-Link,default),PUT /pipelines/{id}/packagesspeichert die ganze Liste (höchstens eine Vorgabe, Fehlende archiviert, nur Org-Admins). Einträge tragenpackageId,packageNameundcheckoutLinkId;packageIdsetzt man inPOST /pipelines/entries,PATCH /pipelines/entries/{id}undmoveEntry(Artikel und Netto-Wert aus dem Paket, ausservalueCentssteht im selben Aufruf). Neue Anforderungsartpackage(Pfadbody.packageId). Die Vorgabe wird nicht von selbst an neue Einträge geschrieben. - Pipelines, Support (PI.19b): Eine freigegebene SLA-Gutschrift geht an die Faktura und steht als „Nachlass“ auf der nächsten Abo-Folgerechnung oder dem nächsten Entwurf von Hand. Neuer
slaCredit.statusscheduledmitscheduledAt; scheitert die Übergabe, bleibtreleasedmithandoverError, undPOST …/sla-credit/releaseversucht es erneut.
v1.240.0 · 23. Oktober 2026
- Pipelines, Vertriebsablauf (PI.22): Kartenstatus, der Stand der Dinge an der Karte unabhängig von der Phase. Pipelines tragen
cardStatuses(Name, Farbe, Reihenfolge,trigger), EinträgecardStatusundcardStatusSince. Neu:PUT /pipelines/{id}/card-statusesspeichert die ganze Liste (Fehlende werden archiviert, nur Org-Admins),GET /pipelines/{id}/card-statuses/reportliefert Anzahl offener Einträge und Zeit je Phase und Kartenstatus sowie die Wechsel im Zeitraum.PATCH /pipelines/entries/{id}setztcardStatusId(null = ohne),GET /pipelines/entriesfiltert mitcardStatusId(none= ohne). Neues Ereignispipelines.entry.cardStatusChangedmitfromCardStatus,toCardStatus,triggerundvia; die Anlage meldet keines,createdträgt den Status schon.
v1.239.0 · 23. Oktober 2026
- Neu:
POST /invoices/{id}/collectzieht eine offene Abo-Rechnung jetzt von der Karte oder dem Lastschrift-Mandat des Abos ein, statt auf den täglichen Lauf zu warten. Antwortresult:charged(Karte belastet, Bestätigung per Webhook) odersubmitted(Lastschrift eingereicht, bezahlt mit dem Eingang). 409 mitreasonnot-collectable,skippedodercollection-failed.
v1.238.0 · 23. Oktober 2026
- Neu: Sitzung einer Betreuung abschliessen (Praxis BP.3a).
POST /care-sessions/{id}/completeschliesst die Sitzung und ihren Leitfaden in einem Zug: erst den Lauf mitguide.outcomeId(Pflicht, wenn der Leitfaden Ergebnisse hat) undguide.reasons(Begründung je offenem Pflichtschritt; fehlt eine, 422 mit Pfadbody.guide.reasons.<Schritt>), scheitert er, bleibt die Sitzung offen.POST /care-sessions/{id}/reopenöffnet beides wieder. Neues FeldcompletedAt. Geändert:runningist nach dem Abschluss false (vorher vier Stunden ab Beginn), undstartauf eine abgeschlossene Sitzung antwortetconflictmitsession-completed.
v1.237.0 · 23. Oktober 2026
- Pipelines, Vertriebsablauf (PI.21): vierter Abschluss-Typ
parked(je Pipeline zuschaltbar überPOST /pipelines/{id}/stagesmittype: "parked", höchstens einmal). Parken verlangt einen Grund undfollowUpAtin der Zukunft, sonst 422 mit dem Pfadbody.followUpAt(ArtfollowUpincheckMove). Einträge tragenfollowUpAt; jeder Wechsel setzt es neu. Die Prognose nenntparked(Anzahl, Wert) und rechnet geparkte Einträge nicht. Der Auslöserpipelines.entry.closedfiltert auch nachoutcomeparked.
v1.236.0 · 23. Oktober 2026
- Terminarten tragen
callGuideId: den Leitfaden (GET /call-guides), der im Gespräch und im Meeting dieser Terminart vorgeschlagen wird. Lesen inappointments.getType/listTypes, setzen increateType/updateType(nullfür keinen). Nur ein aktiver Leitfaden dieser Organisation, sonstvalidation-failedanbody.callGuideId.
v1.235.0 · 23. Oktober 2026
- Geändert:
PATCH /contacts/{id}zieht bei geänderter E-Mail oder Telefonnummer die Interessenten der Partner mit, deren Kontakt das ist, und lehnt ab, statt Kontakt und Interessent auseinanderlaufen zu lassen: 409conflictmitreason: prospect-email-taken, wenn ein anderer Interessent der Organisation die neue E-Mail schon trägt; 400validation-failedanbody.email(required), wenn die E-Mail eines Interessenten ohne Firmennamen geleert würde; 409reason: prospect-not-saved, wenn der Interessent nicht gespeichert werden konnte. In allen drei Fällen ist am Kontakt nichts geändert. Unveränderte Felder lösen nichts aus.
v1.234.0 · 22. Oktober 2026
- Pipelines, Abschluss im Support (PI.19): Phasen tragen
noReply(remindAfter,closeAfter,unitbusinessDaysoderdays): Erinnerung und Schluss ohne Antwort in einer Phase mit stehender Uhr, beides mit kurzer Mail an den Kunden (Kanalsystem). Einträge tragennoReplyRemindAt,noReplyCloseAt,previousEntryId(eine Antwort mehr als 14 Tage nach dem Abschluss legt einen neuen Fall an; bis 14 Tage öffnet sie den alten wieder) undslaCredit(Gutschrift einmal je Fall mit verletzter Frist, mit strukturiertercalculation). NeuPOST /pipelines/entries/{id}/sla-credit/releaseund…/discard(ORG_ADMIN, ORG_ACCOUNTANT; 409sla-credit-decided,sla-credit-zero). Die Quelle einer Nachricht über die API ist jetzthumanmit dem OAuth-Zugang einer Person,aiüber den API-MCP, sonstautomatic. Die Prognose nenntvalueModeundrisk; Support-Pipelines liefern dort die erwarteten Gutschriften negativ stattnull.
v1.233.0 · 22. Oktober 2026
- Pipelines: zwei Namen aus 1.229.0 an die Regel der Zählfelder angeglichen, bevor sie ausgeliefert werden: am SLA
caseCountstattcasesCount, inslaTargets[]des EintragsbreachCountstattbreaches.
v1.232.0 · 22. Oktober 2026
- Formulare:
POST /responses/{id}/pdfverlangtforms:writestattforms:read, wie jeder Endpunkt, der ein PDF erzeugt (invoices.renderPdf,orders.renderPdf,time.renderReportPdf): Er legt ein Dokument an und stösst die Erzeugung an. Der Stand (GET /responses/{id}/pdf/{documentId}) bleibt beiforms:read. 1.231.0 wurde mitforms:readnie ausgeliefert.
v1.231.0 · 22. Oktober 2026
- PDF einer Einsendung über die API:
POST /responses/{id}/pdferzeugt das PDF im Briefpapier der Organisation (202 mitdocumentId,statuspending),GET /responses/{id}/pdf/{documentId}nennt den Stand (pending,readymiturl,failed),POST /responses/{id}/pdf/{documentId}/sendschickt es per E-Mail an den Klienten der Akte. Bögen der Klientenakte nur mit Klientendaten-Freischaltung,clients:readund Aktenzugang der handelnden Person; fehlt der Aktenzugang, 403forbiddenmitreasonclient-access-required(ebenso jetzt beiPOST /form-templates/{id}/insert). Senden: 422not-a-client-formbzw.contact-without-email, 409pdf-not-ready.
v1.230.0 · 22. Oktober 2026
- Vorlagen der Formular-Bibliothek über die API:
GET /form-templates(eigene und von anderen Organisationen bereitgestellte, FiltertargetEntity, Sucheq),GET /form-templates/{id}(Vorschau in der AnredeaddressForm),POST /form-templates/{id}/insert(neues Formular aus der Vorlage, 201 mit der Definition undnotes),POST /form-templates(eigenes Formular bereitstellen, mittemplateIdals neue Fassung) undDELETE /form-templates/{id}(nur eigene; eingefügte Formulare bleiben). Lesen mitforms:read, Schreiben mitforms:writeund nur für Admins der Organisation; eine Vorlage für die Klientenakte nur mit Aktenzugang (forbidden) und Praxis-Zuschnitt (feature-not-available).targetEntityinGET /formsundGET /forms/{id}nennt jetzt alle vier Ziele (auchVERTRIEBLER_PROFILundVERTRIEB_FIRMENPROFIL); die Antworten trugen sie schon, die Beschreibung fehlte.
v1.229.0 · 22. Oktober 2026
- Pipelines, Support mit SLAs (Stufe 4): neu
/pipelines/slas(lesen, anlegen, ändern mitarchived, löschen nur unbenutzt, sonst 409sla-in-use) mit Kalender (weeklyHourswie die Öffnungszeiten), Fristen je Art (firstResponse,nextResponse,update,restore,resolution) und Priorität mit ausdrücklicher Einheit (minutes,hours,businessMinutes,businessHours,businessDays), Folge als Gutschrift mit Deckel, Kunden. NeuGET/POST /pipelines/entries/{id}/messages(Antwort an den Kunden geht als Mail hinaus;sourceleitet der Server ab, über die APIautomatic). Einträge tragendescriptionHtml,priority,requestedPriority,sla,slaStatus,slaDueAt,slaTargets,restoredAt(schreibbar: Beschreibung, Priorität,restored), PhasenslaClock, PipelinescustomerPortalRequests. Ereignissepipelines.entry.slaDueSoon,pipelines.entry.slaBreached,pipelines.message.created. Neuer Grundnot-a-support-case.
v1.228.0 · 22. Oktober 2026
- Formulare ersetzen über die API:
PUT /forms/{id}ersetzt ein Formular als Ganzes mit demselben Rumpf wiePOST /forms(Kopf ohne Angabe mit der Vorgabe, Seiten, Elemente). Was der Rumpf nicht kennt, bleibt (Freigaben, Links, Abschluss, Darstellung); bisherige Einsendungen bleiben lesbar. Antwort 200 mit der Definition undbuild.targetEntitylässt sich nicht ändern (422 anbody.targetEntity); ein archiviertes Formular ergibt 409conflictmitreasonarchivedwie beiPOST /forms/{id}/responses, ein Kurzname eines anderen Formulars 409form-slug-taken. Nur Admins der Organisation, Scopeforms:write. Der Grundarchivedhat jetzt einen Text in der Fehlerseite.
v1.227.0 · 22. Oktober 2026
- Formulare anlegen über die API:
POST /formslegt ein Formular als Ganzes an (Kopf, Seiten, Elemente nachkind:text,standardField,fieldmitnewfür ein neues eigenes Feld,matrix,repeater; Bedingungen incondition; Häkchen inconsents), über denselben Bau wie der Formular-Baukasten. Antwort 201 mit der Definition wieGET /forms/{id}undbuild(createdFields,reusedFields,notes).POST /forms/validateprüft denselben Rumpf, ohne zu speichern (valid,errors,notes, geplante Seiten, Elemente und Felder).GET /forms/building-blocksnennt Standardfelder, vorhandene eigene Felder, Feldarten für neue Felder, die Sprache der Bedingungen und den Aufbau von Raster und Wiederholer. Nur Admins der Organisation (sonst 403forbidden); Scopeforms:writezum Anlegen,forms:readfür Prüfen und Bausteine. Fehler 422validation-failedmit Pfadbody.pages.<i>.elements.<j>…(Indizes ab 0) und Codeinvalid_reference,required,invalid_value,invalid_combinationodertoo_big; ein vergebener Kurzname 409conflictmitreasonform-slug-taken(im Prüflauf ein Fehler mit diesem Code). Bögen der Klientenakte nur mit Praxis-Zuschnitt.
v1.226.0 · 22. Oktober 2026
- Formulare:
POST /forms/{id}/archiveundPOST /forms/{id}/unarchivearchivieren ein Formular bzw. holen es zurück, wie im Formular-Baukasten (Scopeforms:write, nur Admins der Organisation, sonst 403forbidden; ein Schlüssel ohne handelnde Person bekommtno-acting-user). Antwort 200 mit dem Formular; ein zweiter Aufruf ändert nichts. Ein archiviertes Formular nimmt über seine Links nichts an,POST /forms/{id}/responsesantwortet 409 (archived). Neu inGET /forms/{id}:consentMode, die Einwilligungs-Art des Formulars (none,optional,promotion).
v1.225.0 · 22. Oktober 2026
- Partner-Schlüssel (Lead-API): Neben den Schlüsseln der Organisation gibt es Schlüssel, die an genau einen Partner (Affiliate) gebunden sind, ausgestellt vom Partner im Partner-Portal oder von einem Admin der Organisation. Ein Partner-Schlüssel ruft nur
GET /forms/{id},POST /forms/{id}/responsesundPOST /appointment-types/{id}/partner-links, sonst 403forbiddenmitreasonpartner-key-endpoint; der API-MCP nimmt ihn nicht an. Er sendet immer für seinen Partner ein (ein anderesaffiliateIdergibt 422 anbody.affiliateId, Codepartner-affiliate), sieht nur Formulare, die für das Partner-Portal freigegeben sind und Interessenten anlegen (sonst 404), und nur die Interessenten seines Partners. InGET /forms/{id}zähltresponseCountdann nur die Einsendungen seines Partners,publicUrlistnull. Anleitung: /developers/partner-leads.
v1.224.0 · 22. Oktober 2026
- E-Mail-Kampagnen in zwei Arten (
kind:marketingodernotice). Eine Mitteilung (notice) geht ohne Werbe-Einwilligung und ohne Abmeldelink an alle der Auswahl, nimmt Vorlagen mitpurposetransactional und braucht vor dem Start keine Prüfung (deepCheckRequired). Der Inhalt steht jetzt in der Kampagne:subject,bodyHtml,subjectInformal,bodyHtmlInformalundsalutation, aus der Vorlage kopiert und änderbar, ohne die Vorlage zu ändern (templatemitmodified). Dazudocument(Unterlage als persönlicher Link je Empfänger,linkExpiresDays) undattachment(PDF bis 5 MB).GET /email-campaigns/setupnenntkinds,personalSenderund je Vorlagekind;GET /email-campaignsfiltert mitkind,POST /email-campaigns/recipient-countnimmtkind. Neu:POST /email-campaigns/{id}/document/replace(korrigierte Fassung, die Links bleiben) sowieGETundPUT /email-campaigns/notice-permissions(wer außer den Admins Mitteilungen senden darf). Mitglieder mit diesem Recht sehen über die API nur Mitteilungen und senden mit ihrer persönlichen SendGrid-Adresse (senderLocalPartundsenderDomaindürfen dann fehlen); für Admins bleibt alles wie bisher.kindlässt sich nach dem Anlegen nicht ändern (422immutable). Neue Fehler: 422unknown-fieldanbody.bodyHtmlfür Felder, die es nicht gibt, 403campaign-kind-not-allowed, 422notice-sender-missing,download-links-not-configuredundcampaign-document-missing.
v1.223.0 · 22. Oktober 2026
- Formulare: Zwei Werte von
bookingErroranPOST /forms/{id}/responsesheissen jetzt wie beiappointments.createPartnerLink(1.220.0):prospect-without-contactstattcontact-missingundappointment-type-not-released-to-partnerstattappointment-type-not-released. Die alten Namen aus 1.221.0 wurden nie ausgeliefert.
v1.222.0 · 22. Oktober 2026
- Neue Alarm-Art
AUTOMATION_RUN_HALTED(inGET /organization/api-alertsundPUT /organization/api-alerts/rules/{kind}): Hält eine Automation einen Lauf an einem behebbaren Grund an (precondition-failedmitfixable: true), meldet sie sich über die Glocke an Inhaber und Org-Admins, auf Wunsch per E-Mail, höchstens einmal je Regel und Grund in 24 Stunden. Ausgenommen sind fehlende Pflichtangaben einer Pipeline-Phase: Dort entsteht wie bisher eine Aufgabe.
v1.221.0 · 22. Oktober 2026
- Formulare:
POST /forms/{id}/responsesnimmt optionalappointmentTypeIdundsenderContactId. Mit einer Terminart enthält die Antwort zusätzlichbookingUrl, den persönlichen Partner-Terminlink des neuen Interessenten (bucht ohne erneute Eingabe beim Vermittler), oderbookingError, warum es keinen gibt:prospect-not-found(kein Interessent, etwa ohne Vermittler),contact-missing,appointment-type-not-released,sender-not-in-team,booking-failed. Scheitert nur der Link, bleibt die Einsendung bestehen (201). Dafür braucht der Schlüssel zusätzlichappointments:write, sonst 403insufficient-scopevor dem Einsenden. Mit einem Partner-Schlüssel gilt der Link nur für Interessenten des eigenen Vermittlers. OhneappointmentTypeIdist die Antwort unverändert.
v1.220.0 · 22. Oktober 2026
- Neu:
POST /appointment-types/{id}/partner-links(appointments.createPartnerLink) liefert mitprospectIdden persönlichen Buchungslink des Partners für diesen Interessenten, vorhanden oder neu (kindPARTNER, mitcontactId,affiliateId,senderContactId). Dieselben Regeln wie im Partner-Portal: nur für den Partner freigegebene Terminarten, Absender aus seinem Team (optionalsenderContactId, sonst die zuständige Person des Interessenten bzw. der Inhaber des Partners). Neue Gründe fürprecondition-failed:prospect-without-contact,appointment-type-not-released-to-partner.
v1.219.0 · 22. Oktober 2026
- Pipelines: Die Szenarien der Prognose heissen
worst,normal,best(inforecast.months[].weightedCents, in den Töpfen und ineffectiveProbabilityder Phasen), die Schreibfelder an den PhasenprobabilityWorst/probabilityBest. Sie ersetzenbad/goodundprobabilityBad/probabilityGoodaus 1.218.0, das nicht ausgeliefert wurde.
v1.218.0 · 22. Oktober 2026
- Pipelines, Prognose und Lernen: neu
GET /pipelines/{id}/forecast(zwölf Monate ab dem laufenden, gewichteter Wert je Monat in den Szenarienbad,normal,good, Töpfeoverdue,withoutDate,later, Anteil Messung, Herkunft des Datums; je offener Phase wirksame Wahrscheinlichkeit, Verweildauer und Restlaufzeit;forecastistnullohne Wertmodusrevenue). Phasen trageneffectiveProbability(wirksame Wahrscheinlichkeit nachlearningModemit Szenarien,measuredPercent,decidedCases) undprobabilityBad/probabilityGood(Szenarien von Hand, schreibbar mitPOST/PATCH .../stages). Verhalten:learningModewirkt jetzt;probabilityundweightedValueCentsam Eintrag rechnen ohne Überschreibung mit der wirksamen Wahrscheinlichkeit der Phase statt mit der Vorgabe (beilearningModedefaultunverändert).
v1.217.0 · 22. Oktober 2026
- Pipelines:
couplingsträgtprospectsRequired(Interessenten der Affiliates werden in dieser Pipeline geführt; arbeitet ein Affiliate an einem ohne Eintrag, bittet das Portal um Zuordnung) undprospectsAutomatic(ohne Rückfrage in der Eingangsphase anlegen), lesbar inGET /pipelines/{id}, schreibbar mitPATCH /pipelines/{id}.
v1.216.0 · 22. Oktober 2026
- Automationen: drei neue Aktionen für Pipelines im Katalog (
GET /automation-catalog) und inPOST/PATCH /automations, je ein Endpunkt:pipelines.createEntry(Eintrag anlegen),pipelines.moveEntries(Phase setzen, auch Abschliessen mit Grund; der jüngste oder alle offenen Einträge des Kontakts oder ein bestimmter) undpipelines.updateEntry(Wert, zuständige Person, Abschlussdatum). Die Pflichtangaben einer Phase gelten auch hier: Fehlt eine, scheitert der Schritt behebbar. Neue FilterartenpipelineundpipelineStage(„eines von“) an den Auslösernpipelines.entry.*, beim Abschlussoutcome. Neue Datumsquellenpipelines.entry.expectedCloseDateundpipelines.entry.rotting(Eintrag liegt zu lange in seiner Phase). Feldquellenpipeline,pipelineStage,pipelineReason, Objektentry. Behoben: Bei Datums-Auslösern galten Filter „eines von“ bisher nicht.
v1.215.0 · 22. Oktober 2026
- Pipelines, Kopplungen: Pipelines tragen
couplings(quoteValue,quoteAcceptedStageId,paidMeansSuccessful,leadSources), lesbar inGET /pipelinesundGET /pipelines/{id}, schreibbar mitPATCH /pipelines/{id}(leadSourcesersetzt die Liste als Ganzes). NeuGET /pipelines/assignmentsundPOST /pipelines/assignments/{id}/resolve: offene Zuordnungen von Zahlungen, angenommenen Angeboten und Leads zu einem Eintrag, wenn der Eintrag nicht eindeutig ist. NeuPOST /pipelines/entries/movefür Automationen: Phase setzen für einen bestimmten Eintrag, den jüngsten offenen oder alle offenen eines Kontakts; alles oder nichts, fehlende Angaben alsprecondition-failedmitstage-requirements-missingundfixable: true.
v1.214.0 · 22. Oktober 2026
- Pipelines: Phasen haben eine optionale Farbe
color(eine der zwölf Kategorie-Farben wiecolorder Leitfäden,null= ohne Farbe), zu lesen inGET /pipelines/{id}und zu setzen mitPOST /pipelines/{id}/stagesundPATCH /pipelines/{id}/stages/{stageId}. Die Pipeline trägtstageColorDisplay(dot= Punkt neben dem Namen,fill= Kopf in voller Farbe), Vorgabedot, zu setzen mitPATCH /pipelines/{id}.
v1.213.0 · 21. Oktober 2026
- Neu: Medien zur Stunde für den Live-Raum (Bereich
appointments).GET/PUT /appointment-types/{id}/lesson-medialiest bzw. ersetzt die Liste der Terminart (assetIds, höchstens 50, Reihenfolge =position).GET/PATCH /appointments/{id}/lesson-mediazeigt die wirksame Liste des Termins (media) und seine Abweichungen (added,hidden);addergänzt nur für diesen Termin,hideblendet Medien der Terminart aus, ein gesetztes Feld ersetzt seine Liste. Nach dem Ende des Termins 422precondition-failedmitappointment-ended.GET /lesson-media/optionssucht Videos und PDFs der Bibliothek (q). Schreiben nur mit dem Recht, Termine zu verwalten.
v1.212.0 · 21. Oktober 2026
- Formulare, nur Verhalten, für Einsendungen über den öffentlichen Link (
/f/…): Ist die Person sicher bekannt (persönlicher Link an einen Kontakt, gemerktes Gerät oder per Code bestätigte E-Mail-Adresse) und besteht für genau die Adresse bzw. Nummer im Feld eine Werbe-Einwilligung, die höchstens 24 Monate alt und nicht widerrufen ist, fragt der Bogen sie nicht erneut. Die Einsendung (GET /forms/{id}/responses,GET /responses/{id},forms.response.submitted) trägt für diesen Kanal dann keinen Eintrag mitpurposeMARKETING; das ist kein Nein, der Stand der Einwilligung steht am Kontakt. Ein gesetztes Häkchen erscheint wie bisher. Einsendungen überPOST /forms/{id}/responsessind nicht betroffen.
v1.211.0 · 21. Oktober 2026
- Neu: Pipelines (Bereich
pipelines, Rechtepipelines:readbzw.pipelines:write).GET/POST /pipelines,GET/PATCH /pipelines/{id}, Phasen (/pipelines/{id}/stages, ReihenfolgePUT …/stages/order) und Abschluss-Gründe (/pipelines/{id}/reasons); Pipelines und Phasen pflegen nur Org-Admins. Einträge unter/pipelines/entries: anlegen, ändern,move(auch abschliessen),move/check,reopen,history. Beim Phasenwechsel gelten dieselben Anforderungen wie in der Oberfläche, beim Überspringen addiert: Fehlt etwas, kommt 422 mit je einem Fehlerstage-requirement; gesperrtprecondition-failedmitstage-skip-lockedbzw.stage-back-locked(fixable: false), archivierte Pipelinepipeline-archived(fixable: true). Ereignissepipelines.entry.created,.stageChanged,.closed,.valueChanged. Beträge alsvalueCents. DazuDELETE /articles/{id}: 409in-useauch, wenn Einträge einer Pipeline ihren Wert aus dem Artikel haben (usage.pipelineEntries).
v1.210.1 · 21. Oktober 2026
- Verhalten: Die Quelle
mollieder Abo-Vorschau (/provider-subscriptions) liefert Zahlen, sobald die Organisation Mollie mit dem Rechtsubscriptions.readverbunden hat (neue Verbindungen fragen es an, bestehende verbinden einmal neu). Gelesen werden die Abos aller Mollie-Profile der Organisation, abgeglichen nachts und überPOST /provider-subscriptions/sync;netCentsbleibt leer (Mollie nennt kein Netto). Bis zum Neuverbinden bleibt es beineeds-reconnect. Spezifikation gleich.
v1.210.0 · 21. Oktober 2026
- Neu: Abo-Vorschau für Abos, die beim Zahlungsanbieter selbst angelegt sind (nicht die claritos-eigenen unter
/subscriptions).GET /provider-subscriptionslistet den Spiegel (Filtersource:stripe-connect,stripe-platform,mollie;status;contactIdüber die E-Mail).GET /provider-subscriptions/forecastliefert je Währung diesen Monat ab heute und die nächsten elf Monate, brutto oder mitnet=truenetto, und je Quellestate,syncedAt,needsReconnect.POST /provider-subscriptions/syncstösst den Abgleich an (202; 409sync-lockedmitretryAfter, 409source-not-ready). Rechtesubscriptions:readbzw.subscriptions:write. Mollie meldetneeds-reconnect, bis die Organisation Mollie mit dem Recht für Abos neu verbunden hat.
v1.209.0 · 21. Oktober 2026
- Geändert:
GET /affiliates/activityzählt unteremailsjetzt auch Mails aus dem Postfach der Partner im Partner-Portal (Mail-Client und Leitfaden), und zwar auch je Person (people[].counts.emails, vorhernull). Festgehalten sind nur Zeitpunkt, Person und Empfängerzahl, kein Inhalt; gezählt ab der Einführung. Werbemittel-Versände zählen nur noch bis zum ersten solchen Beleg der Organisation, sonst stünde dieselbe Mail doppelt da. Dazu ist das Beispiel berichtigt:previousPeriodist dort gleich lang wieperiod.
v1.208.0 · 21. Oktober 2026
- Neu: Abo direkt über die erste Rechnung. Rechnungen haben das Feld
subscription(intervalMonths1 bis 60,periods2 bis 600 odernull= bis zur Kündigung;null= kein Abo), lesbar und schreibbar überPOST /invoicesundPATCH /invoices/{id}. Beim Festschreiben (POST /invoices/{id}/issue) entsteht das Abo, die Rechnung ist sein erster Zeitraum (billingContractId); der Leistungszeitraum wird auf diesen Zeitraum gesetzt. Fehler: 422 anbody.subscription…,body.contactIdoderbody.items, 409subscription-exists. - Neu: Abo-Status
AWAITING_FIRST_PAYMENT(GET /subscriptions, Filterstatus): aus einer Rechnung angelegt, erste Rechnung noch offen. Bezahlt wechselt das Abo aufACTIVE, fällige Folgerechnungen entstehen sofort; der Storno der ersten Rechnung setzt es aufCANCELLED. Clients, die nur die bisherigen vier Werte kennen, sollten einen unbekannten Status nicht als laufend werten.
v1.207.0 · 21. Oktober 2026
- Neu:
GET /affiliates/activityliefert das Geschehen der Affiliates wie der Dashboard-Baustein: Telefonate und Gesprächszeit, Meetings (Termine und Live-Räume), Abschlüsse samt Umsatz je Währung, neue Interessenten, Nachrichten (E-Mail, SMS, Brief) und erledigte Aufgaben, je Affiliate und Person, fürfrombisto(Vorgabe die letzten 30 Tage) und den gleich langen Zeitraum davor. FilteraffiliateId. Nur mit der Affiliate-Verwaltung in der Lizenz, sonst403 feature-not-available.
v1.206.0 · 21. Oktober 2026
- Neu:
GET /contactsfiltert mitresponsiblenach Zuständig, kommagetrennt (höchstens 20): Nutzer-Kennungen von Mitgliedern,mefür die handelnde Person des Schlüssels,partnerfür Kontakte, um die sich nur ein Partner kümmert. Es gilt dieselbe Regel wie im Filter „Zuständig“ der Anwendung (ein Mitglied vor einem Partner; wer die Organisation verlassen hat, zählt nicht);responsible=meentspricht dem Schalter „Nur eigene“. Ein Schlüssel ohne Anleger bekommt fürme422no-acting-user, ein unbekannter Wert 400validation-failed.
v1.205.1 · 21. Oktober 2026
- Behoben:
DELETE /invoices/{id}antwortete bei einem Entwurf 204, ohne ihn zu löschen (seit 1.179.0; betroffen war jeder Entwurf, der nicht zu einem Credits-Lauf gehört). Jetzt wird er gelöscht. Wird dabei keine Zeile gelöscht (etwa weil der Entwurf im selben Moment festgeschrieben wurde), antwortet der Endpunkt 404not-foundstatt 204. Entwürfe eines Credits-Laufs bleiben 409credits-run.
v1.205.0 · 21. Oktober 2026
- Geändert:
POST/PATCH /message-templatesnehmen das Feld{{terminlink.<Terminart-Kennung>}}an (bisher 400unknown-field). Erlaubt sind beiusage: contactsdie Terminarten mit persönlichem Link, im Partner-Portal die an Partner freigegebenen; sonst 400unknown-fieldmit Hinweis auf die Terminart. Beim Versand wird daraus je Empfänger ein persönlicher Buchungslink (im HTML als Link). Neu: Lässt er sich für den Kontakt nicht anlegen, antwortenPOST /outbound-emailsundPOST /smsmitvorlageIdmit 422 undreason: booking-link-unavailable, statt mit leerer Stelle zu senden.
v1.204.0 · 21. Oktober 2026
- Neu:
reminderServiceinPOST /appointments: Der Kunde wünscht Terminerinnerungen (Erinnerungsservice), nur auf seinen ausdrücklichen Wunsch, ohne Angabe Nein; nur am Einzeltermin, festgehalten für E-Mail-Adresse und Handynummer am Kontakt mit Quelle „Schnittstelle“, ein früherer Widerruf des Kunden bleibt. Geändert: Erinnerungen vor dem Termin an Kunden werden wieder eingeplant, gehen aber nur mit dieser Zustimmung hinaus (geprüft beim Versand, gegen genau die Adresse bzw. Nummer), und jede trägt einen Link zum Abbestellen. Bestätigung, Absage und Verschiebung gehen immer.
v1.203.0 · 20. Oktober 2026
- Neu:
contactIdinPOST /appointment-types/{id}/linksliefert den persönlichen Buchungslink dieses Kontakts, vorhanden oder neu (kindPERSONAL): Der Termin hängt am Kontakt; hat die Terminart keinen Bogen, bucht er ohne weitere Angaben. Dafür braucht die Terminart die Freigabe „persönlicher Link“; neue Gründe fürprecondition-failed:appointment-type-not-personal,appointment-type-internal-only. OhnecontactIdwie bisher ein neuer offener Link.
v1.202.0 · 20. Oktober 2026
- Neu:
reminderPlanIdinPOST /appointment-typesundPATCH /appointment-types/{id}ordnet der Terminart einen Erinnerungsplan zu (GET /appointment-reminder-plans),nullheisst keine Erinnerungen. Ohne Angabe bekommt eine neue Terminart den Standardplan der Organisation, eine bestehende behält ihren. Geändert: Erinnerungen vor dem Termin an Kunden werden nicht eingeplant, bis der Kunde dem Erinnerungsservice zugestimmt hat; Bestätigung, Absage und Verschiebung gehen immer.
v1.201.0 · 20. Oktober 2026
- Aufgaben-Erinnerungen (Kern KR.41). Neu:
GET /tasks/reminder-settingsundPUT /tasks/reminder-settings(tasks:read/tasks:write, Schreiben nur für Admins der Organisation) lesen und setzen die Vorgabe: Zeitpunkte vor der Fälligkeit inminutesBefore(0, 15, 60, 180, 1440, 2880, 10080; Unbekanntes fällt still weg) und Wege inchannels(BELL,EMAIL,SMS). Ohne gespeicherte Vorgabe gilt die Glocke zur Fälligkeit; E-Mail und SMS erst, wenn eine Admin-Person sie einschaltet. Aufgaben mit Fälligkeit lösen jetzt Erinnerungen an die zuständige Person aus, auch wenn sie über die API angelegt wurden. Neu an der Aufgabe:dueHasTime(obdueDateeine Uhrzeit trägt). Beim Schreiben vondueDategilt ein Datum allein oder Mitternacht UTC als ohne Uhrzeit; ohne Uhrzeit ist die Aufgabe an ihrem Tag fällig, erinnert wird um 8:00 Uhr (Berlin).kindan SMS (GET /sms, Ereignissesms.message.*) kennt den neuen WertTASK_REMINDER.
v1.200.0 · 20. Oktober 2026
- Neu:
PATCH /telephony(telephony.updateOptions) schaltet die Anrufbeantworter-Erkennung der Organisation an oder aus (answeringMachineDetection), undGET /telephonyzeigt ihren Stand im neuen FeldansweringMachineDetection(ohne verbundenes Kontofalse). Die Erkennung ist für jede Organisation zunächst an: Bei ausgehenden Anrufen meldet Twilio, ob ein Mensch, ein Anrufbeantworter oder ein Fax abnahm; das braucht die Auswertung der Telefonate, um Mailboxen zu zählen. Sie läuft im Hintergrund, der Angerufene wartet nicht, und Twilio berechnet sie je angenommenem Anruf auf dem Konto der Organisation. Nur ORG_ADMIN, Rechttelephony:write.
v1.199.0 · 20. Oktober 2026
- Neu: Sitzungen einer Betreuung (Praxis BP.2).
GET /care-enrollments/{id}/sessionslistet die geöffneten Sitzungen,GET /care-sessions/{id}liest eine.POST /care-enrollments/{id}/sessions/openöffnet die Sitzung an einer Position der Abschrift (beim ersten Mal angelegt, danach dieselbe),POST /care-enrollments/{id}/sessionslegt eine spontane Sitzung ausserhalb des Plans an (adHoc, ohneposition; etwa bei einer Krise, nur in einer laufenden oder pausierten Betreuung, sonstconflictmitenrollment-ended).POST /care-sessions/{id}/startbeginnt eine Sitzung:runningist dann vier Stunden lang true.PATCH /care-sessions/{id}setzt den Sitzungstyp (standard,safety,gentle,catch-up,relief) mit kurzem Grund. Rechte wie bei den Betreuungen:careplans:read/:writeundclients:read/:write, Klientendaten-Freigabe, Zugriffsprotokoll. Der Leitfaden-Lauf einer Sitzung hat keinen Endpunkt; seine Kennung steht inguideRunId.
v1.198.0 · 20. Oktober 2026
- Formulare, nur Verhalten, für Einsendungen über den öffentlichen Link (
/f/…): (1) Bei einem Formular mit Werbung, dessen E-Mail oder Telefon per Link nach dem Absenden bestätigt wird, fragt der Bogen die Werbe-Einwilligung erst nach dem Absenden. Ein „Ja“ wird danach an die Einsendung angehängt:GET /forms/{id}/responsesundGET /responses/{id}zeigen dann eine angenommene Einwilligung mitpurposeMARKETING, dieforms.response.submittedbeim Absenden noch nicht enthielt; ein eigenes Ereignis für das spätere „Ja“ gibt es nicht. Ein „Nein“ hinterlässt nichts. Wirksam wird die Werbe-Einwilligung erst mit dem Klick in der Bestätigung. (2) Neue Einwilligungs-Art „Werbeaktion“: Der Absenden-Knopf ist der Wunsch nach Werbung, der Wortlaut steht darüber. Die Einsendung trägt die Einwilligung alsacceptedtrue, ohne dass ein Häkchen gezeigt wurde. Einsendungen überPOST /forms/{id}/responsessind davon nicht betroffen; dort bleiben Werbe-Einwilligungen Häkchen. - Nur Dokumentation: Das Beispiel von
GET /forms/{id}zeigt statt des entfallenen Anfrage-Häkchens (purposeINQUIRY, seit 1.197.0) ein freiwilliges Werbe-Häkchen (purposeMARKETING,requiredfalse). Das Beispiel einer Einsendung behältINQUIRY, weil ältere Einsendungen es tragen.
v1.197.0 · 20. Oktober 2026
- Formulare, nur Verhalten: Das Pflicht-Häkchen „Kontakt zu meiner Anfrage“ (
purposeINQUIRY) entfällt. Eine Anfrage zu beantworten braucht keine Einwilligung; der Bogen zeigt dafür einen Datenschutzhinweis.GET /forms/{id}nennt inconsentskeine Einwilligung mitINQUIRYmehr. Werbe-Einwilligungen (MARKETING) und ältere Häkchen für Anfrage und Werbung zusammen (purposenull, Kanal E-Mail oder Telefon) erscheinen nur, wenn das Formular Werbung erlaubt; das ist die Vorgabe für alle bestehenden Formulare. Eigene Einwilligungen (KanalCUSTOM) unverändert.POST /forms/{id}/responsesverlangt für E-Mail oder Telefon kein Anfrage-Häkchen mehr:validation-failedmitbody.consents.<elementId>kommt nur noch für eigene Pflicht-Einwilligungen und ältere zusammengefasste Häkchen. Ein mitgeschicktestruefür das entfallene Häkchen ist kein Fehler, es wird nicht gespeichert. Neue Einsendungen (GET /forms/{id}/responses,forms.response.submitted) undconsent/consentPurposesvonleads.lead.createdtragen keinINQUIRYmehr; ältere Einsendungen behalten es, deshalb bleibt der Wert im Schema.
v1.196.0 · 20. Oktober 2026
- Geändert: Terminserien haben bis 100 statt 10 Schritte. In
POST /appointment-series-templatesundPATCH /appointment-series-templates/{id}giltstepsfür 2 bis 100 Schritte undsamePersonAsStepbis 100; ebensoappointmentsinPOST /appointment-series,{step}in/appointment-series/{id}/steps/{step}undfollowinginPOST /appointments/{id}/reschedule-with-series.
v1.195.0 · 19. Oktober 2026
- Geändert: Der Text eines Erinnerungsschritts (
bodyHtml, auch ininformal) behält inPATCH /appointment-reminder-steps/{id}nur noch die Auszeichnung der Maske: Absatz, Fett, Kursiv, Unterstrichen, Durchgestrichen, Listen und Zeilenumbruch. Ein Link wird zu seinem Text, Bilder und Attribute entfallen. Bestätigung, Absage und Verschiebung gehen immer hinaus und sollen keinen werbenden Bestandteil tragen.
v1.194.0 · 19. Oktober 2026
- Neu, nur für ORG_ADMIN: API-Alarme der Organisation lesen (
GET /organization/api-alerts: Aufrufe und Fehler für 24 Stunden und 7 Tage, Regeln je Art, letzte Alarme, Alarm-Adresse), eine Alarm-Art einstellen (PUT /organization/api-alerts/rules/{kind}) und die Alarm-Adresse setzen (PUT /organization/api-alerts/email). Dazu die Installationen der claritos-App in LeadConnector lesen (GET /organization/integrations/leadconnector) und eine trennen (DELETE /organization/integrations/leadconnector/{id}); installiert wird weiterhin in LeadConnector selbst. Rechteorganization:readbzw.organization:write.
v1.193.0 · 19. Oktober 2026
- Neues Ereignis
careplans.enrollment.resumed: Eine pausierte Betreuung läuft wieder (StatusACTIVEausPAUSED). Nutzlast wie bei den übrigencareplans.enrollment.*(nur Kennungen und Zustände); Klientendaten, geht nur an Endpunkte mitclientsData. Auch als Auslöser für Automationen.
v1.192.0 · 19. Oktober 2026
- Neu:
firstSessionIsOnboardinganGET /care-plans/{id}(und den Antworten der übrigen Vorlagen-Endpunkte) und ancopyder Betreuungen.trueheisst: Sitzung 1 ist das Onboarding und heisst in der Oberfläche Sitzung 0; Positionen, Serie und Zeitfenster zählen weiter ab 1. Schreibbar anPOST/PUT /care-plansund im ProbelaufPOST /care-plans/validate, optional; ohne Angabefalse, auch beiPUT, weil der Baum als Ganzes ersetzt wird.
v1.191.0 · 18. Oktober 2026
- Neu: Bereich
careplans(Betreuungspläne der Praxis), Rechtecareplans:read/careplans:write, Gruppe „Kontakte und Klienten“. Vorlagen:GET/POST /care-plans,GET/PUT/DELETE /care-plans/{id},GET /care-plans/options, ProbelaufPOST /care-plans/validate,POST /care-plans/{id}/release,…/retire,…/versions. Ein Plan wird als ganzer Baum geschrieben (Kopf, Phasen, Sitzungen), nur ein eigener Entwurf ist änderbar (409plan-not-draft), Lücken zur Freigabe stehen ingaps. Betreuungen (Klientendaten, zusätzlichclients:read/clients:writeund Klientendaten-Freigabe, Zugriffsprotokoll):GET/POST /care-enrollments,GET /care-enrollments/{id},GET /clients/{id}/care-enrollments,POST /care-enrollments/{id}/events,…/status, Termine überGET …/appointment-proposalundPOST …/appointments(dazuappointments:read/appointments:write). Überall das Lizenzrecht Praxisbetrieb und eine handelnde Person mit Aktenzugriff; Freigeben und Zurückziehen nur mit dem Freigabe-Recht. Ereignissecareplans.enrollment.started,.paused,.ended(nur an Endpunkte mitclientsData, nur Kennungen und Zustände).
v1.190.0 · 18. Oktober 2026
- Neu im Bereich
biomarkers: Biomarker-Regelwerke.GET/POST /biomarker-rule-sets,GET/DELETE /biomarker-rule-sets/{id},PUT …/{id}/rules(Regeln als Ganzes),POST /biomarker-rule-sets/validate(Probelauf ohne Speichern),POST …/{id}/confirmund…/{id}/unconfirm. Bedingungen englisch (value,unit,present/missing), Marker als Schlüssel der Hausliste. Bestätigen nur durch eine Person mit Freigabe-Recht, nie aus einer Automation (403confirm-needs-person); ein bestätigtes Regelwerk ist nicht änderbar (409rule-set-confirmed).
v1.189.1 · 18. Oktober 2026
- Verhalten: Eine Fristverlängerung (
POST /dunning/open-items/{openItemId}/extension,dueDate) gilt jetzt bis zum Ende des gewährten Tages (UTC), nicht nur bis 00:00 Uhr. Am gewährten Tag selbst antwortet ein zweites Gewähren daher 409extension-exists, und der Mahnlauf mahnt erst ab dem Folgetag weiter. Gespeichertes und gedrucktes Datum unverändert. - Verhalten:
DELETE /articles/{id}antwortet 409in-usejetzt auch, wenn der Artikel auf Angebots- oder Auftragszeilen (jeder Status), in Abo-Verträgen, auf Provisionsgutschriften, in Einstellungen der Organisation, als Provisionsartikel einer Kampagne oder an einem Zugangs-Hook steht.usagehat dafür die FelderquoteLines,orderLines,subscriptionLines,commissionCreditLines,accessHooks,organizationSettings,campaignCommissions. Statt Löschen: archivieren.
v1.189.0 · 18. Oktober 2026
- Neu: Bereich
biomarkers(Biomarker der Praxis, nur mit dem Recht Praxisbetrieb der Organisation).GET /biomarker-profileslistet die Biomarker-Profile mit Zustand, Fassung, Markerzahl unddeletable/deleteBlockedBy;DELETE /biomarker-profiles/{id}löscht ein Profil, solange es nie benutzt wurde (nie freigegeben, keine Laboranforderung, nie weitergegeben, keine Folgefassung), sonst409 conflictmitreason. Lesen und Schreiben verlangen eine handelnde Person mit Aktenzugriff; Profile sind keine Klientendaten.
v1.188.0 · 18. Oktober 2026
- Neu an
mailboxes.*:attachmentHandling(receipt,receiptStack,documentodernull) legt fest, wie Anhänge an ein gemeinsames Postfach behandelt werden, wie die Adressen je Art auf inbox.claritos.io. Je Art höchstens ein gemeinsames Postfach je Organisation; sonst 409 mitreason: handling-taken. Persönliche Postfächer liefern immernull.
v1.187.0 · 18. Oktober 2026
- Neue Rechte
biomarkers:read/biomarkers:writefür die Biomarker der Praxis (Profile mit Referenzwerten). Sie sind vorbereitet für die Endpunkte, die folgen; bis dahin geben sie keinen Zugriff. Bestehende Schlüssel und OAuth-Zugänge bekommen sie nicht von selbst.
v1.186.0 · 18. Oktober 2026
- Neu im Bereich
credits: Abrechnungsläufe (/credits/runs: Vorschau, Liste, Lesen, Starten, Festschreiben, Verwerfen, Stornieren, Kontoauszüge versenden und neu erzeugen; Start, Festschreiben und Storno laufen im Hintergrund, Antwort 202), Import (/credits/import-profiles: Profile, Prüfen, Laden, Kennungen, Saldenvortrag, Stammdaten;POST /credits/import-files/header; Liste als Base64, höchstens 600 KB), Käufe aus dem Portal (/credits/portal-purchases, Rechnungen dazu mitinvoices:write), Provisionen (/credits/commissions, Abgleich) und Betreuungen (PUT /credits/accounts/{id}/supervision,DELETE /credits/supervisions/{id}).
v1.185.0 · 18. Oktober 2026
- Neu: Bereich
credits(Credits-Programm, nur mit dem RechtCREDITSder Organisation): ProgrammeGET/POST /credits/programs,GET/PATCH /credits/programs/{id},PUT/DELETE …/{id}/logo; KontenGET/POST /credits/accounts(Liste mitfrom/to),GET/PATCH /credits/accounts/{id},POST …/{id}/entries(Gutschrift oder Korrektur von Hand),PUT …/{id}/bonus-rules. Schreiben verlangt eine handelnde Person mit ORG_ADMIN oder ORG_ACCOUNTANT. Werte englisch (WEEKLY,PREPAID,USAGE,GRANT…).
v1.184.0 · 18. Oktober 2026
- Neu: Zeiterfassungsdokumente im Bereich
time:GET /time-reports(Filter nach Projekt und Status),GET /time-reports/preview,POST /time-reports(Zeiten eines Projekts im Zeitraum einfrieren),GET /time-reports/{id}(mit den Zeiten),POST …/{id}/discard,POST …/{id}/pdfundPOST …/{id}/bill(Rechnungsentwurf; verlangttime:writeundinvoices:writeund eine handelnde Person, meldetinvoices.invoice.created). Abrechnen weist Zeiten ab, die inzwischen ein anderer Nachweis abgerechnet hat (entries-already-billed).
v1.183.0 · 18. Oktober 2026
- Neu: Faktura-Vorlagen im Bereich
templates: Zahlungsbedingungen (/payment-terms) und Kopf- und Schlusstexte (/text-blocks), je mit Lesen, Anlegen, Ändern, Löschen undPOST …/{id}/default; Du-Fassungen unterinformal. Löschen archiviert eine Vorlage, die noch an Belegen, Kontakten oder Gutschrift-Vorgaben benutzt wird (mode: archived). DazuGET/PATCH /contacts/{id}/billing-defaults(Bereichcontacts).
v1.182.0 · 18. Oktober 2026
- Neu:
GET /payments/events(Zahlungsereignisse der Stripe-Anbindung, Filter nach Schwere und Art,onlyProblems), Schadensersatz-AbrechnungenGET/POST /settlementsundGET /settlements/{id}(Bereichinvoices; Anlegen verlangt eine handelnde Person undconfirmGenuineDamage: true) sowiePOST /files/rich-images(signierte Upload-Adresse für Bilder in Rich-Text-Beschreibungen; erster Endpunkt im Bereichfiles).
v1.181.0 · 18. Oktober 2026
- Artikel vollständig:
DELETE /articles/{id}(nur unbenutzte; sonst409 conflictmitin-useundusage, dann archivieren), Icon überPOST /articles/{id}/icon-upload,POST /articles/{id}/iconundDELETE /articles/{id}/icon,GET /articles/catalog-range(Preisrahmen einer Katalog-Ziffer). Beim Anlegen und Ändern neugroupName,isSelectableundcatalog; beim Lesen zusätzlichusageCount. Neues Ereignisarticles.article.deleted.
v1.180.0 · 18. Oktober 2026
- Rechnungen vollständig:
POST/DELETE /invoices/{id}/service-rendered(Leistung erbracht samt Auflösungsbuchung, genau einmal), Berichtigungen nach § 31 Abs. 5 UStDV (GET/POST /invoices/{id}/correction-notes,GET …/correction-notes/{correctionId}/email,POST …/send), Ratenplan (GET /invoices/{id}/installment-plan,POST …/installment-plan/collect,POST …/installment-plan/accelerate),GET /invoices/{id}/fee-schedule-check(GebüH), Versandfreigabe (POST /invoices/release-dispatch) und Plan-Läufe (GET /invoices/plan-runs,POST /invoices/plan-runs/release,POST /invoices/plan-runs/direct-debit; Freigabe und Umstellung nur ORG_ADMIN) sowie Rechnung zu Stripe-Zahlungen (GET /invoices/stripe-payments,POST /invoices/stripe-payments/prepare,POST /invoices/stripe-payments/invoice; nur ORG_ADMIN und ORG_ACCOUNTANT).
v1.179.0 · 18. Oktober 2026
- Rechnungen:
DELETE /invoices/{id}(nur Entwürfe; sonst409 conflictmitnot-draft, Entwürfe eines Credits-Laufs mitcredits-run),POST /invoices/{id}/duplicate,GET /invoices/{id}/email(Vorschlag),POST /invoices/{id}/send(stellt nicht selbst fest:409 conflictmitnot-issued; nachgereichte Rechnungenawaiting-release),POST /invoices/{id}/mark-sent(Versand ausserhalb von claritos, immer jetzt),GET /invoices/{id}/refund-preview,POST /invoices/{id}/pdf(Vorschau rendern und warten) undPOST /invoices/{id}/pdf/regenerate(offizielles PDF neu erzeugen). Im Storno überPOST /invoices/{id}/correctneurefundDays(Frist der Erstattung). - Verhaltensänderung:
POST /invoices,POST /invoices/{id}/issueundPOST /invoices/{id}/correctverlangen eine handelnde Person (no-acting-user), bisher500 internalbei einem Schlüssel ohne Anleger.GET /invoices/{id}/pdfundPOST /quotes/{id}/convertbrauchen sie nur, wenn gerendert bzw. das Angebot erst ausgestellt werden muss; die Mail-Vorschläge (GET …/emailbei Rechnungen, Aufträgen und Angeboten) gehen ohne Person mit Signatur und Absender der Organisation. Die Kopie einer Rechnung meldet jetztinvoices.invoice.created.
v1.178.2 · 18. Oktober 2026
- Verhalten, Spezifikation gleich:
POST /open-items/{id}/paymentsverlangt jetzt eine handelnde Person, sobald eine Buchung entsteht, und antwortet ohne sie mit403 no-acting-user. Bisher scheiterte ein Schlüssel ohne Anleger dort mit500 internal.markOnly: true(ohne Buchung) geht weiter ohne Person.
v1.178.1 · 18. Oktober 2026
- Verhalten, Spezifikation gleich:
POST /tasks,POST /tasks/{id}/commentsundPOST /time-entries(ohneuserId) antworten bei einem API-Schlüssel ohne hinterlegten Anleger jetzt mit403 no-acting-userstatt mit500. Vorher kam ein leerer Nutzer im Kern an. Mit OAuth-Zugang und bei Schlüsseln mit Anleger ändert sich nichts; beiPOST /time-entriesbleibt eine ausdrücklich übergebeneuserIdgültig.
v1.178.0 · 18. Oktober 2026
- Aufträge vollständig:
POST /orders(Entwurf mit den Vorgaben des Kontakts, Positionen und Abschnitte gleich mit),PATCH /orders/{id}(bis zur ersten Abrechnung, sonst409 conflictmitlocked),DELETE /orders/{id}(nur Entwürfe ohne Nummer, sonstnot-draft),POST /orders/{id}/issue(AB-Nummer und PDF),POST /orders/{id}/send(Auftragsbestätigung per E-Mail),GET /orders/{id}/email(Vorschlag),POST /orders/{id}/duplicate,POST /orders/{id}/pdf(Vorschau oder ausgestellte Fassung rendern und darauf warten),POST /orders/{id}/invoices(Teil-, Schluss- oder Abschlagsrechnung als Entwurf; braucht zusätzlichinvoices:write),POST /orders/{id}/lines/{lineId}/dropund…/restore(Position entfallen lassen und zurücknehmen; haben sich die Mengen inzwischen geändert,409 conflictmitline-changed). Anlegen, Kopie, Ausstellen, Senden und PDF verlangen eine handelnde Person. - Neues Ereignis
orders.order.sent: die Auftragsbestätigung ging per E-Mail hinaus, aus der Oberfläche oder über die API, mitsentTo. - Verhaltensänderung bei Angeboten:
POST /quotes,POST /quotes/{id}/issue,POST /quotes/{id}/sendundGET /quotes/{id}/pdf(wenn eine Vorschau gerendert wird) verlangen jetzt eine handelnde Person und antworten ohne sie mitno-acting-user. Bisher scheiterte ein Schlüssel ohne Anleger dort mit500 internal.
v1.177.0 · 18. Oktober 2026
- Angebote vollständig:
GET /quotes/{id}/email(Vorschlag für die Angebots-E-Mail mit Absender und ob versendbar),POST /quotes/{id}/remind(jetzt erinnern, nur SENT),POST /quotes/{id}/duplicate(tiefe Kopie als Entwurf; verlangt eine handelnde Person),DELETE /quotes/{id}(nur Entwürfe ohne Nummer, sonst409 conflictmitnot-draft) und Anhänge:GETundPOST /quotes/{id}/attachments,DELETE /quotes/{id}/attachments/{documentId},PUT /quotes/{id}/attachment-order.
v1.176.0 · 18. Oktober 2026
- Neu: Inkasso-Fälle.
GET /dunning/collection-cases(Filterstatus:pending,released,withdrawn,all),GET /dunning/collection-cases/{id},POST …/release(recipientEmail,coverLetterHtml; claritos stellt die Fallakte aus Rechnung, Leistungsnachweis und Mahn-PDFs zusammen und schickt sie an das Inkassobüro; verlangt eine handelnde Person) undPOST …/withdraw(solange nicht übergeben). Freigeben und Zurückziehen sind gegen gleichzeitige Aufrufe geschützt (409 conflictmitwrong-status).
v1.175.0 · 18. Oktober 2026
- Neu: Mahnungen schreiben.
POST /dunning/reminders/{id}/finalize(Nummer, Buchung, PDF),…/regenerate,…/discard(nur Entwürfe),GET …/email(Vorschlag für die Mahn-E-Mail) undPOST …/send(fehlende Felder aus dem Vorschlag;409 conflictmitsender-reconnect-required, wenn das Postfach neu verbunden werden muss),POST /dunning/reminders/regenerate-unsent,POST /dunning/open-items/{openItemId}/extension(Fristverlängerung mitdueDateundreason) undPOST /dunning/run(Mahnlauf, 202). Festschreiben, neu erzeugen, E-Mail und Versand verlangen eine handelnde Person (no-acting-user). Neues Ereignisdunning.reminder.finalized, auch als Auslöser der Automationen.
v1.174.0 · 18. Oktober 2026
- Neu: Mahnstufen-Sets und Stufen, die ersten schreibenden Endpunkte im Bereich Mahnwesen.
GETundPOST /dunning/profiles(seedPresetlegt die Standardstufen an),GET,PATCH(isDefault: truemacht ein Set zum Standard) undDELETE /dunning/profiles/{id}(archiviert),POST /dunning/profiles/{id}/duplicate; StufenPOST /dunning/profiles/{id}/levels,PATCHundDELETE /dunning/levels/{id},PUT /dunning/profiles/{id}/level-order,PUT …/sepa-return-levelundPUT …/extension-levels/{variant}(pre-final,post-final; ohne Felder die Vorlage). Set eines Kontakts:GETundPUT /dunning/contacts/{contactId}/profile. Texte der Stufen mit Du-Fassungen (…Informal). Rechtedunning:readunddunning:write.
v1.173.0 · 18. Oktober 2026
- Neu: Ereignis
subscriptions.subscription.ended, wenn ein Abo tatsächlich zu Ende ist: am Tag nach dem letzten bezahlten Tag, auf jedem Weg (Kündigung, vorgemerktes Ende, Abo-Wechsel, erschöpfte Laufzeit), einmal je Ende. Nutzlastsubscription,endedAt(Beginn des Tages nach dem letzten bezahlten Tag) undreason(cancelledodercompleted). Gedacht für „Zugang wegnehmen“; es hängt am Ende, nicht an der Kündigung. Ausserdem meldetsubscriptions.subscription.cancelledjetzt auch ein vorgemerktes Vertragsende (Marktplatz zum Laufzeitende); dort bleibtstatusbis zum EndeACTIVE, es zähltcancelEffectiveDate.
v1.172.0 · 18. Oktober 2026
- Neu: Abonnements.
GET /subscriptions(Filterstatus,contactId,due),GETundPATCH /subscriptions/{id}(autoSend,ownDirectDebitOffered),POST /subscriptions/{id}/pause,/resumeund/cancel(zum Ende der zuletzt abgerechneten Periode, ohne Erstattung),PUT /subscriptions/{id}/payment-method(Stripe-Zahlungsmittel pinnen oder mitnullauf Überweisung; beiMOLLIEendet damit das Mandat,mandateOutcome) undPOST /subscriptions/generate-due(fällige Folgerechnungen jetzt erzeugen). Neue Ereignissesubscriptions.subscription.paused,.resumedund.cancelled(gekündigt auch im Kundenportal), auch als Auslöser der Automationen. Rechtesubscriptions:readundsubscriptions:write.
v1.171.1 · 18. Oktober 2026
- Zugangs-Hooks nehmen nur noch öffentliche https-Adressen an: keine Zugangsdaten in der Adresse, kein interner Rechnername, keine private IP-Adresse, auch nicht nach der DNS-Auflösung.
POST /checkout/hooks,PATCH /checkout/hooks/{id}undPOST /checkout/hooks/{id}/testantworten sonst mit422 validation-failedundurl-not-allowed(oderdns-failed, wenn der Name nicht auflöst). Zugestellt wird ohne Weiterleitung und nur an eine beim Verbinden geprüfte Adresse.
v1.171.0 · 18. Oktober 2026
- Neu: Zugangs-Hooks der Faktura. Ein Hook benachrichtigt ein fremdes System bei Zahlungen (
onIntentSucceeded,onPaymentCompleted,onPaymentFailed), etwa um einen Kurs freizuschalten oder zu sperren.GETundPOST /checkout/hooks,GET,PATCHundDELETE /checkout/hooks/{id},POST /checkout/hooks/{id}/rotate-secret,DELETE /checkout/hooks/{id}/secret,POST /checkout/hooks/{id}/reactivateundPOST /checkout/hooks/{id}/test(202). Das Geheimnis kommt nur heraus, wenn claritos es erzeugt (generateSecretbeim Anlegen,rotate-secretohne eigenes), und nur in dieser Antwort; sonst stehthasSecret. Zuweisen je Ziel:GETundPUT /checkout/hook-assignments/{targetType}/{targetId}mitcheckout-link,article,quoteoderorder. Verwalten verlangt eine Person mit ORG_ADMIN (no-acting-userbzw.forbidden), Lesen und Zuweisen nicht.
v1.170.0 · 18. Oktober 2026
- Neu: Rabattcodes des Checkouts.
GETundPOST /checkout/discount-codes,GET,PATCHundDELETE /checkout/discount-codes/{id}: Abzug in Prozent (PERCENT,percent) oder fest in Cents (FIXED,amountCents), wahlweise Zeitraum, Höchstzahl der Einlösungen, Partner und Bindung an einzelne Checkout-Links (checkoutLinkIds, leer = alle). Ohnecodeerzeugt claritos einen lesbaren Code, auf Wunsch mitcodePrefix. Filtercodezeigt, ob ein Code vergeben ist,checkoutLinkIddie Codes, die für einen Link gelten. Ein eingelöster Code lässt sich nicht löschen (409 conflictmitredeemed; dannactive: false). Rechtecheckout:readundcheckout:write.
v1.169.0 · 18. Oktober 2026
- Neu: Checkout-Links.
GETundPOST /checkout-links,GET,PATCHundDELETE /checkout-links/{id}: Links mit Artikel, Preis in Cents, Zielpublikum, abgefragten Angaben, Zahlungsanbieter (STRIPEoderMOLLIE), eigener Lastschrift, Zusatzangeboten (bumps), Zahlungsplänen (plans) und Angeboten nach dem Kauf (upsells); Listen ersetzen beim Schreiben die vorhandenen. Löschen geht nur ohne Rechnungen (sonst409 conflictmithas-invoices; dannactive: false).POST /checkout-links/{id}/personal-linkserzeugt einen persönlichen Link für einen Kontakt, sieben Tage gültig.GETundPATCH /checkout/settings: Standard-Rechnungsersteller der Organisation. Rechtecheckout:readundcheckout:write; nur BUSINESS- und HOLDING-Organisationen.
v1.168.0 · 18. Oktober 2026
- Neue Rechte für die Faktura:
checkout:read/checkout:write(Checkout-Links, Rabattcodes, persönliche Links, Zugangs-Hooks),subscriptions:read/subscriptions:write(Abonnements),credits:read/credits:write(Credits-Programm) unddunning:write(Mahnwesen). Sie sind vorbereitet für die Endpunkte, die folgen; bis dahin geben sie keinen Zugriff. Bestehende Schlüssel und OAuth-Zugänge bekommen sie nicht von selbst.
v1.167.0 · 17. Oktober 2026
- Neu: Vorgaben für den claritos Live-Raum. An der Terminart
liveRoommitclassId(Klasse für Breakouts „Nach Untergruppen“) undsummarizeBreakouts, inPOST /appointment-typesundPATCH /appointment-types/{id}und in jeder Antwort einer Terminart. Am TerminGETundPUT /appointments/{id}/live-room: Klasse, Aufzeichnen und Zusammenfassung der Breakouts überschreiben oder mitTYPEauf die Terminart zurücksetzen, dazu was gilt (effective).
v1.166.1 · 16. Oktober 2026
- API-MCP (
/api/mcp/v1,/api/mcp/v1/compact, je auch/o/{orgId}):GETantwortet jetzt mit405 Method Not AllowedundAllow: POST, OPTIONS. Der Server arbeitet zustandslos und sendet nichts von sich aus; bisher öffneteGETeinen Stream, der bis zum Zeitlimit offen blieb. MCP-Clients behandeln 405 wie vorgesehen als „kein Stream“ und arbeiten mitPOSTweiter. Ohne Zugang bleibt es bei401mitWWW-Authenticate.
v1.166.0 · 15. Oktober 2026
- Neu:
check.overallScore, der Gesamt-Spam-Score einer Kampagne in Prozent (0 bis 100,nullohne Prüfung): Technik aus Rspamds Punkten an seinen Schwellen (4 Punkte 25 %, 6 Punkte 50 %, 15 Punkte 100 %, dazwischen linear) und Inhalt aus der KI-Prüfung, verbunden als 1 − (1 − Technik)(1 − Inhalt), bei zwei Fassungen die schlechtere. Neu inspamReports[].report.symbols[].origin:testSendfür Regeln, die nur der Messversand an claritos erzeugt; sie zählen im Gesamtwert nicht. Verhalten: Rote Befunde sperren den Start nicht mehr.POST /email-campaigns/{id}/startverlangt bei roten wie bei gelben BefundenconfirmWarnings: true(sonst422 precondition-failedmitcampaign-check-warnings);campaign-check-redentsteht nicht mehr. Eine geplante Kampagne hält vor dem Termin nur noch an, wenn sich der Inhalt seit der Prüfung geändert hat und die neue Prüfung Hinweise bringt.
v1.165.1 · 15. Oktober 2026
- Text: In
GET /email-campaigns/setupheisst eine Untergruppe einer Klasse insmartLists[].namejetzt „Klasse › Gruppe“, damit gleichnamige Gruppen verschiedener Klassen zu unterscheiden sind. Die Kennung und die Empfänger bleiben gleich.
v1.165.0 · 15. Oktober 2026
- Neu: zusammengestellte Listen (etwa Klassen) unter
/contact-lists. Eine Liste besteht aus einzeln gewählten Personenkontakten und lässt sich in benannte Untergruppen gliedern; jede Person steht in höchstens einer Untergruppe.GET /contact-lists(seitenweise, mitmemberCountund Untergruppen),GET /contact-lists/{id}(Untergruppen mitcontactIds, dazuwithoutSubgroup),POST,PATCH,DELETE /contact-lists/{id}; Untergruppen überPOST /contact-lists/{id}/subgroups,PATCH/DELETE /contact-lists/{id}/subgroups/{subgroupId}undPUT /contact-lists/{id}/subgroups/order; Mitglieder überPOST /contact-lists/{id}/members(mitsubgroupId),POST /contact-lists/{id}/members/from-selection(tags,smartListIds),PUT /contact-lists/{id}/members/subgroupundPOST /contact-lists/{id}/members/remove. Lesen mitcontacts:read; ändern die Person, die die Liste angelegt hat, oder ORG_ADMIN (sonstforbidden, ohne handelnde Personno-acting-user). Gründe:409 conflictmitsubgroup-name-taken,422 precondition-failedmittoo-many(über 2000 Mitglieder oder 100 Untergruppen). Unternehmen werden nicht Mitglied (notPerson).
v1.164.0 · 15. Oktober 2026
- Neu:
check.contentReportsje Fassung, der Bericht der Inhaltsprüfung mit KI:score(0 bis 100, keine Prozentangabe),zone(none,low,elevated,high) undfindingsmitcategory,strength(slight,clear,strong) undquote(wörtlich aus Betreff oder Text). Den Score rechnet claritos aus den Funden nach festem Raster. Incheck.findings[].ruleneukiRisiko(yellow, abelevated,value= Score) undkiGering(info,value= Score); die RegelnkiGewinnbiskiUnserioesaus 1.162.0 entstehen nicht mehr, ältere Prüfungen tragen sie weiter. Ausserdem neu in der SchnellprüfungbetreffAntwort(yellow, Betreff beginnt mit „Re:“ oder „Fwd:“) undlinkTextTaeuscht(yellow, Linktext nennt eine andere Domain als das Ziel).
v1.163.0 · 15. Oktober 2026
- Neu:
GETundPUT /organization/security-txtlesen und setzen die Adresse für Meldungen zu Sicherheitslücken (email). Ist sie gesetzt, liefern die eigenen Domains der Organisation/.well-known/security.txtnach RFC 9116;nullentfernt sie. Setzen nur mit einer Person mit ORG_ADMIN, eine ungültige Adresse ergibt 422.
v1.162.0 · 14. Oktober 2026
- Neu: sieben Werte für
check.findings[].ruleder Kampagnen.kiGewinn,kiGesundheit,kiDruck,kiUebertreibungundkiUnserioes(immerlevelyellow,valueist das Zitat aus dem Text) melden Gewinn- und Heilversprechen, Druck, Übertreibung und unseriöse Sprache, die eine Inhaltsprüfung mit KI im Betreff oder Text der Vorlage fand;kiOkundkiFehler(info) sagen, dass sie nichts fand oder nicht lief. Auf Production erst, sobald die Datenschutzerklärung es nennt; bis dahin kommen diese Werte dort nicht vor.
v1.161.0 · 14. Oktober 2026
- Neu: „Meine Postfächer“.
GET /mailboxes/minenennt die Postfächer, die die handelnde Person öffnen darf (personalund gemeinsame mit Zugriff).GET /mailboxes/{key}/messageslistet einen Ordner (inbox,sent,archive,spam,trash),GET /mailboxes/{key}/messages/{folder}/{uid}liest eine Nachricht,POST /mailboxes/{key}/messages/updatesetzt Merker, verschiebt oder entfernt aus dem Postfach.POST /mailboxes/attachmentsgibt eine signierte Adresse für einen Anhang,POST /mailboxes/{key}/sendsendet von diesem Postfach (persönlich oder gemeinsam) über das SendGrid-Konto der Organisation, mit Beleg im Postausgang. Gründe bei422 precondition-failed:invalid-recipients,attachment-not-uploaded,send-failed.
v1.160.0 · 14. Oktober 2026
- Verhalten, Spec gleich: Post aus Postfächern, die der Nutzer hinter dem Zugang nicht sehen darf (Regel aus
GET /mailboxes), fehlt jetzt inGET /inbox/threadsund den übrigen Posteingangs-Endpunkten, im Gespräch am Kontakt (/contacts/{id}/conversation, auch Marken, Karte und Antwort) und im Postausgang (GET /outbound-emails,GET /outbound-emails/{id},POST /outbound-emails/{id}/resend). Ein Faden ohne sichtbare Nachricht und ein solcher Beleg gelten als nicht vorhanden (404). Ein Schlüssel ohne handelnde Person sieht nur Postfächer, die alle Rollen sehen. Ohne eingeschränkte Postfächer ändert sich nichts.
v1.159.0 · 14. Oktober 2026
- Neu: Postfächer.
GET /mailboxeslistet persönliche und gemeinsame Postfächer auf der Domain für persönliche E-Mails mit Adresse und Zugriffsregel (access.roles,access.rolesWithRecordAccess,access.users);POST /mailboxes,PATCH /mailboxes/{id}undDELETE /mailboxes/{id}legen gemeinsame Postfächer wie info@ an, ändern und entfernen sie (nur ORG_ADMIN).GET /mailboxes/personal/mezeigt das eigene persönliche Postfach,PUT /mailboxes/personal/{userId}/accesslegt fest, wer seine Post sieht (das eigene jede Person, ein fremdes nur ORG_ADMIN). Gründe bei422 precondition-failed:no-personal-domain,invalid-local-part,display-name-required,not-a-member; eine vergebene Adresse ist409 conflictmitaddress-taken. Die Regel wirkt auf Posteingang, Postausgang und Gespräch erst mit einer der nächsten Versionen; bis dahin sieht jeder alles wie bisher. - Text:
moodan den Fäden des Posteingangs beschreibt jetzt die Stimmung der zuletzt eingestuften eingegangenen Mail, nicht nur einer Antwort. Eingestuft wird künftig jede echte Zuschrift, ausser Spam und Rundmails (auf Production erst, sobald die Datenschutzerklärung es nennt).
v1.158.0 · 13. Oktober 2026
POST /organization/invitationsnimmtdeliverTo: Liegtemailauf der Domain für persönliche E-Mails der Organisation, gibt es das Postfach erst nach der Annahme; die Einladung geht dann andeliverTo(Pflicht, sonst422am Feld), und der Name vor dem @ muss frei sein (409 conflict,reason: mailbox-taken). Einladungen führendeliveredTo(sonstnull).
v1.157.0 · 13. Oktober 2026
- Verhalten, Spec gleich: Einträge, die jemand in einem Kalender-Gerät (Thunderbird, iPhone, CalDAV) anlegt, sind jetzt eigene Termine der Person, keine Abwesenheiten mehr, ausser ihre Kategorie lautet Urlaub, Krank, Fortbildung oder Abwesend. Die Abwesenheiten einer Ressource (
GET /appointment-resources/{id}) zeigen eigene Termine deshalb nicht mehr; sie sperren die Zeit weiter (ausser „Frei“). Wer einen eigenen Termin überPUT /appointment-resources/{id}/absences/{absenceId}ändert, macht ihn zur Abwesenheit.
v1.156.0 · 13. Oktober 2026
- Neu:
projectIdanPOST /appointments. Terminarten mit AbrechnungQUOTAlassen sich jetzt aus dem Haus vergeben (Owner-Vorgabe: von aussen bucht sie weiter nur der Kunde im Portal). Pflicht ist dann das Projekt des Kunden, dessen freies Zeitbudget die Dauer trägt; die Dauer wird beim Anlegen reserviert. Fehlt das Projekt, gehört es nicht dem Kunden oder reicht das Budget nicht,400anbody.projectId. Als Reihe, Gruppentermin oder Serie antwortet die API422mitprecondition-failedund Grundquota-single-only(bisherquota-portal-only, das bleibt für Buchungslinks).
v1.155.0 · 13. Oktober 2026
GET/PATCH /organization/letterheadführencancellationRefundDays: die Frist in Tagen (0 bis 365), die eine Stornorechnung für die Erstattung einer schon bezahlten Rechnung nennt. Vorgabe des Storno-Dialogs; ausserhalb des Bereichs422am Feld.
v1.154.0 · 13. Oktober 2026
- Stornorechnungen (
kind: CANCELLATION), auch überPOST /invoices/{id}/cancel: Nur das Verhalten ändert sich, die Felder bleiben. Eine neue Stornorechnung hatbankTransferEnabled: falsestatt des Werts der Originalrechnung.paymentTermsTextträgt einen festen Satz in Sprache und Anrede der Rechnung: War die Rechnung noch nicht bezahlt, dass nichts zu tun ist; sonst bis zu welchem Tag der gezahlte Betrag erstattet wird. Der offene Posten der Erstattung an den Kunden wird zu diesem Tag fällig statt sofort. Die Frist kommt aus der Vorgabe der Organisation (14 Tage, wenn nichts eingestellt ist); einen Parameter am Endpunkt gibt es dafür nicht. Ältere Stornorechnungen bleiben unverändert.
v1.153.0 · 13. Oktober 2026
- finAPI:
PUT /finapi/accounts/{externalAccountId}/connectionmeldetprecondition-failedmitreason: finapi-terms-consent, solange die Organisation § 11 Abs. 5 der Nutzungsbedingungen (Bankanbindung über finAPI) noch nicht zugestimmt hat. Das betrifft nur Kunden, die vor dem 13.10.2026 abgeschlossen haben, bis zum Wirksamwerden der Änderung bei ihnen (FI.134). Zugestimmt wird in claritos beim Verbinden der Bank (setupUrlvonGET /finapi); die API nimmt keine Zustimmung entgegen.
v1.152.0 · 13. Oktober 2026
- Neu
GET /documents/{id}/related(Rechtdocuments:read): die verbundenen Dokumente eines Dokuments, wie im Betrachter unter „Verbundene Dokumente“. Je Eintragid,title,mimeType,createdAtundrelation:session(Sitzungsdokument),recording(Aufzeichnung der Sitzung),split-original/split-part(Original und Teil einer Trennung),signed(signierte Fassung),signing-original(Original vor der Signatur),same-email(Anhang derselben E-Mail),same-appointment(Dokument desselben Termins). Jedes Dokument einmal; was der Schlüssel nicht sehen darf, fehlt (wie beiGET /documents).
v1.151.0 · 13. Oktober 2026
- SendGrid: Die Domain der Terminkonten darf die der persönlichen Mails sein (SV.147). Dann müssen Namen der Personen und Marken der Ressourcen zusammen eindeutig sein; sonst
conflictmitreason: address-taken(anPUT /sendgrid/domains/{id}/calendarundPUT /sendgrid/domains/{id}/personalmitlocalParts, anPUT /sendgrid/my-sender-nameohne). Die Gründesendgrid-domain-is-personalundsendgrid-domain-is-calendarentfallen. - SendGrid: Feld
automaticSecurityan jeder Domain,receiveOnDomainbeim Anlegen (POST /sendgrid/domains) und neuer EndpunktPOST /sendgrid/domains/{id}/recreate(SV.148). Die Domain der persönlichen Mails und der Terminkonten empfängt auf sich selbst; Antworten gehen an dieselbe Adresse, von der geschrieben wurde. Das geht bei SendGrid nur ohne „Automatic Security“ (Einträge MX und TXT statt CNAME; MX-Einträge tragenpriority), sonstprecondition-failedmitreason: sendgrid-domain-automatic-security. - SendGrid:
POST /sendgrid/domains/{id}/repliesan jeder Domain (SV.149). An einer Domain, die weder persönliche Mails noch Terminkonten trägt, liegt der Host unterhalb der Domain, und Antworten etwa auf Kampagnen landen im Posteingang der Organisation; Kampagnen nennen dann diese Adresse als Antwortadresse. In Production erst, wenn die Datenschutzerklärung es nennt (precondition-failed,reason: sendgrid-replies-not-released).
v1.150.0 · 12. Oktober 2026
- Neu:
guestsbeim Anlegen eines Einzeltermins (POST /appointments,POST /appointment-recurrences): Name und E-Mail je Gast, höchstensmaxGuestsder Terminart. Die Gäste entstehen im selben Vorgang und bekommen eine eigene Einladung mit dem Kunden als Einladendem; bei einer Terminreihe auch an den Folgeterminen. Ohne Gäste an der Terminart oder beim Gruppentermin400.
v1.149.0 · 12. Oktober 2026
- Neu:
accountEmailim Kalender-Abo einer Ressource (/appointment-resources/{id}/calendar-feed): die E-Mail-Adresse ihres Terminkontos (Mitarbeiter, Raum, Gerät), sonstnull. Räume und Geräte beantworten Einladungen an diese Adresse selbst; Terminpost geht, wo es ein Terminkonto gibt, von ihr hinaus.
v1.148.0 · 12. Oktober 2026
- SendGrid: Kalender-Domain für die Terminkonten. Feld
calendaran jeder Domain,calendarAvailableam Stand (GET /sendgrid) undPUT /sendgrid/domains/{id}/calendar(enabled): höchstens eine Domain je Organisation, nie die der persönlichen Mails, nur bestätigt und ohne MX, der woanders hinzeigt.POST /sendgrid/domains/{id}/repliesrichtet an dieser Domain den Empfang auf der Domain selbst ein (hostwird dann nicht gelesen). Neue Gründe fürprecondition-failed:sendgrid-calendar-not-released,sendgrid-domain-is-personal,sendgrid-domain-is-calendar,sendgrid-domain-foreign-mx,dns-unavailable. Schaltbar nur mit den Rechten für Terminkonten und E-Mail-Kampagnen, in Production noch nicht (calendarAvailable: false).
v1.147.0 · 12. Oktober 2026
- Neu: Abo-Feed je Ressource.
GET/POST/PATCH/DELETE /appointment-resources/{id}/calendar-feed: Stand, eine neue geheime ICS-Adresse (nur in der Antwort vonPOST, eine bisherige gilt danach nicht mehr), Kundennamen ein oder aus, beenden. Ohne Freischaltung412mitcalendar-feed-not-enabled.
v1.146.0 · 12. Oktober 2026
GET /organization/entitlementskennt das neue RechtTERMINKONTEN(Abo-Feed, CalDAV und eigene Adressen für Ressourcen). Es wirkt nur zusammen mitE_MAIL_KAMPAGNEN; fehlt das, isteffectivefalsch.
v1.145.0 · 12. Oktober 2026
- Neu: Termine einer Serie verschieben, ohne die Kette zu brechen.
POST /appointments/{id}/series-proposalsagt, ob eine neue Zeit passt, sonst den erlaubten Zeitraum und die gebuchten Folgeschritte neu gelegt;POST /appointments/{id}/reschedule-with-seriesverschiebt alle nach dem Vorschlag. Geändert:POST /appointments/{id}/reschedulelehnt eine Zeit, die die Kette bricht, mit412undseries-chain-brokenab (vorher verschob es ohne Prüfung).
v1.144.0 · 12. Oktober 2026
- Neu:
GET /appointment-serieslistet laufende Serien mit Stand (offene Schritte zuerst,openStep.passed, nächster Termin) undPOST /appointment-series/{id}/cancel-fromsagt einen Termin und alle folgenden Schritte ab; die Serie endet, der Kunde bekommt eine Absage, die die übrigen Termine nennt.
v1.143.0 · 12. Oktober 2026
- Neu: Kunden starten eine Terminserie selbst.
POST /appointment-series-templates/{id}/start-linksmitcontactIdliefert den persönlichen Link (/t/serie/…), einen je Kunde und Vorlage; dort sieht der Kunde einen Vorschlag (beiSTEPWISEnur Schritt 1) und bucht mit einem Klick. Geändert:clientBookablewirkt jetzt auch beiADVANCEund wird so gespeichert, wie es kommt (vorher beiADVANCEalsfalse). OhneclientBookable412mitseries-not-client-bookable.
v1.142.0 · 12. Oktober 2026
- Neu: Klienten buchen die Folgeschritte einer Serie selbst. Vorlagen nehmen und liefern
clientBookable(nur zusammen mitbookingModeSTEPWISEwirksam, beiADVANCEalsfalsegespeichert), Serien liefern es mit. Öffnet sich ein Schritt, bekommt der Kunde eine E-Mail mit einem Buchungslink, der nur Zeiten im Zeitraum des Schritts zeigt, und vor dessen Ende eine Erinnerung.
v1.141.0 · 12. Oktober 2026
- Neu: Terminserien Schritt für Schritt. Vorlagen und Serien tragen
bookingMode(ADVANCEwie bisher,STEPWISE: zuerst nur Schritt 1, jeder weitere öffnet sich, wenn der vorige stattgefunden hat).POST /appointment-seriesnimmt beiSTEPWISEgenau einen Eintrag (vorher mindestens zwei);POST /appointment-series/proposalschlägt dann nur Schritt 1 vor.GET /appointment-series/{id}liefert zusätzlichcontactId,progressundopenStep(Zeitraum des offenen Schritts). NeuPOST /appointment-series/{id}/steps/{step}/proposal(freie Zeiten im Zeitraum) undPOST /appointment-series/{id}/steps/{step}(bucht den offenen Schritt; nicht offen412mitseries-step-not-open, ausserhalb des Zeitraums422anbody.startsAt).
v1.140.0 · 12. Oktober 2026
- Neu: Terminserien (Folge verschiedener Terminarten mit Korridoren).
GET/POST /appointment-series-templates,PATCH /appointment-series-templates/{id}(Schritte mitappointmentTypeId,durationMinutes,fromDay/toDaynach dem vorigen Schritt,samePersonAsStep),POST /appointment-series/proposal(früheste vollständige Folge abfrom, bucht nichts; ohne Platz412mitseries-no-slots),POST /appointment-series(im Voraus, alles oder nichts) undGET /appointment-series/{id}.
v1.139.0 · 12. Oktober 2026
- Neu:
GET /appointments/{id}/waitlist(Warteliste eines Events:stateWAITING, OFFERED, ACCEPTED, EXPIRED, DECLINED, REMOVED, dazupositionundofferExpiresAt). Verhalten: Ist bei einem Event mit Warteliste ein Platz frei geworden, bekommt der Erste auf der Liste ein Angebot mit Frist; solange es offen ist, hält es den Platz, auch gegenüber Buchungen über den Link.
v1.138.0 · 12. Oktober 2026
- Terminreihen:
POST /appointment-recurrences/{id}/change-from(appointmentId,startsAt,rule,end, optional Dauer, Ort, Leistung, Nummer, Person, Auslassen): neue Reihe ab einer neuen ersten Zeit mit den Kunden des genannten Termins, der und die folgenden alten Termine werden abgesagt; Antwort die neue Reihe. Verhalten: Beicancel-fromundchange-fromgehen Termine nur noch dann ohne eigene Absage, wenn jeder ihrer Kunden die Sammel-Mail bekommt; bei Events bekommt jeder Termin seine eigene Absage.
v1.137.0 · 12. Oktober 2026
- Terminreihen:
POST /appointment-recurrences/{id}/end(beenden, die angelegten Termine bleiben),POST /appointment-recurrences/{id}/cancel-from(appointmentId, optionalreason: diesen und alle folgenden absagen; der Kunde bekommt EINE Absage, die die übrigen aufzählt) undPATCH /appointment-recurrences/{id}(endändern, etwa verlängern; nicht vor Angelegtem, sonst422mittoo_small). Verhalten: Die Bestätigung des ersten Termins einer Reihe nennt die Regel in Worten.
v1.136.0 · 12. Oktober 2026
- Neu: Terminreihen (wiederkehrende Termine, jede Terminart).
POST /appointment-recurrenceslegt eine an: Felder des ersten Termins wiePOST /appointments, dazurule(weeklymit Abstand 1 bis 4 und Tagen mit Uhrzeit,monthlyWeekdaymit n-tem oder letztem Wochentag,monthlyDay),end(count2 bis 200,untilbis zwei Jahre,open) undskipHolidays/skipClosures(Vorgabe an). Gerechnet in der Zeitzone der Terminart; die weiteren Termine entstehen im Hintergrund ohne eigene Bestätigung.GET /appointment-recurrences/{id}liefert Regel, Zustand, anstehende Termine und ausgelassene mit Grund. Termine tragen neurecurrenceId. Ungültige Regel oder Ende:422anbody.rulebzw.body.end.
v1.135.0 · 12. Oktober 2026
- Events (Gruppentermine mit
internalOnly: false, kein Unterricht):POST /appointmentsdarf bei einem Event ohneparticipantsgerufen werden, der Termin entsteht dann mit freien Plätzen; eine Auswahl, die niemanden ergibt, antwortet weiter422mittoo_small.DELETE /appointments/{id}/participants/{contactId}trägt beim Event auch den letzten Teilnehmer aus (keinlast-participant). Kunden buchen über den Buchungslink einen Platz in einem angelegten Termin;/appointment-types/{id}/slotszeigt unverändert, wann das Haus einen Termin anlegen kann.
v1.134.0 · 12. Oktober 2026
- Terminarten: neue Felder
minParticipants,minParticipantsHours,minParticipantsAction(NOTIFY,CANCEL),waitlistEnabled,waitlistOfferHours(lesen und schreiben; Mindestzahl und Warteliste für Gruppentermine, Warteliste nur bei Events).internalOnlygibt bei Gruppen jetzt den gespeicherten Wert:falseheisst Event (Kunden buchen einen Platz), Unterricht bleibt intern. Kontingent nur beim Einzeltermin (422mitquota_group). Ungültige Werte:422mitminimum_invalid,minimum_hours_invalid,waitlist_hours_invalid.
v1.133.0 · 12. Oktober 2026
- Kontingent-Termine: neues Feld
quotaam Termin (projectId,minutes,state:HELD,CONSUMED,RELEASED;nullohne Kontingent) undPOST /appointments/{id}/quota/release(Grund 3 bis 500 Zeichen) gibt reservierte Zeit mit Protokoll frei; ohne offene Reservierung422mitquota-not-held. Nach dem Meeting kommt die tatsächliche Zoom-Zeit als Zeiteintrag ins Projekt, die Reservierung geht aufCONSUMED.
v1.132.0 · 12. Oktober 2026
- Kontingent-Termine bucht nur der Kunde im Portal (Owner-Vorgabe):
POST /appointmentsmit einer Terminart im ModusQUOTAantwortet jetzt422mitprecondition-failedund Grundquota-portal-only, statt einen Termin ohne Projekt anzulegen. Eine Absage (POST /appointments/{id}/cancel) gibt die reservierte Zeit des Projekts frei; eine Verschiebung mit anderer Dauer passt die Reservierung an.
v1.131.0 · 12. Oktober 2026
- Terminarten im Modus
QUOTA(Kontingent): Beim Schreiben (POST/PATCH /appointment-types) gelten jetzt Ort nur online (places: ["ONLINE"]) und beide Zoom-Schalter an (recording.autoRecord,recording.fetchZoomRecordings), unabhängig von der Eingabe. Die Besetzung (PUT /appointment-types/{id}/staffing) einer solchen Terminart verlangt bei jeder PersonmeetingProvider: "ZOOM"und keine Partner-Rolle; sonst422mit Codequota_zoom_requiredbzw.quota_partner. Buchbar wird das Kontingent mit der Portal-Strecke in einer späteren Version.
v1.130.0 · 12. Oktober 2026
- Rechnungen und Angebote: neues Feld
contactEmail(Text odernull), die E-Mail-Adresse des verknüpften Kontakts;nullohne Kontakt oder ohne Adresse. InGET /invoices,GET /quotes, den Einzelabrufen und Antworten und in den Ereignisseninvoices.invoice.*undquotes.quote.*. - Ereignisse
payments.checkout.*: neue Felder im Objektcheckout:checkoutLinkName(Titel des Checkout-Links, also das Produkt;nullohne Titel),customerName(Kontakt der Rechnung, sonst die Angabe im Checkout),orderIdundorderNumber(Auftrag der Rechnung, sonstnull) und nur beipayments.checkout.failedfailureReason:direct_debit_failed(Lastschrift geplatzt),chargeback(zurückgebucht),no_mandate(kein Mandat) oderpayment_failed(anderer Grund). Bestehende Felder bleiben.
v1.129.0 · 12. Oktober 2026
- Aufgaben: neues Feld
contactEmail(Text odernull), die E-Mail-Adresse des verknüpften Kontakts;nullohne Kontakt oder ohne Adresse. InGET /tasks,GET /tasks/{id}, den Antworten auf Anlegen und Ändern und in den Ereignissentasks.task.*. Damit finden Abläufe ohne Kontakt-Kennung den Kontakt über seine Adresse.
v1.128.0 · 12. Oktober 2026
- API-MCP für Sprachmodelle: Beim Verbinden schickt der Server einen Überblick über claritos mit (
instructions: Bereiche in Gruppen mit je einem Satz und der Zahl der Endpunkte, die der Zugang nutzen darf, Regeln, typische Abläufe). Neues Werkzeugguide(Überblick, ein Bereich mit seinen Endpunkten oder ein Leitfaden von /developers). Die Feldbeschreibungen der Werkzeuge kommen jetzt als Text; vorher standen dort Übersetzungsschlüssel wieapiDocs.fields.common.limit. Neue Adresse/api/mcp/v1/compact(je Organisation/api/mcp/v1/compact/o/{orgId}) mit vier Werkzeugen statt eines je Endpunkt:guide,search_endpoints,describe_endpoint,call_endpoint; gleiche Anmeldung, Rechte, Limits und dasselbe Protokoll./api/mcp/v1und/api/v1bleiben unverändert.
v1.127.0 · 12. Oktober 2026
- Neu:
GET /call-guides/options(callguides.options, nur ORG_ADMIN) liefert in einem Aufruf alles, was der Leitfaden-Editor für Aktionen und Felder anbietet: Vorlagen (sms,promotional), Mitglieder, persönliche Checkout-Links, Formulare, Werbemittel, Terminarten mitholdersund Kontaktfelder (fixed,standard,custom) samt Optionen. Die Kennungen und Schlüssel gehen in den Inhalt vonPOST /call-guidesundPATCH /call-guides/{id}.
v1.126.0 · 12. Oktober 2026
- Neu: Telefonate lesen (Bereich
calls, nur lesen, jedes Mitglied).GET /callslistet die Telefonate neu nach alt (Filtermissed,messages,withoutContact,contactIdfür Inhaber der Nummer oder Gesprächspartner, Sucheq,updatedSince),GET /calls/{id}liest eines. Die Felder decken sich mit dem Ereigniscalls.call.ended, dazu Anrufbeantworter und Stand der Gesprächsnotiz. Notiz (note) und automatische Gesprächsnotiz (callNote) sind Klientendaten: ihr Text nur mit Freigabe der Organisation undclients:-Recht, sonstnullmithasNote/hasCallNote.
v1.125.0 · 12. Oktober 2026
- Briefe:
POST /letters/{id}/finalize(festschreiben ohne Versand),POST /letters/{id}/duplicate(Kopie als Entwurf),DELETE /letters/{id}(nicht bei vergebener Nummer,409 numbered-no-delete),POST /letters/{id}/cancel-signature(laufende Signatur abbrechen,409 signature-completedbei abgeschlossener) undPOST /letters/{id}/number(laufende Nummer vergeben,202, das PDF wird neu erzeugt). Postausgang:POST /outbound-emails/{id}/resendsendet eine Mail erneut, wahlweise an eine andere Adresse oder mit geändertem Text, mit eigenem Beleg; nicht bei Code-Belegen, geschwärzten Stellen, Kampagnen und anonymisierten Belegen (409 not-resendable). - Ausgestellte Dokumente aus PDF-Vorlagen (Zertifikate):
GET /issued-documents,GET /issued-documents/{id},POST /issued-documents,DELETE /issued-documents/{id}(nur Entwürfe),POST /issued-documents/{id}/finalize,POST /issued-documents/{id}/retry-file,POST /issued-documents/{id}/cancel(nur ORG_ADMIN) undPOST /issued-documents/{id}/letter(Brief mit dem Dokument als Anlage vorbereiten). Ausstellen darf, wer Briefe schreibt (ORG_ADMIN, ORG_USER), wie in der Oberfläche. - Posteingang:
GET /inbox/threads,GET /inbox/threads/{id},PATCH /inbox/threads/{id}(gelesen, archiviert, zuständige Person, Kontakt, Tags),GET /inbox/tags,GET /inbox/countsundPOST /inbox/threads/{id}/task(Aufgabe aus dem Faden, braucht zusätzlichtasks:write). Anhänge als Dokument-Kennung (documents.downloadUrl). Fäden eines Kontakts mit Klientenakte nur bei Freigabe der Klientendaten undclients:read. - Gespräch am Kontakt:
GET /contacts/{id}/conversation(Verlauf über E-Mail, SMS, Portal- und Akte-Post, Telefonate),GET /contacts/{id}/conversation/{source}/{entryId}und…/reply-basis,GET /contacts/{id}/conversation/compose(Absender, Vorlagen, Erlaubnis),GET /contacts/{id}/conversation/permission,POST /contacts/{id}/conversation/email,POST /contacts/{id}/conversation/portal-post(clients:write),POST /contacts/{id}/conversation/smsundPOST /contacts/{id}/conversation/sms-preview. Lesen markiert nichts als gelesen; werblich nur mit Einwilligung. Neuer Grund fürprecondition-failed:client-record-missing.
v1.124.0 · 12. Oktober 2026
- Terminarten: neues Feld
startWindows(lesen und inPOST/PATCH /appointment-typesschreiben): wann ein Termin dieser Art beginnen darf, je Eintragdays(1 = Montag bis 7 = Sonntag),earliestundlatest(HH:MMin der Zeitzone der Terminart, beide eingeschlossen), höchstens 14;nulloder[]hebt sie auf./appointment-types/{id}/slotsbietet danach nur noch Zeiten darin an, Buchung und Umbuchung durch den Kunden halten sich daran. Ungültig:422mit Pfadbody.startWindows.
v1.123.0 · 12. Oktober 2026
- Logos und Art der Organisation:
GET /organization/logos,POST /organization/logos/{kind}/upload(Format und Grösse prüfen, signierte Adresse für den direkten Upload),POST /organization/logos/{kind}/confirmundDELETE /organization/logos/{kind}, je fürlogoundinvoice-logo; für SVG und WebP entsteht wie in der Oberfläche eine PNG-Fassung für Mails.PATCH /organizationnimmt zusätzlichtype(BUSINESS, HOUSEHOLD, HOLDING); eine private Organisation behält ihre Art (409 conflict,reason: private-organization). Ändern mitorganization:writeund einer Person, die ORG_ADMIN ist.
v1.122.0 · 12. Oktober 2026
- Gäste eines Einzeltermins:
POST /appointments/{id}/guests(Name, E-Mail) lädt einen Gast im Namen des Buchers ein,DELETE /appointments/{id}/guests/{contactId}lädt ihn aus (er bekommt „Einladung zurückgenommen“, der Termin bleibt). Rechtappointments:writeund eine Person mit „Terminplanung verwalten“. Neues FeldisGuestanparticipants. Neue Gründe fürprecondition-failed:group-appointment-has-no-guests,guest-limit-reached.
v1.121.0 · 12. Oktober 2026
- Freischaltungen, Integrationen und eigene Domains der Organisation:
GET /organization/entitlements(jedes Recht mit Lizenz, Freigabe, Wirkung),GET /organization/integrations(Stand jeder Anbindung mit der Seite zum Verbinden; LeadConnector heisst dortleadconnector),GET/POST /organization/domains,POST /organization/domains/{purpose}/verifyundDELETE /organization/domains/{purpose}(Zweckapp,finder,marketplace; Antwort nennt die fehlenden DNS-Einträge). Alles mit einer Person, die ORG_ADMIN ist; eigene Domains brauchen die Freigabe durch claritos, eine fremde Domain antwortet409 conflictmitreason: taken.
v1.120.0 · 12. Oktober 2026
- Dokumente: Jedes Dokument trägt
extracted.counterpartyDetails(Anschrift mitstreet,postalCode,city,countryals ISO-Code, dazuemail,phone,websiteundcontactPersonmitname,email,phone,position), wie die KI sie aus dem Dokument liest;null, wenn nichts erkannt wurde. NeuPOST /documents/{id}/counterparty-contact(Rechtedocuments:writeundcontacts:write): verknüpft das Dokument mit dem Kontakt seiner Gegenpartei, wie „Als Kontakt anlegen“ in der App. Ein schon verknüpfter bleibt; sonst ein Kontakt mit genau diesem Namen, eine passende Firma (USt-IdNr., Register, Domain, Name) oder ein neuer mit der Anschrift. Antwort{ contactId, created }; ohne Gegenpartei409 conflictmitreason: no-counterparty.
v1.119.0 · 12. Oktober 2026
- Neu: empfangene SMS lesen.
GET /inbound-smslistet die SMS, die an die Nummer der Organisation geschickt wurden (neu nach alt, Seiten wieGET /sms, FiltercontactId,updatedSinceheisst hier empfangen seit), mit Kontakt, Art der Zuordnung (number,personBeforeCompany,ambiguous,unknown,manual) und Twilios Abmeldewort;GET /inbound-sms/{id}liest eine. Bereichsms, Rechtsms:read.
v1.118.0 · 12. Oktober 2026
- Anrede und Rechtstexte der Organisation:
GET/PATCH /organization/salutation(Sie oder Du als Vorgabe, Du für einzelne Kontakte, Sie-Pflicht je Belegart, Grussform),GET/PATCH /organization/legal-texts(alle Rechtstexte samt Standard, Datenschutzbeauftragte Stelle und Aufsichtsbehörde),PUT/DELETE /organization/legal-texts/{kind}(eigenen Text setzen, Version steigt; zurück auf den Standard). Lesen mitorganization:read, ändern mitorganization:writeund einer Person, die ORG_ADMIN ist. Eine private Organisation hat keine Rechtstexte (403 feature-not-available).
v1.117.0 · 12. Oktober 2026
- Kontakt, Öffnungszeiten und Briefkopf der Organisation:
GET/PATCH /organization/contact(Besuchsanschrift, Telefon, E-Mail für Website und Portal),GET/PUT /organization/opening-hours(je Wochentag bis zu zwei Spannen) undGET/PATCH /organization/letterhead(Geschäftspapier: Rechtsname, Rechtsform, Anschrift, Steuer- und Registerdaten, Geschäftsführung, Bank, Briefbogen-Form, Artikel für Zeitabrechnung und Rücklastschrift). Lesen mitorganization:read, ändern mitorganization:writeund einer Person, die ORG_ADMIN ist;PATCHändert nur Mitgesendetes, geprüft wird wie in den Einstellungen (422mit Feld).
v1.116.0 · 12. Oktober 2026
- Nur die Darstellung, kein Endpunkt geändert: Die Spec ordnet die Bereiche in Gruppen (
x-tagGroups, etwa „Kontakte und Klienten“, „Verkauf und Rechnungen“). Jeder Tag trägt einen Anzeigenamen (x-displayName) und als Beschreibung einen Satz, wofür der Bereich da ist. Die Tag-Namen selbst (contacts,invoices…) bleiben, wie sie sind.
v1.115.0 · 12. Oktober 2026
- Terminarten: neues Feld
maxGuests(lesen und inPOST/PATCH /appointment-typesschreiben): wie viele weitere Personen der Bucher zu seinem Termin einladen darf, 0 bis 20, nur bei einem Platz (sonst immer 0). Ungültig:422mit Codeguests_invalid.
v1.114.0 · 12. Oktober 2026
- Mitglieder und Einladungen schreiben (Recht
members:write, Person mit ORG_ADMIN wie im Reiter „Mitglieder“):PATCH /organization/members/{userId}(Rolle ORG_ADMIN/ORG_USER, Sichtbarkeit, Aktenzugriff, Übersetzer-Sprachen),DELETE /organization/members/{userId},POST /organization/invitations(Einladung per E-Mail, Link sieben Tage gültig) undDELETE /organization/invitations/{id}. Die handelnde Person ändert und entfernt sich nie selbst (403 forbidden,reason: self), der letzte ORG_ADMIN bleibt (409 conflict,reason: last-admin); schon Mitglied oder offen eingeladen antwortet409 conflictmitreason: already-memberbzw.already-invited.
v1.113.0 · 12. Oktober 2026
- Postkonten über die API (Bereich
letters):GET /postal-account(über welchen Anbieter die Warteschlange versendet, sein Guthaben, Pause, wartende Briefe; ORG_ADMIN sieht inaccountszusätzlich LetterXpress und Pingen im Einzelnen) undPOST /postal-account/resume-queue(Pause aufheben, wartende Briefe versenden,202). Verbunden und getrennt werden LetterXpress und Pingen nur in der Oberfläche; ihre Zugangsdaten nimmt die API nicht an.
v1.112.0 · 12. Oktober 2026
- Meta-Datensätze lesen:
GET /organization/meta-datasets(Pixel und Conversions API: Name, Pixel-Kennung, Testcode,hasToken), mitorganization:readund einer Person, die ORG_ADMIN ist. Den Token gibt die API nie heraus; Anlegen und Ändern bleibt der Oberfläche vorbehalten, wie bei SendGrid.
v1.111.0 · 12. Oktober 2026
- Das Marken-Board über die API (Bereich
sites): Boards mitGET/POST /sites/brands,GET/PATCH/DELETE /sites/brands/{id},POST /sites/brands/{id}/defaultundPOST /sites/brands/{id}/publish; Schriften mitGET/POST /sites/brands/{id}/fonts(eigene Schrift, Adresse zum Hochladen),POST /sites/brands/{id}/fonts/google(Google-Schrift importieren, Suche überGET /sites/google-fonts) undDELETE /sites/brands/{id}/fonts/{fontId}; Logos mitGET /sites/brands/{id}/logos,POST/DELETE /sites/brands/{id}/logos/{slot}.PATCHändert nur, was mitkommt (Objekte werden zusammengeführt). Lesen mitsites:read, schreiben mitsites:writeund einer Person, die ORG_ADMIN ist (wie im Marken-Board). Das letzte Board lässt sich nicht löschen (409,last-board), eine schon importierte Schrift antwortet409mitfont-already-imported. Die KI-Berater des Marken-Boards bleiben in der Oberfläche.
v1.110.0 · 12. Oktober 2026
- Bankverbindungen (Bereich
banking):GET /bank-connectionsundGET /bank-connections/{id}(bei WISE mit öffentlichem Schlüssel),POST /bank-connections/{id}/sync(Kontoauszüge abrufen),GET /revolut(Stand der Einrichtung samt Adresse in claritos),GET /revolut/accountsundPUT /revolut/accounts/{externalAccountId}/connection(Konto eines freigegebenen Zugangs anbinden),GET /finapi,PUT /finapi/accounts/{externalAccountId}/connectionundPOST /finapi/banks/{bankConnection}/refresh. Verbinden mit einem Schlüssel, die Anmeldung bei Revolut oder finAPI und das Trennen bleiben in claritos; kein Schlüssel und keine Bankanmeldung geht über die API.
v1.109.0 · 12. Oktober 2026
- Neu: Telefonie und SMS-Absender einrichten (Bereich
telephony, nur ORG_ADMIN).GET /telephonyzeigt Konto, Sprachweg, alle Nummern und die Einstellungen der aktiven;POST /telephony/setuprichtet den Sprachweg ein;POST /telephony/numbersaktiviert eine Nummer (mit Rückfrageactivated: false, wenn dort schon ein anderes System steht, bestätigt mitoverwrite: true);GET/PATCH/DELETE /telephony/numbers/{id}lesen, ändern (streng, Gesprächsnotiz nur mitcallNotesNoticeConfirmed: true) und deaktivieren; Ansage überPOST /telephony/numbers/{id}/greeting/upload,PUTundDELETE /telephony/numbers/{id}/greeting. Twilio:GET /telephony/twilio,GET /telephony/twilio/numbers,PUT /telephony/twilio/sender,POST /telephony/twilio/inbound. Das Twilio-Konto verbindet und trennt nur die Oberfläche (settingsUrl); fremde Adressen an einer Nummer nennt die API nur als Host.
v1.108.0 · 12. Oktober 2026
- Affiliate-Einstellungen der Organisation über die API (Bereich
affiliates): Gutschein-Codes mitGET/POST /affiliate-coupons,GET/PATCH/DELETE /affiliate-coupons/{id}(an- und ausschalten überactive), Attributions-Tracking mitGET /affiliate-tracking(Adresse des Conversion-Webhooks, Zugangsdaten nur maskiert) undDELETE /affiliate-tracking/webhook(abschalten), Klimabeitrag mitGET/PUT /affiliate-climate-contribution(0, 50, 100 oder 150 Basispunkte). Lesen mitaffiliates:read, schreiben mitaffiliates:writeund einer Person, die ORG_ADMIN ist (wie im Reiter). Zugangsdaten des Conversion-Webhooks erzeugt und zeigt die API nicht: Das geht nur in der Oberfläche. Ein schon vergebener Gutschein-Code antwortet409mit dem Grundcoupon-code-taken.
v1.107.0 · 12. Oktober 2026
- Datensicherung und Einwilligungs-Protokoll der Organisation:
GET /backups(Einstellungen und die letzten 20 Läufe),PATCH /backups/settings(Intervall, Umfang, Empfänger),POST /backups/runs(Sicherung anstossen,202mit dem Lauf),GET /backups/runs/{id}undPUT /backups/password(Archiv-Passwort setzen oder mitnullentfernen; es wird nie ausgegeben). DazuGET /consent-log,GET /consent-log/summaryundGET /consent-log/export(CSV), nur lesend. Rechtebackups:read/backups:writeundconsentlog:read, alles nur für eine Person mit ORG_ADMIN, wie im Reiter. Neue Gründe fürprecondition-failed:backup-runningundbackup-recipients-required.
v1.106.0 · 12. Oktober 2026
- Organisation ändern:
PATCH /organization(Rechtorganization:write, Person mit ORG_ADMIN wie in den Einstellungen) für Name, Hauptwährung, Land, Preismodus, Praxis-Zuschnitt, Branche, Eingangsadresse (inboxSlug), Antwort-Alias (replyAlias) und E-Mail-Signatur; alles oder nichts, dieselben Prüfungen wie in der Oberfläche. Ungültiges antwortet422mit Feld und Code, eine vergebene Eingangsadresse oder ein vergebener Antwort-Alias409 conflictmitreason: taken, ein Praxis-Zuschnitt ohne das Modul Praxisbetrieb403 feature-not-available.GET /organizationnennt dazu neuinboxSlug,replyAlias,replyAddress,industryCode,defaultPriceModeundemailSignatureHtml.
v1.105.0 · 12. Oktober 2026
- Postfach der Terminpost:
GET /appointment-mailbox(verbundenes Gmail-Postfach, Zustand, Antwortadresse; jedes Mitglied) undDELETE /appointment-mailbox(trennen, mit dem Recht „Terminplanung verwalten“; die Terminpost geht danach mit der Adresse aus dem Geschäftspapier weiter). Verbunden wird nur in claritos (Zustimmung bei Google).
v1.104.0 · 12. Oktober 2026
- Neue Rechte für die Einstellungen der Organisation (Endpunkte folgen in den nächsten Versionen):
members:write(Mitglieder, Rollen, Einladungen; bisher warmembersnur lesbar),backups:read/backups:write(Datensicherung),consentlog:read(Einwilligungs-Protokoll der Website, nur lesen)telephony:read/telephony:write(Telefonie und SMS-Absender einrichten) undbanking:read/banking:write(Bankverbindungen). Über OAuth bekommt die ersten vier nur, wer in der Organisation ORG_ADMIN ist, wie beiwebhooks:manage;banking:readsteht wie in der Oberfläche jedem Mitglied offen. - LeadConnector-App: drei neue Auslöser für Zahlungen,
checkout_pending(Zahlung eingeleitet, bei SEPA noch kein Geld),checkout_completed(Zahlung eingegangen) undcheckout_failed(gescheitert, zurückgebucht oder Rate ausgefallen), auf den Ereignissenpayments.checkout.*; und die Aktioninvoice-issue(Rechnung festschreiben,invoices:write), deren Antwortdocumentsmit PDF-Status und -Adresse und der Adresse des ZUGFeRD-XML trägt, solange es erzeugt wird mitpending: xml-not-ready. Die Schnittstelle unter/api/v1ändert sich dadurch nicht.
v1.103.0 · 12. Oktober 2026
- Termingruppen, Partnerfreigabe und Kalender:
GET/POST /appointment-groups,GET/PATCH/DELETE /appointment-groups/{id}(mehrere Terminarten auf einer Seite; wie im Reiter auch lesend nur mit dem Recht „Terminplanung verwalten“),GET/PUT /appointment-types/{id}/partner-release(Sichtbarkeit im Partnerprogramm) undGET /appointment-resources/{id}/calendars(die gewählten Google-Kalender einer Ressource, nur lesend; die Kalenderlisten der Google-Konten gibt die API nicht heraus). Damit ist der Terminbereich über API und MCP vollständig einzurichten.
v1.102.0 · 12. Oktober 2026
- Erinnerungspläne einrichten:
GET/POST /appointment-reminder-plans,GET/DELETE /appointment-reminder-plans/{id}(entfernen archiviert),POST /appointment-reminder-plans/{id}/steps,PATCH/DELETE /appointment-reminder-steps/{id},POST /appointment-reminder-steps/{id}/moveundPOST /appointment-reminder-preview(Beispielwerte eingesetzt, unbekannte Variablen genannt). Die Liste nennt die Sprache der Texte und den Katalog der Variablen. Lesen mitappointments:read, einrichten mitappointments:writeund einer Person, die ORG_ADMIN ist (wie im Reiter). Ein Text mit unbekannter Variable antwortet422mit dem Codeunknown_variable.
v1.101.0 · 12. Oktober 2026
- Schliesszeiten und Orte einrichten:
GET/POST /appointment-closures,PATCH/DELETE /appointment-closures/{id}(Feiertag, Brückentag, Betriebsferien, Sonstiges; ganztägig oder mit Zeitfenster;affectedAppointmentszählt bestehende Termine im Zeitraum, die bleiben),PUT /appointment-bridge-day-rule(an allen Brückentagen geschlossen),POST /appointment-closures/{id}/keep-openundDELETE /appointment-bridge-day-rule/kept-open/{date}(einen Brückentag offen halten oder wieder schliessen),GET /appointment-places,POST/PATCH/DELETE /appointment-phones[/{id}],POST/PATCH/DELETE /appointment-venues[/{id}]undPUT /appointment-venues/{id}/groups(Räume und Geräte, die an einer Adresse frei sein müssen). Lesen mitappointments:read, schreiben mitappointments:writeund dem Recht „Terminplanung verwalten“. Eine noch gewählte Nummer oder Adresse antwortet beim Löschen409mitin-use. Neuer Grund fürprecondition-failed:closure-automatic.
v1.100.0 · 12. Oktober 2026
- SendGrid einrichten über die API (Bereich
campaigns):GET /sendgrid(Recht, Verbindung, fehlende Rechte des Schlüssels, Rückmeldungen und je Absender-Domain die DNS-Einträge, DMARC, persönliche Mails, Antworten),POST /sendgrid/events,POST /sendgrid/domains(gibt die zu setzenden DNS-Einträge zurück),POST /sendgrid/domains/{id}/verify,DELETE /sendgrid/domains/{id},PUT /sendgrid/domains/{id}/personal,POST/DELETE /sendgrid/domains/{id}/repliesundPOST /sendgrid/domains/{id}/replies/verify(Antworten über Inbound Parse, mit dem MX-Eintrag inreplies.mxRecord) sowieGET/PUT /sendgrid/my-sender-name(der eigene Name vor dem @, für jedes Mitglied). Den SendGrid-Schlüssel nimmt die API nicht an: Verbunden und getrennt wird nur in der Oberfläche. Alles an der Organisation verlangt ORG_ADMIN; einrichten zusätzlich das Recht „E-Mail-Kampagnen“, Nachsehen und Entfernen gehen auch ohne. Neue Gründe in422 precondition-failed:sendgrid-domain-not-in-account,sendgrid-key-invalid,sendgrid-unreachable,sendgrid-rejected,sendgrid-events-failed,sendgrid-personal-not-released,sendgrid-domain-not-confirmed,sendgrid-domain-not-personal,sendgrid-parse-scopes-missing(mitmissingScopes),replies-not-configured,sendgrid-policy-forbidden,sendgrid-parse-failed,sendgrid-replies-not-set-up.
v1.99.0 · 12. Oktober 2026
- Automationen schreiben (Recht
automations:write, handelnde Person ORG_ADMIN):POST /automations(ausgeschaltet angelegt),PATCH /automations/{id}(fehlende Teile bleiben, neue Fassung),DELETE /automations/{id},POST …/activateundPOST …/deactivatesowiePOST /automation-runs/{id}/resumefür gescheiterte Läufe. Fehler im Ablauf kommen als422 validation-failedmit Ort (body.flow.nodes.‹knoten›.fields.‹feld›) und Code. Neu zum Lesen:GET /automation-catalogmit Auslösern (Filter, Platzhalter), Datumsquellen und den Aktionen samt Feldern.
v1.98.0 · 12. Oktober 2026
- Ressourcen einrichten:
POST /appointment-resourcesundPATCH /appointment-resources/{id}(dieselbe Prüfung wie der Ressourcen-Dialog),GET …/availability,PUT …/schedule(Musterplan im Zyklus von 1 bis 4 Wochen),POST …/absencessowiePUTundDELETE …/absences/{absenceId}(Urlaub, Fortbildung, Krankheit, Sondersprechstunde),GETundPOST …/closure-overridessowieDELETE …/closure-overrides/{overrideId}(an einem geschlossenen Tag doch arbeiten),GET …/working-hours(Vorschau der nächsten Wochen),GETundPUT …/meeting-defaults(Zoom-Nutzer, eigene Nummer) undGET …/zoom-users. Rechte wie in der Oberfläche: wer die Termine verwaltet, an jeder Ressource; die Person an ihrer eigenen (nur Zeitzone, nicht Name, Marke und Aktiv; als Zoom-Nutzer nur den mit der eigenen Adresse); ihre eigene Verfügbarkeit legt jedes Mitglied an. Ein Mensch, der schon Ressource ist, antwortet409mitalready-resource. Neuer Grund fürprecondition-failed:zoom-unavailable.
v1.97.0 · 12. Oktober 2026
- Neu: Automationen lesen (Bereich
automations, Rechtautomations:read):GET /automations,GET /automations/{id}mit Ablauf (flow: Knoten mitkindundnext, Bedingungen, Wartezeiten; eine Aktion heisst wie ihr Endpunkt, etwatasks.create),GET /automations/{id}/runs(letzte 100 Läufe mit Schritten,failedOnly) undGET /automations/{id}/stats(90 Tage, je Knoten erreicht, gescheitert, Ausgänge, wartend). Anlegen und Ändern folgen.
v1.96.0 · 12. Oktober 2026
- Terminarten einrichten:
POST /appointment-typesundPATCH /appointment-types/{id}(dieselbe Prüfung wie der Terminart-Dialog;PATCHändert nur die genannten Felder),GETundPUT /appointment-types/{id}/staffing(Besetzung: Rollen, Bewerber, Verteilung, Anwesenheit, Video-Werkzeug je Person),GETundPOST /appointment-types/{id}/linkssowiePOST /appointment-links/{id}/revoke(Buchungslinks). Lesen mitappointments:read, Schreiben mitappointments:writeund einer Person mit dem Recht „Terminplanung verwalten“. Ein vergebener Kurzname antwortet409mitslug-taken. Neue Gründe fürprecondition-failed:appointment-type-not-public,quota-portal-only.
v1.95.0 · 12. Oktober 2026
- E-Mail-Kampagnen über die API (Bereich
campaigns, Pfad/email-campaigns, weil/campaignsdie Affiliate-Kampagnen sind):GET /email-campaigns/setup(SendGrid verbunden, Rückmeldungen, bestätigte Domains, werbliche Vorlagen, Smart-Listen, Tags, eigene Adressen für die Testmail),GET/POST /email-campaigns,GET/PATCH/DELETE /email-campaigns/{id},POST /email-campaigns/recipient-count,POST /email-campaigns/{id}/check(Prüfung mit Rspamd und Messversand im Hintergrund,202),POST /email-campaigns/{id}/test-email(nur an eigene Adressen der handelnden Person, höchstens zehn je Stunde, sonst429),POST /email-campaigns/{id}/start(sofort oder mitscheduledAt; Gelb nur mitconfirmWarnings) sowie/pause,/resume,/cancel. Jeder Endpunkt, auch zum Lesen, verlangt ORG_ADMIN (403 forbidden, ohne Anleger403 no-acting-user) und das Recht „E-Mail-Kampagnen“ der Organisation (403 feature-not-available). Neue Gründe in422 precondition-failed:campaign-check-missing,campaign-check-outdated,campaign-check-red,campaign-check-warnings,sendgrid-not-connected,sendgrid-events-missing,sendgrid-not-ready,campaign-template-missing,campaign-template-not-marketing,campaign-selection-empty,campaign-smart-list-unknown; ein Wechsel, den der Stand nicht erlaubt, antwortet409mitwrong-status.
v1.94.0 · 12. Oktober 2026
- Webhook-Ziele vollständig über die API (Recht
webhooks:manage):POST /webhook-targets(mit Geheimnis in der Antwort),PATCHundDELETE /webhook-targets/{id},POST …/rotate-secret,GET …/secret,POST …/test(synchron, mit Beispieldaten oder einem Kontakt; mit Kontakt auchcontacts:read),GET …/deliveries/{deliveryId}/body(auchcontacts:read) undPOST …/deliveries/{deliveryId}/retry. - Neu: Eingangs-Hooks über die API (
/inbound-hooks, Rechtwebhooks:manage): auflisten, anlegen (ZustandLEARNING, wahlweise mit verlangtemAuthorization-Kopf), lesen, ändern (Name,recordTypes,mapping,state), löschen, Adresse erneuern, verlangten Kopf lesen, Muster mit Pfadliste (GET …/sample, auchcontacts:read), Zustellungen, Rumpf einer Zustellung (auchcontacts:read) und erneut verarbeiten.
v1.93.0 · 12. Oktober 2026
- Termine schreiben (Recht
appointments:write):POST /appointments(vergeben, Einzeltermin mitcontactId, Gruppentermin mitparticipantsaus Smart-Listen, Tags und Kontakten),POST /appointments/{id}/cancel,/reschedule,/host,/type,/no-show,/participants,DELETE /appointments/{id}/participants/{contactId}undPOST /appointments/{id}/meeting(Video-Link erneuern). Dieselben Prüfungen und dieselbe Terminpost wie im Haus. Jeder dieser Aufrufe verlangt eine Person mit dem Recht „Terminplanung verwalten“ (Eigentümer, ORG_ADMIN oder Einzelrecht): ohne Personno-acting-user, ohne Rechtforbidden. Belegte Zeit antwortet409mitslot-taken. Neue Gründe fürprecondition-failed:contact-without-phone,appointment-not-open,appointment-not-started,not-a-group-appointment,last-participant.
v1.92.0 · 12. Oktober 2026
- Nummernkreise und PDF-Vorlagen im Bereich
templates:GET/POST /number-circles,GET/PATCH /number-circles/{id}(Präfix, 6 bis 12 Stellen, Jahres-Neubeginn, dazuissuedund die nächste Nummer; hat ein Kreis Nummern vergeben, sind Präfix, Stellen und Jahres-Neubeginn fest,409mitformat-locked),GET/POST /pdf-templates,GET/PATCH /pdf-templates/{id}(Name, Nummernkreis, Gültigkeit in Monaten, bis zu vier Unterzeichner-Plätze) undPUT /pdf-templates/{id}/fields(die vollständige Feldliste, geprüft wie in der Oberfläche; der erste Fehler kommt als422 validation-failedmit dem Grund im Code, z. B.bindingUnknownodernumberWithoutCircle). Eine PDF-Vorlage entsteht auf einem PDF, das vorher überdocumentshochgeladen und bestätigt wurde. Schreiben nur, wenn die Person hinter dem Zugang ORG_ADMIN ist. Gelöscht wird weder ein Kreis noch eine Vorlage:active: falselegt still.
v1.91.0 · 12. Oktober 2026
- OAuth: Das Recht
webhooks:managebekommt ein OAuth-Zugang nur noch, wenn sein Nutzer in der gebundenen Organisation ORG_ADMIN ist, wie in der Oberfläche. Geprüft wird bei der Zustimmung und bei jedem Aufruf; verliert der Nutzer die Rolle, fehlt das Recht ab dem nächsten Aufruf (403 insufficient-scope). Die Zustimmungsseite zeigt es für Nicht-Admins gesperrt. API-Schlüssel sind nicht betroffen, sie legt nur ein ORG_ADMIN an. Die Beschreibung der Endpunkte ist unverändert.
v1.90.0 · 12. Oktober 2026
- Termine lesen (Recht
appointments:read):GET /appointments(Liste nach Beginn, Filter nach Zeitraum, Status, Terminart, Ressource und Kontakt),GET /appointments/{id}(in derselben Form wie die Webhooksappointments.appointment.*, dazu Plätze, Teilnehmer und Halter),GET /appointment-typesundGET /appointment-types/{id}(alle Einstellungen samt Art Einzeltermin, Gruppentermin oder Unterricht und Leistungen),GET /appointment-resourcesundGET /appointment-resources/{id},GET /appointment-types/{id}/slots(freie Zeiten wie bei der Vergabe aus dem Haus, höchstens 62 Tage je Abfrage). Termine mit Laboranforderung erscheinen nur mit Freigabe für Klientendaten, sonst fehlen sie und der Einzelabruf antwortet404. Schreiben und Einrichten folgen in den nächsten Versionen.
v1.89.0 · 12. Oktober 2026
- Vorlagen über die API (Bereich
templates):GET/POST /message-templates,GET/PATCH /message-templates/{id}für E-Mail- und SMS-Vorlagen (Sie- und Du-Fassung, EinsatzcontactsoderpartnerPortal,purposetransactionalodermarketing), dazuGET/POST /letter-templates,GET/PATCH /letter-templates/{id}für Brief-Vorlagen (mit Nummernkreis für{{brief.nummer}}). Lesen mittemplates:read, schreiben mittemplates:write, und nur wenn die Person hinter dem Zugang ORG_ADMIN ist (sonst403 forbidden, ein Schlüssel ohne Anleger403 no-acting-user). Es gibt kein Löschen:active: falselegt still. Unbekannte Platzhalter in Vorlagen für Kontakte lehnt das Speichern mit422ab.
v1.88.0 · 12. Oktober 2026
- Video-Räume (
/rooms, Rechterooms:read/rooms:write):GET /roomsundGET /rooms/{id}(mit Gastgeber- und Gast-Link, solange der Raum offen ist),POST /rooms/instant(Sofort-Meeting am Kontakt, Gastgeber ist der Anleger des Schlüssels),POST /rooms/{id}/participant-links(persönlicher Link für den eingeladenen Kontakt bzw. einen Teilnehmer des Termins),POST /rooms/{id}/close(nur Sofort-Meetings; Räume an Terminen schliessen mit der Absage, sonst409mitappointment-room),GET /rooms/{id}/recordings(Videoaufzeichnungen und Gespräche mitdocumentId) sowieGET/PATCH /rooms/settings(Schalter „Zusammenfassung“, ändern nur ORG_ADMIN). Sicht wie bei den Konferenz-Dokumenten (1.85.0): ORG_ADMIN sieht alle Räume, andere nur die, deren Gastgeber sie sind; ein Schlüssel ohne Anleger sieht keine. Neuer Grundroom-not-configuredin422 precondition-failed; ohne das Recht „Live-Raum“ der Organisation403 feature-not-available.
v1.87.0 · 12. Oktober 2026
- Drei neue Bereiche mit Lese- und Schreibrecht:
rooms(Video-Räume),templates(Brief-, E-Mail-, SMS- und PDF-Vorlagen samt Nummernkreisen) undcampaigns(E-Mail-Kampagnen). Die Endpunkte folgen in den nächsten Versionen; bis dahin geben die Rechte noch keinen Zugriff. Vorlagen und Kampagnen haben eigene Rechte, weilemail:writenur das Senden erlaubt, nicht das Einrichten oder den Massenversand. - Zwei neue Fehlerarten, beide
403:no-acting-user, wenn eine Aktion eine handelnde Person verlangt (Rolle, Einzelrecht, Autor) und der Zugang keine hat (API-Schlüssel ohne Anleger), undforbidden, wenn die Person des Zugangs in der Organisation nicht das Recht hat, das die Oberfläche verlangt. Beim Schlüssel ist die Person, wer ihn angelegt hat, beim OAuth-Zugang der angemeldete Nutzer. Bestehende Endpunkte ändern ihre Antworten nicht.
v1.86.0 · 12. Oktober 2026
- Neuer Bereich
appointments(Termine) mit den Rechtenappointments:readundappointments:write. Die Endpunkte folgen in den nächsten Versionen; bis dahin gibt das Recht noch keinen Zugriff. Termine, an denen eine Laboranforderung hängt, gelten wie in den Webhooks als Klientendaten: Sie erscheinen nur, wenn die Organisation Klientendaten für die API freigegeben hat und der Zugang einclients:-Recht trägt.
v1.85.0 · 12. Oktober 2026
- Dokumente: Konferenz-Dokumente (Aufzeichnungen und Zusammenfassungen des Live-Raums) sieht nur, wer in der Organisation ORG_ADMIN ist oder beim Gespräch Gastgeber war. Für einen API-Schlüssel zählt der Nutzer, der ihn angelegt hat; ein Schlüssel ohne Anleger sieht keine. Unter
GET /documentsfehlen diese Dokumente dann,GET /documents/{id}antwortet404. Die Beschreibung der Endpunkte ist unverändert, deshalb steht es hier. Die Ereignissedocuments.*gehen weiter an die Webhooks der Organisation, die nur ein ORG_ADMIN einrichtet.
v1.84.0 · 11. Oktober 2026
- Neues Ereignis
letters.email.received: Eine E-Mail ist über die SendGrid-Antwortadresse der Organisation eingegangen und wurde eingestuft.emailträgtid,conversationId,from,subject,receivedAt,sentiment(positive,neutral,negative,null, wenn die Einstufung scheiterte),contactId(odernull) undcampaignId, wenn die Mail auf eine Kampagne antwortet (sonstnull). Ohne Mailtext. Gemeldet erst nach der Einstufung; Mails über den Resend-Posteingang (Belege, Weiterleitungen) melden es nicht. In den Automationen ist es der Auslöser „E-Mail eingegangen“ mit Filtern nach Stufe und Kampagne.
v1.83.0 · 11. Oktober 2026
- Gesprächsleitfäden (
/call-guides):content.resultslegt Ergebnisse an, benannte Enden mitid,nameund optionalcolor(höchstens 20, Name höchstens 80 Zeichen), undresultan einem Schritt (type: point) oder an einer Antwort verweist auf eines. Es gilt nur an einem Ende; an anderer Stelle bleibt es stehen und wird ignoriert, eine unbekannte Kennung fällt beim Lesen weg. Ein Ergebnis ohne Namen lehnt das Speichern mit422und dem Codeergebnis-ohne-nameab. Bisher gingen Ergebnisse, die im Editor angelegt waren, bei einem Update über die API verloren.
v1.82.0 · 11. Oktober 2026
callguides.run.completedträgt jetztguideRun.resultIdundguideRun.resultName: das benannte Ergebnis des Endes, an dem der Lauf ankam (etwa „Termin vereinbart“). Ergebnisse legt die Organisation im Leitfaden an und ordnet sie einem Punkt ohne Nachfolger oder einer Antwort zu, die ins Ende führt. Kennung und Name stammen aus der Fassung, mit der das Gespräch lief. Ohne Ergebnis an diesem Ende sind beidenull;outcome(der letzte Schritt) bleibt unverändert.
v1.81.0 · 11. Oktober 2026
leads.lead.createdträgt nebenconsent(Element → angehakt) jetztconsentPurposes: den Zweck je Einwilligung wie in den Formularen (1.79.0).INQUIRYist das Pflicht-Häkchen „Kontakt zu meiner Anfrage“ und erlaubt keine Werbung,MARKETINGdas freiwillige Häkchen „Werbung“,nullein eigenes Häkchen oder ein älteres, das Anfrage und Werbung zusammenfasst. Wer aus dem Ereignis eine Werbe-Einwilligung ableitet, nimmt nurMARKETING(odernull) mitconsent=true. Leads ohne Formular (Finder, von Hand) haben ein leeres Objekt.
v1.80.0 · 10. Oktober 2026
kindan SMS (GET /sms,GET /sms/{id}, Ereignissesms.message.*) kennt den neuen WertEINWILLIGUNG: die werbefreie Bitte, eine Einwilligung aus einem Formular per Link zu bestätigen. Sie geht über das Twilio-Konto der Organisation an den Kontakt, mit dem Namen der Organisation als Fussnote.
v1.79.0 · 10. Oktober 2026
- Formulare: Jede Einwilligung trägt jetzt
purpose, in der Formular-Definition (GET /forms/{id}) und in den Einsendungen (GET /forms/{id}/responses).INQUIRYist das Pflicht-Häkchen „Kontakt zu meiner Anfrage“,MARKETINGdas freiwillige Häkchen „Werbung“,nullein eigenes Häkchen oder ein älteres, das Anfrage und Werbung zusammenfasst. Einsendungen von vor dieser Version habennull. Eine Einwilligung in Werbung ist nurMARKETING(oder ein älteres Häkchen);INQUIRYerlaubt keine Werbung.
v1.78.0 · 10. Oktober 2026
- Neues Ereignis
contacts.webhook.received: Ein Eingangs-Hook der Organisation hat einen Datensatz eines anderen Systems angenommen und verarbeitet.hooknennt Kennung und Bezeichnung,companydas Unternehmen (vorhanden oder neu angelegt, sonstnull),contactdie Person, ohne Person das Unternehmen selbst;contactStatusundcompanyStatussindnewoderexisting. Eingangs-Hooks entstehen in den Einstellungen unter Integrationen → Schnittstellen: eine eigene AdressePOST /api/hooks/‹kennung›(ausserhalb von/api/v1, wahlweise mit verlangtemAuthorization: Bearer …), die JSON oder Formulare bis 256 KB sofort mit202annimmt und je Hook in einer Warteschlange verarbeitet (höchstens 60 je Minute; über 600 je Minute antwortet sie429). Im Lernmodus wird die nächste Zustellung nur als Muster aufgefangen, an dem die Felder zugeordnet werden.
v1.77.0 · 10. Oktober 2026
- Übergaben an andere Organisationen: neuer Bereich
handoversmit den Rechtenhandovers:readundhandovers:write(vorhandene Schlüssel haben sie nicht).GET /handover-connectionslistet die aktiven Verbindungen, über die diese Organisation abgeben darf (id,name,recipientName).POST /handoversmitconnectionIdundcontactId(dazucontacts:read) kopiert den Kontakt samt Unternehmen in die empfangende Organisation und antwortet201mithandoverId, nie mit neu oder zusammengeführt. Fehler:404(connection-unknown,not-your-connection,contact-unknown),422 precondition-failed(connection-revoked,connection-not-active),500(copy-failed). Bei der Empfängerin löst die Übergabecontacts.handover.receivedaus (seit 1.75.0); in den Automationen gibt es dafür den Filter nach Verbindung und die Aktion „An Organisation übergeben“.
v1.76.0 · 10. Oktober 2026
- Webhook-Ziele: benannte Adressen anderer Systeme, an die ein Kontakt samt Unternehmen geschickt wird, etwa von der neuen Aktion „Webhook senden“ in den Automationen. Anders als
/webhooksabonnieren Ziele keine Ereignisse. Neu:GET /webhook-targets,GET /webhook-targets/{id},GET /webhook-targets/{id}/deliveries(Protokoll, 30 Tage, mit Anfang der Antwort) undPOST /webhook-targets/{id}/sendmitcontactId(202, Rechtwebhooks:manageundcontacts:read;409 conflictmitreason: target-inactive, wenn das Ziel aus ist). Gesendet wird im Umschlag der Ereignisse mittype: contacts.contact.sentunddata={ contact, company, automation, test }, signiert nach Standard Webhooks mit dem Geheimnis des Ziels, wiederholt nach 1 min, 5 min, 30 min, 2 h und 12 h, nach fünf toten Sendungen in Folge abgeschaltet. Anlegen, Ändern, Geheimnis und Test in den Einstellungen unter Integrationen → Schnittstellen.
v1.75.0 · 10. Oktober 2026
- Neues Ereignis
contacts.handover.received: Eine andere Organisation hat dieser über eine Übergabe-Verbindung einen Kontakt übergeben.contactist der Kontakt in dieser Organisation (neu angelegt oder mit einem vorhandenen zusammengeführt),companysein Unternehmen odernull,handovernennt Übergabe, Verbindung (connectionId,connectionName) undoutcome(createdodermerged). Abonnierbar wie jedes Ereignis und Auslöser in den Automationen. Die Übergabe-Verbindungen selbst folgen in einer späteren Version.
v1.74.0 · 9. Oktober 2026
- Schriftverkehr:
POST /outbound-emailsundPOST /smsnehmen wahlweisevorlageId, die Kennung einer Vorlage aus dem Vorrat (Einsatz Kontakte). Dann kommen Betreff, Text, Du-Fassung und Sendeart aus der Vorlage, gelesen beim Versand, mit deren Platzhaltern (etwa{{person.firstName}},{{anrede}}); wer die Vorlage ändert, ändert den nächsten Versand. EntwedervorlageIdoder freier Text: Bei der E-Mail sindsubjectundbodyHtmlnur noch ohnevorlageIdPflicht, bei der SMSbodyundart; mitvorlageIddürfen sie nicht mitkommen, bei der SMS ist danncontactIdPflicht. Eine E-Mail aus einer Vorlage geht wie aus dem Gespräch am Kontakt (kind: gespraech, Fuss mit Gesprächskennung, bei werblichen Vorlagen nur mit E-Mail-Einwilligung und mit Widerrufslink). Neue Gründe in422 precondition-failed:message-template-not-found,message-template-archived(behebbar),message-template-without-sms(behebbar, nur SMS),email-ohne-einwilligung.
v1.73.0 · 8. Oktober 2026
- Formulare: Eine Einwilligung für E-Mail oder Telefon gilt nur noch als gefragt, wenn ein Feld ihres Kanals ausgefüllt ist. Ist es leer, steht sie in
consentseiner Einsendung (GET /forms/{id}/responses,forms.response.submitted) und inconsentvonleads.lead.creatednicht mehr, auch nicht als abgelehnt; ein mitgeschicktestrueinPOST /forms/{id}/responseswird dann nicht gespeichert. Bisher stand sie dort immer, mitaccepted: falseoder sogartruefür eine Adresse, die es nicht gab. Freie Einwilligungen (KanalCUSTOM) unverändert.
v1.72.0 · 8. Oktober 2026
- Kontakte: neues Feld
dateOfBirth(„YYYY-MM-DD“, nur PERSON, zwischen 1900 und heute) in allen Antworten und Ereignissen der Kontakte, setzbar überPOST /contactsundPATCH /contacts/{id}(nulllöscht). Dasselbe Format wieclients.dateOfBirth, aber am Kontakt; ein ungültiges Datum oder ein Datum an einer Firma ergibt422 validation-failed(body.dateOfBirth).
v1.71.0 · 8. Oktober 2026
- Neue Ereignisse für Termine:
appointments.appointment.booked(bestätigt, bei Zahlungspflicht nach der Zahlung),appointments.appointment.rescheduled(mitpreviousStartsAt,previousEndsAtundby:customeroderprovider),appointments.appointment.cancelled(mitbyundreason) undappointments.appointment.noShow(vom Team markiert, mitmarkedByUserId). Die Nutzlast trägt den Termin unterappointment, den Kontakt unterappointment.contactId; Automationen können diese Ereignisse als Auslöser nutzen. Gemeldet werden nur bestätigte Termine. Ein Termin mit Laboranforderung geht nur an Endpunkte mit Klientendaten-Freigabe.
v1.70.0 · 8. Oktober 2026
- Neues Ereignis
calls.call.ended: ein Telefonat ist beendet, genau einmal je Telefonat.callträgt Richtung (inbound,outbound), Ergebnis (answered,missed,voicemailfür unseren Anrufbeantworter,failed), Kontakt (contactId,nullbei unbekannter Nummer), Gesprächspartner, Nummern, Zeiten unddurationSeconds. Gesprächsnotiz, Aufnahme und Abschrift sind nie enthalten. - Neues Ereignis
callguides.run.completed: ein Gesprächsleitfaden ist im Gespräch abgeschlossen (Hauptweg am Ende, kein Pflichtschritt offen), genau einmal je Lauf; spätere Änderungen lösen es nicht erneut aus.guideRunträgt Leitfaden (guideId), Kontakt (contactId, der Gesprächspartner oder sonst der Kontakt des Telefonats),outcome(Kennung des letzten Schritts),answers(Frage → Antwort als Kennungen), benutzte Einwände und den Weg. Notizen sind nie enthalten.
v1.69.0 · 8. Oktober 2026
- Kontakte, neue Endpunkte für einzelne Änderungen (Aktionen der Automationen):
POST /contacts/{id}/tags(tagIdaus dem Vorrat odertagals Text) undDELETE /contacts/{id}/tags/{tag}(Kennung oder Text) fügen ein Tag hinzu oder entfernen es, ohne die übrige Liste zu senden; ein vorhandenes bzw. fehlendes Tag ändert nichts und löst kein zweites Ereignis aus.POST /contacts/{id}/noteslegt eine Notiz an (Klartext, gespeichert als escaptes HTML).PUT /contacts/{id}/custom-fields/{slug}setzt ein eigenes Feld (value: Text, Liste der Optionsschlüssel odernull; Felder nur in der Akte und Einwilligungen nicht).PUT /contacts/{id}/ownersetzt den Zuständigen (userIdeines Mitglieds odernull). Du/Sie und Standardfelder weiter überPATCH /contacts/{id}.
v1.68.0 · 8. Oktober 2026
- Neues Ereignis
funnels.funnelLead.created: ein Lead aus dem Formular eines Funnels oder einer Website, mit der Einsendung (lead.id), dem Auftritt (lead.funnelId,lead.funnelName,lead.funnelKind), der Seite des Formulars (lead.stepId,lead.stepName,lead.stepPath), dem Formular und dem Kontakt (lead.contactId). Nur Kennungen und Namen, keine Angaben der Person. Es kommt zusätzlich zuleads.lead.createdund steht in Automationen als Auslöser „Lead aus einem Funnel oder einer Website“ bereit. leads.lead.createdaus einem Funnel trägtcontactIdjetzt auch dann, wenn die Einsendung einen Interessenten angelegt hat (der Kontakt des Interessenten); bisher stand dortnull.
v1.67.0 · 8. Oktober 2026
- Verträge aus Vorlage (
POST /contracts): neues Feldsend(Standardfalse, wie bisher nur Entwurf). Mittruewird der Vertrag versendet, sobald sein PDF gerendert ist; die Antwort zeigt noch den Entwurf, den Versand meldet das Ereignisesign.request.sent. Dazu optionalreminderPolicyundlocalewie anPOST /signature-requests/{id}/send. Scheitert das Rendern oder dauert es länger als zehn Minuten, bleibt der Entwurf liegen.
v1.66.0 · 8. Oktober 2026
- Formular-Antworten (
GET /forms/{id}/responses,GET /forms/responses/{id}, Ereignisforms.response.submitted): neues FeldcontactId, der Kontakt, an dem die Einsendung hängt;null, solange es keinen gibt, und bei Bögen der Klientenakte immer. Damit stehen in Automationen mit dem Auslöser „Formular abgeschickt“ die Aktionen an den Kontakt zur Verfügung. - Formular-Antworten: neuer Wert
bookingfürsource, eingereicht über die Buchungsstrecke eines Termins. Bisher erschienen diese Antworten alsapi.
v1.65.0 · 5. Oktober 2026
- Gesprächsleitfäden: neuer Aktions-Typ
consent({ type: "consent", channel: "EMAIL" }), die Einwilligung zur E-Mail am Telefon festhalten; der Wortlaut kommt zur Laufzeit aus den Kontakten.channelist heute nurEMAIL, jeder andere Wert ergibt422 validation-failed.
v1.64.0 · 5. Oktober 2026
- Gesprächsleitfäden (
/call-guides) mit Aktionen und Eingaben, alles freiwillig: ein Punkt kann eineactionsein (email,sms,callback,handover,checkout,appointment,form) oder mitfieldeine Eingabe in ein Feld des Gesprächspartners schreiben; eine Frage schreibt mitfielddie gewählte Antwort, bei gesetztemvaluean der Antwort diesen Wert (etwa den Schlüssel einer Auswahl);mandatory: truemacht einen Schritt zur Pflicht;actionsstellt Aktionen an den Rand des Gesprächs. Neue Prüfgründe anbody.content:aktion-unvollstaendig(Vorlage oder Link fehlt, Rand-Aktion ohne Name) undaction-and-field(ein Punkt mit beidem). Wer einen Leitfaden liest und zurückschreibt, behält diese Teile.
v1.63.1 · 5. Oktober 2026
- Präzisierung zu 1.63.0 (noch nicht ausgeliefert):
contactFieldsan Gesprächsleitfäden nimmt nur noch die Schlüssel, die das Mini-Fenster am Rand des Gesprächs zeigen kann:title,website,addressStreet,addressPostalCode,addressCityodercf:<slug>(Kleinbuchstaben, Ziffern,_). Ein anderer Schlüssel ergibt422 validation-failed, statt still wegzufallen.
v1.63.0 · 5. Oktober 2026
- Gesprächsleitfäden (
/call-guides) können mehr, alles freiwillig: je Schritthint(Hinweis nur für die Person am Telefon) undcards(Hinweiskarten mittitle,text,color); je Leitfadencards(immer sichtbar),objections(Einwände mitnameundstart, dem ersten Schritt ihres eigenen Wegs) undcontactFields(Zusatzfelder für das Mini-Fenster am Rand des Gesprächs). Platzhalter wirken auch in Hinweisen und Karten. Neue Prüfgründe anbody.content:karte-leerundeinwand-unvollstaendig.
v1.62.0 · 5. Oktober 2026
- Neu: Gesprächsleitfäden der Telefonie (Checklisten mit Verzweigung fürs Telefonat).
GET /call-guides,GET /call-guides/{id},POST /call-guidesundPATCH /call-guides/{id}, neue Rechtecallguides:readundcallguides:write; im API-MCP als Werkzeugecallguides_list,callguides_get,callguides_createundcallguides_update. Ein Leitfaden hat einenstartundnodes:pointzum Abhaken oderquestionmitanswers;nextführt weiter (fehlt: nächster Knoten der Liste,null: Ende, Kennung: dorthin). Gespeichert wird nur ein fehlerfreier Inhalt, sonst422mit den Gründen anbody.content. Jede Änderung an Name, Beschreibung oder Inhalt ist eine neue Fassung (version);activeschaltet ohne neue Fassung.
v1.61.0 · 4. Oktober 2026
- Pflichtfeld
artanPOST /sms(auch MCPletters_sendSmsund die LeadConnector-Aktionsms-send):notwendigoderwerblich, ohne Vorgabe; ein Aufruf ohneartantwortet422 validation-failedanbody.art. Das ist strenger als bisher, trifft aber niemanden: In Production gab es keinen einzigen Aufruf vonPOST /sms. Die Sendeart bestimmt den Fuss der SMS (notwendig: Name der Organisation; werblich: Name und „Keine SMS mehr? STOP antworten“), der anbodyangehängt wird und in der Segmentzahl mitzählt, und eine werbliche SMS geht nur an einen Kontakt (contactId) mit SMS-Einwilligung: ohne Kontakt422 precondition-failedmitreason=sms-werblich-ohne-kontakt, ohne Einwilligung für die Nummerreason=sms-ohne-einwilligung(beidefixable: false).
v1.60.2 · 4. Oktober 2026
- Behoben:
POST /documentsmitcontactIdverknüpft das Dokument mit diesem Kontakt, und die Verknüpfung bleibt nach der Auswertung des Dokuments erhalten. Bisher konnte die automatische Zuordnung sie überschreiben, mit dem Treffer einer Namenssuche oder mit nichts, sodassGET /documents/{id}einen anderen oder keinen Kontakt zeigte. Die automatische Zuordnung füllt jetzt nur noch, was leer ist; dasselbe gilt fürPATCH /documents/{id}mitcontactIdund eine erneute Auswertung.
v1.60.1 · 4. Oktober 2026
- Präzisierung zu 1.60.0, die noch nicht ausgeliefert war: Die SMS an ein Mitglied (
channel: sms) fällt auf die Standard-Nummer seines Profils zurück, wenn es in dieser Organisation keine Nummer für die SMS-Bestätigung eingetragen hat, wie beim Signieren und bei Termin-Erinnerungen.member-without-phonekommt nur noch, wenn beide fehlen.
v1.60.0 · 4. Oktober 2026
POST /organization/members/{userId}/notificationskann auch eine SMS schicken:channel: smsgeht an die Handynummer, die das Mitglied in dieser Organisation für die SMS-Bestätigung eingetragen hat, sonst an die Standard-Nummer seines Profils (dieselbe Reihenfolge wie beim Signieren und bei Termin-Erinnerungen), über das Twilio-Konto der Organisation; Text sindtitleundbody. Fehlen beide:422 precondition-failed,reason=member-without-phone,fixable: true; ist sie ungültig:member-phone-invalid. Die Gründe des SMS-Versands (twilio-*) gelten wie beiPOST /sms(1.58.0), Netzfehler500. Die SMS erscheint inGET /smsmitkind: API.
v1.59.0 · 4. Oktober 2026
kindan SMS (GET /sms,GET /sms/{id}, Ereignissesms.message.*) kennt den neuen WertGESPRAECH: eine SMS, die ein Mitarbeiter im Gespräch eines Kontakts von Hand geschrieben hat. Werkindauswertet, sollte unbekannte Werte zulassen.
v1.58.0 · 4. Oktober 2026
POST /smssendet nur noch über das eigene Twilio-Konto der Organisation (Organisation → Integrationen); das gilt auch für Automationen und die LeadConnector-Aktionsms-send. Ohne verbundenes Konto, ohne Absendernummer oder mit ungültigem Zugang antwortet der Aufruf422 precondition-failedmitreason=twilio-nicht-verbunden,twilio-keine-nummerbzw.twilio-zugang-ungueltigundfixable: true; es entsteht dabei keine SMS mehr (bisher eine Zeile mitFAILEDund403 feature-not-available). Hat der Empfänger STOP gesendet:422 precondition-failed,reason=twilio-empfaenger-gesperrt,fixable: false(oft erst im Rückruf, dannFAILEDmiterrorCodean der SMS). Ungültige Nummer laut Twilio:422 validation-failedanbody.to. Andere Ablehnung:409 conflict,reason=twilio-abgelehnt. Netzfehler:500, wiederholbar.- Das SMS-Kontingent von 300 je Organisation und Monat entfällt, weil jede Organisation ihre SMS seit dieser Version selbst bezahlt.
429 sms-limit-reachedkommt nicht mehr vor; der Code bleibt bis v2 im Katalog.
v1.57.0 · 4. Oktober 2026
POST /organization/members/{userId}/notificationskann auch E-Mails schicken:channel: emailgeht an die Adresse des Mitglieds, mittitleals Betreff,bodyals Text undlinkals Adresse in der Anwendung. Scheitert der Versand, antwortet der Aufruf500und darf wiederholt werden. Die Antwort trägt den verwendeten Kanal.- Zu den Dokumenten der Klientenakte gehören jetzt auch die Anhänge der Akte-Post (Portal-Nachrichten im Bereich Akte). Für sie gelten dieselben Regeln wie für Laborblätter und Klientenverträge (1.54.0): ohne Klientendaten-Freigabe und
clients:-Recht fehlen sie inGET /documents, ein Abruf über die Kennung (auch…/download-urlundPATCH) antwortet 404, unddocuments.document.*-Ereignisse zu ihnen gehen nur an Endpunkte mitclientsData: true.
v1.56.0 · 4. Oktober 2026
- Neu:
POST /organization/members/{userId}/notificationsschickt einem Mitglied der Organisation eine Nachricht in die Glocke (mit Browser-Push, falls eingeschaltet):title, optionalbodyundlink(ein Pfad in der Anwendung). Neues Rechtmembers:notify; Mitglieder bleiben sonst nur lesbar. Ein Nutzer, der nicht Mitglied ist, ergibt 404. Kanal ist vorerst nurchannel: notification; E-Mail und SMS kommen als weitere Werte dazu.
v1.55.0 · 4. Oktober 2026
POST /outbound-emailsnimmt eine Du-Fassung an:subjectDuundbodyHtmlDu, beide freiwillig und nur zusammen wirksam. Dann wählt claritos je Empfänger nach der Anrede-Regel (Sie-Pflicht für Briefe, persönliches Du bei OAuth, Einstellung am Kontakt, sonst Standard der Organisation), Platzhalter wie{{ansprechpartner.anrede}}folgen derselben Wahl. Fehlt eine der beiden, geht die Mail ganz in der Sie-Fassung hinaus, wie bisher. Die Wahl je Empfänger ist vorbereitet und wird für alle Organisationen zugleich eingeschaltet; bis dahin geht jede Mail in der Sie-Fassung hinaus, die Du-Fassung kann aber schon mitgeschickt werden.- Die Beschreibung nennt jetzt alle Fehlerantworten, die der Rahmen geben kann:
409bei schreibenden Aufrufen (Konflikt, noch laufender Aufruf mit demselbenIdempotency-Key),413bei Aufrufen mit Rumpf (über 1 MB) und500überall. Das Verhalten ist unverändert; bisher fehlten diese Codes nur in der Beschreibung.
v1.54.0 · 3. Oktober 2026
- Webhooks mit Klientendaten gehen nur noch an freigegebene Endpunkte. Neues Feld
clientsDataanGET/POST/PATCH /webhooks: Nur ein Endpunkt mitclientsData: truebekommt Ereignisse mit Klientendaten, alsoclients.record.created,clients.record.updated,clients.message.receivedund dieesign.request.*-Ereignisse eines Vertrags mit einem Klienten, und nur, solange die Organisation Klientendaten für die API freigegeben hat. Setzen lässt sichclientsData: truenur mitclients:readoderclients:write(sonst403 insufficient-scope) und nur bei Freigabe (sonst403 clients-data-not-enabled). Geprüft wird bei jedem Zustellversuch; wird die Freigabe zurückgenommen, endet eine wartende Zustellung mitFAILEDundlastError=clients-data-not-allowed. Ein Replay lässt solche Ereignisse für einen nicht freigegebenen Endpunkt aus, undGET /webhooks/events/{type}/recentzeigt sie nur einem Schlüssel mitclients:-Recht. Bisher gingenclients.*-Ereignisse an jeden Endpunkt der Organisation. - Dokumente der Klientenakte (Laborblätter, Verträge mit Klienten) liefert
/documentsnur noch, wenn die Organisation Klientendaten für die API freigegeben hat und der Schlüssel einclients:-Recht trägt; sonst fehlen sie inGET /documents, und ein Abruf über die Kennung (auch…/download-urlundPATCH) antwortet 404. Bei einem Vertrag gilt dieselbe Ausnahme wie in 1.53.0: Ersteller oder Absender ist der Benutzer hinter dem Schlüssel. - Die Ereignisse
documents.document.ready,documents.document.analyzedunddocuments.document.updatedzu Dokumenten der Klientenakte (Laborblätter, Dokumente eines Vertrags mit einem Klienten) gelten als Klientendaten: Sie gehen nur an Endpunkte mitclientsData: trueund nur bei Klientendaten-Freigabe der Organisation. Anders als beim Abruf gibt es hier keine Ausnahme für Ersteller oder Absender, weil ein Webhook keinem Benutzer gehört.
v1.53.0 · 3. Oktober 2026
- Verträge mit Klienten nur mit Klientendaten-Freigabe: Ist an einem Vertrag oder einer Signatur-Anfrage ein Kontakt mit Klientenakte beteiligt (oder sein Vertreter), liefern
GET /contracts,GET /signature-requests, die Einzelabrufe,…/events,…/pdf,…/sendund…/cancelihn nur, wenn die Organisation Klientendaten für die API freigegeben hat und der Schlüssel einclients:-Recht trägt; sonst fehlt er in Listen, und ein Abruf über die Kennung antwortet 404. Ausnahme: Verträge, die der Benutzer hinter dem Schlüssel angelegt hat oder deren Absender er ist. Listen bleiben voll undhasMorestimmt.
v1.52.0 · 3. Oktober 2026
- Aktenfelder in Vertragsvorlagen: Führt die Organisation die Praxis, kennen Vorlagen zusätzlich Felder der Klientenakte als
<partei>.akte.<feld>(GeburtsdatumdateOfBirth, AktennummerrecordNumber, BetreuungsbeginncareStartedAtund -endecareEndedAt, eigene Felder an der Akte und Felder „nur Praxis“ als<partei>.akte.custom.<slug>).variablesnennt sie.POST /contractsfüllt sie nur, wenn die Organisation Klientendaten für die API freigegeben hat und der Schlüssel einclients:-Recht trägt; sonst steht dort•••, und die Akte wird nicht gelesen.
v1.51.0 · 3. Oktober 2026
- Vertragsvorlagen kennen mehr Variablen: Je Unternehmen, Ansprechpartner und Person stehen alle Felder des Kontakts bereit (etwa
company.1.email,company.1.legalFormName,company.1.contact.1.firstName,person.1.customerNumber) und die eigenen Felder der Organisation als<partei>.custom.<slug>(etwacompany.1.contact.1.custom.jahrgang).variablesinGET /contract-templatesnennt sie, undwarningsmeldet sie nicht mehr alsunknown-variable.POST /contractsfüllt sie aus den Kontakten. Neu ist auchcountryName(Land ausgeschrieben, in der Sprache der Vorlage) nebencountry(Ländercode wieDE, unverändert). Bestehende Variablen bleiben alle.
v1.50.1 · 2. Oktober 2026
POST /contract-templates/{id}/archiveantwortet mit200statt201: Archivieren legt nichts an. So antworten auch die übrigen Aktionen, die nichts anlegen, etwa an Angeboten und Dokumenten.
v1.50.0 · 2. Oktober 2026
- Vertragsvorlagen lassen sich anlegen, ändern und archivieren:
POST /contract-templates,PATCH /contract-templates/{id}undPOST /contract-templates/{id}/archive, Rechtcontracts:write, mit denselben Feldern und derselben Prüfung wie der Vorlagen-Editor.bodyHtmlwird beim Speichern bereinigt: Es bleibt die Auszeichnung des Editors, Skripte, Ereignis-Attribute, Links ausserhttp,https,mailtoundtelsowie Bilder ausserhalb der eigenen Ablage fallen weg. Die Antwort trägtwarningsmit dem, was wegfiel, und mit Platzhaltern, die weder der Beteiligten-Plan noch die festen Variablen kennen (unknown-variable). Ein ungültiger Beteiligten-Plan ergibt422, das Ändern einer archivierten Vorlage409(archived), eine nicht geschäftliche Organisationfeature-not-available. Neu beim Lesen jeder Vorlage:anrede(AUTO,SIE,DU) undisFeeAgreement;formalbleibt.
v1.49.0 · 2. Oktober 2026
- Ein Kontakt vom Typ
PERSONmit USt-IdNr. wird abgelehnt (422 validation-failed, Pfadbody.vatId, Codeinvalid_combination): Wer eine USt-IdNr. hat, ist ein Unternehmen. Das gilt fürPOST /contactsund fürPATCH /contacts/{id}, wenn die Änderung einer Person eine USt-IdNr. gibt. Lege stattdessen ein Unternehmen (type: COMPANY, Rechtsform Einzelunternehmen) mit der USt-IdNr. an und die Person mitworksAtIdals Ansprechpartner daran. Änderungen an Bestandskontakten, die noch als Person mit USt-IdNr. gespeichert sind, bleiben möglich, solange sie die USt-IdNr. nicht setzen.
v1.48.0 · 1. Oktober 2026
- Mahnungen (
GET /dunning/reminders,GET /dunning/reminders/{id}) können den neuen StatusSUPERSEDEDhaben: Sie sind durch eine spätere Mahnung derselben Forderung ersetzt und nehmen kein Geld mehr an. Das geschieht, sobald die nächste Stufe festgeschrieben wird; bisher blieb die frühere aufSENT. Ausserdem lassen sich Mahnungen, die vor claritos ausserhalb verschickt wurden, nachträglich als Glied der Kette erfassen. Sie erscheinen mitstatus: SENT,number: nullundfeeCents/interestCents0. DerportalUrleiner ersetzten oder erfassten Mahnung führt zur gültigen Mahnung oder zur Rechnung. Wer den Status auswertet, sollteSUPERSEDEDwie eine erledigte Stufe behandeln, nicht als offene Zahlungsaufforderung.
v1.47.0 · 27. September 2026
- Dokumente haben das neue Feld
accessmitpublicoderprotected(GET /documents,GET /documents/{id},PATCH /documents/{id}sowie die Webhooksdocuments.document.ready,.analyzedund.updated). Geschützte Dokumente liegen nicht öffentlich: Bei ihnen sindurlundpreviewUrlimmernull, auch wenn das Dokument fertig ist. Die Datei holt man über den signierten Link ausGET /documents/{id}/download-url. Heute betrifft das nur Zoom-Aufzeichnungen, die neu dazukommen.urlist ab dieser Version als veraltet markiert: Es wird später für alle Dokumentenull, undGET /documents/{id}/download-urlist dann der einzige Weg zur Datei. Werurlspeichert, sollte jetzt aufdownload-urlumstellen.
v1.46.0 · 26. September 2026
addressForman Formularen (GET /forms,GET /forms/{id}) kann jetzt auchAUTOliefern, nebenDUundSIE.AUTOheisst: Das Formular hat keine feste Anrede, es spricht so an, wie die Organisation oder der Kontakt es festlegt. Welche Anrede eine Person tatsächlich sieht, entscheidet claritos beim Anzeigen. Neue Formulare stehen standardmässig aufAUTO, und bestehende Formulare aufDUwurden aufAUTOumgestellt, ausgenommen die Anamnese-Vorlagen, deren Fragen selbst duzen. Wer bisher alles ausserSIEals Du gelesen hat, sollteAUTOnicht als Du behandeln.
v1.45.0 · 26. September 2026
- Geändertes Verhalten bei
POST /signature-requestsmitsend: trueund beiPOST /signature-requests/{id}/send: Die Einladungen gehen jetzt immer hinaus. Ist die Gmail-Verbindung des Absenders abgelaufen, gehen sie über die claritos-Adresse, Antworten erreichen weiter den Absender. Bisher blieben sie in diesem Fall liegen, undsenderInvalidwartrue. Deshalb istsenderInvalidseit 1.45.0 immerfalse, als veraltet markiert und entfällt in v2. Wer darauf etwa mit „Postfach neu verbinden“ reagiert hat, bekommt dieses Signal nicht mehr; die Verbindung wird in claritos als ungültig markiert, und ihr Inhaber wird dort zum Neuverbinden aufgefordert.
v1.44.0 · 26. September 2026
- Kontakte tragen das neue Feld
anrede:STANDARD(wie in der Organisation eingestellt),DUoderSIE. Lesbar an allen Kontakt-Endpunkten und in den Webhookscontacts.contact.createdundcontacts.contact.updated, schreibbar beim Anlegen und Ändern. Es wirkt nur bei Personen: Bei Firmen zählt der Ansprechpartner, geliefert wird dort immerSTANDARD, undDUoderSIEan einer Firma wird mit 422 (validation-failed, Pfadbody.anrede) abgelehnt.
v1.43.0 · 25. September 2026
- Neues Feld
paymentProvideran Rechnungen, Angeboten und Aufträgen sowie an deren Abschnitten:MOLLIE, wenn online über die Zahlungs-Schicht gezahlt wird, sonstnull. Lesbar überall, schreibbar an Rechnung und Angebot (Kopf und Abschnitte). Es schliesststripeEnabledaus (ein Online-Anbieter); wer von Stripe auf Mollie wechselt, setzt im selben AufrufstripeEnabled: false. Setzen lässt es sich nur, wenn die Organisation Mollie verbunden hat, sonstvalidation-failed. Beim Schreiben von Abschnitten gilt: ohne Angabe kein Anbieter. Auch die Ereignisseinvoices.invoice.*tragen das Feld.
v1.42.0 · 25. September 2026
- Neues Ereignis
letters.certificate.expiredfür Dokumente aus PDF-Vorlagen mit Gültigkeitsende (etwa ein Zertifikat, das drei Jahre gilt). Es kommt einmal, am Tag nach dem letzten Gültigkeitstag; ist ein Tages-Lauf ausgefallen, wird bis zu drei Tage nachgemeldet. Es trägtcertificate(Kennung, Vorlage, Nummer, Kontakt,validUntil,signed, Prüfcode) undcontact. Widerrufene Dokumente und solche mit offener Unterschrift melden nichts. Eine Erinnerung vor dem Ablauf ist kein Ereignis, sondern ein Datums-Auslöser der Automationen.
v1.41.0 · 24. September 2026
POST /letters/{id}/sendverweigert den Versand jetzt mit409 conflictundreason=certificate-attachment-invalid, wenn eine Anlage ein ausgestelltes Dokument (Zertifikat aus einer PDF-Vorlage) in einer Fassung ist, die nicht gilt: storniert, noch nicht unterschrieben oder durch die unterschriebene Fassung abgelöst. Bisher ging eine solche Anlage hinaus. Dieselbe Prüfung gilt für Briefe aus der Aktion „Brief aus Vorlage“.
v1.40.0 · 24. September 2026
- Neue Endpunkte für Automationen und Integrationen.
POST /letters/from-templatelegt einen Brief aus einer Brief-Vorlage für einen Kontakt an und stellt ihn zu, sobald sein PDF fertig ist (channel:EMAIL,POSTALoderBOTH; Antwort 202 mit dem Brief alsDRAFT).POST /outbound-emailssendet eine freie E-Mail an einen Kontakt; Betreff und Text dürfen dieselben Platzhalter tragen wie Brief-Vorlagen, der Beleg steht danach unterGET /outbound-emailsmitkind=message. Fehlt am Kontakt die nötige Angabe, antworten beide mitprecondition-failedund einemreason, etwacontact-without-email,contact-without-address,postal-not-connected,template-archivedodersender-invalid. Auf einen anderen Zustellweg wird nicht ausgewichen. - Aus einer Automation aufgerufen, erkennen beide Endpunkte ein Fortsetzen desselben Laufs: Derselbe Schritt findet denselben Brief bzw. dieselbe E-Mail wieder, statt einen zweiten anzulegen. Scheitert die Zustellung eines Briefs erst nach der Annahme (202), bekommt der handelnde Nutzer eine Benachrichtigung; eine Rückmeldung an den Aufrufer gibt es dafür noch nicht.
v1.39.0 · 24. September 2026
- Neuer Fehler-Code
precondition-failed(422): Eine Voraussetzung am Objekt fehlt, etwa eine E-Mail-Adresse am Kontakt. Die Antwort trägtreason(stabiler Code, z.B.contact-without-email) undfixable(ob sich der Fehler durch eine Änderung der Daten beheben lässt). Wer Anfragen wiederholt, nachdem er die Daten ergänzt hat, braucht einen neuenIdempotency-Key: Die Ablage merkt sich auch diese Fehlerantwort.
v1.38.0 · 24. September 2026
- Neue Ereignisse
contacts.tag.addedundcontacts.tag.removed: je Tag, der einem Kontakt gesetzt oder entzogen wird, ein Ereignis mitcontactIdundtagin derselben Form wietagDetails(Kennung, Text, Bezeichnung, Quelle, Gruppe). Gemeldet wird erst, wenn die Änderung gespeichert ist. Eine andere Schreibweise desselben Tags ist keine Änderung. Umbenennen, Zusammenführen und Löschen in der Tag-Verwaltung lösen keine Ereignisse aus, ebenso wenig das Zusammenführen von Kontakten.
v1.37.0 · 24. September 2026
kindan SMS (GET /sms,GET /sms/{id}, Ereignissesms.message.*) kennt den neuen WertAPPOINTMENT_REMINDERfür Terminerinnerungen. Bisher trugen TerminerinnerungenAPI, obwohl sie nicht über die API gesendet wurden; ältere Erinnerungen behaltenAPI. Terminerinnerungen zählen nicht in das SMS-Kontingent (sms-limit-reached).- Nachgetragen: Zwei Werte kamen ohne eigenen Eintrag in den Vertrag. (1) Seit dem 13.09. kennt der Typ eines Formularfelds (
GET /forms/{id}) den WertUPLOAD; die Antwort auf ein solches Feld ist die Kennung eines Dokuments. (2) Seit dem 24.09. kennttaxCategoryan Artikeln und an den Positionen von Angeboten, Aufträgen und Rechnungen den WertOUTSIDE_SCOPE(im Inland nicht steuerbar, § 3a UStG). Wer diese Felder vollständig auswertet, sollte beide Werte kennen.
v1.36.0 · 24. September 2026
- Signatur-Anfragen kennen die Herkunft
PDF_TEMPLATE: ein Dokument aus einer PDF-Vorlage, etwa ein Zertifikat mit laufender Nummer. Der Wert erscheint im FeldsourceKindder Anfragen unter/esign, als Filter?sourceKind=PDF_TEMPLATEund in der Nutzlast der Ereignisseesign.request.*. WersourceKindvollständig auswertet, etwa in einemswitch, sollte den neuen Wert aufnehmen.
v1.35.0 · 24. September 2026
- Neuer Fehler-Code
sms-limit-reached(429) anPOST /sms: Über die API, die LeadConnector-Aktion und Automationen sendet eine Organisation je Kalendermonat (deutsche Zeit) höchstens 300 SMS; der Wert ist je Organisation einstellbar. Die Antwort nenntlimit,usedundresetsAtund trägtRetry-Afterbis zum Monatsanfang. Terminerinnerungen zählen nicht mit.
v1.34.0 · 24. September 2026
- Geändertes Verhalten bei
tagsvon Dokumenten:PATCH /documents/{id}speichert Tags nicht mehr kleingeschrieben und mit-statt Leerzeichen. Jeder Tag kommt in der Schreibweise zurück, die im Tag-Vorrat der Organisation steht; werVIPschickt, währendvipschon existiert, bekommtvip. Tags, die sich nur in Groß- und Kleinschreibung, Leerzeichen oder Bindestrichen unterscheiden, gelten als derselbe Tag. Ein unbekannter Tag wird so angelegt, wie er geschickt wurde; Leerzeichen und Sonderzeichen bleiben erhalten, bisher wurden Leerzeichen zu-und Sonderzeichen entfernt. - Der Filter
GET /documents?tag=findet jetzt unabhängig von Groß- und Kleinschreibung, Leerzeichen oder Bindestrichen; vorher verglich er exakt.
v1.33.0 · 24. September 2026
- Kontakte tragen neben
tagsjetzttagDetails: je Tag die feste Kennung (id), der Text (tag), die erklärende Bezeichnung (label), die Quelle (source) und die Gruppe (group, oder null). Dieselbe Form bekommen die geplanten Ereignisse „Tag gesetzt“ und „Tag entzogen“. Auch die Webhookscontacts.contact.createdundcontacts.contact.updatedliefern das Feld mit. Die Kennung bleibt beim Umbenennen eines Tags gleich; wer Tags zuordnet, sollte sie statt des Textes verwenden. - Geändertes Verhalten bei
tags: Kontakt-Tags werden nicht mehr kleingeschrieben. Sie kommen in der Schreibweise zurück, die im Tag-Vorrat der Organisation steht; werVIPschickt, währendvipschon existiert, bekommtvip. Tags, die sich nur in Groß- und Kleinschreibung unterscheiden, gelten als derselbe Tag. Leerzeichen und Sonderzeichen bleiben erhalten; bisher wurden Leerzeichen zu-und Sonderzeichen entfernt. Der Filter?tag=findet jetzt unabhängig von der Schreibweise; vorher fand er großgeschriebene Tags nicht.
v1.32.1 · 15. September 2026
- Offene Posten (
/open-items) sind jetzt für jede Organisationsart abrufbar, auch für persönliche Sphären und Haushalte. Bisher antwortete die API dort mitfeature-not-available, obwohl die Anwendung die Posten führt. Unverändert: Mahnungen (/dunning/reminders) bleiben Geschäfts-Organisationen vorbehalten.
v1.32.0 · 7. September 2026
- OAuth-Unterbau auf Better-Auth 1.7 gehoben (neues oauth-provider-Plugin). Neu: Token-Rücknahme und Token-Prüfung als eigene Endpunkte, ressourcengebundene Token, öffentliche Clients ohne Geheimnis, stärkere Client-Anmeldung. Zwei Sicherheitslücken der alten Fassung sind damit geschlossen. Bestehende OAuth-Verbindungen müssen einmalig neu hergestellt werden — Clients, Zustimmungen und Token aus der alten Fassung sind nicht überführbar. API-Schlüssel (capi_) sind nicht betroffen.
v1.31.0 · 7. September 2026
- Website-Builder-MCP: die Werkzeugliste ist jetzt nach Berechtigung gefiltert — ein Zugang mit sites:read sieht die schreibenden Werkzeuge gar nicht mehr. Der direkte Aufruf eines nicht erlaubten Werkzeugs antwortet weiterhin mit 403 insufficient_scope.
v1.30.0 · 7. September 2026
- Verbundene Apps im Profil: Nutzer sehen jede OAuth-Freigabe (Anwendung, Organisation, Berechtigungen im Klartext, gültige Zugänge, letzte Anmeldung) und können sie selbst widerrufen. Der Widerruf entfernt Org-Bindung, ausgestellte Tokens und den Consent — die Anwendung verliert den Zugriff sofort und fragt beim nächsten Verbinden neu.
v1.29.0 · 7. September 2026
- LeadConnector-Menüpunkt: claritos kann als Custom Menu Link in LeadConnector erscheinen (/embed/leadconnector im iframe). Der verschlüsselte Location-Kontext von LeadConnector wird mit dem SSO-Schlüssel der App gelesen und zeigt die verknüpfte Organisation, aktive Auslöser und verfügbare Aktionen. Der Kontext belegt die Location, nicht eine claritos-Identität — er erzeugt keine Anmeldung, die Seite zeigt keine Geschäftsdaten.
v1.28.0 · 7. September 2026
- Zapier-App: Anmeldung jetzt über OAuth 2.1 (Authorization Code + PKCE, automatische Token-Erneuerung) statt API-Schlüssel — Voraussetzung für die öffentliche Listung. Nutzer wählen beim Verbinden Organisation und Berechtigungen im claritos-Consent; die angefragte Scope-Liste wird aus der Spec erzeugt und lässt Klientendaten aus. Fehlende Berechtigungen melden sich als 403 an der betroffenen Aktion.
v1.27.0 · 7. September 2026
- Checkout-Ereignisse im Standard-Format: payments.checkout.pending / .completed / .failed (Zahlungslink-Verkäufe) laufen jetzt auch über den API-Webhook-Dienst — mit Standard-Signatur, Wiederholung, Zustellprotokoll, Replay und Alarmen. Die bestehenden Zahlungslink-Webhooks am Link bleiben unverändert; wer umzieht, abonniert die neuen Typen und schaltet das alte Ziel ab.
v1.26.0 · 7. September 2026
- OAuth-Consent: Berechtigungen sind einzeln abwählbar (Least Privilege). Der Client erhält nur die gewählten Scopes — auch wenn er alle angefragt hat; Klientendaten-Rechte sind standardmäßig abgewählt. Ein Consent ohne gewählte Berechtigung ist nicht mehr möglich, ein leerer Grant bedeutet „keine API-Rechte“.
v1.25.0 · 6. September 2026
- Website-Builder-MCP (POST /api/mcp) akzeptiert jetzt auch OAuth-2.1-Access-Tokens (Login + Consent, Scopes sites:read/sites:write) — Chat-Connectoren (claude.ai, ChatGPT) brauchen keinen cmcp_-Token mehr; cmcp_-Tokens bleiben gültig. Scopes werden je Werkzeug durchgesetzt (get_/list_/verify_/suggest_ = lesen, alles andere = schreiben; 403 insufficient_scope). Protected-Resource-Metadaten je MCP-Server: /.well-known/oauth-protected-resource/api/mcp und …/api/mcp/v1.
v1.24.0 · 6. September 2026
- Make-Custom-App (integrations/make): App-Baum vollständig aus der Spec generiert — Verbindung API-Schlüssel + Umgebung, Webhook (attach/detach über /webhooks), ein Instant-Trigger je Ereignistyp, Action-/Search-/Get-/Delete-Module je Endpunkt (Suche mit Cursor-Pagination, Actions mit Idempotency-Key), Problem-Details-Fehlerabbildung; Upload-Skript für die Make-Apps-SDK-API. Leitfaden „Make“. Damit sind alle vier Plattform-Apps (LeadConnector, Zapier, n8n, Make) im Repo.
v1.23.0 · 6. September 2026
- n8n-Community-Node (integrations/n8n, npm n8n-nodes-claritos): Regular-Node mit Resource = Domäne und Operation = Endpunkt (deklarativ, aus der Spec generiert; Listen auf data entpackt), Trigger-Node mit Abo über POST /webhooks, Signaturprüfung und Abräumen beim Deaktivieren, Credential API-Schlüssel + Umgebung. Leitfaden „n8n“.
v1.22.0 · 6. September 2026
- Zapier-App (integrations/zapier): ein REST-Hook-Trigger je Ereignistyp (Abo über POST /webhooks, Signaturprüfung, „Load sample“ aus /webhooks/events/{type}/recent), Actions für alle Schreib-Endpunkte, Searches für alle Listen — vollständig aus der Spec generiert. Neuer Snapshot docs/api/events.v1.json (Ereigniskatalog mit Beispielen). Leitfaden „Zapier“.
v1.21.0 · 6. September 2026
- LeadConnector-Marketplace-App (Weg C): Installation je Location (OAuth aus den Org-Einstellungen oder External Authentication mit API-Schlüssel), Custom Workflow Actions (contact-create, task-create, sms-send, quote-create, invoice-create, form-response — laufen über den API-Rahmen mit dem Schlüssel des Nutzers), Custom Workflow Triggers (lead_created, contact_created, invoice_paid, invoice_issued, quote_accepted, esign_completed, form_submitted, task_done — intern Webhook-Endpunkte). Leitfaden „LeadConnector“.
v1.20.0 · 6. September 2026
- MCP über die API: POST /api/mcp/v1 (Streamable HTTP) — ein Werkzeug je Endpunkt (Name <domain>_<action>, Eingabe params/query/body wie in der Referenz, optional idempotencyKey bei Schreibaufrufen). Gleiche Auth (API-Schlüssel oder OAuth 2.1), gleiche Scopes, Klientendaten-Gate, Ratenlimits und Protokoll wie HTTP; die Werkzeugliste zeigt nur, was der Zugang darf. Leitfaden „MCP“.
v1.19.0 · 6. September 2026
- OAuth 2.1: Die API akzeptiert neben API-Schlüsseln jetzt OAuth-Access-Tokens (Authorization-Code + PKCE, Refresh-Tokens, Dynamic Client Registration). Der Nutzer gibt im Consent genau eine Organisation frei; die Scopes sind dieselben wie bei Schlüsseln. Discovery unter /.well-known/oauth-authorization-server und /.well-known/oauth-protected-resource. Leitfaden „OAuth“ (Flows, Consent, Zapier/n8n).
v1.18.0 · 6. September 2026
- Finder + Lebensmittel (nur lesen): GET /finder/practitioners (Umkreis-, Orts-, Sprach-, Qualifikations- und Themen-Filter; dieselbe Suche wie die öffentliche Finder-Seite der Organisation), GET /finder/practitioners/{slug} (Profil mit Standorten, Schwerpunkten, Qualifikationen; alte Slugs werden aufgelöst), GET /finder/places (Orts-Vorschläge). GET /foods/search (nach Kategorien gruppierte Treffer), GET /foods (Liste je Kategorie), GET /foods/{id} (per ID oder Slug) — global, Nährwerte je 100 g, Portionsangaben, Quelle und Quellenangabe (Attribution) in jeder Antwort.
v1.17.0 · 6. September 2026
- Organisation (nur lesen): GET /organization (Stammdaten, Adresse, Steuer-/Registerdaten, Bank, Logo, Inbox-Adresse, Branding-Domain, E-Sign-Stufe, API-Einstellungen), GET /organization/members (Mitglieder mit Rolle, Sichtbarkeit, Klientenzugang), GET /organization/invitations (Einladungen; abgelaufene werden als EXPIRED gemeldet), GET /organization/api-keys (eigene Schlüssel — nur Metadaten, nie Hash/Klartext; isCurrent markiert den aufrufenden Schlüssel). Ereignis organization.member.joined (Einladung angenommen, Organisation angelegt).
v1.16.0 · 6. September 2026
- Finanzen (nur lesen): GET /accounts, GET /accounts/{id} (Kontenrahmen mit Art, Untertyp, Hierarchie, Bebuchbarkeit, Bankdaten und Saldo — kanonisch Soll − Haben plus Anzeige-Saldo), GET /bookings, GET /bookings/{id} (Journal mit Zeilen je Konto/Kontakt/Kostenkategorie, Belegen, OP-Verknüpfungen, Storno-Bezug; Filter nach Zeitraum, Status, Konto, Kontakt, Beleg), GET /statements, GET /statements/{id}, GET /statements/{id}/lines (Kontoauszüge mit Zeilenständen, zugeordnetem Bankkonto und Kreditkarten-Zusammenfassung). Ereignisse finance.booking.created (alle Erzeugungswege) und finance.booking.reversed. Keine Schreibpfade in v1.
v1.15.0 · 6. September 2026
- Post/SMS/E-Mail: GET/POST /letters (Brief anlegen, optional PDF sofort erzeugen), GET/PATCH /letters/{id}, POST /letters/{id}/generate (PDF asynchron, pdfState), POST /letters/{id}/send (Kanal EMAIL, POSTAL oder BOTH — Postversand über den angebundenen Provider ist kostenpflichtig), GET /letters/{id}/pdf, GET /postal-letters, GET /postal-letters/{id} (Warteschlange mit Status, Seiten, Kosten, Tracking), GET/POST /sms, GET /sms/{id} (SMS senden — kostenpflichtig — und Zustellstatus lesen), GET /outbound-emails, GET /outbound-emails/{id} (E-Mail-Ausgang aller Bereiche; Klientenakten-Mails ausgenommen). Ereignisse letters.letter.sent, letters.postal.submitted/sent/delivered/failed, sms.message.sent/delivered/failed.
v1.14.0 · 6. September 2026
- Verträge/E-Sign: GET /contract-templates, GET /contract-templates/{id} (Vorlage mit Beteiligten-Plan, Variablen-Slugs und HTML), GET/POST /contracts (Vertrag aus Vorlage: Beteiligte je Slot, Titel/Ort/Datum, Zusatz-Variablen; der Worker rendert das PDF asynchron — renderState), GET /contracts/{id}, GET/POST /signature-requests (Signatur-Anfrage aus einem PDF-Dokument mit Parteien, optional Feldplatzierung, Signatur-Stufe, Einwilligung; standardmäßig sofort versendet), GET /signature-requests/{id}, POST …/send (versendet bzw. sendet erneut; Verträge erst nach dem Render), POST …/cancel, GET …/events (Hash-Kette), GET …/pdf (versiegeltes Exemplar oder Original, kurzlebige URL). Ereignisse esign.request.sent/completed/sealed/expired/declined/cancelled. Signier-Links werden nie ausgegeben.
v1.13.0 · 6. September 2026
- Affiliates: GET /affiliates, GET /affiliates/{id} (Partner mit Status, Vertragsart, Werbe-Code, Ansprechpartner; keine Bank-/Steuerdaten), GET /campaigns, GET /campaigns/{id} (Kampagne mit Tiefe, Modell, Attributionsfenster, Artikeln, Landingpages, Ref-Parameter), GET /affiliate-links (Einschreibungen Partner × Kampagne mit Klicks und fertig komponierten Share-Links je Landingpage), GET /conversions, GET /conversions/{id} (Konversion mit Brutto/Gebühr/Klimabeitrag/Basis, Status, Zahlungsstand, Auszahlungs-Termine und Provisionseinträgen je Ebene/Rolle), POST /conversions (externe Konversion melden — per Werbe-Code oder Gutschein-Code, idempotent über externalRef; gleiche Semantik wie der Conversion-Webhook), GET /commissions (Provisionseinträge, nur lesen). Ereignisse affiliates.conversion.registered (aus allen Aufnahme-Pfaden: Stripe, Coupon, Webhook, manuell, API) und affiliates.conversion.settled. Keine Auszahlungen, keine Gutschriften.
v1.12.0 · 6. September 2026
- Klienten (Praxisverwaltung, Gesundheitsdaten): GET/POST /clients, GET/PATCH /clients/{id} (Akte mit Aktennummer, Status, Kanal-Overrides, Betreuungszeitraum, Aufbewahrung), GET/PATCH /clients/{id}/fields (alle Aktenfelder mit aktuellem Wert; Schreiben mehrerer Felder mit Messzeitpunkt/Messender/Grund), GET/POST /clients/{id}/measurements (Werteverlauf mit Korrekturkette; einzelne Messung erfassen), GET/POST /clients/{id}/messages (Konversation mit dem Klienten, Praxis-Seite), GET /clients/{id}/files. Alles nur mit Klientendaten-Freischaltung (AV-Vertrag) + clients:read/clients:write; jeder Zugriff wird je Akte protokolliert (nur IDs). Ereignisse clients.record.created, clients.record.updated, clients.message.received (nur Referenzen, keine Gesundheitsdaten im Webhook).
v1.11.0 · 6. September 2026
- Formulare: GET /forms, GET /forms/{id} (Definition: Seiten, Felder mit Schlüssel/Typ/Optionen/Pflicht/Bedingungen, Matrix-/Wiederhol-Blöcke, Einwilligungen), GET /forms/{id}/responses, GET /responses/{id}, POST /forms/{id}/responses (serverseitiger Submit ohne OTP; gleiche Validierung wie der öffentliche Bogen; optional affiliateId für die Zuordnung; erzeugt Interessent + Lead-Ereignis). Antworten von Klientenakten-Bögen nur mit Klientendaten-Freischaltung + clients:read. Ereignis forms.response.submitted (auch für öffentliche Bögen und Funnel-Formulare; Klientenakten-Bögen nur als Referenz).
v1.10.0 · 6. September 2026
- Dokumente: GET /documents (status, type, taskId/
none, contactId, tag, financeRelevant, q, updatedSince), GET /documents/{id}, POST /documents (presigned PUT-URL für den direkten Upload nach R2, 5 min) + POST /documents/{id}/confirm (READY, startet OCR/KI bzw. Kontoauszug-Parser), GET /documents/{id}/download-url (kurzlebige URL mit Dateinamen), PATCH /documents/{id} (Titel, Typ, Aufgabe, Kontakt, Tags). KI-extrahierte Felder unterextracted. Ereignisse documents.document.ready/analyzed/updated.
v1.9.0 · 6. September 2026
- Zeiterfassung: GET/POST /time-entries, GET/PATCH/DELETE /time-entries/{id}, POST /time-entries/{id}/stop. POST ohne endTime startet einen laufenden Timer (ein Timer je Nutzer; stoppt andere, setzt die Aufgabe auf IN_PROGRESS). Abgerechnete Einträge sind unveränderlich (409 billed). Filter taskId, userId, projectId, from/to, isBillable, isBilled, running, updatedSince. Ereignisse time.timeEntry.created/updated/deleted.
v1.8.0 · 6. September 2026
- Projekte: GET/POST /projects, GET/PATCH/DELETE /projects/{id} — mehrsprachiger Name wie bei Aufgaben, Kunde + Ansprechpartner, Hauptprojekt (zyklusfrei), Zeit-Budget (Minuten, vorausbezahlt), Laufzeit; Kennzahlen offene Aufgaben, gebuchte und abrechenbare Minuten. Filter q, customerContactId, parentId (
none= Top-Level), activeOn, updatedSince. Ereignisse projects.project.created/updated/deleted.
v1.7.0 · 6. September 2026
- Aufgaben: GET/POST /tasks, GET/PATCH/DELETE /tasks/{id}, POST /tasks/{id}/status, GET/POST /tasks/{id}/comments. Titel/Beschreibung mehrsprachig: Lesen in der Anfrage-Sprache (?locale oder Accept-Language) plus vollständiges titleI18n; Schreiben als String oder Objekt {de,en,ru}, Mandantensprache wird automatisch nachübersetzt. Erledigen stoppt laufende Timer, schliesst Watcher und erzeugt die nächste Wiederholung wie in der App. Ereignisse tasks.task.created/updated/completed/deleted, tasks.comment.created.
v1.6.0 · 6. September 2026
- Offene Posten: GET /open-items (direction, status inkl. open/overdue, contactId, invoiceId, q, updatedSince), GET /open-items/{id} (Beträge in Cents, Skonto, Mahnstand, Zahlungen = verknüpfte Buchungen), POST /open-items/{id}/payments (Zahlung als Buchung „Bank an Personenkonto“ inkl. § 367-Anrechnung offener Mahnkosten; Teilbetrag per amountCents; markOnly für reinen Status-Flip). Mahnwesen: GET /dunning/reminders und GET /dunning/reminders/{id} (Stufe, Forderung/Gebühr/Zinsen/Gesamt in Cents, PDF, Portal-Link). Ereignisse payments.payment.recorded (alle Zahlwege), dunning.reminder.sent, invoices.invoice.overdue (beim Erzeugen einer Mahnstufe).
v1.5.0 · 6. September 2026
- Rechnungen: GET /invoices (Filter status inkl. open/overdue, kind, contactId, orderId, q, updatedSince), GET/POST /invoices, PATCH /invoices/{id} (nur Entwürfe — GoBD), POST …/issue (Nummer, Buchung, offener Posten, PDF + ZUGFeRD), POST …/correct (mode cancel = Storno-Beleg, mode value = wertmäßige Korrektur KOR-…), GET …/pdf (final oder Vorschau), GET …/xml (ZUGFeRD-XML als application/xml). Beträge als Cents + exakte Dezimal-Strings; Brutto-Modus (priceMode GROSS) mit Brutto-Einzelpreisen. Ereignisse invoices.invoice.created/issued/sent/paid/cancelled/corrected — auch bei Zahlungen über Stripe/Checkout/Raten/OP-Ausgleich.
v1.4.0 · 6. September 2026
- Aufträge: GET /orders (Filter status/draft, contactId, sourceQuoteId, q, updatedSince), GET /orders/{id} (Positionen mit abgerechneter/entfallener/offener Menge, Abschnitte, verknüpfte Rechnungen, AB-PDF), GET /orders/{id}/pdf. POST /quotes/{id}/convert: Angebot ausstellen, annehmen und über den Annahme-Router in einen Auftrag überführen (AB-Nummer, PDF, automatischer Versand, ggf. Vorausrechnung/Abschlag); wartet bis 25 s, sonst routing-pending. Ereignis orders.order.created (Quelle quote|manual|duplicate).
v1.3.0 · 6. September 2026
- Angebote: GET/POST /quotes, GET/PATCH /quotes/{id} (Kopf, Positionen, Abschnitte; Artikel-Referenz füllt Name/Einheit/Preis/Steuer), POST …/issue (Nummer + Portal-Link + PDF), POST …/send (E-Mail mit PDF; wartet bis 25 s auf das Rendering, sonst pdf-pending), POST …/accept und …/decline (im Namen des Kunden; Annahme stösst Auftrag/Vorausrechnung an), GET …/pdf (Status + URL). Beträge als Cents + exakter Dezimal-String. Ereignisse quotes.quote.created/updated/sent/accepted/declined — auch bei Annahme im Kunden-Portal.
v1.2.0 · 6. September 2026
- Artikel: GET/POST /articles, GET/PATCH /articles/{id} — Suche q, Filter kind/archived, updatedSince; Preise als unitPriceCents + unitPriceExact (vier Nachkommastellen), Währung = Basiswährung der Organisation; Archivieren per PATCH archived (kein DELETE). Ereignisse articles.article.created/updated. Neuer Fehlercode feature-not-available (403), wenn eine Funktion für den Organisationstyp nicht verfügbar ist.
v1.1.0 · 6. September 2026
- Webhooks: GET/POST /webhooks, GET/PATCH/DELETE /webhooks/{id}, POST …/rotate-secret, POST …/test, GET …/deliveries, POST …/replay; Katalog GET /webhooks/events mit …/{type}/sample und …/{type}/recent. Signatur nach Standard Webhooks (webhook-id, webhook-timestamp, webhook-signature), Wiederholung 1 min/5 min/30 min/2 h/12 h, Endpunkt nach fünf Fehlschlägen in Folge deaktiviert. Scope webhooks:manage.
- Ereignisse: contacts.contact.created/updated/deleted, leads.lead.created, webhooks.test.
v1.0.0 · 6. September 2026
- Erste Fassung der öffentlichen API: Schlüssel (capi_…), Scopes, Fehler nach RFC 9457, Cursor-Paginierung, Idempotency-Key, Rate-Limits, GET /me.
- Kontakte: GET/POST /contacts, GET/PATCH/DELETE /contacts/{id} — Suche (q), Filter type/tag, updatedSince; Geschlecht per KI, wenn nicht angegeben.