This page is available in English. Switch to English

Samme motor,
inde i din app.

Ét endpoint pr. tjeneste, ét kald, svaret dokumenteret felt for felt: kontaktverificering, deduplikering, e-mail, telefon, website, italiensk skattenummer, autofuldførelse. Enkeltvis eller i partier; for store filer sættes jobbet i kø, og du henter det, når det er klar.

OpenAPI-specifikation: openapi.json, til at generere klienten eller importere den i dit værktøj.

Ét endpoint pr. tjeneste, med samme navn, som tjenesten har på dette site: /contact, /dedupe, /email, /phone, /website, /tax-code, /enrichment. Hvert accepterer ét element i forespørgslens body eller en liste i items, op til 500 pr. kald (100 for websites, som skal kontaktes ét ad gangen). Deduplikeringen er undtagelsen og vil altid have en liste: den sammenligner posterne med hinanden. For sig står /suggest, autofuldførelsen til formularer (den arbejder pr. session, mens brugeren skriver, ikke i partier), og /credit, som fortæller, hvor mange behandlinger der er tilbage, og hvilken tilstand hver tæller er i, uden at bruge nogen.

Autentificering

API'ets host er www.radaraddress.com. Felt-, endpoint- og værdinavne er engelske identifikatorer, de samme på alle sprog; etiketter, årsager og meddelelser følger forespørgslens sprog ("language": "de" eller ?language=de, eller headeren Accept-Language, eller kontoens sprog). Headeren Content-Language siger, hvilket sprog svaret kom på.

Adgang til API'et sker med Bearer-token. Kontoen er gratis: du opretter tokenet i dit kontoområde og medsender det i headeren på hver forespørgsel i denne form:

# Every request needs the Authorization header
Authorization: Bearer {your-token}

Når du opretter det, kan du give tokenet en valgfri udløbsdato: efter den dato får forespørgsler HTTP 401 med koden token_expired; uden udløb gælder tokenet, indtil du tilbagekalder det. Du kan tilbagekalde eller genskabe det når som helst fra dit kontoområde, hvor du også ser seneste brug og antallet af besvarede forespørgsler. En forespørgsel uden token eller med et ugyldigt token returnerer HTTP 401.

De italienske navne, for dem, der allerede bruger dem

API'et har én version, på engelsk. Den, der har integreret med de italienske navne, behøver ikke ændre noget: italienske felter accepteres i hver forespørgsel, endpoints svarer også under deres italienske navne (/contatto, /deduplica, /codicefiscale, /arricchimento, /telefono, /sito, /suggerisci, /nazioni, /credito), og svaret kommer ud med de italienske nøgler og koder til den, der beder om det med "language": "it" eller kalder www.radaraddress.it uden at angive et sprog.

Den fulde felttabel: engelsk → italiensk
engelskitalienskengelskitaliensk
accountaccount membersmembri
actionazione methodmetodo
activated_onattivato_il metricmetrico
activeattiva min_levellivello_minimo
active_packsattivi missingmancano
addressindirizzo modifiedmodificati
address_keyindirizzo_confronto monthmese
addressesindirizzi monthly_cap_eurtetto_mese_eur
afterdopo multiple_postcodesmulticap
ageeta municipalitycomune
agreementconsenso municipality_codecomune_codice
ambiguous_yearanno_ambiguo municipality_code_typecomune_codice_tipo
areaarea n_recordsn_anagrafiche
asyncasincrono name_idnome_id
auto_topupauto_ricarica name_originalnome_originale
availabledisponibile national_numbernazionale
beforeprima nearbyvicino
belfiore_codecodice_belfiore needednecessarie
birth_countrynazione_nascita needs_topupda_ricaricare
birth_datedata_nascita networkrete
birth_placecomune_nascita normalizednormalizzato
birth_place_nameluogo_nascita normalized_postalnormalizzato_postale
birth_provinceprovincia_nascita not_foundnon_trovati
born_abroadnato_estero notenota
boughtcomprati notesnote
buildingedificio numbernumero
cadastral_codecatastale numbersnumeri
canonical_addressindirizzo_canonico occurrencesoccorrenze
canonical_citylocalita_canonica operationselaborazioni
care_ofpresso operatoroperatore
certificate_okcertificato_ok originorigine
changedmodificato otheraltro
changesmodifiche outcomeesito
chargedconsumate outcome_labelesito_label
checkcontrolla outcomesesiti
check_digitcontrollo overall_cap_eurtetto_globale_eur
citylocalita packspacchetti
city_keylocalita_confronto parsedletto
city_passescicli_localita phasefase
city_typelocalita_tipo phonetelefono
classclasse phone2telefono2
codecodice phone3telefono3
colourcolore phonestelefoni
commentscommenti placeluogo
conditionscondizioni positionposizione
confidenceconfidenza postcodecap
confirmedconfermato postcode_checkcap_verifica
consolidateconsolida precisionprecisione
contactcontatto preserve_originalpreserva_originale
contact_personreferente presumedpresunto
corrected_fromcorretta_da processedlavorato
countercontatore processed_atdatalav
counterscontatori professionqualifica
countriesnazioni provenanceprovenienza
countrynazione provinceprovincia
country_codenazione_iso2 provincial_capitalcapoluogo
country_originalnazione_originale reachableraggiungibile
country_prefixprefisso_paese reasonmotivo
createdcreato record_outcomeesito_record
creditcredito recordsanagrafiche
dedupededuplica redirectsredirect
detaildettaglio referenceriferimento
differencesdifferenze reference_idriferimento_id
discardedscartati remainingrimaste
disposableusa_e_getta renews_onsi_rinnova_il
districtquartiere reset_onsi_azzerano_il
domain_checkeddominio_verificato rowsrighe
domain_existsdominio_esiste salutationsaluto
donefatte savesalva
duration_msdurata_ms segment_passescicli_arcostradale
e164formato_e164 sessionsessione
educationtitolo_studio shortbreve
entriesschede singlessingoli
errorerrore sizetaglia
existsesiste sourcefonte
expiryscadenza specificityspecificita
explanationsspiegazioni spent_month_eurspeso_mese_eur
extensionestensione spent_overall_month_eurspeso_globale_mese_eur
fieldcampo statestato
final_urlurl_finale statesstati
first_namenome streetstrada
foreignesteri street_idvia_id
foreign_addressestero street_nametoponimo
formal_salutationsaluto_formale street_passescicli_toponimo
formatformato street_proper_nameduf
foundtrovato street_typedug
freegratuite sub_addresssubindirizzo
free_forevergratis_per_sempre sub_address_confirmedsubindirizzo_confermato
full_namenominativo subject_typetipo_soggetto
gendersesso subscriptionabbonamento
gender_sourcefonte_sesso suffixesponente
genericgenerica suggestionsuggerimento
groupgruppo summaryriepilogo
groupsgruppi supportedsupportato
hamletfrazione syntaxsintassi
hintssuggerimenti tax_codecodice_fiscale
homocodeomocodo tax_code_outcomecodice_fiscale_esito
house_numbercivico territoryterritorio
house_number_labelcivico_label texttesto
house_number_verifiedcivico_verificato time_mstempo_ms
house_numberscivici titletitolo
informal_salutationsaluto_informale to_checkda_controllare
iso2codice_iso2 totaltotali
iso3codice_iso3 towncitta
istat_codeistat truncatedtroncato
itemselementi typetipo
joblavoro type_normalizedtipo_norm
languagelingua typestipi
languageslingue unresolvednon_risolti
last_namecognome url_normalizedurl_normalizzato
last_onultimo_il usedusate
last_usedultimo_uso validvalida
leftresiduo valuevalore
legacy_defaultdefault_storico warningavviso
levellivello warningsavvisi
lightleggere websitesito
longlungo website2sito2
long_namenome_esteso website3sito3
main_recordprincipale websitessiti
matchcorrisponde zonedzonato
matchesabbinamenti

Også valgmulighedernes værdier har et italiensk navn: format nazionale/internazionale, action genera/valida/estrai/confronta/seleziona, foreign dichiarati/rileva, min_level certo/probabile/ambiguo; med "language": "it" gælder det også level, confidence, state, koderne i outcome og filoverskrifterne. Almindelige synonymer accepteres også som input (zip, surname, phone_number, date_of_birth…), og de samme overskrifter i batchjobbenes filer.

Endpoint for kontaktverificering

POST /api/v1/contact

Retter hele kontakten: adressen i landets poststandard — i Italien og i landene med registret i drift verificeres vej og husnummer i det nationale adresseregister; andre steder kommer adressen ud i landets postform —, navnet og — hvis forespørgslen indeholder det — det italienske skattenummer (codice fiscale), som renses, fuldføres, når kun kontroltegnet mangler, og sammenholdes med efternavn, fornavn, køn og fødselsdato. Én kontakt ad gangen, eller op til 500 i items: skemaet er det samme som for alle andre endpoints.

Landet angives med country_code (ISO 3166-1: IT, DE, FR…) eller med country, skrevet på enhver måde: »Germania«, »Germany«, »Deutschland«, »Forbundsrepublikken Tyskland«, »UK«, »Holland«. Mangler det, antages Italien. I landene med registret i drift — i dag Frankrig, Tyskland, Spanien, Nederlandene, Belgien, Finland, Tjekkiet, Portugal, Danmark, Norge, Østrig, Schweiz, Slovakiet, Kroatien, Rumænien, Ungarn, Slovenien, Irland, Island, Luxembourg, Liechtenstein, San Marino, Monaco, Andorra, Vatikanstaten, den opdaterede liste står under Lande — verificeres vej og husnummer i det nationale adresseregister præcis som i Italien: postnummer bekræftet eller udfyldt, husnummerets koordinater i geo, bydel eller arrondissement i district, hvor byen har dem (Hamburg-Altstadt, Paris 4e Arrondissement), kommunekode i territory.municipality_code. På italiensk indeholder resultatet FOREIGN efterfulgt af ændringerne, på de andre sprog kun ændringerne; findes vejen, men ikke nummeret, HOUSE_NUMBER_NOT_FOUND. I de andre lande arbejder vi på formen, og det siger meddelelsen: postnummer i landets format, vejforkortelser skrevet ud, store bogstaver og bynavn, som postvæsenet i det land skriver dem (Hauptstr. 5, Munich → Hauptstraße 5, MÜNCHEN), med landelinjen. I begge tilfælde kommer address_key tilbage, den form, som deduplikeringen bruger til at genkende samme vej skrevet på to måder. Med "foreign": "detect" genkendes en post uden land, som ikke findes i Italien, som udenlandsk, når teksten siger det tydeligt; standarden declared lader kun det være udenlandsk, som selv erklærer det. Det fulde landekatalog, med kort og officielt navn, på engelsk og på landets sprog, fås med GET /api/v1/countries og kan forespørges med ?q=Germania, ?q=Deutschland eller ?q=DE.

curl -X POST https://www.radaraddress.com/api/v1/contact \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{"address":"via leopardi 4","postcode":"20100","city":"milano","province":"mi","id":"RIF-001"}'

Til partiet de samme felter inde i items; svaret er { count, results: [ { id, result } ] } i samme rækkefølge som sendt.

curl -X POST https://www.radaraddress.com/api/v1/contact \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{"items":[{"id":"1","address":"via leopardi 4","city":"milano"},
                   {"id":"2","address":"via roma 1","postcode":"20121","tax_code":"RSSMRA85M01H501Q"}]}'

Samme endpoint til en adresse i et andet land: country_code er nok. Her Hamborg, verificeret i det tyske register, med bydelen og husnummerets koordinater.

curl -X POST https://www.radaraddress.com/api/v1/contact \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{"address":"Mönckebergstr. 7","postcode":"20095","city":"Hamburg","country_code":"DE"}'
→ { "outcome": "FOREIGN MODIFIED CITY_FORM STREET_FORM",
  "normalized": { "address": "Mönckebergstraße 7", "postcode": "20095", "city": "HAMBURG", "country": "Germany", "country_code": "DE" },
  "municipality": "Hamburg", "district": "Hamburg-Altstadt", "address_key": "MONCKEBERGSTRASSE",
  "geo": { "lat": 53.5512437, "lon": 10.0028651, "precision": "house_number", "source": "inspire" },
  "territory": { "country": "DE", "municipality_code": "AdminUnitName_49021011010101", "municipality_code_type": "inspire" } }

Valgmuligheder, der gælder for hele kaldet: postal_form (tvinger også normalized i postform), preserve_original (beholder navnet, som brugeren skrev det, og viser det kanoniske for sig), precision 1–5 (standard 3; over 3 er matchet omtrentligt, og pålideligheden bliver ikke high).

Sammen med adressen kommer city_type, som siger, om leveringsstedet ligger i en provinshovedstad eller i en by i provinsen — forskellen, der betyder noget for den, der segmenterer en kampagne efter by. provincial_capital er true, false eller null, når vi ikke har grundlag for at sige det — og i så fald gætter vi ikke.

→ { "city_type": { "provincial_capital": true, "label": "Provincial capital" } }

Ved siden af postnummeret kommer postcode_check: hvor det kommer fra (source) og hvor præcist (precision: house_number selve nummeret, interpolated nabonumrene i samme gade, street gadens flertal, locality, municipality), hvor mange husnumre der siger det (house_numbers) og med hvilken enighed (agreement, 0 til 1). Mangler bekræftelse for det nummer, bærer resultatet POSTCODE_UNCONFIRMED og confirmed er false: postnummeret beholdes som angivet, hvis det hører til byen, og bør tjekkes.

→ { "postcode_check": { "source": "osm", "precision": "house_number", "house_numbers": 3, "agreement": 1, "confirmed": true } }

Koordinaterne kommer også tilbage, i geo (WGS84 bredde- og længdegrad), og de territoriale identifikatorer i territory: i Italien kommunens ISTAT-kode og matrikelkode, CAB og vejens nationale identifikator; i de andre lande country og kommunens kode i det nationale register (municipality_code). Feltet precision siger, hvilket niveau vi nåede: house_number, når husnummeret er georefereret, interpolated, når det præcise nummer mangler og punktet er anslået, street, når vi har vejens punkt, municipality, når vi kun har kommunens centrum. source siger, hvor punktet kommer fra: anncsu er det italienske nationale register, inspire landets nationale register, osm OpenStreetMap: i så fald er dataene © OpenStreetMap contributors, ODbL-licens, og krediteringen skal gengives, hvis du offentliggør dem. Hvor et lands register kræver en kreditering, kommer den ud i meddelelsen. I CSV-filen fra batchjob er det kolonnerne latitude, longitude, geo_precision, istat_code og cadastral_code.

→ { "geo": { "lat": 45.4762711, "lon": 9.207104, "precision": "house_number", "source": "anncsu" },
  "territory": { "istat_code": "015146", "cadastral_code": "F205", "cab": "01600", "street_id": "1026700" } }

Etage, opgang og lejlighed i adressen kommer også tilbage som egne data i sub_address: en liste med par af type og value, læst efter landets postregler (i Tyskland efter »//«, i Frankrig på sin egen linje, i Portugal »3º Esq«). Typerne er unit (lejlighed), staircase (opgang), floor (etage), block, building, building_number og block_number. Adresselinjen står i landets form. Det, vi ikke genkender, står, som det var skrevet, og kommer ikke med i listen: vi gætter ikke. Når den angivne enhed findes på husnummeret, er sub_address_confirmed true, ellers null, aldrig false: at vi ikke finder den, betyder ikke, at den er forkert.

→ { "sub_address": [ { "type": "floor", "value": "3" }, { "type": "unit", "value": "ESQ" } ], "sub_address_confirmed": true }

Endpoint for deduplikering

POST /api/v1/dedupe

Genkender de poster, der vedrører samme person på samme adresse, også når de er skrevet forskelligt: kælenavne og navneækvivalenser (Dany ≈ Daniela), efternavn og fornavn byttet om, forkortelser ("V. Roma" ≈ "Via Roma"), tastefejl. Sammenligningen af adresser går gennem normaliseringsmotoren: to stavemåder af samme vej falder sammen til den kanoniske form før sammenligningen. Højst 500 kontakter pr. kald (poster + reference); til større lister bruger du batchjobbet fra dit kontoområde.

Adressebøger. En kontakt i en adressebog (Apple Kontakter, Google, Outlook: vCard-modellen) har flere adresser, telefonnumre og e-mails, hver med en etiket. Endpointet accepterer dem, som de er, uden loft: addresses er en liste af objekter med type og de sædvanlige felter; phones og emails er lister, hvor hvert element er den rene værdi ("340 7491386") eller {"type": "work", "value": "02 66710423"}, også blandet; de sædvanlige flade felter er stadig gyldige og tæller som første adresse og første kontaktoplysning. To kontakter er samme person, hvis et hvilket som helst par af deres adresser matcher (den enes kontor med den andens eneste adresse), eller hvis de har samme navn og et telefonnummer eller en e-mail til fælles, uanset placering og etiket. Etiketten vejer ikke i matchet: den kommer tilbage, som den kom ind, plus type_normalized i vCard-ordforrådet (home, work, cell…), så appen ved, hvor den skal skrive tilbage. Én kontakt er én behandling, uanset hvor mange adresser og kontaktoplysninger den har.

curl -X POST https://www.radaraddress.com/api/v1/dedupe \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "records": [
      { "id": "C1", "last_name": "Rossi", "first_name": "Daniela",
        "address": "Via Leopardi 4", "postcode": "20123", "city": "Milano", "province": "MI" },
      { "id": "C2", "last_name": "Rossi", "first_name": "Daniela",
        "address": "V. Leopardi 4", "postcode": "20100", "city": "milano", "province": "MI" }
    ]
  }'

Svaret grupperer dubletterne i groups: hver gruppe oplister id'erne på sine members, siger, hvilken der skal beholdes (main_record), og foreslår den konsoliderede record: det bedste navn og foreningen af adresser og kontaktoplysninger (addresses, phones, emails), hver med sin type, med provenance (hvilke kontakter den kommer fra) og deduplikeret: samme vej i to stavemåder er én adresse, samme nummer med to etiketter ét nummer. Kontakter uden match står i singles, som objekter {id, outcome}: med outcome INTERNAL_DUPLICATE har kontakten ingen dubletter med andre, men nogle i sig selv (adresse skrevet to gange, gentaget nummer), og indeholder sin flettede record. Den genkender samme vej skrevet på forskellige måder ("V. Leopardi 4" ≈ "Via Giacomo Leopardi 4"), postnummeret rettet automatisk og efternavn og fornavn byttet om.

Parametre for deduplikering
ParameterTypeBeskrivelse
recordsarrayObligatorisk. Poster med last_name, first_name, address, postcode, city, province og valgfrit id, gender, email, phone, country. Udenlandske poster (feltet country, eller provinsen EE) genkendes, også når de er skrevet forskelligt (»Hauptstr. 5« og »Hauptstraße 5«); to forskellige lande er aldrig samme post. Et fælles telefonnummer eller en fælles e-mail bringer to poster sammen, selv med forskellig adresse: højst probable, hvis kontaktoplysningen er personlig, kun ambiguous, hvis den hører til et delt sted (en fastnetlinje, en generisk e-mail)
addresses, phones, emailsarrayValgfrit, inde i hver post: adressebogens lister, uden loft (se ovenfor). phone og email accepterer de samme tre former: den rene værdi, en liste af værdier, en liste af {type, value}
tax_codestringValgfrit, inde i hver post. Er det gyldigt og i overensstemmelse med postens navn, er to poster med samme kode samme person, selv på forskellige adresser (certain, årsag »samme skattenummer«); med to gyldige, forskellige koder er de aldrig certain eller probable. En kode, der ikke passer til navnet, vejer ikke
referencearrayValgfrit: to-liste-tilstand. Hver post søges i referencen; svar med matches og not_found
min_levelstringcertain | probable (standard) | ambiguous: hvor elastisk matchet er. certain = vej og husnummer skal stemme overens; ambiguous ignorerer husnummeret. To poster uden hverken adresse eller by er aldrig certain
foreignstringdeclared (standard: udenlandsk er kun den post, der angiver landet) | detect (også ud fra tydelige tegn i teksten: landets navn, kendt udenlandsk by, postnummer i en ikke-italiensk form)
saveboolStandard true: resultatet kan læses igen i 30 dage med GET /api/v1/dedupe?job=<code>; koden kommer i feltet job. Med POST {"job", "group", "processed": true} markerer du en gruppe som gennemgået

Endpoint for italiensk skattenummer

POST /api/v1/tax-code

Tre handlinger på fysiske personers italienske skattenummer (codice fiscale): generate ud fra persondataene, validate en eksisterende kode (format, kontroltegn og omocodia), extract de oplysninger, den indeholder — fødselsdato, alder, køn, fødekommune eller fødeland i udlandet. Dertil tjekker compare, at en kode passer til de oplyste persondata. Den dækker matrikelkoderne for alle italienske kommuner og for udlandet. Efternavn og fornavn skal sendes med latinske bogstaver: for en person med navn i et andet alfabet beregnes koden på den translitteration, der står i dokumentet, og som ikke er entydig (Dmitrij/Dmitry); et ikke-latinsk navn returnerer cognome_non_latino eller nome_non_latino, og i compare giver en forskel i navnet på en person født i udlandet en note om en muligvis anden translitteration.

De første 500 lette behandlinger om måneden er gratis (skattenummer inklusive), og kvoten er én og samme på tværs af alle måder at bruge tjenesten på: det, du gør her, på websitet og i batchfiler, tæller på samme kvote. Derudover betales lette behandlinger til deres pris (se priser).

curl -X POST https://www.radaraddress.com/api/v1/tax-code \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "action": "generate",
    "last_name": "Rossi", "first_name": "Mario", "gender": "M",
    "birth_date": "1980-01-01", "birth_place": "Roma"
  }'

→ { "ok": true, "tax_code": "RSSMRA80A01H501U", "place": "Roma", "province": "RM" }

Til volumener: { "action": "validate", "items": [ … ] } behandler op til 500 elementer pr. kald, hvert med sit eget korrelations-id. Udtrækket markerer med ambiguous_year de tilfælde, hvor årets to cifre ikke afgør århundredet (1926 mod 2026).

Hvert svar bærer outcome, reason, notes og comments på forespørgslens sprog: GENERATED for generate, tomt for en gyldig kode i validate, MATCH eller MISMATCH for compare (med differences: felterne, der afviger). Når koden ikke består kontrollerne, er udfaldet en af TAX_CODE_*-koderne nedenfor, og error giver kortformen (check_digit, length, format, homocode, month, date, place, empty); ved generate siger den, hvilken oplysning der mangler eller ikke kan løses (last_name, first_name, gender, birth_date, birth_place, ambiguous_place med options, last_name_non_latin). suggestion bærer den korrekte kode, når kontrollen kan genopbygge den.

Endpoint for berigelse

POST /api/v1/enrichment

Beriger et navn: køn udledt af fornavnet, type af subjekt (fysisk eller juridisk person), normaliseret titel (Dott.ssa, Avv., …) og tiltaleformer klar til korrespondance — "Egregio Sig. Rossi", "Gentile Dott.ssa Bianchi", "Spett.le" til virksomheder, "Gentile Famiglia" til husstande, "Caro/Cara" til den uformelle tone. Den genkender også gift-navneformen i efternavnet ("Rossi in Verdi" → kvinde, med de to efternavne specificeret). Feltet gender accepterer også skrevne former (»maschio«, »donna«, »Sig.ra«, »male«); X markerer en organisation og G en familie eller et par. Mangler titlen, udleder vi den fra profession (erhvervet) eller fra education, når der er angivet en. Ordbøgerne er italienske.

curl -X POST https://www.radaraddress.com/api/v1/enrichment \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "last_name": "Rossi", "first_name": "Dott.ssa Maria" }'

→ { "ok": true, "gender": "F", "subject_type": "natural_person", "title": "Dott.ssa",
    "formal_salutation": "Gentile Dott.ssa Rossi", "informal_salutation": "Cara Maria", … }

I bundter: { "items": [ … ] }, op til 500 pr. kald. Udfaldet er ENRICHED (køn og hilsner sat), LEGAL_PERSON (virksomhed eller organisation: behandles som firmanavn) eller PARTIAL (fornavn mangler, eller kønnet kan ikke udledes): reason siger hvorfor, comments hvad der skal tilføjes.

Endpoint for e-mailverificering

POST /api/v1/email

Verificerer en e-mailadresse: syntaks, domænets eksistens (MX/A-records), tastefejl i almindelige domæner med foreslået rettelse (gmial.com → gmail.com), engangsdomæner, rollebaserede adresser (info@, regnskab@: ikke en person). Vi laver ikke SMTP-verificering af den enkelte postkasse, en påtrængende og upålidelig praksis. Batch items op til 500; "dns": false springer domæneopslaget over.

En sikker tastefejl rettes uden videre: når adressen, som den er skrevet, ikke engang er en adresse (name@domain,com med komma), eller når rettelsen lander på en velkendt udbyder (gmai.com → gmail.com, også ét bogstav fra, når domænet, som det er skrevet, ikke modtager post), kommer email ud rettet, corrected_from indeholder det skrevne, og resultatet er MODIFIED EMAIL_DOMAIN. En mulig tastefejl på et hvilket som helst andet domæne (rossi.con) forbliver et forslag: EMAIL_TYPO med rettelsen i suggestion, og kontrollerne (domain_exists, domain_checked) køres på den; adressen, som den er skrevet, er ikke verificeret.

Endpoint for telefonverificering

POST /api/v1/phone

Tjekker et nummer uden at ringe til nogen: form, klasse og type, længde efter nummerplanen, fastnettets område og den operatør, blokken oprindeligt blev tildelt. class er den læsning, du skal bruge for at arbejde med en liste: mobile (du kan sende en sms), landline (du ringer i kontortiden), special (ikke en persons nummer: nød-, offentlige, gratis- og overtaksterede numre), foreign for numre med landekode. Når vi også genkender den præcise tjeneste, siger type det (gratisnummer, overtakst, delt takst, offentlig tjeneste). Den italienske landekode skrevet uden + (39347…, en klassisk eksportfejl) fjernes, når cifrene ikke efterlader tvivl — 3934567890 forbliver den mobil, det er. Står der flere numre i samme felt (»347… - 338…«), deler vi dem op: de kommer tilbage som phone, phone2, phone3, og phone er aldrig tom, når der er mindst ét nummer. Med "format": "international" kommer det italienske nummer ud som +39…; standarden national lader det stå nøgent og sætter kun landekode på udenlandske numre. For udenlandske numre får du også e164, landekodens land i country_code, og nullet efter landekoden fjernes (»+44 (0)20…« og »+44 20…« giver samme nummer). Med country_code (eller country) i kaldet eller i elementet læses et nummer skrevet uden landekode som et nationalt nummer i det land: »020 7946 0958« i en britisk post er London, ikke Milano. Uden land forbliver det italiensk. Batch items op til 500.

Et nummer fra postens eget land er ikke »udenlandsk«: hvor vi kender nummerplanen, får det sin class (mobile, landline, special), med format national forbliver det uden landekode i sit lands form (nullet foran inklusive), og national_number returneres ved siden af e164. PHONE_FOREIGN og class foreign gælder fortsat for numre fra et andet land end postens.

curl -X POST https://www.radaraddress.com/api/v1/phone \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{"phone":"3470328959 - 011 1253265"}'

Endpoint for websiteverificering

POST /api/v1/website

Tjekker, at adressen er skrevet korrekt, og at sitet rent faktisk svarer: domænets eksistens, HTTP-forespørgsel med omdirigeringer fulgt, slutkode, certifikatets gyldighed. Ingen vurdering af indholdet. Også her kommer flere adresser i samme felt tilbage som website, website2, website3. Med "network": false tjekker vi kun formen, uden at kontakte sitet. Batch items op til 100: hvert tjek åbner en forbindelse, så partiet er mindre end på de andre endpoints.

curl -X POST https://www.radaraddress.com/api/v1/website \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{"website":"www.example.com"}'

Endpoint for adresse-autofuldførelse

POST /api/v1/suggest

Starter du fra bunden? Widgetten ra-suggerisci.js og en lille proxy på din server er alt, hvad der skal til: tokenet kommer aldrig ud i browseren.

Forslag, mens brugeren skriver en adresse i din formular: hele det italienske vejregister, med navnet fuldført (»via verdi« → »Via Giuseppe Verdi«), kommune og provins; postnummeret kommer med valget, i de store zoneinddelte byer det rigtige for husnummeret. Det virker pr. session: klienten genererer et UUID for hver adresse, der udfyldes, forslagsforespørgslerne er gratis, og du betaler én kontaktverificering, når brugeren vælger, og felterne udfyldes (handlingen select, som returnerer posten allerede normaliseret af motoren). De felter, der allerede er udfyldt i formularen — også delvist — sendes med som kontekst og indsnævrer forslagene.

curl -X POST https://www.radaraddress.com/api/v1/suggest \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{"session":"CLIENT-UUID","q":"via verdi","city":"monz"}'

# when the user picks one: closes the session and charges the selection
curl -X POST https://www.radaraddress.com/api/v1/suggest \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{"session":"CLIENT-UUID","action":"select","street_id":1063428,"house_number":"4"}'

Når vejen er valgt, fuldføres husnummeret: ved at sende street_id med det delvise nummer får du de eksisterende numre på den vej, med exists sand/falsk til at validere det indtastede — og valget kan gentages med husnummeret uden ekstra opkrævning: opkrævningen er pr. session og pr. vej, ikke pr. klik; en anden vej i samme session er en ny opkrævning. Husnumre fuldføres kun i den session, der valgte den vej. I zoneinddelte byer er det husnummeret, der afgør det præcise postnummer.

API-tokenet kommer aldrig ud i browseren: den færdige widget (ra-suggerisci.js) kalder en lille proxy på din server, som tilføjer tokenet og sender videre. Hver session tillader op til 30 kald og varer 10 minutter; sessioner uden valg er gratis op til 200 om dagen pr. token, plus fem for hvert valg. Widget, færdig proxy og eksempelformular findes i kittet Din formular.

Virker i hvert land i drift (i dag Frankrig, Tyskland, Spanien, Nederlandene, Belgien, Finland, Tjekkiet, Portugal, Danmark, Norge, Østrig, Schweiz, Slovakiet, Kroatien, Rumænien, Ungarn, Slovenien, Irland, Island, Luxembourg, Liechtenstein, San Marino, Monaco, Andorra, Vatikanstaten; den opdaterede liste står under Lande): med country_code eller country kommer forslagene fra det lands register, og teksten skrives, som man skriver den dér — vej, husnummer, postnummer og by også i ét enkelt felt: «kalverstraat 92 amst», «92 rue de rivoli paris», i Nederlandene «1012PH 92». Hvert svar har parsed, altså hvordan serveren læste vejen (street), nummeret (house_number) og postnummeret (postcode): din formular ved, hvor nummeret står, uden at kende landets regler. Forslagene har vej, by, eventuelt bynavn og source (registry, eller osm hvor det nationale register ikke offentliggør); postnummer og husnumre står aldrig i forslagene: de kommer med valget, som går gennem motoren og returnerer samme post som /contact (postcode bekræftet af registret, geo på husnummer). Med valget kan du også sende postcode, det der er skrevet i formularen. attribution er kildeangivelsen, der skal vises ved siden af forslagene: registrets licens kræver det. Mangler landet, antages IT; for et land uden for drift er svaret stadig HTTP 200 med supported:false og hints:[], uden session og uden opkrævning. En session hører til ét land: skifter det, laver klienten et nyt UUID (ellers 409 session_country).

curl -X POST https://www.radaraddress.com/api/v1/suggest \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{"session":"CLIENT-UUID","q":"kalverstraat 92 amst","country_code":"NL"}'

{"ok":true,"phase":"streets",
 "hints":[{"type":"street","id":642154,"name":"Kalverstraat","municipality":"Amsterdam","area":"","source":"registry"}],
 "parsed":{"street":"kalverstraat","house_number":"92","postcode":""},
 "attribution":"Bron: Kadaster — BAG"}

Store volumener: det asynkrone job

Almindelige kald svarer med det samme, og derfor har de et loft over antallet af elementer — en HTTP-forespørgsel, der varer minutter, gavner ingen. Lofterne følger, hvor dyr behandlingen er:

Elementlofter pr. kald
EndpointElementer pr. kaldHvorfor
/phone5.000øjeblikkeligt tjek
/tax-code, /enrichment2.000hurtigt tjek
/contact, /email, /dedupe500fuldt tjek
/website100én forbindelse til sitet pr. adresse

Over de tal behøver du ikke dele listen op i hånden: tilføj "async": true, så vender kaldet straks tilbage med en kode, mens behandlingen går i samme kø som filuploads. Op til 100.000 elementer pr. kald, og i Mine job vises ét enkelt.

curl -X POST https://www.radaraddress.com/api/v1/contact \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{"async":true,"items":[ … 100,000 contacts … ]}'

{"ok":true,"job":"369e46e9e7bb…","state":"queued","rows":100000}

Derefter læser du det, når du har brug for det, og resultatet kommer som JSON eller som CSV:

curl 'https://www.radaraddress.com/api/v1/contact?job=369e46e9e7bb…' \
  -H 'Authorization: Bearer YOUR_TOKEN'

{"ok":true,"state":"completed","rows":100000,"done":100000,
 "outcomes":{"ok":1240,"modified":95300,"to_check":2100,"unresolved":1360}}

curl 'https://www.radaraddress.com/api/v1/contact?job=369e46e9e7bb…&format=csv' \
  -H 'Authorization: Bearer YOUR_TOKEN' -o result.csv

Under 5.000 rækker kommer resultatet også tilbage i results inde i JSON'en; derover downloades det som CSV. Opkrævningen sker, når jobbet sættes i kø, og den ubehandlede del går tilbage til din saldo, hvis jobbet stopper. Tokenet skal tilhøre en konto: jobbet havner i din kø.

Resultatkoder

Hvert svar indeholder feltet outcome: en liste af nøgleord, tom, når der intet er at melde. Mønstret er altid <conditions> [MODIFIED <types>] — betingelserne først, ændringerne til sidst — og det gælder for alle tjenester. Ved siden af finder du outcome_label (eller kind) med ok, modified, warning, error, og reason med forklaringen på én linje. Koderne er identifikatorer: de sammenlignes, ikke oversættes; med "language": "it" kommer de italienske koder ud (LOCALITA_NON_TROVATA MODIFICATO CAP INDIRIZZO), de samme ord for ord.

Adresse (kontaktverificering)

Resultatkoder — adresse (kontaktverificering)
KodeBetydning
OKIngen ændring nødvendig, adressen er allerede korrekt (tomt resultat)
MODIFIEDAdresse normaliseret, efterfulgt af de ændrede felter: POSTCODE, PROVINCE, CITY/CITY_FORM, STREET/STREET_FORM, BUILDING (suffikset _FORM = kun format/accenter, værdien var allerede korrekt). Feltets skema er <conditions> [MODIFIED <types>]: eventuelle betingelser kommer først, MODIFIED og dens typer til sidst
PO_BOXLevering til postboks genkendt (ikke en vej): formen CASELLA POSTALE n
LOCALITY_WITHOUT_STREETAdressen er en bebyggelse uden vejnavn; levering er stadig mulig
CITY_NOT_FOUNDKommune ikke genkendt
CITY_AMBIGUOUSKommunenavn findes i mere end én provins
STREET_NOT_FOUNDVej ikke registreret for denne by
STREET_AMBIGUOUSVejnavn findes i mere end ét område af kommunen
STREET_TYPE_MISSINGVejtype kan ikke genkendes (Via/Corso/Piazza… mangler)
HOUSE_NUMBER_MISSINGHusnummer mangler eller er ugyldigt
HOUSE_NUMBER_INVALID_FORMATHusnummer i en ukendt form
POSTCODE_UNCONFIRMEDGaden findes, men for det nummer er der ingen bekræftelse af postnummeret: det angivne beholdes, hvis det hører til byen
POSTCODE_PRESUMEDGaden findes, og postnummeret har vi sat uden bekræftelse fra husnummeret: gaden har flere, og nummeret afgør ikke, eller intet var angivet, og det kommer fra nabonumrene
INCOMPLETE_DATAIkke nok oplysninger til at normalisere
FOREIGNIkke-italiensk adresse, i landets postform; hvor det nationale register er i drift, verificeres vej og husnummer, og det siger meddelelsen (kun på italiensk)
HOUSE_NUMBER_NOT_FOUNDUdland: gaden findes i det nationale register, det angivne husnummer gør det ikke (kun hvor registret har alle husnumre: fra en ufuldstændig kilde eller fra OpenStreetMap er et manglende nummer ingen dom)
POSTCODE_INVALID_FORMATUdland: postnummeret er ikke i den form, der bruges i det angivne land
COUNTRY_UNRESOLVEDUdland: landet, der står i adressen, findes ikke i ISO 3166-1-kataloget

Italiensk skattenummer (codice fiscale)

Resultatkoder — italiensk skattenummer
KodeBetydning
TAX_CODE_INVALIDKoden består ikke kontrollerne; reason siger hvilken (kontroltegn, længde, måned, dato, kommune), og suggestion foreslår den korrekte form, når den kan rekonstrueres
TAX_CODE_MISMATCHKoden er gyldig, men passer ikke til efternavn, fornavn, køn eller dato i forespørgslen
MODIFIED TAX_CODEKontroltegnet manglede: genberegnet ud fra de første 15
MODIFIED TAX_CODE_FORMKun formen er renset (store bogstaver, mellemrum)
GENERATEDEndpoint /tax-code, handling generate: kode beregnet ud fra personoplysningerne
MATCH / MISMATCHEndpoint /tax-code, handling compare: koden stemmer eller ikke med oplysningerne; differences lister felterne, der afviger

På endpointet /tax-code har de samme kontroller deres egne koder — TAX_CODE_CHECK_DIGIT_WRONG, TAX_CODE_CHECK_DIGIT_MISSING, TAX_CODE_LENGTH_WRONG, TAX_CODE_FORMAT_WRONG, TAX_CODE_MONTH_WRONG, TAX_CODE_DATE_INVALID, TAX_CODE_PLACE_UNKNOWN, TAX_CODE_EMPTY — fordi skattenummeret dér er genstand for kontrollen, ikke et felt i posten.

Berigelse

Udfaldskoder — berigelse
KodeBetydning
ENRICHEDFysisk person: køn udledt eller bekræftet, titel og hilsner sat
LEGAL_PERSONVirksomhed eller organisation: overskriften behandles som firmanavn (Spett.le)
PARTIALFornavn mangler, eller kønnet kan ikke udledes af navnet: neutral hilsen

E-mail

Resultatkoder — e-mail
KodeBetydning
EMAIL_INVALIDUgyldig syntaks
EMAIL_DOMAIN_NOT_FOUNDDomænet modtager ikke e-mail (ingen MX/A-record)
EMAIL_TYPOMulig tastefejl i domænet: rettelsen er et forslag, i suggestion og i det normaliserede felt
MODIFIED EMAIL_DOMAINSikker tastefejl i domænet, rettet: corrected_from indeholder det skrevne
EMAIL_DISPOSABLEEngangs-e-maildomæne
EMAIL_ROLE_BASEDOrganisationsadresse (info@, ordre@), ikke en persons. Det er en bemærkning, ikke en fejl
EMAIL_EMPTYIngen adresse i feltet
MODIFIED EMAIL_FORMKun formen er renset (mellemrum, store bogstaver)

Telefon

Resultatkoder — telefon
KodeBetydning
PHONE_INVALIDIkke et genkendeligt nummer
PHONE_LENGTH_ANOMALOUSAntal cifre uforeneligt med nummerplanen
PHONE_OUT_OF_PLANBegynder hverken med 0 (fastnet) eller 3 (mobil)
PHONE_FOREIGNNummer med ikke-italiensk landekode (eller et nationalt nummer i en udenlandsk post): vi tjekker kun formen, i E.164
PHONE_SPECIALGratisnummer eller nummer med overtakst: ikke en personlig kontakt
PHONE_SERVICENummer til offentlig nødtjeneste (112, 118…)
PHONE_WITH_EXTENSIONFeltet indeholdt også et lokalnummer eller en note: vi tjekker kun nummeret
PHONE_EMPTYIntet nummer i feltet
MODIFIED PHONE_FORMKun formen er renset (mellemrum, punktummer, landekode)

Website

Resultatkoder — website
KodeBetydning
WEBSITE_INVALIDIkke en korrekt skrevet webadresse
WEBSITE_DOMAIN_NOT_FOUNDDomænet findes ikke (ingen DNS-record)
WEBSITE_NOT_RESPONDINGDomænet findes, men ingen server svarer
WEBSITE_PAGE_NOT_FOUNDSitet svarer, men siden findes ikke (404/410)
WEBSITE_ACCESS_DENIEDSitet nægter adgang (401/403): ofte en bot-beskyttelse
WEBSITE_CERTIFICATE_INVALIDSitet svarer, men certifikatet kan ikke verificeres
WEBSITE_RESPONSE_ANOMALOUSUventet svarkode
WEBSITE_EMPTYIngen adresse i feltet
MODIFIED WEBSITE_FORMAdresse fuldført (skema, www) uden at ændre indholdet

Hvad hvert kald bruger

Hvert kald bruger behandlinger fra tjenestens tæller: kontaktverificering (/contact, /suggest ved valg), deduplikering (/dedupe) og lette behandlinger (/email, /phone, /website, /enrichment, /tax-code ud over kvoten). Behandlinger købes som pakker, der bliver, eller med et månedligt abonnement; prisen pr. 1.000 falder med størrelsen og står på siden priser. Hver måned er 50 kontaktverificeringer, 100 poster i deduplikering og 500 lette behandlinger gratis.

Hvert svar siger, hvad det brugte, og hvorfra: feltet credit i JSON'en (counter, charged, free, subscription og packs med de trukne behandlinger og resten, available, auto_topup med antallet af automatisk købte pakker, note) og headerne X-RA-Charged, X-RA-Available og, når den træder til, X-RA-Auto-Topup. Dækker de tilgængelige behandlinger ikke kaldet, og tællerens automatiske optankning ikke er aktiv (eller mislykkes), er svaret 402 payment_required, og intet behandles.

For at vide, hvor mange behandlinger der er tilbage, uden at bruge nogen, findes GET /api/v1/credit. For hver af de tre tællere (contact, dedupe, light) returnerer det available, de gratis (free), der er tilbage i måneden, og datoen, hvor de nulstilles (den 1.), subscription (rest, størrelse, fornyelse), de aktive packs én for én med det, der er tilbage (de udløber ikke), og hvor mange du har købt, auto_topup (aktiv, størrelse, loft og brugt denne måned i euro), forbruget (used denne måned, totaler, seneste brug) og frem for alt state, fordi et nul alene ikke siger, om du har opbrugt det, eller om du ikke bruger den tjeneste: never_used, free (aldrig købt, arbejder inden for månedens gratis), free_used_up, active, awaiting_renewal, used_up (du har købt tidligere, og der er intet tilbage: fyld op), med en warning. Øverst oplister needs_topup de tællere, der kræver handling, og endpoint siger, hvilken tæller hvert endpoint bruger. Kræver et kontotoken.

curl https://www.radaraddress.com/api/v1/credit -H 'Authorization: Bearer YOUR_TOKEN'
→ { "ok": true, "counters": { "contact": { "available": 48250, "free": { "remaining": 50, "month": 50 },
      "subscription": { "left": 23200, "size": 25000, "renews_on": "2026-10-03" }, "packs": { "left": 25000, "active_packs": [ … ] },
      "state": "active", "warning": "" }, "dedupe": { "state": "never_used", "warning": "Counter never used: zero does not mean used up. …", … },
      "light": { … } }, "needs_topup": [], "endpoint": { "contact": "contact", "email": "light", … } }
Tæller brugt af hvert endpoint
EndpointTællerBehandlinger
/contactKontaktverificering1 pr. post (adresse, navn og skattenummer sammen)
/suggestKontaktverificering1 pr. valgt adresse (at skrive er gratis)
/dedupeDeduplikering1 pr. post (normalisering inkluderet)
/tax-codeLette behandlinger1 pr. kode, ud over kvoten
/emailLette behandlinger1 pr. e-mail
/phoneLette behandlinger1 pr. nummer
/websiteLette behandlinger1 pr. site
/enrichmentLette behandlinger1 pr. navn

Du betaler pr. verificeret element, ikke pr. kald: står der to telefonnumre eller to e-mails i et felt, verificerer vi dem alle (op til tre pr. række), og hvert betaler sin pris. Et batchkald bruger lige så meget som de behandlinger, det indeholder. Er kreditten opbrugt, og automatisk optankning ikke aktiv, svarer API'et HTTP 402 (utilstrækkelig kredit); over rate limit svarer det HTTP 429 med retry_after. Du køber en pakke fra dit kontoområde eller aktiverer et abonnement for at betale mindre pr. behandling.

Rate limit

60 forespørgsler i minuttet på enkeltkald, 10 i minuttet på batchkald, 300 i minuttet på autofuldførelse.

Målt på produktions-API'et med tyve parallelle kald: omkring 200 verificeringer i sekundet, median under 60 millisekunder.

Én optælling

API'et, websitet og batchjob trækker på de samme tællere: en pakke gælder overalt.

Versionering

Endpoints er versionerede (/api/v1/): når en ny version udkommer, bliver den gamle stående, og datoen, hvor den slukkes, meldes ud i god tid.

Klar til at integrere?

Opret kontoen, generér dit token, køb de behandlinger, du har brug for, og lav det første kald på under et minut.

Opret dit token

Se priser