Gå til indholdet

Menu

Indhold

Jeres første tjek

Med Robinsontjeks API tjekker I personer mod Robinsonlisten direkte fra jeres eget system, før I ringer eller sender adresseret post. I sender navn og adresse og får præcist at vide, hvad vi fandt for hver person.

Alle kald går til https://api.robinsontjek.dk og bruger JSON. Fejltekster og match.label kommer på dansk eller engelsk efter headeren Accept-Language.

  1. Få en testnøgle. Skriv til os, så får I en nøgle, der begynder med rl_test_. Den er gratis, kræver intet abonnement og rører aldrig den rigtige liste. Vi svarer inden for én arbejdsdag.
  2. Send en person. Læg nøglen i en miljøvariabel, og kør kaldet til højre. Personen hedder »Test Blokeret«, så svaret er altid det samme.
  3. Læs svaret. match.level er 5, »Samme navn og adresse«. status er blocked, fordi jeres niveau (stop_level) som standard er 1. Skift navnet til »Anne Jensen«, og match.level bliver 0.

Når svaret ser rigtigt ud, bytter I til jeres live-nøgle (rl_live_…). Resten er uændret.

Hvad I får for hver person

  • match.level: hvad vi fandt, fra 0 (ingen på listen på adressen) til 5 (samme navn og adresse). Se niveauerne.
  • match.code, match.label og match.on: det samme som kode og tekst, og hvad der matchede.
  • list_version: hvilken udgave af Robinsonlisten vi tjekkede mod.

I bestemmer selv, hvilket niveau I går efter. Til integrationer, der kun vil have et ja eller nej, er der også status, regnet ud fra jeres valgte niveau (stop_level).

Download OpenAPI (JSON)

Base-URLhttps://api.robinsontjek.dk
Første kald
curl -X POST https://api.robinsontjek.dk/v2/checks \
  -H "Authorization: Bearer $ROBINSONTJEK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "people": [
      {
        "id": "lead-1",
        "name": "Test Blokeret",
        "address": "Testvej 1, 9999 Testby"
      }
    ]
  }'
Svar · 200
{
  "list_version": {
    "id": "00000000-0000-4000-8000-000000000001",
    "source": "cpr",
    "published_on": "2026-10-01",
    "activated_at": "2026-10-01T06:00:00Z"
  },
  "results": [
    {
      "id": "lead-1",
      "match": {
        "level": 5,
        "code": "name_address",
        "label": "Samme navn og adresse",
        "on": ["first_name", "last_name", "address", "unit"],
        "previous_address": false
      },
      "status": "blocked",
      "stop_level": 1,
      "reasons": ["name_and_unit"],
      "address": {
        "input": "Testvej 1, 9999 Testby",
        "ok": true,
        "street": "Testvej",
        "house_number": "1",
        "floor": null,
        "door": null,
        "postal_code": "9999",
        "city": "Testby",
        "formatted": "Testvej 1, 9999 Testby",
        "confidence": "exact"
      }
    }
  ]
}

Autentificering

Hvert kald skal have jeres API-nøgle i headeren Authorization:

Authorization: Bearer rl_live_…

Det er den eneste måde at sende nøglen på. Hold den hemmelig, og brug den kun fra jeres egen server, aldrig i en browser eller en app. Mangler nøglen, svarer vi 401 unauthorized. Er den forkert eller tilbagekaldt, svarer vi 401 invalid_api_key.

Har I brug for en ny nøgle, eller skal en gammel tilbagekaldes, så skriv til os.

Test og live

  • rl_live_… tjekker mod den rigtige Robinsonliste og tæller med i jeres forbrug.
  • rl_test_… giver faste, opdigtede svar. Se Testnøgler.

Hvert svar har headeren X-Robinsontjek-Mode, som er test eller live, så I kan se, hvilken nøgle der blev brugt.

Header
Authorization: Bearer rl_test_4f9c1a7e2b8d6035
Forkert nøgle
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer realm="Robinsontjek"

{
  "error": {
    "code": "invalid_api_key",
    "message": "API-nøglen er ugyldig eller er tilbagekaldt.",
    "request_id": "req_4a0f6c2e9b1d"
  }
}

Testnøgler

En testnøgle (rl_test_…) lader jer prøve hele API'et uden abonnement, uden pris og uden at røre en rigtig liste. Svarene kommer fra et lille, fast sæt af opdigtede personer, virksomheder og numre, så de er ens hver gang. Intet bliver gemt eller talt med i forbruget. Hvert svar har X-Robinsontjek-Mode: test.

Listeversionen er altid den opdigtede 00000000-0000-4000-8000-000000000001, udgivet 1. oktober 2026.

Personer

POST /v2/checks og POST /v2/check-jobs. Navnet (eller adressen) afgør svaret, uanset store og små bogstaver:

Navnet indeholder match.level match.on Begrundelse
Test Blokeret 5, samme navn og adresse fornavn, efternavn, adresse, lejlighed name_and_unit
Test Tidligere 4, tidligere adresse (previous_address er true) fornavn, efternavn previous_address
Test Delvis 2, samme efternavn efternavn, adresse partial_name
Test Manuel 1, en anden i husstanden adresse household
alt andet med en adresse, vi kan læse 0 ingen ingen
alt andet, hvor adressen ikke kan læses null ingen address_unreadable

status følger stop_level som i live: blocked på niveauet eller derover, allowed under. Adressen i svaret er læst af den rigtige adresseløsning, så I kan prøve den af samtidig. Et svar, vi ikke kan afgøre, er manual, aldrig allowed.

Jobs

POST /v2/check-jobs med en testnøgle tager kun JSON (ikke en fil) og højst 1.000 personer. Jobbet er done med det samme, med sine level_counts, og resultaterne hentes på GET /v2/check-jobs/{id}/results. Det udløber efter et døgn. En testnøgle ser kun testjobs, og en live-nøgle ser dem aldrig.

Virksomheder og telefonnumre (tilkøb)

Begge kan tilkøbes efter aftale. Med en testnøgle virker de uden aftale, så I kan bygge mod dem:

Input Svar
CVR 99999999, eller navnet indeholder Test Blokeret blocked, company_protected
CVR 99999998, eller navnet indeholder Test Manuel manual, address_not_found
Telefon 99999999 fundet, »Test Blokeret«, niveau 5
Telefon 99999998 fundet, »Test Manuel«, niveau 1
Telefon 99999997 hemmeligt: manual, phone_unlisted
Telefon 99999996 ikke fundet: manual, phone_not_found
alt andet allowed

POST /v2/addresses/resolve, fejl, validering og Idempotency-Key virker ens med begge nøgler.

En person uden match
curl -X POST https://api.robinsontjek.dk/v2/checks \
  -H "Authorization: Bearer $ROBINSONTJEK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "people": [
      {
        "id": "lead-2",
        "name": "Anne Jensen",
        "address": "Testvej 1, 9999 Testby"
      }
    ]
  }'
Svar · 200
{
  "list_version": {
    "id": "00000000-0000-4000-8000-000000000001",
    "source": "cpr",
    "published_on": "2026-10-01",
    "activated_at": "2026-10-01T06:00:00Z"
  },
  "results": [
    {
      "id": "lead-2",
      "match": {
        "level": 0,
        "code": "none",
        "label": "Ingen på listen på adressen",
        "on": [],
        "previous_address": false
      },
      "status": "allowed",
      "stop_level": 1,
      "reasons": [],
      "address": {
        "input": "Testvej 1, 9999 Testby",
        "ok": true,
        "street": "Testvej",
        "house_number": "1",
        "floor": null,
        "door": null,
        "postal_code": "9999",
        "city": "Testby",
        "formatted": "Testvej 1, 9999 Testby",
        "confidence": "exact"
      }
    }
  ]
}

Niveauer

Hver person får et niveau fra 0 til 5 i match.level. Niveauet siger, hvad vi fandt på Robinsonlisten på personens adresse. Jo højere niveau, jo mere ligner det, vi fandt, personen selv.

Niveau match.code Hvad vi fandt
0 none Ingen på listen på adressen
1 household En anden i husstanden står på listen
2 surname Samme efternavn på adressen
3 given_name Samme fornavn på adressen
4 name_building Samme navn, anden lejlighed
5 name_address Samme navn og adresse

Kan vi ikke læse adressen, er match.level null, og begrundelsen er address_unreadable. match.previous_address er true, når personen står på listen på en tidligere adresse. Det tæller som mindst niveau 4. match.on viser, hvilke dele der matchede.

Jeres niveau: status og stop_level

I vælger, hvilket niveau I går efter, én gang i indstillingerne eller pr. kald med stop_level på POST /v2/checks og POST /v2/check-jobs. Vælger I ikke, bruger vi niveau 1, som er det forsigtigste. Niveauet kommer med i hvert svar som stop_level, og ud fra det regner vi status ud til jer, der vil have et færdigt svar i en integration:

status Hvornår
allowed match.level er under jeres niveau.
blocked match.level er på jeres niveau eller derover.
manual Adressen kan ikke læses (match.level er null). Aldrig allowed.

status er en bekvemmelighed. Vil I selv afgøre det række for række, så brug match.level.

Begrundelser

reasons er koder, I selv kan oversætte og vise:

Kode Betyder
name_and_address Samme navn og adresse står på listen.
name_and_unit Samme navn i samme lejlighed står på listen.
household En anden på adressen står på listen.
partial_name Et navn, der ligner, står på listen på adressen.
previous_address Personen står på listen på en adresse, vedkommende er flyttet fra.
address_unreadable Vi kunne ikke læse adressen. Ret den, og tjek igen.
address_not_found Adressen findes ikke i Danmark, som den er skrevet.
no_name Der står intet navn.
company_protected Virksomheden har frabedt sig reklamer i CVR (tilkøb).
phone_unlisted Nummeret er hemmeligt (tilkøb).
phone_not_found Vi kunne ikke finde, hvem der har nummeret (tilkøb).
list_not_ready Robinsonlisten bliver opdateret. Tjek igen om lidt.
Et resultat
{
  "match": {
    "level": 5,
    "code": "name_address",
    "label": "Samme navn og adresse",
    "on": ["first_name", "last_name", "address", "unit"],
    "previous_address": false
  },
  "status": "blocked",
  "stop_level": 1,
  "reasons": ["name_and_address"]
}
Adressen kan ikke læses
{
  "match": {
    "level": null,
    "code": null,
    "label": null,
    "on": [],
    "previous_address": false
  },
  "status": "manual",
  "stop_level": 1,
  "reasons": ["address_unreadable"],
  "address": null
}

Fejl

En fejl har altid samme form: et error-objekt med en fast code, jeres kode kan reagere på, og en message, der kan vises til et menneske. details siger, hvilket felt (field) og hvilken række (index, fra 0) der er galt, når det er relevant. Send request_id med, hvis I skriver til os om en fejl.

HTTP code Hvad I gør
400 invalid_request Body er ikke gyldig JSON. Ret den.
401 unauthorized Headeren Authorization mangler.
401 invalid_api_key Nøglen er forkert eller tilbagekaldt. Skriv til os for en ny.
402 payment_required Kontoen har ikke et aktivt abonnement. Skriv til os. Testnøgler får aldrig denne fejl.
403 phone_not_enabled Telefonopslag kan tilkøbes efter aftale og er ikke slået til for jer.
403 company_checks_not_enabled Tjek af virksomheder kan tilkøbes efter aftale og er ikke slået til for jer.
404 not_found Det findes ikke, eller det hører til en anden konto.
409 job_not_finished Jobbet er ikke done endnu. details.status er dets status. Spørg igen om lidt, eller vent på callback_url.
409 idempotency_in_progress Et kald med samme Idempotency-Key er i gang. Vent Retry-After sekunder (2).
413 payload_too_large Body eller fil er over 200 MB. Del listen.
422 invalid_request Noget i forespørgslen er forkert, fx en person uden adresse. details siger hvad.
422 idempotency_conflict Idempotency-Key er brugt før til et andet kald.
429 rate_limited For mange kald. Vent det antal sekunder, Retry-After angiver.
500 internal_error Fejl hos os. Prøv igen.
503 list_not_ready Robinsonlisten bliver opdateret. Vent Retry-After sekunder (300).

Hvert endpoint viser under »Mulige fejl«, hvilke af dem det kan svare. Alle kald med nøgle kan svare 401 og 429.

Fejl · 422
{
  "error": {
    "code": "invalid_request",
    "message": "Person nr. 3 mangler en adresse.",
    "details": {
      "field": "people",
      "index": 3
    },
    "request_id": "req_7f2c9a41e0b3"
  }
}

Rate limits, idempotens og sider

Der er to grænser:

  • Pr. nøgle: 600 kald i minuttet.
  • Pr. IP-adresse: 3.000 kald i minuttet på tværs af alle nøgler. Det rammer kun, hvis mange systemer deler adresse. Kald uden nøgle tæller til 300 i minuttet.

Hvert svar til et kald med nøgle har tre headere om nøglegrænsen: RateLimit-Limit (kald pr. minut), RateLimit-Remaining (kald tilbage i dette minut) og RateLimit-Reset (sekunder til minuttet er omme). Brug dem til at sætte tempoet ned, før I får en fejl. Går I over en grænse, svarer vi 429 rate_limited med Retry-After.

Har I mange personer, så send dem samlet: op til 1.000 i ét kald til POST /v2/checks, eller op til 1.000.000 som et job med POST /v2/check-jobs. Et job kan højst fylde 200 MB.

Idempotency-Key

Send headeren Idempotency-Key (højst 255 tegn) med en unik værdi, fx et UUID, på POST /v2/checks og POST /v2/check-jobs. Svigter forbindelsen, og I sender det samme kald igen med samme nøgle, får I det første svar tilbage i stedet for at listen bliver tjekket en gang til.

  • Nøglen gælder i 24 timer og hører til den API-nøgle, der brugte den.
  • Et gentaget svar har samme statuskode som det første (202 for et job) og headeren Idempotent-Replayed: true.
  • Samme nøgle med et andet indhold giver 422 idempotency_conflict. Mens det første kald stadig kører, giver den 409 idempotency_in_progress.
  • Et kald, der fik en 5xx-fejl, bliver ikke husket. I kan sende det igen.

Sider i resultater

GET /v2/check-jobs/{id}/results svarer med op til limit resultater (standard 1.000, højst 10.000) og next_cursor. Send next_cursor som cursor i næste kald, til den er null. En cursor er uigennemsigtig: gem den ikke, og byg den ikke selv.

Headere på et svar
HTTP/1.1 200 OK
X-Robinsontjek-Mode: live
RateLimit-Limit: 600
RateLimit-Remaining: 597
RateLimit-Reset: 41
Content-Type: application/json
Kald med Idempotency-Key
curl -X POST https://api.robinsontjek.dk/v2/checks \
  -H "Authorization: Bearer $ROBINSONTJEK_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: b3f1c2de-5a7e-4c41-9d0a-2f6e8a91c7d4" \
  -d '{
    "people": [
      {
        "id": "lead-1042",
        "name": "Anne Marie Jensen",
        "address": "Stationsalleen 48, 1. b, 2770 Kastrup"
      }
    ]
  }'
For mange kald
HTTP/1.1 429 Too Many Requests
Retry-After: 12
RateLimit-Limit: 600
RateLimit-Remaining: 0
RateLimit-Reset: 12

{
  "error": {
    "code": "rate_limited",
    "message": "For mange forespørgsler. Vent lidt, og prøv igen.",
    "request_id": "req_1d8e4b07c2a9"
  }
}

Webhooks og callbacks

Robinsontjek sender en POST til jeres adresse, når noget sker, så jeres system ikke skal spørge igen og igen. Der er to veje, og de bruger samme signatur:

  • Webhooks gælder hele kontoen. Opret adressen i appen under Indstillinger. Hemmeligheden vises kun én gang, når adressen oprettes.
  • callback_url gælder ét job. Giv den med til POST /v2/check-jobs.
Hændelse Sker når
check_job.completed Et job er færdigt. Hent resultaterne.
check_job.failed Et job mislykkedes. data.error siger hvorfor.
saved_list.changed En gemt liste har fået ændringer ved et nyt tjek.
list_version.activated En ny udgave af Robinsonlisten er taget i brug.

En webhook indeholder aldrig personoplysninger, kun id'er og antal. id er unikt for hver levering, så I kan se bort fra en levering, I allerede har behandlet. data er forskellig fra hændelse til hændelse:

Hændelse data
check_job.completed, check_job.failed check_job_id, status, source, external_ref, row_count, allowed_count, blocked_count, manual_count, finished_at og ved failed også error
saved_list.changed saved_list_id, name, changes, newly_blocked, check_job_id, list_version_id
list_version.activated list_version_id, published_on, source

Tjek signaturen

Hver levering har headeren Robinsontjek-Signature: t=<tidsstempel>,v1=<signatur>. Signaturen er HMAC-SHA256 af teksten <tidsstempel>.<rå body>, skrevet som hex.

Hemmeligheden afhænger af vejen:

Vej Hemmelighed
Webhook Den hemmelighed, der blev vist, da adressen blev oprettet.
callback_url SHA-256 (hex) af den API-nøgle, der oprettede jobbet. I har nøglen, så I kan regne den ud selv.
  1. Læs headeren, og tag t og v1.
  2. Beregn HMAC-SHA256 af t + "." + rå body med hemmeligheden.
  3. Sammenlign med v1 på en måde, der tager lige lang tid uanset resultatet.
  4. Afvis leveringer, hvor t er mere end 5 minutter gammelt.

Brug den rå body, ikke JSON, der er læst og skrevet igen. Hos en callback_url er Robinsontjek-Event check_job.completed eller check_job.failed, og body er det samme job som GET /v2/check-jobs/{id}.

Svar og nye forsøg

Svar med en 2xx-status inden for 5 sekunder. Alt andet tæller som en fejl.

Nye forsøg
Webhook Op til 8 forsøg i alt over cirka et døgn: efter 1 minut, 5 minutter, 15 minutter, 1 time, 3 timer, 6 timer og 12 timer.
callback_url 4 forsøg i alt: efter 1 minut, 10 minutter og 1 time. Derefter giver vi op. Jobbet kan altid hentes med GET /v2/check-jobs/{id}.

Adresser, der peger ind i et privat netværk, afvises, og adressen skal bruge https.

Levering
POST /hooks/robinsontjek HTTP/1.1
Content-Type: application/json
Robinsontjek-Signature: t=1792057351,v1=5d3c0b8e…

{
  "id": "6f1c0c1e-93b4-4d2a-8e57-2c1f0a9b7d34",
  "type": "check_job.completed",
  "created_at": "2026-10-14T09:42:31Z",
  "data": {
    "check_job_id": "5b1d9e3c-2a4f-4c7e-8d16-0e9f7a2b4c58",
    "status": "done",
    "source": "api",
    "external_ref": "kampagne-oktober",
    "row_count": 1840,
    "allowed_count": 1512,
    "blocked_count": 312,
    "manual_count": 16,
    "finished_at": "2026-10-14T09:42:30Z"
  }
}
Tjek signaturen
import crypto from "node:crypto";

// rawBody: the request body exactly as it arrived (a Buffer or string)
function verify(header, rawBody, secret) {
  const parts = Object.fromEntries(header.split(",").map((p) => p.split("=")));
  const expected = crypto
    .createHmac("sha256", secret)
    .update(`${parts.t}.${rawBody}`)
    .digest("hex");
  const fresh = Math.abs(Date.now() / 1000 - Number(parts.t)) < 300;
  return fresh && expected.length === parts.v1.length &&
    crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(parts.v1));
}
Hemmelighed til en callback_url
import crypto from "node:crypto";

// The secret for a callback_url is the SHA-256 (hex) of the API key that created the job.
const secret = crypto.createHash("sha256").update(process.env.ROBINSONTJEK_API_KEY).digest("hex");

Versioner og ændringer

API'et har sin version i adressen (/v2). Listeversionen (list_version) er noget andet: den siger, hvilken udgave af Robinsonlisten et tjek kørte mod.

  • Vi tilføjer felter og endpoints uden varsel. Ignorer felter, I ikke kender.
  • Ændringer, der kan bryde jeres kode, kommer som en ny version. Vi skriver til alle nøgleejere mindst seks måneder, før den gamle version stopper.
  • Felter, der udgår, virker videre i den periode.

Ændringer

14. oktober 2026

  • match (level, code, label, on, previous_address) står først i hvert resultat. status regnes ud fra stop_level.
  • stop_level kan sendes på POST /v2/check-jobs.
  • receipt_url på færdige jobs.
  • RateLimit-Limit, RateLimit-Remaining og RateLimit-Reset på alle svar.
  • Udgået: level (unit, building …) i et resultat og policy i en forespørgsel. Brug match.level og stop_level.

Personer

Tjek personer mod Robinsonlisten. Op til 1.000 ad gangen med svar med det samme, eller store lister som et job, der kører i baggrunden.

Tjek personer

POST/v2/checks

Tjekker op til 1.000 personer og svarer med det samme, i den rækkefølge I sendte dem. Giv hver person et navn og en adresse. Adressen kan stå i ét felt eller være delt op i vej, husnummer, etage, dør, postnummer og by.

Headers

  • Idempotency-Keystring

    En unik værdi, fx et UUID. Sender I det samme kald igen med samme nøgle inden for 24 timer, får I det første svar tilbage. Se Rate limits og idempotens.

Body

  • peoplearray of objectspåkrævet

    Personerne, der skal tjekkes. Mindst 1 og højst 1.000.

    Vis 12 felter
    • idstring

      Jeres egen reference, fx id'et i jeres CRM. Den kommer med tilbage i svaret.

    • namestring

      Fulde navn. Eller brug first_name og last_name.

    • first_namestring

      Fornavn (og evt. mellemnavne).

    • last_namestring

      Efternavn.

    • addressstring

      Hele adressen i ét felt, fx Stationsalleen 48, 1. b, 2770 Kastrup. Eller brug felterne herunder.

    • streetstring

      Vejnavn.

    • house_numberstring

      Husnummer, evt. med bogstav, fx 12B.

    • floorstring

      Etage, fx st, 1 eller kl.

    • doorstring

      Dør, fx tv, th, mf eller b.

    • postal_codestring

      Postnummer, fire cifre.

    • citystring

      By.

    • phonestring

      Telefonnummer, hvis I har det. Bruges kun, når opslag på telefonnumre er slået til.

  • stop_levelinteger · 1–5

    Gå efter et andet niveau end organisationens i netop dette kald. Det ændrer kun status, ikke hvad vi fandt. Se Niveauer.

Svar200

Et svar for hver person, i samme rækkefølge.

  • list_versionobjectpåkrævet

    Udgaven af Robinsonlisten, der er tjekket mod.

    Vis 4 felter
    • idstring (uuid)påkrævet

      Listeversionens id.

    • sourcestring

      cpr er Robinsonlisten. customer er jeres egen liste over personer, der har frabedt sig kontakt.

    • published_onstring (date)påkrævet

      Datoen, CPR udgav listen.

    • activated_atstring (date-time)

      Hvornår vi tog listen i brug.

  • resultsarray of objectspåkrævet

    Et resultat pr. person, i samme rækkefølge som i forespørgslen.

    Vis 7 felter
    • idstring · kan være null

      Jeres reference fra forespørgslen.

    • matchobject

      Hvad vi fandt på Robinsonlisten på personens adresse.

      Vis 5 felter
      • levelinteger · 0–5 · kan være nullpåkrævet

        Niveau fra 0 til 5. null, når adressen ikke kan læses.

      • codestring · kan være nullpåkrævet

        Niveauet som kode: none, household, surname, given_name, name_building eller name_address.

      • labelstring · kan være null

        Niveauet i ord, på dansk eller engelsk efter Accept-Language.

      • onarray of strings

        De dele, der passede: first_name, last_name, address og unit.

      • previous_addressboolean

        true, når personen står på listen på en tidligere adresse. Det tæller som mindst niveau 4.

    • statusobjectpåkrævet

      Til integrationer, regnet ud fra jeres valgte niveau: allowed (under niveauet), blocked (på niveauet eller derover) eller manual (adressen kan ikke læses).

    • stop_levelinteger · 1–5 · kan være null

      Det niveau, I går efter, og som status er regnet ud fra. Som standard 1, det forsigtigste.

    • reasonsarray of objectspåkrævet

      Koder, der forklarer svaret. Se Begrundelser.

    • addressobject · kan være null

      Sådan læste vi adressen. null, hvis den ikke kunne læses.

      Vis 10 felter
      • inputstring

        Adressen, som I sendte den.

      • okboolean

        true, når adressen kunne læses.

      • streetstring · kan være null

        Vejnavn.

      • house_numberstring · kan være null

        Husnummer.

      • floorstring · kan være null

        Etage.

      • doorstring · kan være null

        Dør.

      • postal_codestring · kan være null

        Postnummer.

      • citystring · kan være null

        By.

      • formattedstring · kan være null

        Adressen skrevet pænt på én linje.

      • confidencestring

        exact (passede præcist), corrected (rettet) eller unresolved (kunne ikke læses).

    • phone_lookupobject · kan være null

      Kun ved telefonnumre: hvad opslaget i nummeroplysningen gav.

      Vis 3 felter
      • outcomestring

        found (fundet), unlisted (hemmeligt nummer) eller not_found (ikke fundet).

      • namestring

        Navnet bag nummeret.

      • addressstring

        Adressen bag nummeret.

Mulige fejl401402409422429503

POST /v2/checks
curl -X POST https://api.robinsontjek.dk/v2/checks \
  -H "Authorization: Bearer $ROBINSONTJEK_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: b3f1c2de-5a7e-4c41-9d0a-2f6e8a91c7d4" \
  -d '{
    "people": [
      {
        "id": "lead-1042",
        "name": "Anne Marie Jensen",
        "address": "Stationsalleen 48, 1. b, 2770 Kastrup"
      },
      {
        "id": "lead-1043",
        "first_name": "Jens",
        "last_name": "Hansen",
        "address": "Vestergade 12 8000 Aarhus"
      }
    ]
  }'
Svar · 200 OK
{
  "list_version": {
    "id": "4c8e2a1f-7d3b-4e6a-9b25-1f0c6d8e3a71",
    "source": "cpr",
    "published_on": "2026-10-01",
    "activated_at": "2026-10-02T05:00:00Z"
  },
  "results": [
    {
      "id": "lead-1042",
      "match": {
        "level": 5,
        "code": "name_address",
        "label": "Samme navn og adresse",
        "on": ["first_name", "last_name", "address", "unit"],
        "previous_address": false
      },
      "status": "blocked",
      "stop_level": 1,
      "reasons": ["name_and_address"],
      "address": {
        "input": "Stationsalleen 48, 1. b, 2770 Kastrup",
        "ok": true,
        "street": "Stationsalleen",
        "house_number": "48",
        "floor": "1",
        "door": "b",
        "postal_code": "2770",
        "city": "Kastrup",
        "formatted": "Stationsalleen 48, 1. b, 2770 Kastrup",
        "confidence": "exact"
      }
    },
    {
      "id": "lead-1043",
      "match": {
        "level": 0,
        "code": "none",
        "label": "Ingen på listen på adressen",
        "on": [],
        "previous_address": false
      },
      "status": "allowed",
      "stop_level": 1,
      "reasons": [],
      "address": {
        "input": "Vestergade 12 8000 Aarhus",
        "ok": true,
        "street": "Vestergade",
        "house_number": "12",
        "floor": null,
        "door": null,
        "postal_code": "8000",
        "city": "Aarhus C",
        "formatted": "Vestergade 12, 8000 Aarhus C",
        "confidence": "corrected"
      }
    }
  ]
}

Opret et job

POST/v2/check-jobs

Til store lister: op til 1.000.000 personer som JSON, eller en Excel- eller CSV-fil. Jobbet kører i baggrunden. Følg det med »Hent et job«, eller få besked på callback_url. Resultaterne henter I side for side. Den markerede Excel-fil ligger i appen.

Headers

  • Idempotency-Keystring

    En unik værdi, fx et UUID. Sender I det samme kald igen med samme nøgle inden for 24 timer, får I det første svar tilbage. Se Rate limits og idempotens.

Body

  • peoplearray of objectspåkrævet

    Personerne, der skal tjekkes. Højst 1.000.000.

    Vis 12 felter
    • idstring

      Jeres egen reference, fx id'et i jeres CRM. Den kommer med tilbage i svaret.

    • namestring

      Fulde navn. Eller brug first_name og last_name.

    • first_namestring

      Fornavn (og evt. mellemnavne).

    • last_namestring

      Efternavn.

    • addressstring

      Hele adressen i ét felt, fx Stationsalleen 48, 1. b, 2770 Kastrup. Eller brug felterne herunder.

    • streetstring

      Vejnavn.

    • house_numberstring

      Husnummer, evt. med bogstav, fx 12B.

    • floorstring

      Etage, fx st, 1 eller kl.

    • doorstring

      Dør, fx tv, th, mf eller b.

    • postal_codestring

      Postnummer, fire cifre.

    • citystring

      By.

    • phonestring

      Telefonnummer, hvis I har det. Bruges kun, når opslag på telefonnumre er slået til.

  • callback_urlstring (uri)

    Vi sender en signeret POST hertil, når jobbet er færdigt eller mislykkedes. Se Webhooks.

  • external_refstring

    Jeres egen reference til jobbet, fx kampagnens navn. Den kommer med tilbage i svar og webhooks.

  • stop_levelinteger · 1–5

    Det niveau, listen filtreres på i netop dette job. Som standard jeres eget. Se Niveauer.

Eller send en fil (multipart/form-data)

  • filestring (binary)påkrævet

    En Excel-fil (xlsx eller xls) eller en CSV-fil.

  • column_mappingobject

    Hvilke kolonner der er hvad. Udelad den, så finder vi selv kolonnerne.

    Vis 15 felter
    • header_rowinteger

      Rækken med overskrifter. Den første række er 0.

    • nameinteger | string

      Kolonnens nummer (den første er 0) eller dens overskrift.

    • first_nameinteger | string

      Kolonnens nummer (den første er 0) eller dens overskrift.

    • last_nameinteger | string

      Kolonnens nummer (den første er 0) eller dens overskrift.

    • addressinteger | string

      Kolonnens nummer (den første er 0) eller dens overskrift.

    • streetinteger | string

      Kolonnens nummer (den første er 0) eller dens overskrift.

    • house_numberinteger | string

      Kolonnens nummer (den første er 0) eller dens overskrift.

    • floorinteger | string

      Kolonnens nummer (den første er 0) eller dens overskrift.

    • doorinteger | string

      Kolonnens nummer (den første er 0) eller dens overskrift.

    • postal_codeinteger | string

      Kolonnens nummer (den første er 0) eller dens overskrift.

    • cityinteger | string

      Kolonnens nummer (den første er 0) eller dens overskrift.

    • phoneinteger | string

      Kolonnens nummer (den første er 0) eller dens overskrift.

    • cvrinteger | string

      Kolonnens nummer (den første er 0) eller dens overskrift.

    • company_nameinteger | string

      Kolonnens nummer (den første er 0) eller dens overskrift.

    • external_idinteger | string

      Kolonnens nummer (den første er 0) eller dens overskrift.

  • callback_urlstring (uri)

    Vi sender en signeret POST hertil, når jobbet er færdigt eller mislykkedes. Se Webhooks.

  • external_refstring

    Jeres egen reference til jobbet, fx kampagnens navn. Den kommer med tilbage i svar og webhooks.

  • stop_levelinteger · 1–5

    Det niveau, listen filtreres på i netop dette job. Som standard jeres eget. Se Niveauer.

Svar202

Jobbet er modtaget og står i kø.

  • idstring (uuid)påkrævet

    Jobbets id.

  • sourcestringpåkrævet

    Hvor listen kom fra, fx api, upload eller email.

  • statusstringpåkrævet

    queued (i kø), running (kører), done (færdigt) eller failed (mislykkedes). draft er et job, der endnu ikke er sat i gang.

    Mulige værdier: draft, queued, running, done, failed, deleted

  • filenamestring · kan være null

    Filens navn, når listen kom som fil.

  • file_formatstring · kan være null

    xlsx, xls eller csv.

  • row_countinteger

    Antal rækker i listen.

  • processed_countinteger

    Antal rækker, der er tjekket indtil nu.

  • allowed_countinteger

    Antal under jeres niveau.

  • blocked_countinteger

    Antal på jeres niveau eller derover.

  • manual_countinteger

    Antal, hvor adressen ikke kunne læses.

  • level_countsobject
    Vis 7 felter
    • 0integerpåkrævet
    • 1integerpåkrævet
    • 2integerpåkrævet
    • 3integerpåkrævet
    • 4integerpåkrævet
    • 5integerpåkrævet
    • unreadintegerpåkrævet
  • column_mappingobject

    Hvilke kolonner der blev brugt til hvad.

    Vis 15 felter
    • header_rowinteger

      Rækken med overskrifter. Den første række er 0.

    • nameinteger | string

      Kolonnens nummer (den første er 0) eller dens overskrift.

    • first_nameinteger | string

      Kolonnens nummer (den første er 0) eller dens overskrift.

    • last_nameinteger | string

      Kolonnens nummer (den første er 0) eller dens overskrift.

    • addressinteger | string

      Kolonnens nummer (den første er 0) eller dens overskrift.

    • streetinteger | string

      Kolonnens nummer (den første er 0) eller dens overskrift.

    • house_numberinteger | string

      Kolonnens nummer (den første er 0) eller dens overskrift.

    • floorinteger | string

      Kolonnens nummer (den første er 0) eller dens overskrift.

    • doorinteger | string

      Kolonnens nummer (den første er 0) eller dens overskrift.

    • postal_codeinteger | string

      Kolonnens nummer (den første er 0) eller dens overskrift.

    • cityinteger | string

      Kolonnens nummer (den første er 0) eller dens overskrift.

    • phoneinteger | string

      Kolonnens nummer (den første er 0) eller dens overskrift.

    • cvrinteger | string

      Kolonnens nummer (den første er 0) eller dens overskrift.

    • company_nameinteger | string

      Kolonnens nummer (den første er 0) eller dens overskrift.

    • external_idinteger | string

      Kolonnens nummer (den første er 0) eller dens overskrift.

  • optionsobject

    Hvad jobbet tjekker.

    Vis 4 felter
    • check_peopleboolean

      Tjek personer mod Robinsonlisten.

    • check_companiesboolean

      Tjek virksomheder mod CVR's reklamebeskyttelse.

    • check_phonesboolean

      Slå telefonnumre op.

    • stop_levelinteger · 1–5

      Det niveau, listen filtreres på. Som standard jeres eget.

  • list_versionobject

    Udgaven af Robinsonlisten, der er tjekket mod.

    Vis 4 felter
    • idstring (uuid)påkrævet

      Listeversionens id.

    • sourcestring

      cpr er Robinsonlisten. customer er jeres egen liste over personer, der har frabedt sig kontakt.

    • published_onstring (date)påkrævet

      Datoen, CPR udgav listen.

    • activated_atstring (date-time)

      Hvornår vi tog listen i brug.

  • errorstring · kan være null

    Hvorfor jobbet mislykkedes.

  • external_refstring · kan være null

    Jeres egen reference fra oprettelsen.

  • receipt_urlstring (uri) · kan være null

    Adressen på kvitteringen for tjekket, når jobbet er færdigt.

  • delete_afterstring (date-time) · kan være null

    Hvornår filen og rækkerne slettes.

  • created_atstring (date-time)

    Hvornår jobbet blev oprettet.

  • finished_atstring (date-time) · kan være null

    Hvornår jobbet blev færdigt.

Mulige fejl401402409413422429503

POST /v2/check-jobs
curl -X POST https://api.robinsontjek.dk/v2/check-jobs \
  -H "Authorization: Bearer $ROBINSONTJEK_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: b3f1c2de-5a7e-4c41-9d0a-2f6e8a91c7d4" \
  -d '{
    "people": [
      {
        "id": "lead-1042",
        "name": "Anne Marie Jensen",
        "address": "Stationsalleen 48, 1. b, 2770 Kastrup"
      },
      {
        "id": "lead-1043",
        "first_name": "Jens",
        "last_name": "Hansen",
        "address": "Vestergade 12 8000 Aarhus"
      }
    ],
    "callback_url": "https://example.com/hooks/robinsontjek",
    "external_ref": "kampagne-oktober"
  }'
Svar · 202 Accepted
{
  "id": "5b1d9e3c-2a4f-4c7e-8d16-0e9f7a2b4c58",
  "source": "api",
  "status": "queued",
  "filename": null,
  "file_format": null,
  "row_count": 2,
  "processed_count": 0,
  "allowed_count": 0,
  "blocked_count": 0,
  "manual_count": 0,
  "list_version": {
    "id": "4c8e2a1f-7d3b-4e6a-9b25-1f0c6d8e3a71",
    "source": "cpr",
    "published_on": "2026-10-01",
    "activated_at": "2026-10-02T05:00:00Z"
  },
  "receipt_url": null,
  "created_at": "2026-10-14T09:41:58Z",
  "finished_at": null
}

Hent et job

GET/v2/check-jobs/{id}

Viser, hvor langt jobbet er, og tallene, når det er færdigt. Når jobbet er færdigt, peger receipt_url på kvitteringen for tjekket.

Sti

  • idstring (uuid)påkrævet

    Jobbets id.

Svar200

Jobbet, som det står nu.

  • idstring (uuid)påkrævet

    Jobbets id.

  • sourcestringpåkrævet

    Hvor listen kom fra, fx api, upload eller email.

  • statusstringpåkrævet

    queued (i kø), running (kører), done (færdigt) eller failed (mislykkedes). draft er et job, der endnu ikke er sat i gang.

    Mulige værdier: draft, queued, running, done, failed, deleted

  • filenamestring · kan være null

    Filens navn, når listen kom som fil.

  • file_formatstring · kan være null

    xlsx, xls eller csv.

  • row_countinteger

    Antal rækker i listen.

  • processed_countinteger

    Antal rækker, der er tjekket indtil nu.

  • allowed_countinteger

    Antal under jeres niveau.

  • blocked_countinteger

    Antal på jeres niveau eller derover.

  • manual_countinteger

    Antal, hvor adressen ikke kunne læses.

  • level_countsobject
    Vis 7 felter
    • 0integerpåkrævet
    • 1integerpåkrævet
    • 2integerpåkrævet
    • 3integerpåkrævet
    • 4integerpåkrævet
    • 5integerpåkrævet
    • unreadintegerpåkrævet
  • column_mappingobject

    Hvilke kolonner der blev brugt til hvad.

    Vis 15 felter
    • header_rowinteger

      Rækken med overskrifter. Den første række er 0.

    • nameinteger | string

      Kolonnens nummer (den første er 0) eller dens overskrift.

    • first_nameinteger | string

      Kolonnens nummer (den første er 0) eller dens overskrift.

    • last_nameinteger | string

      Kolonnens nummer (den første er 0) eller dens overskrift.

    • addressinteger | string

      Kolonnens nummer (den første er 0) eller dens overskrift.

    • streetinteger | string

      Kolonnens nummer (den første er 0) eller dens overskrift.

    • house_numberinteger | string

      Kolonnens nummer (den første er 0) eller dens overskrift.

    • floorinteger | string

      Kolonnens nummer (den første er 0) eller dens overskrift.

    • doorinteger | string

      Kolonnens nummer (den første er 0) eller dens overskrift.

    • postal_codeinteger | string

      Kolonnens nummer (den første er 0) eller dens overskrift.

    • cityinteger | string

      Kolonnens nummer (den første er 0) eller dens overskrift.

    • phoneinteger | string

      Kolonnens nummer (den første er 0) eller dens overskrift.

    • cvrinteger | string

      Kolonnens nummer (den første er 0) eller dens overskrift.

    • company_nameinteger | string

      Kolonnens nummer (den første er 0) eller dens overskrift.

    • external_idinteger | string

      Kolonnens nummer (den første er 0) eller dens overskrift.

  • optionsobject

    Hvad jobbet tjekker.

    Vis 4 felter
    • check_peopleboolean

      Tjek personer mod Robinsonlisten.

    • check_companiesboolean

      Tjek virksomheder mod CVR's reklamebeskyttelse.

    • check_phonesboolean

      Slå telefonnumre op.

    • stop_levelinteger · 1–5

      Det niveau, listen filtreres på. Som standard jeres eget.

  • list_versionobject

    Udgaven af Robinsonlisten, der er tjekket mod.

    Vis 4 felter
    • idstring (uuid)påkrævet

      Listeversionens id.

    • sourcestring

      cpr er Robinsonlisten. customer er jeres egen liste over personer, der har frabedt sig kontakt.

    • published_onstring (date)påkrævet

      Datoen, CPR udgav listen.

    • activated_atstring (date-time)

      Hvornår vi tog listen i brug.

  • errorstring · kan være null

    Hvorfor jobbet mislykkedes.

  • external_refstring · kan være null

    Jeres egen reference fra oprettelsen.

  • receipt_urlstring (uri) · kan være null

    Adressen på kvitteringen for tjekket, når jobbet er færdigt.

  • delete_afterstring (date-time) · kan være null

    Hvornår filen og rækkerne slettes.

  • created_atstring (date-time)

    Hvornår jobbet blev oprettet.

  • finished_atstring (date-time) · kan være null

    Hvornår jobbet blev færdigt.

Mulige fejl401404429

GET /v2/check-jobs/{id}
curl https://api.robinsontjek.dk/v2/check-jobs/5b1d9e3c-2a4f-4c7e-8d16-0e9f7a2b4c58 \
  -H "Authorization: Bearer $ROBINSONTJEK_API_KEY"
Svar · 200 OK
{
  "id": "5b1d9e3c-2a4f-4c7e-8d16-0e9f7a2b4c58",
  "source": "api",
  "status": "done",
  "filename": null,
  "file_format": null,
  "row_count": 1840,
  "processed_count": 1840,
  "allowed_count": 1512,
  "blocked_count": 312,
  "manual_count": 16,
  "list_version": {
    "id": "4c8e2a1f-7d3b-4e6a-9b25-1f0c6d8e3a71",
    "source": "cpr",
    "published_on": "2026-10-01",
    "activated_at": "2026-10-02T05:00:00Z"
  },
  "receipt_url": "https://robinsontjek.dk/kvittering/rk_9QeT4mXw2LbN7cVz",
  "delete_after": "2026-11-13T09:42:30Z",
  "created_at": "2026-10-14T09:41:58Z",
  "finished_at": "2026-10-14T09:42:30Z"
}

Hent resultater

GET/v2/check-jobs/{id}/results

Resultaterne kommer i sider på op til 10.000. Send next_cursor fra svaret som cursor i næste kald, indtil den er null.

Sti

  • idstring (uuid)påkrævet

    Jobbets id.

Query

  • cursorstring

    next_cursor fra forrige side. Udelad den for at få første side.

  • limitinteger

    Antal resultater pr. side. Højst 10.000.

Svar200

En side med resultater.

  • resultsarray of objects

    Resultaterne på denne side.

    Vis 7 felter
    • idstring · kan være null

      Jeres reference fra forespørgslen.

    • matchobject

      Hvad vi fandt på Robinsonlisten på personens adresse.

      Vis 5 felter
      • levelinteger · 0–5 · kan være nullpåkrævet

        Niveau fra 0 til 5. null, når adressen ikke kan læses.

      • codestring · kan være nullpåkrævet

        Niveauet som kode: none, household, surname, given_name, name_building eller name_address.

      • labelstring · kan være null

        Niveauet i ord, på dansk eller engelsk efter Accept-Language.

      • onarray of strings

        De dele, der passede: first_name, last_name, address og unit.

      • previous_addressboolean

        true, når personen står på listen på en tidligere adresse. Det tæller som mindst niveau 4.

    • statusobjectpåkrævet

      Til integrationer, regnet ud fra jeres valgte niveau: allowed (under niveauet), blocked (på niveauet eller derover) eller manual (adressen kan ikke læses).

    • stop_levelinteger · 1–5 · kan være null

      Det niveau, I går efter, og som status er regnet ud fra. Som standard 1, det forsigtigste.

    • reasonsarray of objectspåkrævet

      Koder, der forklarer svaret. Se Begrundelser.

    • addressobject · kan være null

      Sådan læste vi adressen. null, hvis den ikke kunne læses.

      Vis 10 felter
      • inputstring

        Adressen, som I sendte den.

      • okboolean

        true, når adressen kunne læses.

      • streetstring · kan være null

        Vejnavn.

      • house_numberstring · kan være null

        Husnummer.

      • floorstring · kan være null

        Etage.

      • doorstring · kan være null

        Dør.

      • postal_codestring · kan være null

        Postnummer.

      • citystring · kan være null

        By.

      • formattedstring · kan være null

        Adressen skrevet pænt på én linje.

      • confidencestring

        exact (passede præcist), corrected (rettet) eller unresolved (kunne ikke læses).

    • phone_lookupobject · kan være null

      Kun ved telefonnumre: hvad opslaget i nummeroplysningen gav.

      Vis 3 felter
      • outcomestring

        found (fundet), unlisted (hemmeligt nummer) eller not_found (ikke fundet).

      • namestring

        Navnet bag nummeret.

      • addressstring

        Adressen bag nummeret.

  • next_cursorstring · kan være null

    Send den som cursor for at hente næste side. null, når der ikke er flere.

Mulige fejl401404409429

GET /v2/check-jobs/{id}/results
curl https://api.robinsontjek.dk/v2/check-jobs/5b1d9e3c-2a4f-4c7e-8d16-0e9f7a2b4c58/results?limit=1000 \
  -H "Authorization: Bearer $ROBINSONTJEK_API_KEY"
Svar · 200 OK
{
  "results": [
    {
      "id": "lead-1042",
      "match": {
        "level": 5,
        "code": "name_address",
        "label": "Samme navn og adresse",
        "on": ["first_name", "last_name", "address", "unit"],
        "previous_address": false
      },
      "status": "blocked",
      "stop_level": 1,
      "reasons": ["name_and_address"],
      "address": {
        "input": "Stationsalleen 48, 1. b, 2770 Kastrup",
        "ok": true,
        "street": "Stationsalleen",
        "house_number": "48",
        "floor": "1",
        "door": "b",
        "postal_code": "2770",
        "city": "Kastrup",
        "formatted": "Stationsalleen 48, 1. b, 2770 Kastrup",
        "confidence": "exact"
      }
    },
    {
      "id": "lead-1043",
      "match": {
        "level": 0,
        "code": "none",
        "label": "Ingen på listen på adressen",
        "on": [],
        "previous_address": false
      },
      "status": "allowed",
      "stop_level": 1,
      "reasons": [],
      "address": {
        "input": "Vestergade 12 8000 Aarhus",
        "ok": true,
        "street": "Vestergade",
        "house_number": "12",
        "floor": null,
        "door": null,
        "postal_code": "8000",
        "city": "Aarhus C",
        "formatted": "Vestergade 12, 8000 Aarhus C",
        "confidence": "corrected"
      }
    }
  ],
  "next_cursor": "eyJyb3ciOjEwMDB9"
}

Virksomheder (tilkøb, efter aftale)

Tilkøb, efter aftale. Tjek virksomheder mod CVR's reklamebeskyttelse. Er virksomheden en enkeltmandsvirksomhed, tjekker vi også ejeren mod Robinsonlisten. Endpointet svarer 403, til det er slået til for jeres konto. Skriv til os, hvis I vil have det.

Tjek virksomheder

POST/v2/company-checks

Tilkøb, efter aftale: svarer 403, til det er slået til for jeres konto. Send CVR-nummer eller navn på op til 1.000 virksomheder ad gangen.

Body

  • companiesarray of objectspåkrævet

    Virksomhederne, der skal tjekkes. Højst 1.000.

    Vis 3 felter
    • idstring

      Jeres egen reference. Den kommer med tilbage i svaret.

    • cvrstring

      CVR-nummer, otte cifre.

    • namestring

      Virksomhedens navn, hvis I ikke har CVR-nummeret.

Svar200

Et svar for hver virksomhed.

  • resultsarray of objects

    Et resultat pr. virksomhed.

    Vis 7 felter
    • idstring · kan være null

      Jeres reference fra forespørgslen.

    • cvrstring · kan være null

      CVR-nummeret.

    • namestring · kan være null

      Virksomhedens navn i CVR.

    • statusobjectpåkrævet

      blocked, når virksomheden har frabedt sig reklamer. manual, når vi ikke kan finde den.

      Mulige værdier: allowed, blocked, manual

    • reasonsarray of objectspåkrævet

      Koder, der forklarer svaret, fx company_protected.

    • company_formstring · kan være null

      Virksomhedsform, fx ApS eller Enkeltmandsvirksomhed.

    • synced_atstring (date-time) · kan være null

      Hvornår vi sidst hentede virksomheden fra CVR.

Mulige fejl401402403422429

POST /v2/company-checks
curl -X POST https://api.robinsontjek.dk/v2/company-checks \
  -H "Authorization: Bearer $ROBINSONTJEK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "companies": [
      {
        "id": "acc-301",
        "cvr": "12345678"
      },
      {
        "id": "acc-302",
        "name": "Eksempel Byg ApS"
      }
    ]
  }'
Svar · 200 OK
{
  "results": [
    {
      "id": "acc-301",
      "cvr": "12345678",
      "name": "Prøve Handel ApS",
      "status": "blocked",
      "reasons": ["company_protected"],
      "company_form": "ApS",
      "synced_at": "2026-10-14T03:00:00Z"
    },
    {
      "id": "acc-302",
      "cvr": "87654321",
      "name": "Eksempel Byg ApS",
      "status": "allowed",
      "reasons": [],
      "company_form": "ApS",
      "synced_at": "2026-10-14T03:00:00Z"
    }
  ]
}

Telefonnumre (tilkøb, efter aftale)

Tilkøb, efter aftale. Slå et nummer op i nummeroplysningen, og tjek personen bag det mod Robinsonlisten. Endpointet svarer 403, til det er slået til for jeres konto, og prisen aftales pr. opslag.

Tjek telefonnumre

POST/v2/phone-checks

Tilkøb, efter aftale: svarer 403, til det er slået til for jeres konto. Op til 500 numre ad gangen, med eller uden +45 og mellemrum. Er nummeret hemmeligt, eller kan vi ikke finde, hvem der har det, er svaret manual.

Body

  • phonesarray of objectspåkrævet

    Numrene, der skal slås op. Højst 500.

    Vis 2 felter
    • phonestringpåkrævet

      Telefonnummeret, fx +4520202020 eller 20 20 20 20.

    • idstring

      Jeres egen reference. Den kommer med tilbage i svaret.

Svar200

Et svar for hvert nummer.

  • list_versionobject

    Udgaven af Robinsonlisten, der er tjekket mod.

    Vis 4 felter
    • idstring (uuid)påkrævet

      Listeversionens id.

    • sourcestring

      cpr er Robinsonlisten. customer er jeres egen liste over personer, der har frabedt sig kontakt.

    • published_onstring (date)påkrævet

      Datoen, CPR udgav listen.

    • activated_atstring (date-time)

      Hvornår vi tog listen i brug.

  • resultsarray of objects

    Et resultat pr. nummer.

    Vis 7 felter
    • idstring · kan være null

      Jeres reference fra forespørgslen.

    • matchobject

      Hvad vi fandt på Robinsonlisten på personens adresse.

      Vis 5 felter
      • levelinteger · 0–5 · kan være nullpåkrævet

        Niveau fra 0 til 5. null, når adressen ikke kan læses.

      • codestring · kan være nullpåkrævet

        Niveauet som kode: none, household, surname, given_name, name_building eller name_address.

      • labelstring · kan være null

        Niveauet i ord, på dansk eller engelsk efter Accept-Language.

      • onarray of strings

        De dele, der passede: first_name, last_name, address og unit.

      • previous_addressboolean

        true, når personen står på listen på en tidligere adresse. Det tæller som mindst niveau 4.

    • statusobjectpåkrævet

      Til integrationer, regnet ud fra jeres valgte niveau: allowed (under niveauet), blocked (på niveauet eller derover) eller manual (adressen kan ikke læses).

    • stop_levelinteger · 1–5 · kan være null

      Det niveau, I går efter, og som status er regnet ud fra. Som standard 1, det forsigtigste.

    • reasonsarray of objectspåkrævet

      Koder, der forklarer svaret. Se Begrundelser.

    • addressobject · kan være null

      Sådan læste vi adressen. null, hvis den ikke kunne læses.

      Vis 10 felter
      • inputstring

        Adressen, som I sendte den.

      • okboolean

        true, når adressen kunne læses.

      • streetstring · kan være null

        Vejnavn.

      • house_numberstring · kan være null

        Husnummer.

      • floorstring · kan være null

        Etage.

      • doorstring · kan være null

        Dør.

      • postal_codestring · kan være null

        Postnummer.

      • citystring · kan være null

        By.

      • formattedstring · kan være null

        Adressen skrevet pænt på én linje.

      • confidencestring

        exact (passede præcist), corrected (rettet) eller unresolved (kunne ikke læses).

    • phone_lookupobject · kan være null

      Kun ved telefonnumre: hvad opslaget i nummeroplysningen gav.

      Vis 3 felter
      • outcomestring

        found (fundet), unlisted (hemmeligt nummer) eller not_found (ikke fundet).

      • namestring

        Navnet bag nummeret.

      • addressstring

        Adressen bag nummeret.

Mulige fejl401402403422429503

POST /v2/phone-checks
curl -X POST https://api.robinsontjek.dk/v2/phone-checks \
  -H "Authorization: Bearer $ROBINSONTJEK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "phones": [
      {
        "id": "lead-77",
        "phone": "+4520202020"
      }
    ]
  }'
Svar · 200 OK
{
  "list_version": {
    "id": "4c8e2a1f-7d3b-4e6a-9b25-1f0c6d8e3a71",
    "source": "cpr",
    "published_on": "2026-10-01",
    "activated_at": "2026-10-02T05:00:00Z"
  },
  "results": [
    {
      "id": "lead-77",
      "match": {
        "level": 0,
        "code": "none",
        "label": "Ingen på listen på adressen",
        "on": [],
        "previous_address": false
      },
      "status": "allowed",
      "stop_level": 1,
      "reasons": [],
      "phone_lookup": {
        "outcome": "found",
        "name": "Testa Testesen",
        "address": "Prøvevej 12, 8000 Aarhus C"
      }
    }
  ]
}

Listeversion

Hvilken udgave af Robinsonlisten tjekkene kører mod lige nu.

Hent den aktuelle liste

GET/v2/list-versions/current

Brug den til at vise listens dato i jeres eget system, eller til at se, om en ny udgave er taget i brug siden sidst.

Svar200

Den udgave, tjek kører mod nu.

  • idstring (uuid)påkrævet

    Listeversionens id.

  • sourcestring

    cpr er Robinsonlisten. customer er jeres egen liste over personer, der har frabedt sig kontakt.

  • published_onstring (date)påkrævet

    Datoen, CPR udgav listen.

  • activated_atstring (date-time)

    Hvornår vi tog listen i brug.

Mulige fejl401429

GET /v2/list-versions/current
curl https://api.robinsontjek.dk/v2/list-versions/current \
  -H "Authorization: Bearer $ROBINSONTJEK_API_KEY"
Svar · 200 OK
{
  "id": "4c8e2a1f-7d3b-4e6a-9b25-1f0c6d8e3a71",
  "source": "cpr",
  "published_on": "2026-10-01",
  "activated_at": "2026-10-02T05:00:00Z"
}

Adresser

Læs danske adresser skrevet som fri tekst, og få dem tilbage delt op og rettet. Det koster ikke noget.

Læs adresser

POST/v2/addresses/resolve

Op til 100 adresser ad gangen. confidence siger, om adressen passede præcist (exact), blev rettet (corrected) eller ikke kunne læses (unresolved).

Body

  • addressesarray of stringspåkrævet

    Adresserne som fri tekst. Højst 100.

Svar200

En læsning for hver adresse.

  • resultsarray of objects

    En læsning pr. adresse, i samme rækkefølge.

    Vis 10 felter
    • inputstring

      Adressen, som I sendte den.

    • okboolean

      true, når adressen kunne læses.

    • streetstring · kan være null

      Vejnavn.

    • house_numberstring · kan være null

      Husnummer.

    • floorstring · kan være null

      Etage.

    • doorstring · kan være null

      Dør.

    • postal_codestring · kan være null

      Postnummer.

    • citystring · kan være null

      By.

    • formattedstring · kan være null

      Adressen skrevet pænt på én linje.

    • confidencestring

      exact (passede præcist), corrected (rettet) eller unresolved (kunne ikke læses).

Mulige fejl401422429

POST /v2/addresses/resolve
curl -X POST https://api.robinsontjek.dk/v2/addresses/resolve \
  -H "Authorization: Bearer $ROBINSONTJEK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "addresses": ["Stationsalleen 48 1b 2770 Kastrup", "Norregade 7, 1165 Kbh K"]
  }'
Svar · 200 OK
{
  "results": [
    {
      "input": "Stationsalleen 48 1b 2770 Kastrup",
      "ok": true,
      "street": "Stationsalleen",
      "house_number": "48",
      "floor": "1",
      "door": "b",
      "postal_code": "2770",
      "city": "Kastrup",
      "formatted": "Stationsalleen 48, 1. b, 2770 Kastrup",
      "confidence": "corrected"
    },
    {
      "input": "Norregade 7, 1165 Kbh K",
      "ok": true,
      "street": "Nørregade",
      "house_number": "7",
      "floor": null,
      "door": null,
      "postal_code": "1165",
      "city": "København K",
      "formatted": "Nørregade 7, 1165 København K",
      "confidence": "corrected"
    }
  ]
}