Tillfälligt läslägeSvensk tjänst, servrar inom EUGår längre än NIX
MarketMute
Meny
Skydda mig

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.

api.marketmute.comBas-URL
v1Version
application/jsonFormat
TLS 1.3Transport
1

Ö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.

2

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.

HuvudenObligatoriskt
Authorization: Bearer mm_live_…Content-Type: application/jsonIdempotency-Key: <uuid v4>   # rekommenderas för alla skrivande anrop
3

Tokenisering

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.

BeräkningOrdning spelar roll
# 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.

4

Kontrollera en mottagare

POST/v1/suppression/check

Används per mottagare, i realtid. Svarstiden är avsedd att rymmas i ett samtalsflöde, så anropet kan ligga direkt före uppringningen.

BegäranExempel
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"}
SvarExempel
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.

5

Batch före kampanj

POST/v1/suppression/batch

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.

Begäran och svarExempel
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.

6

Svarsfält

Fält i svaret från spärrkontrollen
FältTypBetydelse
suppressedbooleanSant om en spärr gäller för hashen på den angivna kanalen och det angivna syftet.
scopestring | nullsender = spärren gäller er organisation. global = spärren gäller all direktmarknadsföring.
effective_fromstring (RFC 3339)När spärren började gälla. Saknas när suppressed är falskt.
receipt_idstringKvittonummer för kontrollen. Bevarar att ni frågade, när ni frågade och vilket svar ni fick.
checked_atstring (RFC 3339)Serverns tidpunkt för svaret. Använd denna, inte er egen klocka, i loggar.
Spärradsuppressed: true — kontakta inte hashen på den kanalen.
Ingen spärrsuppressed: false — ingen känd spärr. Er egen bedömning gäller fortfarande.
7

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.
8

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-Key så 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.
Kom igång

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.

För företag