Avdelning 02
Sex operationer över fem resurser. Kontraktet är versionerat i sökvägen och beskriver bara det som faktiskt är publikt — inget svar innehåller rå personinformation utan roll.
Varje anrop kräver en Bearer-token utfärdad av Zitadel (OIDC). Den publika appen använder PKCE. En B2B-integration använder ett service-konto vars scopes avgör vilka operationer som är tillgängliga.
curl -sS https://api.marketmute.com/v1/me/identity \
-H "Authorization: Bearer $MARKETMUTE_TOKEN" \
-H "Accept: application/json"
HTTP/1.1 401 Unauthorized
Content-Type: application/json
{ "error": "unauthorized" }
Sökvägarna nedan är relativa mot bas-URL:en. Fält markerade som maskerade returneras aldrig i klartext.
Listar den inloggade personens identifierare i maskerad form. Verifieringsstatus och aktiv/inaktiv följer med — värdet gör det inte.
curl -sS https://api.marketmute.com/v1/me/identity \
-H "Authorization: Bearer $MARKETMUTE_TOKEN"
[
{
"id": "3f2b9c40-0d1e-4a77-9c2e-1b0a5d6e7f81",
"type": "EMAIL_PRIVATE",
"scope": "PRIVATE",
"verified": "PASSED",
"active": true
}
]
Lägger till en identifierare — e-post, telefonnummer eller namn. Svarar 201 utan att spegla tillbaka värdet.
{
"type": "EMAIL_PRIVATE",
"value": "anna@example.se",
"scope": "PRIVATE"
}
HTTP/1.1 201 Created
| Fält | Krav | Beskrivning |
|---|---|---|
| type | Krävs | Typ av identifierare, t.ex. EMAIL_PRIVATE. |
| value | Krävs | Själva identifieraren. Lagras aldrig oskyddad. |
| scope | Valfritt | Privat eller yrkesmässig användning. |
Skickar en verifieringskod till identifieraren. Först när koden bekräftats kan identifieraren användas i rättighetsärenden.
{ "method": "EMAIL_OTP" }
HTTP/1.1 200 OK
// Koden är skickad. Statusordet i svaret
// beskriver bara vad som faktiskt hänt.
Klassificerar ett inkommande nummer inför mobilskyddet. Svaret innehåller kategori och konfidens — aldrig en fullständig identitet.
curl -sS -G https://api.marketmute.com/v1/mobile/shield/caller \
--data-urlencode "number=+46700000000" \
-H "Authorization: Bearer $MARKETMUTE_TOKEN"
{
"category": "DIRECT_MARKETING",
"confidence": 0.82,
"source": "caller-intelligence"
}
| Kategori | Innebörd |
|---|---|
| DIRECT_MARKETING | Direktmarknadsföring. |
| MEETING_BOOKING | Mötesbokning på uppdrag av annan part. |
| RECRUITMENT | Rekrytering. |
| SURVEY | Undersökning. |
| FRAUD_REPORTED | Rapporterat som bedrägeriförsök. |
| LEGITIMATE_BUSINESS | Verksamhetskontakt utan marknadsföringssyfte. |
| UNKNOWN | Underlaget räcker inte för en klassificering. |
B2B-kontroll av EN identifierare före utskick. Tar bara emot en hash ni själva beräknat — aldrig e-post eller telefonnummer i klartext.
Egen autentisering: en API-nyckel (mm_live_… / mm_test_…) i Authorization-headern — inte samma Zitadel-token som ovan. Egen takt, egen statuskodstabell och det ärliga 501-läget (matchningen saknar ännu ett per-avsändarindex) beskrivs i sin helhet i avdelning 03.
Samma kontroll för upp till 10 000 hashar i ett anrop. Samma autentisering, hash-krav och 501-läge som /suppression/check.
En batch över 10 000 hashar avvisas i sin helhet — inget trunkeras. Se avdelning 03 för fullständiga gränser.
Kontraktet listar de lyckade svaren per operation. Felsvaren följer vanlig HTTP-semantik och ser likadana ut i hela API:et.
| Kod | Innebörd | Vad ni gör |
|---|---|---|
| 200 | Begäran lyckades. | Läs svaret. |
| 201 | Resursen skapades. | Inget svarsinnehåll att läsa. |
| 400 | Begäran är felformad eller saknar obligatoriska fält. | Rätta anropet. Försök inte igen oförändrat. |
| 401 | Token saknas, har gått ut eller är ogiltig. | Hämta en ny token. |
| 403 | Token saknar det scope operationen kräver. | Se över service-kontots scopes. |
| 404 | Resursen finns inte, eller tillhör någon annan. | Kontrollera id:t. |
| 429 | Takten överskreds. | Vänta innan nästa anrop; se avdelning 03. |
| 500 | Oväntat fel hos oss. | Gör om anropet efter en kort paus. |
Skriv inte typerna för hand. Klienterna genereras ur kontraktsfilen i packages/contracts/openapi/marketmute.openapi.yaml med scripts/generate-contracts.sh, så att de aldrig hinner glida ifrån API:et.
import { createClient } from "@marketmute/contracts";
const client = createClient(token);
const identifiers = await client.listIdentifiers();
var client = new MarketMuteClient(token);
var identifiers = await client.ListIdentifiersAsync();