Datenexportregister
Dieses öffentliche Register beschreibt die Kundendaten, die Terminaro übertragen kann, die dafür verwendete maschinenlesbare Schnittstelle und die Grenzen, die empfangende Provider berücksichtigen müssen.
Informationen nach Artikel 26 der Verordnung (EU) 2023/2854 (Data Act). Dieses Register beschreibt den implementierten Dienst; es enthält keine Aussage darüber, ob ein bestimmter Export rechtlich ausreichend ist.
Umfang des Registers
Das Register umfasst übertragbare Daten, die der Geschäftskunde bereitgestellt hat oder die durch seine Nutzung von Terminaro entstanden sind. Die genauen Felder auf oberster Ebene, ihre JSON-Strukturen und Auslassungsregeln stammen aus demselben Katalog wie die Exportimplementierung.
Ein Feld mit der Kennzeichnung, dass es bei fehlendem Wert ausgelassen wird, erscheint nicht mit einem erfundenen Nullwert. Arrays geben ihre Kardinalität und Zeitstempel ihre Einheit an; interne Rohkennungen werden durch opake Referenzen ersetzt.
Exportierbare Datenkategorien
Die folgenden Ressourcendeklarationen ergeben sechs exportierbare Kategorien. Ihre Feldtabellen bilden das detaillierte Verzeichnis.
- Konto und Profil
account - Verfügbarkeit
availability - Buchungen
bookings - Kalenderverbindungen
calendar_sources - E-Mail-Vorlagen
email_templates - Teams und Teambuchungen
teams
Ausgeschlossene Daten
Der Exportkatalog verwendet sieben abschließende Ausschlussgründe. Sie verhindern, dass Geheimnisse, interne Betriebsdaten und Daten außerhalb der Kontrolle des Kunden die Übertragungsgrenze überschreiten.
internal_identifierRohe Datenbankkennungen bleiben ausgeschlossen. Exportierte Beziehungen verwenden stattdessen deterministische opake Referenzen.legacy_unusedNicht mehr verwendete Altspeicher, die kein Produktionspfad liest oder schreibt, sind nicht Teil des Exports.operational_stateWarteschlangen, Leases, Wiederholungszustände, Zustelldiagnosen und andere vorübergehende Betriebszustände bleiben ausgeschlossen.other_data_subjectDaten unter der Kontrolle eines anderen Kunden oder Daten, die ausschließlich zu einer anderen betroffenen Person gehören, sind nicht enthalten.provider_internalNur für den Anbieter bestimmte Verwaltungs- und interne Geschäftsdaten, die keine Kundendaten sind, bleiben ausgeschlossen.secret_materialPasswörter, Passwort-Prüfwerte, Authentifizierungsgeheimnisse und Zugangsdaten für verbundene Dienste werden nicht exportiert.service_integritySitzungsdaten, einmalig nutzbare Zugangsdaten und Schutzmechanismen zur Missbrauchsabwehr verbleiben im Dienst.
Historische Beziehungen können fehlen, wenn ihr Ziel vor dem Export gelöscht wurde. Bereits versendete Stornierungs-, Umbuchungs- sowie iCal- oder Feed-Links funktionieren nach einer Übertragung nicht mehr, weil der Export nur ihre Prüfwerte enthält, niemals die zu ihrer Nutzung erforderlichen Geheimnisse im Klartext.
Aufbewahrung, Entgelte und Wechselzeiträume
Terminaro erhebt für den Datenexport oder die Übertragung an einen Provider kein Entgelt. Eine gültige autorisierte API-Anfrage beginnt sofort mit der Datenübertragung. Bei einem gewöhnlichen vertraglichen Wechsel folgt auf eine Ankündigungsfrist von bis zu zwei Monaten ein Übergangszeitraum von bis zu 30 Kalendertagen.
Kann ein Wechsel technisch nicht innerhalb von 30 Kalendertagen abgeschlossen werden, kann das vertragliche Verfahren für technische Ausnahmen den Übergang um die erforderliche Zeit verlängern, höchstens jedoch auf sieben Monate.
Buchungen werden nach ihrem Ende 90 Tage lang gespeichert. Für stornierte Team-Buchungen gilt der Stornierungszeitpunkt, für andere Team-Buchungen deren Endzeitpunkt. Ein Export enthält die Datensätze, die beim Start des begrenzten Abrufs noch vorhanden sind, keine dauerhafte Kontohistorie.
Übertragungsschnittstelle
Die Ressourcen-API wird unter https://actions.terminaro.eu bereitgestellt. Jede deklarierte Ressource verwendet POST und sendet ein JSON-Objekt als text/plain-Anfrageinhalt. Zugangsdaten und Cursor bleiben dadurch aus URLs heraus.
Bevor der Inhalt gelesen wird, ist ein dezimaler Content-Length-Header erforderlich. Der angegebene und gemessene Inhalt darf höchstens 4096 Byte groß sein. Ein leerer Inhalt startet mit den Standardwerten.
POST /api/export/v1/account HTTP/1.1
Content-Type: text/plain
Content-Length: 16
x-terminaro-export-ticket: <ticket>
{"pageSize":100}Authentifizierung und Anfragengrenzen
Jede Anfrage muss genau einen Zugangsnachweis senden: entweder ein Terminaro-Paging-Ticket in x-terminaro-export-ticket oder ein Token des empfangenden Providers in x-terminaro-export-token. Anfragen ohne Zugangsnachweis oder mit beiden Nachweisen werden abgelehnt.
Ein Paging-Ticket gilt 15 Minuten lang und für höchstens 200 Anfragen. Eine Nutzung wird verbraucht, bevor Zeilen gelesen werden. Daher können sowohl eine später fehlgeschlagene Anfrage als auch der erneute Client-Versuch jeweils eine Nutzung verbrauchen. Das Paging-Ticket unterscheidet sich vom einmalig nutzbaren Ticket für den Browser-Download.
Provider-Tokens haben den festen Geltungsbereich data-export:read:v1. Standardmäßig gelten sie 30 Tage, sie können für höchstens 90 Tage ausgestellt werden und sind auf drei aktive Tokens pro Kunde begrenzt.
Provider-Tokens sind Server-zu-Server-Zugangsdaten und dürfen nicht in Browsercode, eine öffentliche Seite oder eine URL eingebettet werden. Kunden sollten Einstellungen → Datenexport prüfen und Terminaro kontaktieren, falls dort kein Token ausgestellt werden kann. Das öffentliche Register und der eigene Download des Kunden bleiben unabhängig davon verfügbar.
Provider-Anfragen sind in jedem Fünf-Minuten-Zeitraum auf 120 Anfragen pro Token und 300 Anfragen pro Kunde begrenzt. Eine begrenzte Antwort enthält Retry-After.
Antworten und Fehler
200gibt einen Ressourcen-Umschlag zurück.400bedeutet, dass die angegebene Länge, der JSON-Inhalt, der Cursor oder die Seitengröße nicht akzeptiert werden konnte.401ist dieselbe allgemeine Ablehnung für fehlende, widersprüchliche, unbekannte, abgelaufene, ausgeschöpfte oder unpassende Zugangsdaten.429meldet eine Anfragengrenze für Provider und enthältRetry-After.500meldet einen bereinigten internen Fehler. Fehlerantworten verwenden{ "error": "…" }.OPTIONSantwortet beim unterstützten Cross-Origin-Preflight mit204.
Paginierung, Konsistenz und Schema-Unterstützung
Die optionalen Anfragefelder sind cursor und pageSize. Die Seitengröße beträgt standardmäßig 100 und akzeptiert ganze Zahlen bis 500. Die account-Ressource kann unabhängig von der angeforderten Größe höchstens zwei Quellzeilen pro Seite zurückgeben.
Jede Antwort enthält category, continueCursor, frozenAt, isDone, page, resource, schemaVersion. Einzelressourcen werden mit einer Antwort abgeschlossen; paginierte Ressourcen können einen Cursor zurückgeben.
Eine leere Seite ist nicht zwangsläufig das Ende: team-bookings kann Teams ohne gespeicherte Buchungen durchlaufen und dennoch einen Cursor zurückgeben. Beenden Sie den Abruf erst, wenn isDone true und continueCursor null ist.
Cursor sind opak, aber nicht verschlüsselt. Übernehmen Sie sie unverändert.
frozenAt ist die Obergrenze für den Erstellungszeitpunkt von Datensätzen in einem begrenzten Abruf, keine Momentaufnahme der Datenbank. Später erstellte Datensätze sind ausgeschlossen; vorhandene Datensätze können zwischen zwei Seitenanfragen dennoch geändert oder gelöscht werden.
Die aktuelle Schema-Hauptversion ist 1. Sie steht sowohl im Endpunktpfad als auch in jedem Antwort-Umschlag.
Version 1 ist die erste Schema-Hauptversion. Daher gibt es keine vorherige Hauptversion und kein früheres Kompatibilitätsfenster.
Ressourcen und Felder
Die implementierte Übertragung deklariert derzeit 8 Ressourcen. Diese Tabellen werden aus der Deklaration und ihren vollständigen Feldmetadaten erzeugt.
Scrollen Sie horizontal durch die Tabellen, um alle Spalten zu sehen.
account
POST /api/export/v1/account · Konto und Profil · paginated
| Quelltabelle | Feld | JSON-Typ | Vorkommen | Struktur | Nullwert zulässig | Kardinalität oder Einheit |
|---|---|---|---|---|---|---|
customerSettings | bookingPageFallbackLanguage | string | omitted_when_absent | string | false | — |
customerSettings | bookingUuid | string | always | string | false | — |
customerSettings | contractAudience | string | omitted_when_absent | string | false | — |
customerSettings | createdAt | number | always | unixMilliseconds | false |
|
customerSettings | currentTermEnd | number | omitted_when_absent | unixMilliseconds | false |
|
customerSettings | dataExportProviderTokenInstructions | array | always | providerTokenInstructions | false |
|
customerSettings | displayName | string | always | string | false | — |
customerSettings | dpaAcceptedAt | number | omitted_when_absent | unixMilliseconds | false |
|
customerSettings | dpaVersion | string | omitted_when_absent | string | false | — |
customerSettings | dunningLevel | number | omitted_when_absent | number | false | — |
customerSettings | email | string | always | string | false | — |
customerSettings | emailFrom | string | omitted_when_absent | string | false | — |
customerSettings | entitlements | object | omitted_when_absent | entitlements | false | — |
customerSettings | feedReminderMinutes | array | omitted_when_absent | arrayOfNumbers | false |
|
customerSettings | hideCustomerNameInFeed | boolean | omitted_when_absent | boolean | false | — |
customerSettings | hideVisitorNamesInFeed | boolean | omitted_when_absent | boolean | false | — |
customerSettings | id | string | always | opaqueReference | false | — |
customerSettings | language | string | omitted_when_absent | string | false | — |
customerSettings | lastSepaDebitAt | number | omitted_when_absent | unixMilliseconds | false |
|
customerSettings | legalImprintText | string | omitted_when_absent | string | false | — |
customerSettings | legalImprintUrl | string | omitted_when_absent | string | false | — |
customerSettings | legalPrivacyText | string | omitted_when_absent | string | false | — |
customerSettings | legalPrivacyUrl | string | omitted_when_absent | string | false | — |
customerSettings | onboardingCompletedAt | number | omitted_when_absent | unixMilliseconds | false |
|
customerSettings | paymentGracePeriodEndsAt | number | omitted_when_absent | unixMilliseconds | false |
|
customerSettings | paymentMethodType | string | omitted_when_absent | string | false | — |
customerSettings | plan | string | omitted_when_absent | string | false | — |
customerSettings | scheduledPlanChange | object | omitted_when_absent | scheduledPlanChange | false | — |
customerSettings | selfServiceRegisteredAt | number | omitted_when_absent | unixMilliseconds | false |
|
customerSettings | showFreeSlotsInFeed | boolean | omitted_when_absent | boolean | false | — |
customerSettings | sourceTable | string | always | string | false | — |
customerSettings | subscriptionStatus | string | omitted_when_absent | string | false | — |
customerSettings | termsAcceptedAt | number | omitted_when_absent | unixMilliseconds | false |
|
customerSettings | termsVersion | string | omitted_when_absent | string | false | — |
customerSettings | updatedAt | number | always | unixMilliseconds | false |
|
customerSettings | userRef | string | omitted_when_absent | opaqueReference | false | — |
user | createdAt | number | always | unixMilliseconds | false |
|
user | displayUsername | string | omitted_when_absent | stringOrNull | true | — |
user | email | string | always | string | false | — |
user | emailVerified | boolean | always | boolean | false | — |
user | id | string | always | opaqueReference | false | — |
user | image | string | omitted_when_absent | stringOrNull | true | — |
user | name | string | always | string | false | — |
user | phoneNumber | string | omitted_when_absent | stringOrNull | true | — |
user | phoneNumberVerified | boolean | omitted_when_absent | booleanOrNull | true | — |
user | sourceTable | string | always | string | false | — |
user | updatedAt | number | always | unixMilliseconds | false |
|
user | userRef | string | omitted_when_absent | opaqueReference | false | — |
user | username | string | omitted_when_absent | stringOrNull | true | — |
legalAcceptances | acceptedAt | number | always | unixMilliseconds | false |
|
legalAcceptances | customerSettingsRef | string | always | opaqueReference | false | — |
legalAcceptances | document | string | always | string | false | — |
legalAcceptances | id | string | always | opaqueReference | false | — |
legalAcceptances | source | string | always | string | false | — |
legalAcceptances | sourceTable | string | always | string | false | — |
legalAcceptances | version | string | always | string | false | — |
availability
POST /api/export/v1/availability · Verfügbarkeit · single
| Quelltabelle | Feld | JSON-Typ | Vorkommen | Struktur | Nullwert zulässig | Kardinalität oder Einheit |
|---|---|---|---|---|---|---|
customerSettings | availabilityConfirmedAt | number | omitted_when_absent | unixMilliseconds | false |
|
customerSettings | bufferMinutes | number | always | number | false | — |
customerSettings | daysAhead | number | always | number | false | — |
customerSettings | id | string | always | opaqueReference | false | — |
customerSettings | minLeadTimeMinutes | number | omitted_when_absent | number | false | — |
customerSettings | slotDurationMinutes | number | always | number | false | — |
customerSettings | sourceTable | string | always | string | false | — |
customerSettings | timeWindows | array | always | timeWindows | false |
|
customerSettings | timezone | string | always | string | false | — |
customerSettings | userRef | string | omitted_when_absent | opaqueReference | false | — |
customerSettings | workingDays | array | always | arrayOfNumbers | false |
|
bookings
POST /api/export/v1/bookings · Buchungen · paginated
| Quelltabelle | Feld | JSON-Typ | Vorkommen | Struktur | Nullwert zulässig | Kardinalität oder Einheit |
|---|---|---|---|---|---|---|
bookings | cancelledAt | number | omitted_when_absent | unixMilliseconds | false |
|
bookings | createdAt | number | always | unixMilliseconds | false |
|
bookings | customerSettingsRef | string | always | opaqueReference | false | — |
bookings | endTime | number | always | unixMilliseconds | false |
|
bookings | id | string | always | opaqueReference | false | — |
bookings | originalStartTime | number | omitted_when_absent | unixMilliseconds | false |
|
bookings | previousStartTime | number | omitted_when_absent | unixMilliseconds | false |
|
bookings | reason | string | omitted_when_absent | string | false | — |
bookings | rescheduledAt | number | omitted_when_absent | unixMilliseconds | false |
|
bookings | sourceTable | string | always | string | false | — |
bookings | startTime | number | always | unixMilliseconds | false |
|
bookings | status | string | always | string | false | — |
bookings | teamBookingRef | string | omitted_when_absent | opaqueReference | false | — |
bookings | teamMemberRef | string | omitted_when_absent | opaqueReference | false | — |
bookings | visitorCompany | string | omitted_when_absent | string | false | — |
bookings | visitorEmail | string | always | string | false | — |
bookings | visitorLanguage | string | always | string | false | — |
bookings | visitorName | string | always | string | false | — |
bookings | visitorPhone | string | omitted_when_absent | string | false | — |
bookings | visitorTimezone | string | always | string | false | — |
calendar-sources
POST /api/export/v1/calendar-sources · Kalenderverbindungen · paginated
| Quelltabelle | Feld | JSON-Typ | Vorkommen | Struktur | Nullwert zulässig | Kardinalität oder Einheit |
|---|---|---|---|---|---|---|
calendarSources | caldavCalendarUrl | string | omitted_when_absent | string | false | — |
calendarSources | caldavUrl | string | omitted_when_absent | string | false | — |
calendarSources | caldavUsername | string | omitted_when_absent | string | false | — |
calendarSources | createdAt | number | always | unixMilliseconds | false |
|
calendarSources | customerSettingsRef | string | always | opaqueReference | false | — |
calendarSources | enabled | boolean | always | boolean | false | — |
calendarSources | googleAccountKey | string | omitted_when_absent | string | false | — |
calendarSources | googleCalendarId | string | omitted_when_absent | string | false | — |
calendarSources | id | string | always | opaqueReference | false | — |
calendarSources | label | string | always | string | false | — |
calendarSources | sourceTable | string | always | string | false | — |
calendarSources | type | string | always | string | false | — |
email-templates
POST /api/export/v1/email-templates · E-Mail-Vorlagen · single
| Quelltabelle | Feld | JSON-Typ | Vorkommen | Struktur | Nullwert zulässig | Kardinalität oder Einheit |
|---|---|---|---|---|---|---|
customerSettings | emailTemplateAdminNotificationBody | string | omitted_when_absent | string | false | — |
customerSettings | emailTemplateAdminNotificationBodyDe | string | omitted_when_absent | string | false | — |
customerSettings | emailTemplateAdminNotificationSubject | string | omitted_when_absent | string | false | — |
customerSettings | emailTemplateAdminNotificationSubjectDe | string | omitted_when_absent | string | false | — |
customerSettings | emailTemplateCancellationBody | string | omitted_when_absent | string | false | — |
customerSettings | emailTemplateCancellationBodyDe | string | omitted_when_absent | string | false | — |
customerSettings | emailTemplateCancellationSubject | string | omitted_when_absent | string | false | — |
customerSettings | emailTemplateCancellationSubjectDe | string | omitted_when_absent | string | false | — |
customerSettings | emailTemplateVisitorConfirmationBody | string | omitted_when_absent | string | false | — |
customerSettings | emailTemplateVisitorConfirmationBodyDe | string | omitted_when_absent | string | false | — |
customerSettings | emailTemplateVisitorConfirmationSubject | string | omitted_when_absent | string | false | — |
customerSettings | emailTemplateVisitorConfirmationSubjectDe | string | omitted_when_absent | string | false | — |
customerSettings | id | string | always | opaqueReference | false | — |
customerSettings | sourceTable | string | always | string | false | — |
customerSettings | userRef | string | omitted_when_absent | opaqueReference | false | — |
team-bookings
POST /api/export/v1/team-bookings · Teams und Teambuchungen · paginated
| Quelltabelle | Feld | JSON-Typ | Vorkommen | Struktur | Nullwert zulässig | Kardinalität oder Einheit |
|---|---|---|---|---|---|---|
teamBookings | assignedMemberCustomerSettingsRefs | array | always | opaqueReferenceArray | false |
|
teamBookings | assignedTeamMemberRefs | array | omitted_when_absent | opaqueReferenceArray | false |
|
teamBookings | cancelledAt | number | omitted_when_absent | unixMilliseconds | false |
|
teamBookings | createdAt | number | always | unixMilliseconds | false |
|
teamBookings | endTime | number | always | unixMilliseconds | false |
|
teamBookings | id | string | always | opaqueReference | false | — |
teamBookings | reason | string | omitted_when_absent | string | false | — |
teamBookings | sourceTable | string | always | string | false | — |
teamBookings | startTime | number | always | unixMilliseconds | false |
|
teamBookings | status | string | always | string | false | — |
teamBookings | teamRef | string | always | opaqueReference | false | — |
teamBookings | visitorCompany | string | omitted_when_absent | string | false | — |
teamBookings | visitorEmail | string | always | string | false | — |
teamBookings | visitorLanguage | string | always | string | false | — |
teamBookings | visitorName | string | always | string | false | — |
teamBookings | visitorPhone | string | omitted_when_absent | string | false | — |
teamBookings | visitorTimezone | string | always | string | false | — |
team-members
POST /api/export/v1/team-members · Teams und Teambuchungen · paginated
| Quelltabelle | Feld | JSON-Typ | Vorkommen | Struktur | Nullwert zulässig | Kardinalität oder Einheit |
|---|---|---|---|---|---|---|
teamMembers | acceptedAt | number | omitted_when_absent | unixMilliseconds | false |
|
teamMembers | consentVersion | number | omitted_when_absent | number | false | — |
teamMembers | createdAt | number | always | unixMilliseconds | false |
|
teamMembers | deactivatedAt | number | omitted_when_absent | unixMilliseconds | false |
|
teamMembers | id | string | always | opaqueReference | false | — |
teamMembers | invitedAt | number | omitted_when_absent | unixMilliseconds | false |
|
teamMembers | lastAssignedAt | number | omitted_when_absent | unixMilliseconds | false |
|
teamMembers | memberCustomerSettingsRef | string | always | opaqueReference | false | — |
teamMembers | memberDisplayName | string | omitted_when_absent | string | false | — |
teamMembers | memberEmail | string | omitted_when_absent | string | false | — |
teamMembers | removalReason | string | omitted_when_absent | string | false | — |
teamMembers | removedAt | number | omitted_when_absent | unixMilliseconds | false |
|
teamMembers | sourceTable | string | always | string | false | — |
teamMembers | status | string | always | string | false | — |
teamMembers | teamRef | string | always | opaqueReference | false | — |
teamMembers | updatedAt | number | always | unixMilliseconds | false |
|
teams
POST /api/export/v1/teams · Teams und Teambuchungen · paginated
| Quelltabelle | Feld | JSON-Typ | Vorkommen | Struktur | Nullwert zulässig | Kardinalität oder Einheit |
|---|---|---|---|---|---|---|
teams | availabilityMode | string | always | string | false | — |
teams | bookingPageFallbackLanguage | string | omitted_when_absent | string | false | — |
teams | bookingUuid | string | always | string | false | — |
teams | createdAt | number | always | unixMilliseconds | false |
|
teams | daysAhead | number | always | number | false | — |
teams | displayName | string | always | string | false | — |
teams | enabled | boolean | always | boolean | false | — |
teams | id | string | always | opaqueReference | false | — |
teams | ownerCustomerSettingsRef | string | always | opaqueReference | false | — |
teams | respectMemberWorkingHours | boolean | always | boolean | false | — |
teams | slotDurationMinutes | number | always | number | false | — |
teams | sourceTable | string | always | string | false | — |
teams | teamBufferOverrideMinutes | number | omitted_when_absent | number | false | — |
teams | teamGridBufferMinutes | number | always | number | false | — |
teams | teamMinLeadTimeOverrideMinutes | number | omitted_when_absent | number | false | — |
teams | timeWindows | array | always | timeWindows | false |
|
teams | timezone | string | always | string | false | — |
teams | updatedAt | number | always | unixMilliseconds | false |
|
teams | workingDays | array | always | arrayOfNumbers | false |
|
Definitionen der JSON-Strukturen
Felder auf oberster Ebene verweisen auf diese gemeinsamen Definitionen. Objektmitglieder, Array-Elemente und Vereinigungsvarianten sind rekursiv aufgeführt, damit empfangende Provider verschachtelte Strukturen nicht herleiten müssen.
Scrollen Sie horizontal durch die Tabelle, um alle Spalten zu sehen.
| Struktur | Art | JSON-Typ | Nullwert zulässig | Definition |
|---|---|---|---|---|
arrayOfNumbers | array | array | false |
|
boolean | scalar | boolean | false | — |
booleanOrNull | union | boolean | true | boolean | null |
entitlements | object | object | false |
|
null | scalar | null | true | — |
number | scalar | number | false | — |
numberOrNull | union | number | true | number | null |
opaqueReference | scalar | string | false | opaque-reference |
opaqueReferenceArray | array | array | false |
|
providerTokenInstruction | object | object | false |
|
providerTokenInstructions | array | array | false |
|
scheduledPlanChange | object | object | false |
|
string | scalar | string | false | — |
stringOrNull | union | string | true | string | null |
timeWindow | object | object | false |
|
timeWindows | array | array | false |
|
unixMilliseconds | scalar | number | false | unix_milliseconds |