Einwilligungsmanagement und Nachweise
Bevor Sie einem Kontakt auf einem regulierten Kanal eine Nachricht senden, benötigen Sie in der Regel eine Rechtsgrundlage — meist eine Einwilligung. Die Einwilligungs-API von Orbit ist das führende System dafür, wer auf welchem Kanal wann und auf welcher Rechtsgrundlage ein- oder ausgestiegen ist. Jeder Schreibvorgang wird auf die Speicher verteilt, gegen die Ihre Sendevorgänge geprüft werden — das Erfassen einer Einwilligung hier gibt also die Nachricht tatsächlich frei (oder blockiert sie). Sie können zudem den gesamten Verlauf exportieren als auditfähige CSV- oder JSON-Datei. Alle folgenden Endpunkte sind unterhttps://api.orbit.devotel.io/api/v1/compliance beheimatet.
Kanäle und Zustände
Die Einwilligung wird pro Kanal erfasst. Das unterstützte Kanalset umfasst:email, fax, instagram, line, messenger, push, rcs,
sms, viber, voice, whatsapp.
Ein Paar (contact, channel) nimmt einen von drei Zuständen an:
Einwilligungen erfassen
POST /compliance/consent erfasst einen Opt-in oder Opt-out über
einen oder mehrere Kanäle in einem einzigen Aufruf. Identifizieren
Sie den Kontakt über contact_id oder über identifier (eine
E-Mail, eine E.164-Telefonnummer oder eine WhatsApp-ID — Orbit erkennt
den Typ automatisch).
201 Created:
Die Angabe beider Werte
valid_until und expires_in_days ist
mehrdeutig und wird mit 422 VALIDATION_ERROR abgelehnt. Wenn Sie ein
Zeitfenster setzen, gibt die 201-Antwort das aufgelöste
valid_until (den absoluten Ablaufzeitpunkt) zurück; bei einer nicht
ablaufenden Einwilligung oder einem Opt-out ist es null. Das erneute
Erfassen eines Opt-ins mit einem neuen Zeitfenster verlängert die
Gültigkeit — der ursprüngliche granted_at-Wert bleibt erhalten, der
Ablaufzeitpunkt wird jedoch aktualisiert.
Was ein Schreibvorgang bewirkt. Jeder erfasste Kanal aktualisiert
vier synchronisierte Speicher: die Audit-Tabelle consent_records,
den Spiegel channel_preferences des Kontakts (den schnellen
Lese-Pfad, den Ihre Sendevorgänge prüfen), die suppression_list
(bei Opt-out) sowie einen kurzlebigen Redis-STOP-Blocker, damit
laufende Kampagnen-Batches die Änderung innerhalb von ca. 10 Minuten
berücksichtigen.
Schreibvorgänge sind teilsicher: Schlägt ein Kanal fehl, gelten
die anderen weiterhin. Vergleichen Sie
consent_record_ids.length
mit der Anzahl der angeforderten Kanäle, um einen Teilschreibvorgang
zu erkennen. Das erneute Erfassen eines Opt-ins für einen bereits
aktiven Kanal aktualisiert die Metadaten/den Nachweis, behält aber
den ursprünglichen granted_at bei.Einwilligungen abrufen
GET /compliance/consent/lookup gibt den aktuellen Zustand für ein
(contact, channel)-Paar zurück — verwenden Sie ihn als Prüfung vor
dem Versand.
state von unknown bedeutet, dass für das Paar kein Datensatz
existiert — Ihre Anwendung entscheidet, ob dies eine Einwilligung
impliziert (einige Transaktionsabläufe) oder den Versand blockiert
(die meisten Marketingabläufe).
Die letzten drei Felder melden zeitlich begrenzte Einwilligungen und
sind immer vorhanden:
Ablaufende Einwilligungen finden
GET /compliance/consent/expiring durchsucht den Mandanten nach
Opt-ins, deren Gültigkeitsfenster abgelaufen ist oder bald abläuft —
die Grundlage für eine Re-Permission-Kampagne (erneute Bestätigung).
Es werden nur Einwilligungen mit einem valid_until zurückgegeben;
nicht ablaufende Einwilligungen erscheinen nie.
status (expired oder expiring),
sodass Sie zwischen „jetzt erneut bestätigen” und „vor Ablauf des
Fensters warnen” unterscheiden können. Die erneute Bestätigung ist ein
gewöhnlicher Opt-in per POST /compliance/consent — optional mit
einem neuen valid_until oder expires_in_days.
Bestätigte Einwilligungen (Double-Opt-in-Handshakes)
Ein einfachesPOST /compliance/consent dokumentiert die Einwilligung
— es ist das führende System, sobald Ihre eigene Oberfläche die
Einwilligung eingeholt hat. Wenn die Beweisstufe eine erfasste
Antwort des Empfängers erfordert (ausdrückliche schriftliche
Einwilligung nach TCPA, bestätigter Opt-in in der EU,
10DLC-Kampagnenprüfung), verwenden Sie stattdessen den verwalteten
Double-Opt-in-Handshake:
POST /compliance/consent/double-opt-in— Start: erfasst eine Zeile im Status pending (noch keine Einwilligung) und gibt den Bestätigungstext für das Paar zurück.- Der Empfänger antwortet; leiten Sie den Text an
POST /compliance/consent/double-opt-in/confirmweiter — Bestätigung: Ein zustimmendes Schlüsselwort zur ausstehenden Aufforderung wandelt das Paar in eine bestätigteopted_in- Einwilligung um. GET /compliance/consent/double-opt-in/status— Lesen: der aktuelle Zustand (opted_in|opted_out|pending|none) sowie die Flagsconfirmed/awaiting_reply, ohne Nebenwirkungen.
/lookup, /history und der Export lesen
sie identisch. Bis zur Bestätigung ist ein ausstehender Handshake
keine Einwilligung. Mandanteneigen: Nichts startet einen Handshake im
Namen der Plattform. Die vollständigen Mechanismen finden Sie unter
Bestätigte Einwilligungen (Double-Opt-in-Handshakes).
Einwilligungsverlauf
GET /compliance/consent/history gibt den vollständigen, paginierten
Prüfpfad für einen Kontakt zurück — jede Erteilung und jeder Widerruf,
die neuesten zuerst.
Abfrageparameter: contact_id oder identifier (eines erforderlich),
ein optionaler channel-Filter, limit (≤ 100, Standard 50) und ein
opaker cursor.
Den Einwilligungsnachweis exportieren
GET /compliance/consent/export lädt den mandantenweiten
Einwilligungsverlauf als einzelne Datei herunter — die Antwort auf ein
TCPA-Audit, die Beweislast nach Art. 7 Abs. 1 DSGVO oder eine
Offenlegungsanfrage („zeigen Sie, wer wann auf welchem Kanal und aus
welcher Quelle ein- oder ausgestiegen ist”). Er ist das
Massen-Gegenstück zu /lookup und /history.
Jede Zeile enthält ein Einwilligungsereignis, verknüpft mit den
Identifikatoren des Kontakts —
record_id, contact_id, email,
phone, whatsapp_id, channel, consent_state, granted,
consent_type, source — sowie die Spalten zur Beweislast nach DSGVO
lawful_basis, purpose, policy_template, consent_text_version,
consent_proof_url, ip_address, valid_until und die Zeitstempel
für Erteilung/Widerruf/Aktualisierung.
CSV-Downloads erhalten einen datierten Dateinamen
(consent-proof-of-record-YYYY-MM-DD.csv) und werden nie über einen
Lesecache ausgeliefert (Cache-Control: no-store). Bei format=json
liefert die Antwort stattdessen eine Hülle mit columns / items /
count — dieselben Daten für programmatische Verbraucher.
Der Zugriff ist auf Owner- und Admin-Schlüssel beschränkt —
die Nutzdaten legen mandantenweit rohe Empfänger-Identifikatoren
offen, dieselbe Vertrauensstufe wie beim Suppression-Import. Jeder
Exportlauf wird selbst mit seinen Filtern und der Zeilenzahl in das
Audit-Log geschrieben.
Überschreitet Ihr Register 50.000 Zeilen, wird der Export an der
Obergrenze abgeschnitten: CSV-Antworten tragen den Header
X-Export-Truncated: true, und die JSON-Hülle setzt
truncated: true. Grenzen Sie nach Kanal oder Status ein oder
paginieren Sie, indem Sie aufeinanderfolgende Datumsfenster mit
from/to exportieren.Indiens Digital Personal Data Protection Act (DPDP) führt das Konzept eines Consent Managers ein — eines rechenschaftspflichtigen, registrierten Vermittlers, der im Namen einer betroffenen Person kryptografisch signierte Einwilligungsnachweise ausstellt. Orbit kann die Manager registrieren, die Ihre Nutzer verwenden, und die von ihnen ausgestellten Nachweise prüfen.
Einen Consent Manager registrieren
POST /compliance/consent/managers (Admin/Owner) registriert einen
Manager und speichert dessen öffentlichen Schlüssel (einen
ECDSA-P-256-SPKI-PEM), mit dem jeder von ihm signierte Nachweis
geprüft wird.
GET /compliance/consent/managerslistet registrierte Manager (aktive zuerst).PUT /compliance/consent/managers/{id}aktualisiert oder deaktiviert einen (Teilaktualisierung; alle Felder optional).
Einen signierten Nachweis speichern
POST /compliance/consent/receipts prüft einen von einem Manager
signierten Nachweis und speichert ihn als Einwilligung. Die Signatur
(ECDSA P-256 / SHA-256, IEEE-P1363, base64url) wird anhand des
öffentlichen Schlüssels des registrierten Managers über eine an JCS
angelehnte JSON-Kanonisierung der Nutzdaten mit sortierten Schlüsseln
geprüft, bevor etwas gespeichert wird. Diese Kanonisierung
sortiert Objektschlüssel aufsteigend nach UTF-16-Codeeinheit und
entfernt unwesentlichen Leerraum, ist jedoch keine vollständige
RFC-8785-Implementierung — insbesondere wendet sie die von JCS
vorgeschriebenen Regeln zur Zahlenserialisierung nicht an. Signieren
Sie Nachweise mit derselben Form sortierter Schlüssel, die Orbit
verwendet, statt davon auszugehen, dass ein spezifikationsvollständiger
RFC-8785-Prüfer einen übereinstimmenden Hash erzeugt.
201 mit { "id": …, "receipt_id": …, "verified": true }.
Eine ungültige Signatur oder ein nicht registrierter/inaktiver Manager
liefert 422 CONSENT_RECEIPT_INVALID — das Detail weist darauf hin,
dass die Nutzdaten manipuliert worden sein können oder der Manager die
Schlüssel rotiert hat.
Einen gespeicherten Nachweis erneut prüfen
POST /compliance/consent/receipts/{id}/verify prüft einen zuvor
gespeicherten Nachweis erneut anhand des aktuellen Schlüssels des
Managers — verwenden Sie dies während eines Audits, um zu bestätigen,
dass ein Nachweis weiterhin gültig ist und ob sein Manager aktiv
bleibt. {id} akzeptiert entweder die ID des Einwilligungsdatensatzes
oder die receipt_id.
Einwilligungsnachweise setzen die Mandantenmigration
consent_managers voraus. Bei Mandanten ohne diese Migration
degradieren die Lesepfade kontrolliert: Die Managerliste gibt eine
leere Liste zurück, und der Re-Verify-Endpunkt liefert 404. Das
Ausstellen eines Nachweises ist fail-closed, daher liefert POST /compliance/consent/receipts bei Mandanten ohne Migration 422 CONSENT_RECEIPT_INVALID, statt zu degradieren — führen Sie die
Migration aus, bevor Sie Nachweise ausstellen.Weiterführende Referenzen
- Ein DSGVO-Posture von Anfang bis Ende aufbauen — die Abfolge, die diese Einwilligungsebene speist.
- Bestätigte Einwilligungen (Double-Opt-In-Handshakes) — der Beginn/Bestätigen/Status-Ablauf oberhalb eines einfachen Einwilligungsdatensatzes.
- Einwilligungs-Posture: Die Richtlinien für unbekannte Einwilligung — die organisationsweiten Regler, die bestimmen, was Kontakte ohne Register-Eintrag empfangen dürfen (Marketing-Versand vs. CDP-Fanout).
- Opt-Out & Suppressionslisten — Massenimport von Opt-outs und wie die Suppressionsliste Sendevorgänge steuert.
- DSAR — Bearbeitung von Auskunfts-/Löschanträgen über den Einwilligungsdatensatz.
- DLT-India-Onboarding — die Registrierungsebene, die DPDP-Einwilligungen bei indischen SMS ergänzt.
- API-Referenz → Compliance — vollständige Anfrage-/Antwortschemas (aus der Live-API neu generiert).