Hört zu …
Technische Referenz
Fragen Sie, ob ein Empfänger widersprochen hat, bevor Sie ihn kontaktieren. Der Aufruf trägt einen Hash, keine Person: Wir können die Nummer weder lesen noch zurückrechnen. Die Antwort ist Ja oder Nein, plus eine Belegnummer, die Sie später vorlegen können.
Die API hat zwei Endpunkte. /v1/suppression/check beantwortet jeweils einen Empfänger und wird in Echtzeit verwendet — zum Beispiel in einer Wählschlange oder unmittelbar vor einem Versand. /v1/suppression/batch nimmt eine Liste entgegen und wird verwendet, wenn eine Kampagne vorbereitet wird.
Beide akzeptieren gehashte Identifikatoren. Kein Endpunkt gibt personenbezogene Daten zurück, und keiner bestätigt, dass eine Person in unserem System existiert — nur, dass der Hash nicht kontaktiert werden sollte.
Eine Antwort mit suppressed: false bedeutet, dass uns kein Opt-out bekannt ist. Das ist keine Einwilligung und ersetzt nicht Ihre eigene Rechtmäßigkeitsprüfung.
Jeder Aufruf trägt einen Schlüssel im Authorization-Header. Schlüssel sind an eine Umgebung gebunden: mm_test_ für die Testumgebung, mm_live_ für die Produktion. Ein Schlüssel, der gegen die falsche Umgebung verwendet wird, wird mit 401 abgelehnt, statt still auf eine andere Umgebung auszuweichen.
Authorization: Bearer mm_live_…Content-Type: application/jsonIdempotency-Key: <uuid v4> # für jeden schreibenden Aufruf empfohlenDer Hash wird auf Ihrer Seite berechnet, mit einem für Ihre Organisation einzigartigen Pepper. Das bewirkt zwei Dinge: Wir können die Kontaktdaten nicht rekonstruieren, und ein Leak Ihrer Hashes lässt sich nicht mit denen anderer abgleichen.
# 1. Zuerst auf E.164 normalisieren 070-123 45 67 -> +46701234567 Name@Example.COM -> name@example.com # 2. Mit Ihrem zugewiesenen Pepper hashen (nie im Client) sha256(pepper + normalized) # 3. Den Hash senden, nie den Wert "identifier_hash": "sha256:9f1a3c…c07d",Die Normalisierung muss vor dem Hashing erfolgen. 070-123 45 67 und +46 70 123 45 67 sind derselbe Anschluss, aber unterschiedliche Zeichenketten — ohne Normalisierung ergeben sie unterschiedliche Hashes, und die Prüfung übersieht den Opt-out.
Wird pro Empfänger in Echtzeit verwendet. Die Antwortzeit ist so ausgelegt, dass sie in einen Anrufablauf passt, sodass die Prüfung direkt vor dem Wählen stattfinden kann.
POST /v1/suppression/check HTTP/1.1Host: api.marketmute.comAuthorization: Bearer mm_live_…Content-Type: application/jsonIdempotency-Key: 8c1f0b52-3a77-4a1e-9f0c-2b7d4e11ab90 { "channel": "phone", "identifier_hash": "sha256:9f1a3c…c07d", "purpose": "direct_marketing", "sender_ref": "campaign-2026-h2"}HTTP/1.1 200 OKContent-Type: application/jsonRateLimit-Remaining: 986 { "suppressed": true, "channel": "phone", "scope": "sender", "effective_from": "2026-03-04T09:12:00Z", "receipt_id": "rcpt_01HZK4Q2M8V3XT", "checked_at": "2026-08-19T07:41:02Z"}Speichern Sie receipt_id zusammen mit Ihrem Versandprotokoll. Das ist der einzige Bezug, der Ihre Prüfung mit unserer Antwort verknüpft, falls das Ergebnis je infrage gestellt wird.
Senden Sie bis zu 10.000 Hashes pro Aufruf. Die Ergebnisliste hat immer dieselbe Reihenfolge und dieselbe Länge wie identifier_hashes, sodass Sie direkt indexieren können, ohne nach Werten abzugleichen.
POST /v1/suppression/batch HTTP/1.1Authorization: Bearer mm_live_…Content-Type: application/json { "channel": "phone", "purpose": "direct_marketing", "identifier_hashes": [ "sha256:9f1a3c…c07d", "sha256:41b8ee…9a20" ]} # Antwort: dieselbe Reihenfolge wie die Anfrage, nie neu sortiert{ "results": [ { "suppressed": true, "scope": "sender" }, { "suppressed": false, "scope": null } ], "receipt_id": "rcpt_01HZK4Q2M8V44P"}Größere Listen werden von Ihnen aufgeteilt, nicht von uns. Ein Aufruf, der das Limit überschreitet, wird mit 400 abgelehnt, statt still gekürzt zu werden.
| Feld | Typ | Bedeutung |
|---|---|---|
| suppressed | boolean | True, wenn für den Hash im angegebenen Kanal und Zweck ein Opt-out vorliegt. |
| scope | string | null | sender = der Opt-out gilt für Ihre Organisation. global = der Opt-out gilt für jede Direktwerbung. |
| effective_from | string (RFC 3339) | Wann der Opt-out wirksam wurde. Fehlt, wenn suppressed false ist. |
| receipt_id | string | Belegnummer für die Prüfung. Belegt, dass Sie gefragt haben, wann Sie gefragt haben und welche Antwort Sie erhalten haben. |
| checked_at | string (RFC 3339) | Der Zeitstempel des Servers für die Antwort. Verwenden Sie diesen, nicht Ihre eigene Uhr, in Protokollen. |
suppressed: true — den Hash auf diesem Kanal nicht kontaktieren.suppressed: false — kein bekannter Opt-out. Ihre eigene Prüfung gilt trotzdem weiterhin.Alle Fehler werden als JSON mit den Feldern error und message zurückgegeben. Der Statuscode ist maßgeblich — lesen Sie ihn vor dem Body.
RateLimit-Remaining.Idempotency-Key, zählt der Versuch nur einmal.Der Testschlüssel ist sofort verfügbar und bildet die Produktion mit synthetischen Hashes ab. Der Produktionsschlüssel setzt voraus, dass der Absender registriert ist und ein Kontaktkanal für Rechteanfragen hinterlegt ist.