Teknisk referens
Spärr-API för avsändare
Fråga om en mottagare är spärrad innan ni kontaktar den. Anropet innehåller en hash, inte en person: vi kan varken läsa numret eller räkna tillbaka det. Svaret är ett ja eller nej, plus ett kvittonummer ni kan visa upp i efterhand.
Översikt
API:t har två slutpunkter. /v1/suppression/check svarar på en mottagare i taget och används i realtid, till exempel i ringlistan eller precis innan ett utskick. /v1/suppression/batch tar en lista och används när en kampanj förbereds.
Båda tar emot hashade identifierare. Ingen slutpunkt returnerar personuppgifter, och ingen slutpunkt bekräftar att en person existerar hos oss — bara att hashen inte ska kontaktas.
Ett svar med suppressed: false betyder att vi inte känner till någon spärr. Det är inte ett medgivande, och det ersätter inte er egen laglighetsbedömning.
Autentisering
Varje anrop bär en nyckel i Authorization-huvudet. Nycklar är miljöbundna: mm_test_ mot testmiljön, mm_live_ mot produktion. En nyckel som används mot fel miljö avvisas med 401 i stället för att tyst falla tillbaka.
Authorization: Bearer mm_live_…Content-Type: application/jsonIdempotency-Key: <uuid v4> # rekommenderas för alla skrivande anropTokenisering
Hashen beräknas hos er, med en peppar som är unik för er organisation. Det gör två saker: vi kan inte återskapa kontaktuppgiften, och en läcka av era hashar går inte att korsköra mot någon annans.
# 1. Normalisera till E.164 innan något annat görs 070-123 45 67 -> +46701234567 Namn@Exempel.SE -> namn@exempel.se # 2. Hasha med er tilldelade peppar (aldrig i klienten) sha256(pepper + normalized) # 3. Skicka hashen, aldrig värdet "identifier_hash": "sha256:9f1a3c…c07d"Normaliseringen måste ske före hashningen. 070-123 45 67 och +46 70 123 45 67 är samma abonnent men olika strängar — utan normalisering blir de olika hashar och kontrollen missar spärren.
Kontrollera en mottagare
Används per mottagare, i realtid. Svarstiden är avsedd att rymmas i ett samtalsflöde, så anropet kan ligga direkt före uppringningen.
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": "kampanj-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"}Spara receipt_id tillsammans med er utskickslogg. Det är den enda referens som kopplar ihop er kontroll med vårt svar om utfallet ifrågasätts senare.
Batch före kampanj
Skicka upp till 10 000 hashar per anrop. Resultatlistan har alltid samma ordning och samma längd som identifier_hashes, så ni kan indexera rakt av utan att matcha på värden.
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" ]} # Svar: samma ordning som i begäran, aldrig omkastad{ "results": [ { "suppressed": true, "scope": "sender" }, { "suppressed": false, "scope": null } ], "receipt_id": "rcpt_01HZK4Q2M8V44P"}Större listor delas upp av er, inte av oss. Ett anrop som överskrider taket avvisas med 400 i stället för att trunkeras tyst.
Svarsfält
| Fält | Typ | Betydelse |
|---|---|---|
| suppressed | boolean | Sant om en spärr gäller för hashen på den angivna kanalen och det angivna syftet. |
| scope | string | null | sender = spärren gäller er organisation. global = spärren gäller all direktmarknadsföring. |
| effective_from | string (RFC 3339) | När spärren började gälla. Saknas när suppressed är falskt. |
| receipt_id | string | Kvittonummer för kontrollen. Bevarar att ni frågade, när ni frågade och vilket svar ni fick. |
| checked_at | string (RFC 3339) | Serverns tidpunkt för svaret. Använd denna, inte er egen klocka, i loggar. |
suppressed: true — kontakta inte hashen på den kanalen.suppressed: false — ingen känd spärr. Er egen bedömning gäller fortfarande.Statuskoder
Alla fel returneras som JSON med fälten error och message. Statuskoden är auktoritativ — läs den före kroppen.
- 200OK — Kontrollen är genomförd. Läs suppressed för utfallet.
- 202Accepted — Batchen är mottagen men behandlas asynkront. Hämta resultatet med receipt_id.
- 400Bad Request — Kroppen kunde inte tolkas, eller identifier_hash saknar sha256:-prefix.
- 401Unauthorized — Nyckeln saknas, har återkallats eller hör till en annan miljö.
- 409Conflict — Idempotency-Key har återanvänts med en annan kropp.
- 422Unprocessable — Kanalen eller syftet stöds inte. Se channel- och purpose-värdena ovan.
- 429Too Many Requests — Kvoten är förbrukad. Vänta det antal sekunder som Retry-After anger.
- 503Service Unavailable — Planerat underhåll eller överbelastning. Försök igen med exponentiell backoff.
Gränser och drift
- Kvot
- 1 000 anrop per minut och nyckel. Kvarvarande kvot ligger i
RateLimit-Remaining. - Batchtak
- 10 000 hashar per anrop. Överskridande avvisas, aldrig trunkeras.
- Omförsök
- Exponentiell backoff från 1 s. Skicka samma
Idempotency-Keyså räknas försöket en gång. - Datalagring
- Vi lagrar kvittot och hashen ni frågade om — aldrig något som kan återföras till en person av oss.
Nycklar begärs från portalen
Testnyckeln är tillgänglig direkt och svarar mot en spegel av produktionen med syntetiska hashar. Produktionsnyckeln kräver att avsändaren är registrerad och att en kontaktväg för rättighetsbegäran är angiven.