Berikning API

Berika autentiserade sessioner med data från folkbokföring (SPAR), företagsengagemang, fastighetsinnehav och inkomstuppgifter.

Kräver konfiguration
Berikning måste aktiveras för din tenant. Kontakta support@tic.io för att konfigurera vilka datakällor du vill använda.
Användargodkännande krävs
När berikning är aktiverat visas ett samtyckemeddelande i BankID-appen under autentiseringen. Användaren måste godkänna datahämtningen innan berikning kan utföras.

Flödesöversikt

Användare
Din tjänst
TIC Identity
1
Autentisera med BankID
2
Session complete + webhook
3
POST /api/v1/enrichment inom 30 min
4
Returnerar secureUrl
5
GET /api/v1/enrichment/data/{token} engångsåtkomst
6
Berikningsdata (JSON)
30 min tidsgräns mellan steg 2→3 och 4→5
Steg 3 och 5 kan endast utföras en gång per session

Översikt

Berikning utförs på en slutförd autentiseringssession och returnerar en tidsbegränsad URL där data kan hämtas. Berikningsdata lagras krypterat och URL:en är giltig i 30 minuter.

Viktigt: Berikning måste begäras inom 30 minuter efter slutförd autentisering. Varje session kan endast berikas en gång, och data-URL:en kan endast användas en gång. Se till att hämta informationen när du behöver den och undvik att spara information som du inte behöver. Om du exempelvis behöver en folkbokföringsadress i ett flöde så hämta bara den berikade informationen när besökaren har kommit till det steget.

Flöde

  1. Användaren startar autentisering (BankID)
  2. BankID visar samtycketext om vilka datakällor som hämtas
  3. Användaren godkänner och signerar
  4. Sessionen blir complete
  5. Du anropar berikning med sessionId (endast en gång per session)
  6. Du får tillbaka en secureUrl (giltig 30 min, engångsåtkomst)
  7. Du hämtar och sparar data från secureUrl

Datakällor

Typ Källa Beskrivning
spar SPAR/Navet Folkbokföringsuppgifter: namn, adress, skyddad identitet
companyRoles Bolagsverket Företagsengagemang, styrelseuppdrag, firmateckning
propertyOwnership Lantmäteriet Fastighetsinnehav och ägarandelar
income Skatteverket Inkomstuppgifter (senaste 2 åren)
ipIntelligence IP-riskanalys IP-intelligens: land, ISP, VPN/Tor-detektion, riskbedömning
full Alla Samtliga konfigurerade datakällor

Begär berikning

Startar berikning för en slutförd session.

POST /api/v1/enrichment

Request Body

Parameter Typ Beskrivning
sessionId Required guid ID för den slutförda autentiseringssessionen
types Required string[] Vilka datakällor som ska hämtas: spar, companyRoles, propertyOwnership, income, full
webhookUrl Optional string URL för webhook-notifiering när berikning är klar
state Optional string Godtyckligt värde som returneras i webhook
curl -X POST https://id.tic.io/api/v1/enrichment \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "sessionId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "types": ["spar", "companyRoles", "income"]
  }'

Response

200 OK
{
  "enrichmentId": "f1e2d3c4-b5a6-7890-cdef-123456789abc",
  "sessionId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "status": "completed",
  "requestedTypes": ["spar", "companyRoles", "income"],
  "completedTypes": ["spar", "companyRoles", "income"],
  "secureUrl": "/api/v1/enrichment/data/f1e2d3c4-b5a6-7890-cdef-123456789abc",
  "secureUrlExpiresAtUtc": "2024-01-15T14:45:00Z"
}

Hämta berikningsdata

Hämtar den faktiska berikningsdatan via den tidsbegränsade URL:en.

GET /api/v1/enrichment/data/{accessToken}
curl https://id.tic.io/api/v1/enrichment/data/f1e2d3c4-b5a6-7890-cdef-123456789abc \
  -H "X-Api-Key: YOUR_API_KEY"

Response

200 OK
{
  "personalNumber": "199001011234",
  "name": "Anna Andersson",
  "enrichedAtUtc": "2024-01-15T14:30:00Z",
  "spar": {
    "person_IdNummer": "199001011234",
    "namn_Fornamn": "Anna",
    "namn_Efternamn": "Andersson",
    "folkbokforingsadress_SvenskAdress_Utdelningsadress1": "Storgatan 1",
    "folkbokforingsadress_SvenskAdress_PostNr": "11122",
    "folkbokforingsadress_SvenskAdress_Postort": "Stockholm",
    "personDetaljer_Fodelsedatum": "1990-01-01",
    "skydd_Sekretessmarkering": false,
    "skydd_SkyddadFolkbokforing": false
  },
  "companyRoles": [
    {
      "companyId": 12345,
      "companyRegistrationNumber": "5566778899",
      "legalName": "Exempel AB",
      "legalEntityType": "AB",
      "positionTypes": ["VD", "LED"],
      "positionDescriptions": ["Verkställande direktör", "Styrelseledamot"],
      "positionStart": "2020-01-15",
      "positionEnd": null,
      "companyStatus": "Aktivt",
      "signatureDescription": "Styrelsen eller verkställande direktören"
    }
  ],
  "income": [
    {
      "ar_DEKL": 2024,
      "ink_TJ": 650000,
      "ink_TAX_FORV": 580000,
      "sk_SLUT": 195000
    },
    {
      "ar_DEKL": 2023,
      "ink_TJ": 620000,
      "ink_TAX_FORV": 555000,
      "sk_SLUT": 182000
    }
  ]
}
Engångsåtkomst
URL:en kan endast användas en gång. Efter att data har hämtats blir URL:en ogiltig. Se till att spara datan direkt vid hämtning.

Datamodeller

SPAR (Folkbokföring)

Data från Statens personadressregister. Fältnamn matchar SPAR:s kolumnnamn.

Fält Beskrivning
person_IdNummerPersonnummer
namn_FornamnFörnamn
namn_MellannamnMellannamn
namn_EfternamnEfternamn
namn_TilltalsnamnTilltalsnamn
personDetaljer_FodelsedatumFödelsedatum
personDetaljer_KonKön
folkbokforingsadress_SvenskAdress_*Folkbokföringsadress
sarskildPostadress_*Särskild postadress
kontaktadress_*Kontaktadress
skydd_SekretessmarkeringSekretessmarkering
skydd_SkyddadFolkbokforingSkyddad folkbokföring
Skyddad identitet
Om personen har sekretessmarkering eller skyddad folkbokföring returneras endast skyddsflaggorna, någon annan information finns inte tillgänglig.

Företagsengagemang

Styrelseuppdrag och roller från Bolagsverket.

Fält Beskrivning
companyIdInternt företags-ID
companyRegistrationNumberOrganisationsnummer
legalNameFöretagsnamn
legalEntityTypeBolagsform (AB, HB, etc.)
positionTypesPositionskoder (VD, LED, etc.)
positionDescriptionsPositionsbeskrivningar
positionStartStartdatum för position
positionEndSlutdatum (null = pågående)
companyStatusFöretagsstatus
signatureDescriptionFirmateckningsrätt

Fastighetsinnehav

Ägaruppgifter från Lantmäteriet.

Fält Beskrivning
fastighetObjektIdentitetUnik fastighetsidentifierare
registerbeteckningFastighetsbeteckning (t.ex. "STOCKHOLM KUNGSHOLMEN 1:5")
andelTaljareÄgarandel täljare
andelNamnareÄgarandel nämnare
ownershipStartDateDatum för ägarskap

Inkomstuppgifter

Inkomsttaxering från Skatteverket. Fältnamn matchar Skatteverkets kolumnnamn.

Fält Beskrivning
ar_DEKLDeklarationsår
ink_TJInkomst av tjänst
ink_NRV_AKT_TOTAktiv näringsverksamhet totalt
ink_NRV_PASS_TOTPassiv näringsverksamhet totalt
ink_TAX_FORVTaxerad förvärvsinkomst
ink_BESK_FORVBeskattningsbar förvärvsinkomst
oskott_KAPÖverskott kapital
uskott_KAPUnderskott kapital
sk_SLUTSlutlig skatt

IP Intelligence

IP-berikning ger insikter om de IP-adresser som använts vid autentiseringen. Två IP-adresser analyseras: klientens IP (som initierade sessionen) och enhetens IP (där BankID-appen kördes).

Automatiskt i webhooks
När IP-berikning är aktiverad inkluderas ipIntelligence automatiskt i webhook-payloaden för auth.completed och sign.completed-händelser.

IP-data per adress

Fält Beskrivning
ipAddressIP-adressen som kontrollerats
countryCodeLandskod (ISO 3166-1 alpha-2)
countryNameLandsnamn
ispInternetleverantör
usageTypeAnvändningstyp (ISP, Mobile, Hosting, etc.)
abuseConfidenceScoreMissbrukspoäng 0-100 (högre = mer rapporterad)
isTorOm IP:n är en känd Tor-utgångsnod
isLikelyVpnOm IP:n troligen är VPN/proxy/datacenter

Riskbedömning

Fält Beskrivning
levelRisknivå: low, moderate, high
scoreRiskpoäng 0-100
indicatorsLista med riskindikatorer som identifierats

Riskindikatorer

Indikator Beskrivning Poängpåverkan
Hög missbrukspoängIP rapporterad för missbruk (50+)+poäng
Tor-utgångsnodIP är en känd Tor-nod+40
VPN/Proxy/HostingIP tillhör datacenter eller VPN+20
Nyligen rapporteradIP har rapporterats senaste veckan+15
Icke-nordiskt landIP utanför SE/NO/DK/FI/IS+10

Exempel på webhook med IP Intelligence

{
  "event": "auth.completed",
  "sessionId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "user": {
    "personalNumber": "199001011234",
    "givenName": "Anna",
    "surname": "Andersson"
  },
  "ipIntelligence": {
    "initiatingIp": {
      "ipAddress": "85.24.100.50",
      "countryCode": "SE",
      "countryName": "Sweden",
      "isp": "Telia Company AB",
      "usageType": "ISP",
      "abuseConfidenceScore": 0,
      "isTor": false,
      "isLikelyVpn": false
    },
    "deviceIp": {
      "ipAddress": "94.254.120.75",
      "countryCode": "SE",
      "countryName": "Sweden",
      "isp": "Telenor Sverige AB",
      "usageType": "Mobile ISP",
      "abuseConfidenceScore": 0,
      "isTor": false,
      "isLikelyVpn": false
    },
    "risk": {
      "level": "low",
      "score": 0,
      "indicators": []
    },
    "enrichedAtUtc": "2024-01-15T14:30:00Z"
  }
}
QR-kod och olika IP-adresser
Vid QR-kodsflödet är det normalt att initiatingIp och deviceIp skiljer sig. Användaren kan starta på sin laptop (WiFi) och signera på sin mobil (4G). Detta är förväntat beteende och flaggas inte som risk automatiskt.

Felhantering

Status Fel Beskrivning
400 Enrichment not enabled for tenant Berikning är inte aktiverat för din tenant
400 No valid enrichment types requested Ingen av de begärda typerna är konfigurerade
400 Session not found Sessionen hittades inte
400 Session not completed Sessionen är inte slutförd
400 Session too old for enrichment Sessionen är för gammal (berikning måste begäras inom 30 minuter efter slutförd autentisering)
400 No personal number in session Sessionen saknar personnummer
400 Session has already been enriched Sessionen har redan berikats (endast en berikning per session tillåts)
410 Token expired or invalid URL:en har gått ut, redan använts, eller är ogiltig

Säkerhet

Berikningsdata hanteras med flera säkerhetslager:

  • Krypterad lagring: All berikningsdata krypteras med AES-256 innan den lagras
  • Tidsgräns för begäran: Berikning måste begäras inom 30 minuter efter slutförd autentisering
  • En berikning per session: Varje session kan endast berikas en gång
  • Engångsåtkomst: Data-URL:en kan endast användas en gång, sedan invalideras den
  • Tidsbegränsad URL: URL:er är giltiga i max 30 minuter
  • API-nyckel krävs: Alla anrop måste autentiseras
  • TLS: All kommunikation sker över HTTPS
  • Ingen data i URL:er: Känslig data skickas aldrig i query-parametrar eller redirects