Cerrtify

Persondata — Sök på ID samt namn+adress

Slå upp en person i SPAR via personnummer eller via namn och adress.

Persondata är ett gränssnitt mot SPAR (Statens personadressregister). Tjänsten exponerar två söklägen, båda i XML- och JSON-variant.

I produktion används ert eget SPAR-certifikat

Persondata fungerar i både sandbox och produktion. I sandbox går uppslagen mot Skatteverkets testmiljö för SPAR med ett testcertifikat som du lägger till genom att klicka på Aktivera SPAR i sandbox i dashboarden (Tjänster → Personadress). I produktion använder varje organisation sitt eget SPAR-avtal med Skatteverket: ladda upp certifikatet tillsammans med Skatteverkets tre nummer (kundnummer leveransmottagare, kundnummer slutkund och uppdragsnummer) i dashboarden under Certifikat → SPAR. Inget avtal än? Ni kan köpa Cerrtifys hjälp med ansökan när ni väljer plan. Tills certifikatet är uppladdat svarar produktionsanrop 403 spar_not_configured. Ett produktionsanrop måste också innehålla slutAnvandarId, er identifierare för slutanvändaren som uppslaget görs åt.

Sök på personnummer

curl -X POST https://sandbox-api.cerrtify.com/service/persondata/search/id.json \
  -H "X-API-Key: cert_..." \
  -H "Content-Type: application/json" \
  -d '{
    "idNummer": "195704133106",
    "slutAnvandarId": "agent-42"
  }'

idNummer är ett 12-siffrigt personnummer eller samordningsnummer (ÅÅÅÅMMDDNNNN; ett bindestreck före de fyra sista siffrorna går bra). Formatet kontrolleras innan sökningen skickas till SPAR: allt annat än 12 siffror ger 400 med felkoden invalid_idnummer. Numret i exemplet är en testperson i SPAR:s testmiljö. slutAnvandarId är din interna identifierare för slutanvändaren — SPAR kräver den för sina revisionsloggar.

Sök på namn + adress

När du inte har ett personnummer:

curl -X POST https://sandbox-api.cerrtify.com/service/persondata/search/name-address.json \
  -H "X-API-Key: cert_..." \
  -H "Content-Type: application/json" \
  -d '{
    "fornamn": "Anna",
    "mellanEfternamn": "Andersson",
    "utdelningsadress": "Storgatan 1",
    "postort": "Stockholm",
    "postnr": "11122",
    "slutAnvandarId": "agent-42"
  }'

Välj delar av svaret

JSON-varianterna tar fältet delar: en lista med nummer som anger vilka delar av varje personpost du vill ha tillbaka. Be bara om det du behöver.

curl -X POST https://sandbox-api.cerrtify.com/service/persondata/search/id.json \
  -H "X-API-Key: cert_..." \
  -H "Content-Type: application/json" \
  -d '{
    "idNummer": "195704133106",
    "slutAnvandarId": "agent-42",
    "delar": [1, 4]
  }'
NrDelInnehåll
0AllaAllt som SPAR lämnar
1NamnFörnamn, tilltalsnamn, mellannamn, efternamn, aviseringsnamn
2Persondetaljer, UtvandradFödelsedatum, kön, födelselän och församling, medborgarskap, avregistrering och dödsdatum, hänvisningar, uppgifter om samordningsnummer, utvandring
3FolkbokforingLän, kommun, distrikt, hemvist, folkbokföringsdatum
4Folkbokforingsadressc/o, utdelningsadress 1 och 2, postnummer, postort
5SarskildPostadressSärskild postadress, svensk eller internationell
6UtlandsadressAdress i utlandet
7KontaktadressKontaktadress, svensk eller internationell
8RelationVårdnadshavare och make, maka eller registrerad partner
9FastighetFastighetsbeteckning, andel och taxeringsvärde
10SummeradInkomst, InkomstArSummerad inkomst och inkomstår
  • Utan delar innehåller svaret del 1–4.
  • PersonId, Sekretessmarkering, SkyddadFolkbokforing och SenasteAndringSPAR följer alltid med.
  • Vilka uppgifter SPAR lämnar ut över huvud taget beror på vad Skatteverket har godkänt för er organisation. En del som ni inte har rätt till saknas i svaret, även om ni ber om den.
  • Ett okänt nummer ger 400 med felkoden invalid_delar. XML-varianterna skickar alltid SPAR:s hela svar och tar inte emot delar.

Svaret för exemplet ovan:

{
  "Posts": [
    {
      "PersonId": { "IdNummer": "195704133106", "Typ": "PERSONNUMMER" },
      "Sekretessmarkering": "NEJ",
      "SkyddadFolkbokforing": "NEJ",
      "SenasteAndringSPAR": "2021-09-25",
      "Namn": [
        {
          "DatumFrom": "2021-09-25",
          "DatumTill": "9999-12-31",
          "Aviseringsnamn": "Efternamn3542, Christina Birgitta",
          "Fornamn": "Christina Birgitta Ulrika",
          "Tilltalsnamn": "20",
          "Mellannamn": "Thomeaus",
          "Efternamn": "Efternamn3542"
        }
      ],
      "Folkbokforingsadress": [
        {
          "SvenskAdress": {
            "DatumFrom": "2021-09-25",
            "DatumTill": "9999-12-31",
            "Utdelningsadress2": "Gatan142 8",
            "PostNr": "11146",
            "Postort": "STOCKHOLM"
          }
        }
      ]
    }
  ],
  "UUID": "27462246-5b1a-4379-8faf-09aba4cba964"
}

En del som SPAR upprepar är en lista. Den uppgift som gäller nu kommer först och har DatumTill 9999-12-31; äldre uppgifter följer efter. Tomma fält utelämnas. Avvisar SPAR frågan innehåller svaret Undantag med Kod och Beskrivning i stället för poster, och ger en namnsökning för många träffar innehåller det OverstigerMaxAntalSvarsposter.

Testpersoner i sandbox

I sandbox går sökningarna mot Skatteverkets testmiljö för SPAR. Den innehåller påhittade testpersoner, och Skatteverket publicerar listan i dokumentet Testfall för personsökning i kundtestmiljön (version 9.1, 2025-09-09) på SPAR:s sida om Personsök. Tabellen visar vad varje testperson är till för och vilken del (delar) uppgiften hamnar i. Ett streck betyder att uppgiften alltid följer med.

idNummerVisarDel
195704133106Förnamn, mellannamn, efternamn, aviseringsnamn, tilltalsnamn1
198007199295Folkbokföringsadress med historik4
198001139297Lägenhetsnummer i adressen4
197901249297Särskild postadress i Sverige5
194812161596Särskild postadress i utlandet5
198307259294Utvandrad person med utlandsadress i Sverige6
195309112489Utvandrad person med utlandsadress i utlandet6
199903672385Samordningsnummer med styrkt identitet, kontaktadress i Sverige, hänvisningar2, 7
199201782399Samordningsnummer med sannolik identitet, kontaktadress i utlandet2, 7
199012652385Samordningsnummer där identitetsnivå inte är tillämplig2
197605832380Samordningsnummer som vilandeförklarats för att giltighetstiden löpt ut2
200301702395Samordningsnummer som vilandeförklarats av annan orsak, med hänvisning2
198112752384Samordningsnummer, avliden2
196305782390Samordningsnummer med sekretessmarkering–
197110021834Hänvisning från ett gammalt nummer2
197807202390Flera hänvisningar2
199101112390Avregistrerad på grund av identitetsbyte, med hänvisning till ny identitet2
198604069883Avregistrerad, avliden2
197712272389Avregistrerad, utvandrad; förlängd gallringstid2
197908032399Avregistrerad, utvandrad, gallrad och återinläst2
198203249274Sekretessmarkering–
198103269299Sekretessmarkering, avliden2
198106039228Skyddad folkbokföring–
198308299299Immunitetsnummer–
198404112388Immunitetsnummer, avliden2
198207052385Immunitetsnummer, avregistrerat som felaktigt registrerat2
198501182391Immunitetsnummer, ersatt, med hänvisning till ny identitet2
201607052394Två vårdnadshavare8
198003119255Registrerad partner8
199401272381Tidigare registrerad partner8
  • Relationerna lämnas enligt Skatteverkets testfall bara ut när sökningen görs med behörighet för relationer.
  • Testfallen innehåller ingen person med fastighet eller inkomst, så räkna med att del 9 och 10 är tomma i sandbox.
  • Listan har också testfall för namnsökning (kapitel 4) och personer med ovanliga namn och adresser (kapitel 5).

Så ser du vilka delar som kommer tillbaka för en testperson. Exemplen använder verktyget jq för att skriva ut fältnamnen i svaret:

KEY="cert_..."   # din sandbox-nyckel
for d in "[0]" "[1]" "[2]" "[3]" "[4]" "[5]" "[6]" "[7]" "[8]" "[9]" "[10]" "[1,4]" "[2,8]"; do
  printf '%-8s -> ' "$d"
  curl -s -X POST https://sandbox-api.cerrtify.com/service/persondata/search/id.json \
    -H "X-API-Key: $KEY" -H "Content-Type: application/json" \
    -d "{\"idNummer\":\"195704133106\",\"delar\":$d}" \
    | jq -r '.error // ((.Posts[0] // {}) | keys_unsorted | join(", "))'
done

Och så provar du flera testpersoner med alla delar:

for id in 198007199295 197901249297 195309112489 199903672385 198604069883 201607052394; do
  printf '%s -> ' "$id"
  curl -s -X POST https://sandbox-api.cerrtify.com/service/persondata/search/id.json \
    -H "X-API-Key: $KEY" -H "Content-Type: application/json" \
    -d "{\"idNummer\":\"$id\",\"delar\":[0]}" \
    | jq -r '.error // ((.Posts[0] // {}) | keys_unsorted | join(", "))'
done

XML kontra JSON

.json-varianterna parsar SPAR:s XML-svar till en stabil JSON-struktur. Varianterna utan .json skickar SPAR:s råa XML vidare oförändrad — användbart om du behöver exakt fälttrohet av regelefterlevnadsskäl.

När SPAR inte är konfigurerat

  • Produktion utan uppladdat certifikat: 403 spar_not_configured. Ladda upp ert SPAR-certifikat och Skatteverkets nummer i dashboarden (se ovan).
  • Sandbox: anrop med en sandbox-nyckel går mot Skatteverkets testmiljö med plattformens testcertifikat; du behöver inget eget. Klickar du på Aktivera SPAR i sandbox i dashboarden läggs testcertifikatet även till på er organisation, och testformuläret där låses upp.
  • 503 service_unavailable betyder att SPAR-klienten inte kunde startas hos oss (till exempel ett certifikat som inte går att läsa). Kontrollera det uppladdade certifikatet och lösenfrasen, och kontakta supporten om felet kvarstår.

On this page