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.
- 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. - 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.
- Læs svaret.
match.leveler5, »Samme navn og adresse«.statuserblocked, fordi jeres niveau (stop_level) som standard er 1. Skift navnet til »Anne Jensen«, ogmatch.levelbliver0.
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.labelogmatch.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).
https://api.robinsontjek.dkcurl -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"
}
]
}'const res = await fetch("https://api.robinsontjek.dk/v2/checks", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.ROBINSONTJEK_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
people: [
{
id: "lead-1",
name: "Test Blokeret",
address: "Testvej 1, 9999 Testby"
}
]
}),
});
const data = await res.json();import os
import requests
res = requests.post(
"https://api.robinsontjek.dk/v2/checks",
headers={
"Authorization": f"Bearer {os.environ['ROBINSONTJEK_API_KEY']}",
},
json={
"people": [
{
"id": "lead-1",
"name": "Test Blokeret",
"address": "Testvej 1, 9999 Testby"
}
]
},
)
data = res.json()require "net/http"
require "json"
uri = URI("https://api.robinsontjek.dk/v2/checks")
req = Net::HTTP::Post.new(uri, {
"Authorization" => "Bearer #{ENV.fetch("ROBINSONTJEK_API_KEY")}",
"Content-Type" => "application/json",
})
req.body = JSON.generate({
"people" => [
{
"id" => "lead-1",
"name" => "Test Blokeret",
"address" => "Testvej 1, 9999 Testby"
}
]
})
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(req) }
data = JSON.parse(res.body)<?php
$ch = curl_init("https://api.robinsontjek.dk/v2/checks");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer " . getenv("ROBINSONTJEK_API_KEY"),
"Content-Type: application/json",
],
CURLOPT_POSTFIELDS => json_encode([
"people" => [
[
"id" => "lead-1",
"name" => "Test Blokeret",
"address" => "Testvej 1, 9999 Testby"
]
]
]),
CURLOPT_RETURNTRANSFER => true,
]);
$data = json_decode(curl_exec($ch), true);{
"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.
Authorization: Bearer rl_test_4f9c1a7e2b8d6035HTTP/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.
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"
}
]
}'const res = await fetch("https://api.robinsontjek.dk/v2/checks", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.ROBINSONTJEK_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
people: [
{
id: "lead-2",
name: "Anne Jensen",
address: "Testvej 1, 9999 Testby"
}
]
}),
});
const data = await res.json();import os
import requests
res = requests.post(
"https://api.robinsontjek.dk/v2/checks",
headers={
"Authorization": f"Bearer {os.environ['ROBINSONTJEK_API_KEY']}",
},
json={
"people": [
{
"id": "lead-2",
"name": "Anne Jensen",
"address": "Testvej 1, 9999 Testby"
}
]
},
)
data = res.json()require "net/http"
require "json"
uri = URI("https://api.robinsontjek.dk/v2/checks")
req = Net::HTTP::Post.new(uri, {
"Authorization" => "Bearer #{ENV.fetch("ROBINSONTJEK_API_KEY")}",
"Content-Type" => "application/json",
})
req.body = JSON.generate({
"people" => [
{
"id" => "lead-2",
"name" => "Anne Jensen",
"address" => "Testvej 1, 9999 Testby"
}
]
})
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(req) }
data = JSON.parse(res.body)<?php
$ch = curl_init("https://api.robinsontjek.dk/v2/checks");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer " . getenv("ROBINSONTJEK_API_KEY"),
"Content-Type: application/json",
],
CURLOPT_POSTFIELDS => json_encode([
"people" => [
[
"id" => "lead-2",
"name" => "Anne Jensen",
"address" => "Testvej 1, 9999 Testby"
]
]
]),
CURLOPT_RETURNTRANSFER => true,
]);
$data = json_decode(curl_exec($ch), true);{
"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. |
{
"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"]
}{
"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.
{
"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 (
202for et job) og headerenIdempotent-Replayed: true. - Samme nøgle med et andet indhold giver
422 idempotency_conflict. Mens det første kald stadig kører, giver den409 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.
HTTP/1.1 200 OK
X-Robinsontjek-Mode: live
RateLimit-Limit: 600
RateLimit-Remaining: 597
RateLimit-Reset: 41
Content-Type: application/jsoncurl -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"
}
]
}'const res = await fetch("https://api.robinsontjek.dk/v2/checks", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.ROBINSONTJEK_API_KEY}`,
"Content-Type": "application/json",
"Idempotency-Key": crypto.randomUUID(),
},
body: JSON.stringify({
people: [
{
id: "lead-1042",
name: "Anne Marie Jensen",
address: "Stationsalleen 48, 1. b, 2770 Kastrup"
}
]
}),
});
const data = await res.json();import os
import uuid
import requests
res = requests.post(
"https://api.robinsontjek.dk/v2/checks",
headers={
"Authorization": f"Bearer {os.environ['ROBINSONTJEK_API_KEY']}",
"Idempotency-Key": str(uuid.uuid4()),
},
json={
"people": [
{
"id": "lead-1042",
"name": "Anne Marie Jensen",
"address": "Stationsalleen 48, 1. b, 2770 Kastrup"
}
]
},
)
data = res.json()require "net/http"
require "json"
require "securerandom"
uri = URI("https://api.robinsontjek.dk/v2/checks")
req = Net::HTTP::Post.new(uri, {
"Authorization" => "Bearer #{ENV.fetch("ROBINSONTJEK_API_KEY")}",
"Content-Type" => "application/json",
"Idempotency-Key" => SecureRandom.uuid,
})
req.body = JSON.generate({
"people" => [
{
"id" => "lead-1042",
"name" => "Anne Marie Jensen",
"address" => "Stationsalleen 48, 1. b, 2770 Kastrup"
}
]
})
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(req) }
data = JSON.parse(res.body)<?php
$ch = curl_init("https://api.robinsontjek.dk/v2/checks");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer " . getenv("ROBINSONTJEK_API_KEY"),
"Content-Type: application/json",
"Idempotency-Key: " . bin2hex(random_bytes(16)),
],
CURLOPT_POSTFIELDS => json_encode([
"people" => [
[
"id" => "lead-1042",
"name" => "Anne Marie Jensen",
"address" => "Stationsalleen 48, 1. b, 2770 Kastrup"
]
]
]),
CURLOPT_RETURNTRANSFER => true,
]);
$data = json_decode(curl_exec($ch), true);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_urlgælder ét job. Giv den med tilPOST /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. |
- Læs headeren, og tag
togv1. - Beregn HMAC-SHA256 af
t + "." + rå bodymed hemmeligheden. - Sammenlign med
v1på en måde, der tager lige lang tid uanset resultatet. - Afvis leveringer, hvor
ter 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.
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"
}
}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));
}import hashlib
import hmac
import time
def verify(header, raw_body: bytes, secret: str) -> bool:
parts = dict(p.split("=", 1) for p in header.split(","))
signed = parts["t"].encode() + b"." + raw_body
expected = hmac.new(secret.encode(), signed, hashlib.sha256).hexdigest()
fresh = abs(time.time() - int(parts["t"])) < 300
return fresh and hmac.compare_digest(expected, parts["v1"])require "openssl"
def verify(header, raw_body, secret)
parts = header.split(",").to_h { |p| p.split("=", 2) }
expected = OpenSSL::HMAC.hexdigest("SHA256", secret, "#{parts["t"]}.#{raw_body}")
fresh = (Time.now.to_i - parts["t"].to_i).abs < 300
fresh && Rack::Utils.secure_compare(expected, parts["v1"])
end<?php
function verify(string $header, string $rawBody, string $secret): bool {
parse_str(str_replace(",", "&", $header), $parts);
$expected = hash_hmac("sha256", $parts["t"] . "." . $rawBody, $secret);
$fresh = abs(time() - (int) $parts["t"]) < 300;
return $fresh && hash_equals($expected, $parts["v1"]);
}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");import hashlib
import os
secret = hashlib.sha256(os.environ["ROBINSONTJEK_API_KEY"].encode()).hexdigest()require "digest"
secret = Digest::SHA256.hexdigest(ENV.fetch("ROBINSONTJEK_API_KEY"))<?php
$secret = hash("sha256", getenv("ROBINSONTJEK_API_KEY"));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.statusregnes ud frastop_level.stop_levelkan sendes påPOST /v2/check-jobs.receipt_urlpå færdige jobs.RateLimit-Limit,RateLimit-RemainingogRateLimit-Resetpå alle svar.- Udgået:
level(unit,building…) i et resultat ogpolicyi en forespørgsel. Brugmatch.levelogstop_level.
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-KeystringEn 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ævetPersonerne, der skal tjekkes. Mindst 1 og højst 1.000.
Vis 12 felter
idstringJeres egen reference, fx id'et i jeres CRM. Den kommer med tilbage i svaret.
namestringFulde navn. Eller brug
first_nameoglast_name.first_namestringFornavn (og evt. mellemnavne).
last_namestringEfternavn.
addressstringHele adressen i ét felt, fx
Stationsalleen 48, 1. b, 2770 Kastrup. Eller brug felterne herunder.streetstringVejnavn.
house_numberstringHusnummer, evt. med bogstav, fx
12B.floorstringEtage, fx
st,1ellerkl.doorstringDør, fx
tv,th,mfellerb.postal_codestringPostnummer, fire cifre.
citystringBy.
phonestringTelefonnummer, hvis I har det. Bruges kun, når opslag på telefonnumre er slået til.
stop_levelinteger · 1–5Gå 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ævetUdgaven af Robinsonlisten, der er tjekket mod.
Vis 4 felter
idstring (uuid)påkrævetListeversionens id.
sourcestringcprer Robinsonlisten.customerer jeres egen liste over personer, der har frabedt sig kontakt.published_onstring (date)påkrævetDatoen, CPR udgav listen.
activated_atstring (date-time)Hvornår vi tog listen i brug.
resultsarray of objectspåkrævetEt resultat pr. person, i samme rækkefølge som i forespørgslen.
Vis 7 felter
idstring · kan være nullJeres reference fra forespørgslen.
matchobjectHvad vi fandt på Robinsonlisten på personens adresse.
Vis 5 felter
levelinteger · 0–5 · kan være nullpåkrævetNiveau fra 0 til 5.
null, når adressen ikke kan læses.codestring · kan være nullpåkrævetNiveauet som kode:
none,household,surname,given_name,name_buildingellername_address.labelstring · kan være nullNiveauet i ord, på dansk eller engelsk efter
Accept-Language.onarray of stringsDe dele, der passede:
first_name,last_name,addressogunit.previous_addressbooleantrue, når personen står på listen på en tidligere adresse. Det tæller som mindst niveau 4.
statusobjectpåkrævetTil integrationer, regnet ud fra jeres valgte niveau:
allowed(under niveauet),blocked(på niveauet eller derover) ellermanual(adressen kan ikke læses).stop_levelinteger · 1–5 · kan være nullDet niveau, I går efter, og som
statuser regnet ud fra. Som standard 1, det forsigtigste.reasonsarray of objectspåkrævetKoder, der forklarer svaret. Se Begrundelser.
addressobject · kan være nullSådan læste vi adressen.
null, hvis den ikke kunne læses.Vis 10 felter
inputstringAdressen, som I sendte den.
okbooleantrue, når adressen kunne læses.streetstring · kan være nullVejnavn.
house_numberstring · kan være nullHusnummer.
floorstring · kan være nullEtage.
doorstring · kan være nullDør.
postal_codestring · kan være nullPostnummer.
citystring · kan være nullBy.
formattedstring · kan være nullAdressen skrevet pænt på én linje.
confidencestringexact(passede præcist),corrected(rettet) ellerunresolved(kunne ikke læses).
phone_lookupobject · kan være nullKun ved telefonnumre: hvad opslaget i nummeroplysningen gav.
Vis 3 felter
outcomestringfound(fundet),unlisted(hemmeligt nummer) ellernot_found(ikke fundet).namestringNavnet bag nummeret.
addressstringAdressen bag nummeret.
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"
}
]
}'const res = await fetch("https://api.robinsontjek.dk/v2/checks", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.ROBINSONTJEK_API_KEY}`,
"Content-Type": "application/json",
"Idempotency-Key": crypto.randomUUID(),
},
body: JSON.stringify({
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"
}
]
}),
});
const data = await res.json();import os
import uuid
import requests
res = requests.post(
"https://api.robinsontjek.dk/v2/checks",
headers={
"Authorization": f"Bearer {os.environ['ROBINSONTJEK_API_KEY']}",
"Idempotency-Key": str(uuid.uuid4()),
},
json={
"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"
}
]
},
)
data = res.json()require "net/http"
require "json"
require "securerandom"
uri = URI("https://api.robinsontjek.dk/v2/checks")
req = Net::HTTP::Post.new(uri, {
"Authorization" => "Bearer #{ENV.fetch("ROBINSONTJEK_API_KEY")}",
"Content-Type" => "application/json",
"Idempotency-Key" => SecureRandom.uuid,
})
req.body = JSON.generate({
"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"
}
]
})
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(req) }
data = JSON.parse(res.body)<?php
$ch = curl_init("https://api.robinsontjek.dk/v2/checks");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer " . getenv("ROBINSONTJEK_API_KEY"),
"Content-Type: application/json",
"Idempotency-Key: " . bin2hex(random_bytes(16)),
],
CURLOPT_POSTFIELDS => json_encode([
"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"
]
]
]),
CURLOPT_RETURNTRANSFER => true,
]);
$data = json_decode(curl_exec($ch), true);{
"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-KeystringEn 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ævetPersonerne, der skal tjekkes. Højst 1.000.000.
Vis 12 felter
idstringJeres egen reference, fx id'et i jeres CRM. Den kommer med tilbage i svaret.
namestringFulde navn. Eller brug
first_nameoglast_name.first_namestringFornavn (og evt. mellemnavne).
last_namestringEfternavn.
addressstringHele adressen i ét felt, fx
Stationsalleen 48, 1. b, 2770 Kastrup. Eller brug felterne herunder.streetstringVejnavn.
house_numberstringHusnummer, evt. med bogstav, fx
12B.floorstringEtage, fx
st,1ellerkl.doorstringDør, fx
tv,th,mfellerb.postal_codestringPostnummer, fire cifre.
citystringBy.
phonestringTelefonnummer, hvis I har det. Bruges kun, når opslag på telefonnumre er slået til.
callback_urlstring (uri)Vi sender en signeret
POSThertil, når jobbet er færdigt eller mislykkedes. Se Webhooks.external_refstringJeres egen reference til jobbet, fx kampagnens navn. Den kommer med tilbage i svar og webhooks.
stop_levelinteger · 1–5Det 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ævetEn Excel-fil (xlsx eller xls) eller en CSV-fil.
column_mappingobjectHvilke kolonner der er hvad. Udelad den, så finder vi selv kolonnerne.
Vis 15 felter
header_rowintegerRækken med overskrifter. Den første række er 0.
nameinteger | stringKolonnens nummer (den første er 0) eller dens overskrift.
first_nameinteger | stringKolonnens nummer (den første er 0) eller dens overskrift.
last_nameinteger | stringKolonnens nummer (den første er 0) eller dens overskrift.
addressinteger | stringKolonnens nummer (den første er 0) eller dens overskrift.
streetinteger | stringKolonnens nummer (den første er 0) eller dens overskrift.
house_numberinteger | stringKolonnens nummer (den første er 0) eller dens overskrift.
floorinteger | stringKolonnens nummer (den første er 0) eller dens overskrift.
doorinteger | stringKolonnens nummer (den første er 0) eller dens overskrift.
postal_codeinteger | stringKolonnens nummer (den første er 0) eller dens overskrift.
cityinteger | stringKolonnens nummer (den første er 0) eller dens overskrift.
phoneinteger | stringKolonnens nummer (den første er 0) eller dens overskrift.
cvrinteger | stringKolonnens nummer (den første er 0) eller dens overskrift.
company_nameinteger | stringKolonnens nummer (den første er 0) eller dens overskrift.
external_idinteger | stringKolonnens nummer (den første er 0) eller dens overskrift.
callback_urlstring (uri)Vi sender en signeret
POSThertil, når jobbet er færdigt eller mislykkedes. Se Webhooks.external_refstringJeres egen reference til jobbet, fx kampagnens navn. Den kommer med tilbage i svar og webhooks.
stop_levelinteger · 1–5Det 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ævetJobbets id.
sourcestringpåkrævetHvor listen kom fra, fx
api,uploadelleremail.statusstringpåkrævetqueued(i kø),running(kører),done(færdigt) ellerfailed(mislykkedes).drafter et job, der endnu ikke er sat i gang.Mulige værdier:
draft,queued,running,done,failed,deletedfilenamestring · kan være nullFilens navn, når listen kom som fil.
file_formatstring · kan være nullxlsx,xlsellercsv.row_countintegerAntal rækker i listen.
processed_countintegerAntal rækker, der er tjekket indtil nu.
allowed_countintegerAntal under jeres niveau.
blocked_countintegerAntal på jeres niveau eller derover.
manual_countintegerAntal, hvor adressen ikke kunne læses.
level_countsobjectVis 7 felter
0integerpåkrævet1integerpåkrævet2integerpåkrævet3integerpåkrævet4integerpåkrævet5integerpåkrævetunreadintegerpåkrævet
column_mappingobjectHvilke kolonner der blev brugt til hvad.
Vis 15 felter
header_rowintegerRækken med overskrifter. Den første række er 0.
nameinteger | stringKolonnens nummer (den første er 0) eller dens overskrift.
first_nameinteger | stringKolonnens nummer (den første er 0) eller dens overskrift.
last_nameinteger | stringKolonnens nummer (den første er 0) eller dens overskrift.
addressinteger | stringKolonnens nummer (den første er 0) eller dens overskrift.
streetinteger | stringKolonnens nummer (den første er 0) eller dens overskrift.
house_numberinteger | stringKolonnens nummer (den første er 0) eller dens overskrift.
floorinteger | stringKolonnens nummer (den første er 0) eller dens overskrift.
doorinteger | stringKolonnens nummer (den første er 0) eller dens overskrift.
postal_codeinteger | stringKolonnens nummer (den første er 0) eller dens overskrift.
cityinteger | stringKolonnens nummer (den første er 0) eller dens overskrift.
phoneinteger | stringKolonnens nummer (den første er 0) eller dens overskrift.
cvrinteger | stringKolonnens nummer (den første er 0) eller dens overskrift.
company_nameinteger | stringKolonnens nummer (den første er 0) eller dens overskrift.
external_idinteger | stringKolonnens nummer (den første er 0) eller dens overskrift.
optionsobjectHvad jobbet tjekker.
Vis 4 felter
check_peoplebooleanTjek personer mod Robinsonlisten.
check_companiesbooleanTjek virksomheder mod CVR's reklamebeskyttelse.
check_phonesbooleanSlå telefonnumre op.
stop_levelinteger · 1–5Det niveau, listen filtreres på. Som standard jeres eget.
list_versionobjectUdgaven af Robinsonlisten, der er tjekket mod.
Vis 4 felter
idstring (uuid)påkrævetListeversionens id.
sourcestringcprer Robinsonlisten.customerer jeres egen liste over personer, der har frabedt sig kontakt.published_onstring (date)påkrævetDatoen, CPR udgav listen.
activated_atstring (date-time)Hvornår vi tog listen i brug.
errorstring · kan være nullHvorfor jobbet mislykkedes.
external_refstring · kan være nullJeres egen reference fra oprettelsen.
receipt_urlstring (uri) · kan være nullAdressen på kvitteringen for tjekket, når jobbet er færdigt.
delete_afterstring (date-time) · kan være nullHvornår filen og rækkerne slettes.
created_atstring (date-time)Hvornår jobbet blev oprettet.
finished_atstring (date-time) · kan være nullHvornår jobbet blev færdigt.
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"
}'const res = await fetch("https://api.robinsontjek.dk/v2/check-jobs", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.ROBINSONTJEK_API_KEY}`,
"Content-Type": "application/json",
"Idempotency-Key": crypto.randomUUID(),
},
body: JSON.stringify({
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"
}),
});
const data = await res.json();import os
import uuid
import requests
res = requests.post(
"https://api.robinsontjek.dk/v2/check-jobs",
headers={
"Authorization": f"Bearer {os.environ['ROBINSONTJEK_API_KEY']}",
"Idempotency-Key": str(uuid.uuid4()),
},
json={
"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"
},
)
data = res.json()require "net/http"
require "json"
require "securerandom"
uri = URI("https://api.robinsontjek.dk/v2/check-jobs")
req = Net::HTTP::Post.new(uri, {
"Authorization" => "Bearer #{ENV.fetch("ROBINSONTJEK_API_KEY")}",
"Content-Type" => "application/json",
"Idempotency-Key" => SecureRandom.uuid,
})
req.body = JSON.generate({
"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"
})
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(req) }
data = JSON.parse(res.body)<?php
$ch = curl_init("https://api.robinsontjek.dk/v2/check-jobs");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer " . getenv("ROBINSONTJEK_API_KEY"),
"Content-Type: application/json",
"Idempotency-Key: " . bin2hex(random_bytes(16)),
],
CURLOPT_POSTFIELDS => json_encode([
"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"
]),
CURLOPT_RETURNTRANSFER => true,
]);
$data = json_decode(curl_exec($ch), true);{
"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ævetJobbets id.
Svar200
Jobbet, som det står nu.
idstring (uuid)påkrævetJobbets id.
sourcestringpåkrævetHvor listen kom fra, fx
api,uploadelleremail.statusstringpåkrævetqueued(i kø),running(kører),done(færdigt) ellerfailed(mislykkedes).drafter et job, der endnu ikke er sat i gang.Mulige værdier:
draft,queued,running,done,failed,deletedfilenamestring · kan være nullFilens navn, når listen kom som fil.
file_formatstring · kan være nullxlsx,xlsellercsv.row_countintegerAntal rækker i listen.
processed_countintegerAntal rækker, der er tjekket indtil nu.
allowed_countintegerAntal under jeres niveau.
blocked_countintegerAntal på jeres niveau eller derover.
manual_countintegerAntal, hvor adressen ikke kunne læses.
level_countsobjectVis 7 felter
0integerpåkrævet1integerpåkrævet2integerpåkrævet3integerpåkrævet4integerpåkrævet5integerpåkrævetunreadintegerpåkrævet
column_mappingobjectHvilke kolonner der blev brugt til hvad.
Vis 15 felter
header_rowintegerRækken med overskrifter. Den første række er 0.
nameinteger | stringKolonnens nummer (den første er 0) eller dens overskrift.
first_nameinteger | stringKolonnens nummer (den første er 0) eller dens overskrift.
last_nameinteger | stringKolonnens nummer (den første er 0) eller dens overskrift.
addressinteger | stringKolonnens nummer (den første er 0) eller dens overskrift.
streetinteger | stringKolonnens nummer (den første er 0) eller dens overskrift.
house_numberinteger | stringKolonnens nummer (den første er 0) eller dens overskrift.
floorinteger | stringKolonnens nummer (den første er 0) eller dens overskrift.
doorinteger | stringKolonnens nummer (den første er 0) eller dens overskrift.
postal_codeinteger | stringKolonnens nummer (den første er 0) eller dens overskrift.
cityinteger | stringKolonnens nummer (den første er 0) eller dens overskrift.
phoneinteger | stringKolonnens nummer (den første er 0) eller dens overskrift.
cvrinteger | stringKolonnens nummer (den første er 0) eller dens overskrift.
company_nameinteger | stringKolonnens nummer (den første er 0) eller dens overskrift.
external_idinteger | stringKolonnens nummer (den første er 0) eller dens overskrift.
optionsobjectHvad jobbet tjekker.
Vis 4 felter
check_peoplebooleanTjek personer mod Robinsonlisten.
check_companiesbooleanTjek virksomheder mod CVR's reklamebeskyttelse.
check_phonesbooleanSlå telefonnumre op.
stop_levelinteger · 1–5Det niveau, listen filtreres på. Som standard jeres eget.
list_versionobjectUdgaven af Robinsonlisten, der er tjekket mod.
Vis 4 felter
idstring (uuid)påkrævetListeversionens id.
sourcestringcprer Robinsonlisten.customerer jeres egen liste over personer, der har frabedt sig kontakt.published_onstring (date)påkrævetDatoen, CPR udgav listen.
activated_atstring (date-time)Hvornår vi tog listen i brug.
errorstring · kan være nullHvorfor jobbet mislykkedes.
external_refstring · kan være nullJeres egen reference fra oprettelsen.
receipt_urlstring (uri) · kan være nullAdressen på kvitteringen for tjekket, når jobbet er færdigt.
delete_afterstring (date-time) · kan være nullHvornår filen og rækkerne slettes.
created_atstring (date-time)Hvornår jobbet blev oprettet.
finished_atstring (date-time) · kan være nullHvornår jobbet blev færdigt.
curl https://api.robinsontjek.dk/v2/check-jobs/5b1d9e3c-2a4f-4c7e-8d16-0e9f7a2b4c58 \
-H "Authorization: Bearer $ROBINSONTJEK_API_KEY"const res = await fetch("https://api.robinsontjek.dk/v2/check-jobs/5b1d9e3c-2a4f-4c7e-8d16-0e9f7a2b4c58", {
headers: {
Authorization: `Bearer ${process.env.ROBINSONTJEK_API_KEY}`,
},
});
const data = await res.json();import os
import requests
res = requests.get(
"https://api.robinsontjek.dk/v2/check-jobs/5b1d9e3c-2a4f-4c7e-8d16-0e9f7a2b4c58",
headers={
"Authorization": f"Bearer {os.environ['ROBINSONTJEK_API_KEY']}",
},
)
data = res.json()require "net/http"
require "json"
uri = URI("https://api.robinsontjek.dk/v2/check-jobs/5b1d9e3c-2a4f-4c7e-8d16-0e9f7a2b4c58")
req = Net::HTTP::Get.new(uri, {
"Authorization" => "Bearer #{ENV.fetch("ROBINSONTJEK_API_KEY")}",
})
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(req) }
data = JSON.parse(res.body)<?php
$ch = curl_init("https://api.robinsontjek.dk/v2/check-jobs/5b1d9e3c-2a4f-4c7e-8d16-0e9f7a2b4c58");
curl_setopt_array($ch, [
CURLOPT_HTTPHEADER => [
"Authorization: Bearer " . getenv("ROBINSONTJEK_API_KEY"),
],
CURLOPT_RETURNTRANSFER => true,
]);
$data = json_decode(curl_exec($ch), true);{
"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ævetJobbets id.
Query
cursorstringnext_cursorfra forrige side. Udelad den for at få første side.limitintegerAntal resultater pr. side. Højst 10.000.
Svar200
En side med resultater.
resultsarray of objectsResultaterne på denne side.
Vis 7 felter
idstring · kan være nullJeres reference fra forespørgslen.
matchobjectHvad vi fandt på Robinsonlisten på personens adresse.
Vis 5 felter
levelinteger · 0–5 · kan være nullpåkrævetNiveau fra 0 til 5.
null, når adressen ikke kan læses.codestring · kan være nullpåkrævetNiveauet som kode:
none,household,surname,given_name,name_buildingellername_address.labelstring · kan være nullNiveauet i ord, på dansk eller engelsk efter
Accept-Language.onarray of stringsDe dele, der passede:
first_name,last_name,addressogunit.previous_addressbooleantrue, når personen står på listen på en tidligere adresse. Det tæller som mindst niveau 4.
statusobjectpåkrævetTil integrationer, regnet ud fra jeres valgte niveau:
allowed(under niveauet),blocked(på niveauet eller derover) ellermanual(adressen kan ikke læses).stop_levelinteger · 1–5 · kan være nullDet niveau, I går efter, og som
statuser regnet ud fra. Som standard 1, det forsigtigste.reasonsarray of objectspåkrævetKoder, der forklarer svaret. Se Begrundelser.
addressobject · kan være nullSådan læste vi adressen.
null, hvis den ikke kunne læses.Vis 10 felter
inputstringAdressen, som I sendte den.
okbooleantrue, når adressen kunne læses.streetstring · kan være nullVejnavn.
house_numberstring · kan være nullHusnummer.
floorstring · kan være nullEtage.
doorstring · kan være nullDør.
postal_codestring · kan være nullPostnummer.
citystring · kan være nullBy.
formattedstring · kan være nullAdressen skrevet pænt på én linje.
confidencestringexact(passede præcist),corrected(rettet) ellerunresolved(kunne ikke læses).
phone_lookupobject · kan være nullKun ved telefonnumre: hvad opslaget i nummeroplysningen gav.
Vis 3 felter
outcomestringfound(fundet),unlisted(hemmeligt nummer) ellernot_found(ikke fundet).namestringNavnet bag nummeret.
addressstringAdressen bag nummeret.
next_cursorstring · kan være nullSend den som
cursorfor at hente næste side.null, når der ikke er flere.
curl https://api.robinsontjek.dk/v2/check-jobs/5b1d9e3c-2a4f-4c7e-8d16-0e9f7a2b4c58/results?limit=1000 \
-H "Authorization: Bearer $ROBINSONTJEK_API_KEY"const res = await fetch("https://api.robinsontjek.dk/v2/check-jobs/5b1d9e3c-2a4f-4c7e-8d16-0e9f7a2b4c58/results?limit=1000", {
headers: {
Authorization: `Bearer ${process.env.ROBINSONTJEK_API_KEY}`,
},
});
const data = await res.json();import os
import requests
res = requests.get(
"https://api.robinsontjek.dk/v2/check-jobs/5b1d9e3c-2a4f-4c7e-8d16-0e9f7a2b4c58/results",
headers={
"Authorization": f"Bearer {os.environ['ROBINSONTJEK_API_KEY']}",
},
params={
"limit": 1000
},
)
data = res.json()require "net/http"
require "json"
uri = URI("https://api.robinsontjek.dk/v2/check-jobs/5b1d9e3c-2a4f-4c7e-8d16-0e9f7a2b4c58/results?limit=1000")
req = Net::HTTP::Get.new(uri, {
"Authorization" => "Bearer #{ENV.fetch("ROBINSONTJEK_API_KEY")}",
})
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(req) }
data = JSON.parse(res.body)<?php
$ch = curl_init("https://api.robinsontjek.dk/v2/check-jobs/5b1d9e3c-2a4f-4c7e-8d16-0e9f7a2b4c58/results?limit=1000");
curl_setopt_array($ch, [
CURLOPT_HTTPHEADER => [
"Authorization: Bearer " . getenv("ROBINSONTJEK_API_KEY"),
],
CURLOPT_RETURNTRANSFER => true,
]);
$data = json_decode(curl_exec($ch), true);{
"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"
}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ævetVirksomhederne, der skal tjekkes. Højst 1.000.
Vis 3 felter
idstringJeres egen reference. Den kommer med tilbage i svaret.
cvrstringCVR-nummer, otte cifre.
namestringVirksomhedens navn, hvis I ikke har CVR-nummeret.
Svar200
Et svar for hver virksomhed.
resultsarray of objectsEt resultat pr. virksomhed.
Vis 7 felter
idstring · kan være nullJeres reference fra forespørgslen.
cvrstring · kan være nullCVR-nummeret.
namestring · kan være nullVirksomhedens navn i CVR.
statusobjectpåkrævetblocked, når virksomheden har frabedt sig reklamer.manual, når vi ikke kan finde den.Mulige værdier:
allowed,blocked,manualreasonsarray of objectspåkrævetKoder, der forklarer svaret, fx
company_protected.company_formstring · kan være nullVirksomhedsform, fx
ApSellerEnkeltmandsvirksomhed.synced_atstring (date-time) · kan være nullHvornår vi sidst hentede virksomheden fra CVR.
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"
}
]
}'const res = await fetch("https://api.robinsontjek.dk/v2/company-checks", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.ROBINSONTJEK_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
companies: [
{
id: "acc-301",
cvr: "12345678"
},
{
id: "acc-302",
name: "Eksempel Byg ApS"
}
]
}),
});
const data = await res.json();import os
import requests
res = requests.post(
"https://api.robinsontjek.dk/v2/company-checks",
headers={
"Authorization": f"Bearer {os.environ['ROBINSONTJEK_API_KEY']}",
},
json={
"companies": [
{
"id": "acc-301",
"cvr": "12345678"
},
{
"id": "acc-302",
"name": "Eksempel Byg ApS"
}
]
},
)
data = res.json()require "net/http"
require "json"
uri = URI("https://api.robinsontjek.dk/v2/company-checks")
req = Net::HTTP::Post.new(uri, {
"Authorization" => "Bearer #{ENV.fetch("ROBINSONTJEK_API_KEY")}",
"Content-Type" => "application/json",
})
req.body = JSON.generate({
"companies" => [
{
"id" => "acc-301",
"cvr" => "12345678"
},
{
"id" => "acc-302",
"name" => "Eksempel Byg ApS"
}
]
})
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(req) }
data = JSON.parse(res.body)<?php
$ch = curl_init("https://api.robinsontjek.dk/v2/company-checks");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer " . getenv("ROBINSONTJEK_API_KEY"),
"Content-Type: application/json",
],
CURLOPT_POSTFIELDS => json_encode([
"companies" => [
[
"id" => "acc-301",
"cvr" => "12345678"
],
[
"id" => "acc-302",
"name" => "Eksempel Byg ApS"
]
]
]),
CURLOPT_RETURNTRANSFER => true,
]);
$data = json_decode(curl_exec($ch), true);{
"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"
}
]
}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ævetNumrene, der skal slås op. Højst 500.
Vis 2 felter
phonestringpåkrævetTelefonnummeret, fx
+4520202020eller20 20 20 20.idstringJeres egen reference. Den kommer med tilbage i svaret.
Svar200
Et svar for hvert nummer.
list_versionobjectUdgaven af Robinsonlisten, der er tjekket mod.
Vis 4 felter
idstring (uuid)påkrævetListeversionens id.
sourcestringcprer Robinsonlisten.customerer jeres egen liste over personer, der har frabedt sig kontakt.published_onstring (date)påkrævetDatoen, CPR udgav listen.
activated_atstring (date-time)Hvornår vi tog listen i brug.
resultsarray of objectsEt resultat pr. nummer.
Vis 7 felter
idstring · kan være nullJeres reference fra forespørgslen.
matchobjectHvad vi fandt på Robinsonlisten på personens adresse.
Vis 5 felter
levelinteger · 0–5 · kan være nullpåkrævetNiveau fra 0 til 5.
null, når adressen ikke kan læses.codestring · kan være nullpåkrævetNiveauet som kode:
none,household,surname,given_name,name_buildingellername_address.labelstring · kan være nullNiveauet i ord, på dansk eller engelsk efter
Accept-Language.onarray of stringsDe dele, der passede:
first_name,last_name,addressogunit.previous_addressbooleantrue, når personen står på listen på en tidligere adresse. Det tæller som mindst niveau 4.
statusobjectpåkrævetTil integrationer, regnet ud fra jeres valgte niveau:
allowed(under niveauet),blocked(på niveauet eller derover) ellermanual(adressen kan ikke læses).stop_levelinteger · 1–5 · kan være nullDet niveau, I går efter, og som
statuser regnet ud fra. Som standard 1, det forsigtigste.reasonsarray of objectspåkrævetKoder, der forklarer svaret. Se Begrundelser.
addressobject · kan være nullSådan læste vi adressen.
null, hvis den ikke kunne læses.Vis 10 felter
inputstringAdressen, som I sendte den.
okbooleantrue, når adressen kunne læses.streetstring · kan være nullVejnavn.
house_numberstring · kan være nullHusnummer.
floorstring · kan være nullEtage.
doorstring · kan være nullDør.
postal_codestring · kan være nullPostnummer.
citystring · kan være nullBy.
formattedstring · kan være nullAdressen skrevet pænt på én linje.
confidencestringexact(passede præcist),corrected(rettet) ellerunresolved(kunne ikke læses).
phone_lookupobject · kan være nullKun ved telefonnumre: hvad opslaget i nummeroplysningen gav.
Vis 3 felter
outcomestringfound(fundet),unlisted(hemmeligt nummer) ellernot_found(ikke fundet).namestringNavnet bag nummeret.
addressstringAdressen bag nummeret.
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"
}
]
}'const res = await fetch("https://api.robinsontjek.dk/v2/phone-checks", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.ROBINSONTJEK_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
phones: [
{
id: "lead-77",
phone: "+4520202020"
}
]
}),
});
const data = await res.json();import os
import requests
res = requests.post(
"https://api.robinsontjek.dk/v2/phone-checks",
headers={
"Authorization": f"Bearer {os.environ['ROBINSONTJEK_API_KEY']}",
},
json={
"phones": [
{
"id": "lead-77",
"phone": "+4520202020"
}
]
},
)
data = res.json()require "net/http"
require "json"
uri = URI("https://api.robinsontjek.dk/v2/phone-checks")
req = Net::HTTP::Post.new(uri, {
"Authorization" => "Bearer #{ENV.fetch("ROBINSONTJEK_API_KEY")}",
"Content-Type" => "application/json",
})
req.body = JSON.generate({
"phones" => [
{
"id" => "lead-77",
"phone" => "+4520202020"
}
]
})
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(req) }
data = JSON.parse(res.body)<?php
$ch = curl_init("https://api.robinsontjek.dk/v2/phone-checks");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer " . getenv("ROBINSONTJEK_API_KEY"),
"Content-Type: application/json",
],
CURLOPT_POSTFIELDS => json_encode([
"phones" => [
[
"id" => "lead-77",
"phone" => "+4520202020"
]
]
]),
CURLOPT_RETURNTRANSFER => true,
]);
$data = json_decode(curl_exec($ch), true);{
"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"
}
}
]
}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ævetListeversionens id.
sourcestringcprer Robinsonlisten.customerer jeres egen liste over personer, der har frabedt sig kontakt.published_onstring (date)påkrævetDatoen, CPR udgav listen.
activated_atstring (date-time)Hvornår vi tog listen i brug.
curl https://api.robinsontjek.dk/v2/list-versions/current \
-H "Authorization: Bearer $ROBINSONTJEK_API_KEY"const res = await fetch("https://api.robinsontjek.dk/v2/list-versions/current", {
headers: {
Authorization: `Bearer ${process.env.ROBINSONTJEK_API_KEY}`,
},
});
const data = await res.json();import os
import requests
res = requests.get(
"https://api.robinsontjek.dk/v2/list-versions/current",
headers={
"Authorization": f"Bearer {os.environ['ROBINSONTJEK_API_KEY']}",
},
)
data = res.json()require "net/http"
require "json"
uri = URI("https://api.robinsontjek.dk/v2/list-versions/current")
req = Net::HTTP::Get.new(uri, {
"Authorization" => "Bearer #{ENV.fetch("ROBINSONTJEK_API_KEY")}",
})
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(req) }
data = JSON.parse(res.body)<?php
$ch = curl_init("https://api.robinsontjek.dk/v2/list-versions/current");
curl_setopt_array($ch, [
CURLOPT_HTTPHEADER => [
"Authorization: Bearer " . getenv("ROBINSONTJEK_API_KEY"),
],
CURLOPT_RETURNTRANSFER => true,
]);
$data = json_decode(curl_exec($ch), true);{
"id": "4c8e2a1f-7d3b-4e6a-9b25-1f0c6d8e3a71",
"source": "cpr",
"published_on": "2026-10-01",
"activated_at": "2026-10-02T05:00:00Z"
}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ævetAdresserne som fri tekst. Højst 100.
Svar200
En læsning for hver adresse.
resultsarray of objectsEn læsning pr. adresse, i samme rækkefølge.
Vis 10 felter
inputstringAdressen, som I sendte den.
okbooleantrue, når adressen kunne læses.streetstring · kan være nullVejnavn.
house_numberstring · kan være nullHusnummer.
floorstring · kan være nullEtage.
doorstring · kan være nullDør.
postal_codestring · kan være nullPostnummer.
citystring · kan være nullBy.
formattedstring · kan være nullAdressen skrevet pænt på én linje.
confidencestringexact(passede præcist),corrected(rettet) ellerunresolved(kunne ikke læses).
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"]
}'const res = await fetch("https://api.robinsontjek.dk/v2/addresses/resolve", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.ROBINSONTJEK_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
addresses: ["Stationsalleen 48 1b 2770 Kastrup", "Norregade 7, 1165 Kbh K"]
}),
});
const data = await res.json();import os
import requests
res = requests.post(
"https://api.robinsontjek.dk/v2/addresses/resolve",
headers={
"Authorization": f"Bearer {os.environ['ROBINSONTJEK_API_KEY']}",
},
json={
"addresses": ["Stationsalleen 48 1b 2770 Kastrup", "Norregade 7, 1165 Kbh K"]
},
)
data = res.json()require "net/http"
require "json"
uri = URI("https://api.robinsontjek.dk/v2/addresses/resolve")
req = Net::HTTP::Post.new(uri, {
"Authorization" => "Bearer #{ENV.fetch("ROBINSONTJEK_API_KEY")}",
"Content-Type" => "application/json",
})
req.body = JSON.generate({
"addresses" => ["Stationsalleen 48 1b 2770 Kastrup", "Norregade 7, 1165 Kbh K"]
})
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(req) }
data = JSON.parse(res.body)<?php
$ch = curl_init("https://api.robinsontjek.dk/v2/addresses/resolve");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer " . getenv("ROBINSONTJEK_API_KEY"),
"Content-Type: application/json",
],
CURLOPT_POSTFIELDS => json_encode([
"addresses" => ["Stationsalleen 48 1b 2770 Kastrup", "Norregade 7, 1165 Kbh K"]
]),
CURLOPT_RETURNTRANSFER => true,
]);
$data = json_decode(curl_exec($ch), true);{
"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"
}
]
}