This page is available in English. Switch to English

Sama moottori,
omassa sovelluksessasi.

Yksi päätepiste per palvelu, yksi kutsu, vastaus dokumentoituna kenttä kentältä: osoitteen tarkistus, duplikaattien poisto, sähköposti, puhelin, verkkosivu, italialainen verotunnus, automaattitäydennys. Yksittäin tai erissä; suuret tiedostot menevät jonoon, ja noudat työn, kun se on valmis.

OpenAPI-määrittely: openapi.json, jolla voit generoida asiakasohjelman tai tuoda sen työkaluusi.

Yksi päätepiste per palvelu, samalla nimellä kuin palvelulla on tällä sivustolla: /contact, /dedupe, /email, /phone, /website, /tax-code, /enrichment. Jokainen ottaa vastaan yhden kohteen pyynnön rungossa tai listan kentässä items, enintään 500 kutsua kohden (100 verkkosivuille, joihin on otettava yhteys yksi kerrallaan). Duplikaattien poisto on poikkeus ja haluaa aina listan: se vertaa tietueita toisiinsa. Erillään ovat /suggest, lomakkeiden automaattitäydennys (toimii istunnoittain käyttäjän kirjoittaessa, ei erissä), ja /credit, joka kertoo, montako käsittelyä on jäljellä ja missä tilassa kukin laskuri on, kuluttamatta yhtään.

Todennus

API:n isäntä on www.radaraddress.com. Kenttien, päätepisteiden ja arvojen nimet ovat englanninkielisiä tunnisteita, samat kaikilla kielillä; otsikot, syyt ja viestit seuraavat pyynnön kieltä ("language": "de" tai ?language=de, tai Accept-Language-otsake, tai tilin kieli). Content-Language-otsake kertoo, millä kielellä vastaus tuli.

Valinnainen: jos kutsut API:a lomakkeelta, voit kertoa sen sijainnin kahdella otsakkeella, X-RadarAddress-Form-Page (lomakkeen sivun osoite) ja X-RadarAddress-Form (mikä lomake ja missä kohdassa, esimerkiksi checkout/billing). Näin jokainen käsittely voidaan yhdistää lomakkeeseen, josta se tuli. Sivusta tallennamme vain verkkotunnuksen ja polun ilman kysymysmerkin jälkeistä osaa.

API:a käytetään Bearer-tokenilla. Tili on ilmainen: luot tokenin omalla tililläsi ja liität sen jokaisen pyynnön otsakkeeseen tässä muodossa:

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

Luodessasi tokenin voit antaa sille valinnaisen vanhenemispäivän: sen jälkeen pyynnöt saavat vastauksen HTTP 401 koodilla token_expired; ilman vanhenemispäivää token on voimassa, kunnes peruutat sen. Voit peruuttaa tai luoda sen uudelleen milloin tahansa omalla tililläsi, jossa näet myös viimeisimmän käytön ja palveltujen pyyntöjen määrän. Pyyntö ilman tokenia tai virheellisellä tokenilla palauttaa HTTP 401.

Jokainen HTTP-metodi tekee sen, mitä sen nimi sanoo: GET lukee eikä kuluta käsittelyjä (/credit, /countries, työn lukeminen uudelleen), POST käsittelee, DELETE poistaa työn. Metodi, jota rajapinta ei hyväksy, saa vastauksen HTTP 405 ja otsakkeen Allow, jossa on sallitut metodit.

Italialaiset nimet niille, jotka jo käyttävät niitä

API:sta on yksi versio, englanniksi. Sen, joka integroi italialaisilla nimillä, ei tarvitse muuttaa mitään: italialaiset kentät hyväksytään jokaisessa pyynnössä, päätepisteet vastaavat myös italialaisella nimellään (/contatto, /deduplica, /codicefiscale, /arricchimento, /telefono, /sito, /suggerisci, /nazioni, /credito), ja vastaus tulee italialaisilla avaimilla ja koodeilla sille, joka pyytää sitä "language": "it"-arvolla.

Kenttien täydellinen taulukko: englanti → italia
englantiitaliaenglantiitalia
accountaccount metricmetrico
actionazione min_levellivello_minimo
activated_onattivato_il missingmancano
activeattiva modifiedmodificati
active_packsattivi module_versionversione_modulo
addressindirizzo monthmese
address_keyindirizzo_confronto monthly_cap_eurtetto_mese_eur
addressesindirizzi moved_fieldscampi_spostati
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 orderordine
changedmodificato order_datedata_ordine
changesmodifiche originorigine
chargedconsumate otheraltro
checkcontrolla outcomeesito
check_digitcontrollo outcome_labelesito_label
citylocalita outcomesesiti
city_keylocalita_confronto overall_cap_eurtetto_globale_eur
city_passescicli_localita packspacchetti
city_typelocalita_tipo parsedletto
classclasse phasefase
codecodice phonetelefono
colourcolore phone2telefono2
commentscommenti phone3telefono3
conditionscondizioni phone_outcometelefono_esito
confidenceconfidenza phonestelefoni
confirmedconfermato placeluogo
consolidateconsolida positionposizione
contactcontatto postcodecap
contact_personreferente postcode_checkcap_verifica
corrected_fromcorretta_da precisionprecisione
countercontatore preserve_originalpreserva_originale
counterscontatori presumedpresunto
countriesnazioni privacy_consentconsenso_privacy
countrynazione processedlavorato
country_codenazione_iso2 processed_atdatalav
country_originalnazione_originale professionqualifica
country_prefixprefisso_paese provenanceprovenienza
createdcreato provinceprovincia
creditcredito provincial_capitalcapoluogo
dedupededuplica purchase_urlacquisto
default_countrynazione_predefinita reachableraggiungibile
detaildettaglio reasonmotivo
differencesdifferenze record_outcomeesito_record
discardedscartati recordsanagrafiche
disposableusa_e_getta redirectsredirect
districtquartiere referenceriferimento
domain_checkeddominio_verificato reference_idriferimento_id
domain_existsdominio_esiste remainingrimaste
donefatte renews_onsi_rinnova_il
duration_msdurata_ms reset_onsi_azzerano_il
e164formato_e164 rowsrighe
educationtitolo_studio salutationsaluto
email_outcomeemail_esito savesalva
enrichmentarricchimento segment_passescicli_arcostradale
entriesschede sessionsessione
errorerrore shop_domaindominio
existing_accountaccount_esistente shortbreve
existsesiste similar_tosimile_a
expiryscadenza singlessingoli
explanationsspiegazioni sizetaglia
extensionestensione sourcefonte
fieldcampo specificityspecificita
final_urlurl_finale spent_month_eurspeso_mese_eur
first_namenome spent_overall_month_eurspeso_globale_mese_eur
fix_typoscorreggi_refusi statestato
foreignesteri statesstati
foreign_addressestero streetstrada
formal_salutationsaluto_formale street_idvia_id
formatformato street_nametoponimo
foundtrovato street_passescicli_toponimo
freegratuite street_proper_nameduf
free_forevergratis_per_sempre street_typedug
full_namenominativo sub_addresssubindirizzo
gendersesso sub_address_confirmedsubindirizzo_confermato
gender_sourcefonte_sesso subject_typetipo_soggetto
genericgenerica subscriptionabbonamento
groupgruppo suffixesponente
groupsgruppi suggestionsuggerimento
hamletfrazione summaryriepilogo
hintssuggerimenti supportedsupportato
homocodeomocodo syntaxsintassi
house_numbercivico tax_codecodice_fiscale
house_number_labelcivico_label tax_code_outcomecodice_fiscale_esito
house_number_verifiedcivico_verificato territoryterritorio
house_numberscivici texttesto
informal_salutationsaluto_informale time_mstempo_ms
iso2codice_iso2 titletitolo
iso3codice_iso3 to_checkda_controllare
istat_codeistat totaltotali
itemselementi towncitta
joblavoro truncatedtroncato
languagelingua typetipo
languageslingue type_normalizedtipo_norm
last_namecognome typestipi
last_onultimo_il typo_levellivello_refuso
last_usedultimo_uso unresolvednon_risolti
leftresiduo url_normalizedurl_normalizzato
legacy_defaultdefault_storico usedusate
letter_namenome_lettera validvalida
levellivello valuevalore
lightleggere warningavviso
longlungo warningsavvisi
long_namenome_esteso websitesito
main_recordprincipale website2sito2
matchcorrisponde website3sito3
matchesabbinamenti website_outcomesito_esito
membersmembri websitessiti
methodmetodo zonedzonato

Myös vaihtoehtojen arvoilla on italialainen nimi: format nazionale/internazionale, action genera/valida/estrai/confronta/seleziona, foreign dichiarati/rileva, min_level certo/probabile/ambiguo; "language": "it"-arvolla samoin tulevat level, confidence, state, outcome-koodit ja tiedostojen sarakeotsikot. Syötteessä hyväksytään myös yleisiä synonyymejä (zip, surname, phone_number, date_of_birth…) ja samat otsikot erätöiden tiedostoissa.

Osoitteen tarkistuksen päätepiste

POST /api/v1/contact

Korjaa koko yhteystiedon: osoitteen maansa postistandardin mukaan — Italiassa ja maissa, joiden rekisteri on käytössä, katu ja talonumero tarkistetaan kansallisesta osoiterekisteristä; muissa maissa osoite palautuu maan postimuodossa —, nimen ja — jos pyyntö sisältää sen — italialaisen verotunnuksen, joka siistitään, täydennetään jos vain tarkistusmerkki puuttuu ja verrataan sukunimeen, etunimeen, sukupuoleen ja syntymäaikaan. Yksi yhteystieto kerrallaan tai enintään 500 kentässä items: rakenne on sama kuin kaikissa muissa päätepisteissä.

Samassa tietueessa voit lähettää kentät email, phone ja website: tarkistamme ne samassa käsittelyssä nimen ja kentän tax_code kanssa. Vastaus sisältää kentät email_outcome, phone_outcome, website_outcome ja enrichment (sukupuoli, titteli, tervehdysmuoto). Niiden tulokset eivät vaikuta kenttään outcome, joka koskee edelleen osoitetta ja verotunnusta. Luettelossa verkkosivuihin otetaan yhteyttä enintään 100 kutsua kohden: muista tarkistetaan vain muoto.

Kaksi kytkintä, jotka ovat päällä, ellet lähetä niitä: network:false ei ota yhteyttä sivustoihin, eikä dns:false tarkista, vastaanottaako sähköpostin verkkotunnus postia. Silloin jää vain muodon tarkistus, ja se on nopeampaa. Ne koskevat koko kutsua, myös async-tilassa, ja ovat samat kuin kohdissa /website ja /email.

Maa annetaan kentällä country_code (ISO 3166-1: IT, DE, FR…) tai kentällä country, kirjoitettuna miten tahansa: ”Germania”, ”Germany”, ”Deutschland”, ”Saksan liittotasavalta”, ”UK”, ”Hollanti”. Jos se puuttuu, oletetaan Italia. Maissa, joiden rekisteri on käytössä — tänään Ranska, Saksa, Espanja, Alankomaat, Belgia, Suomi, Sveitsi, Tšekki, Portugali, Tanska, Norja, Itävalta, Slovakia, Kroatia, Kreikka, Romania, Unkari, Slovenia, Irlanti, Islanti, Luxemburg, Liechtenstein, San Marino, Monaco, Andorra, Vatikaanivaltio, ajantasainen luettelo on sivulla Maat — katu ja talonumero tarkistetaan kansallisesta osoiterekisteristä kuten Italiassa: postinumero vahvistetaan tai täydennetään, talonumeron koordinaatit kentässä geo, kaupunginosa tai arrondissement kentässä district, jos kaupungissa on sellaisia (Hamburg-Altstadt, Paris 4e Arrondissement), kunnan koodi kentässä territory.municipality_code. Italiaksi tuloksessa on FOREIGN, jota seuraavat muutokset, muilla kielillä vain muutokset; jos katu on olemassa mutta numero ei, HOUSE_NUMBER_NOT_FOUND. Muissa maissa työstämme muotoa, ja viesti kertoo sen: postinumero maan muodossa, kadun lyhenteet avattuina, isot kirjaimet ja kaupungin nimi niin kuin sen maan posti ne kirjoittaa (Hauptstr. 5, München → Hauptstraße 5, MÜNCHEN), maarivin kanssa. Molemmissa tapauksissa palautuu address_key, muoto, jolla kaksoiskappaleiden tunnistus tunnistaa saman kadun kahdella tavalla kirjoitettuna. Arvolla "foreign": "detect" tietue ilman maata, jota ei löydy Italiasta, tunnistetaan ulkomaiseksi, kun teksti sanoo sen selvästi; oletusarvo declared jättää ulkomaiseksi vain sen, mikä ilmoittaa sen. Täydellinen maaluettelo lyhyine ja virallisine nimineen, englanniksi ja maan kielellä, on saatavilla osoitteessa GET /api/v1/countries, ja sitä voi hakea parametreilla ?q=Germania, ?q=Deutschland tai ?q=DE.

Yhden maan erässä maata ei tarvitse toistaa jokaisessa alkiossa: default_country ("DE", "Germany") koskee alkioita, jotka eivät sitä ilmoita, osoitteen tarkistuksessa, duplikaattien poistossa, rikastamisessa (se valitsee etunimien sanakirjan) ja puhelinnumeron tarkistuksessa, myös asynkronisissa töissä. Alkioon kirjoitettu maa menee aina edelle; ilman kumpaakaan alkio on italialainen.

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"}'

Erässä samat kentät kentän items sisällä; vastaus on { count, results: [ { id, result } ] } samassa järjestyksessä kuin lähetys.

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"}]}'

Sama päätepiste toisen maan osoitteelle: country_code riittää. Tässä Hampuri, tarkistettu Saksan rekisteristä, kaupunginosan ja talonumeron koordinaattien kanssa.

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" } }

Koko kutsua koskevat asetukset: postal_form (pakottaa myös kentän normalized postimuotoon), preserve_original (säilyttää käyttäjän kirjoittaman nimen ja antaa kanonisen erikseen), precision 1–5 (oletus 3; yli 3:n vastaavuus on likimääräinen eikä luotettavuus ole high).

precision-tasot: jokainen tekee myös sen, mitä edelliset tekevät.

  • 1 Tiukka: Paikkakunta sellaisena kuin se on kirjoitettu; kadussa vain korjaukset, jotka tiedot vahvistavat epäilyttä.
  • 2 Kapea: Lisäksi korjaa väärät postinumerot ja maakunnat ja tunnistaa lyhennetyt paikkakuntien nimet.
  • 3 Normaali (oletus): Lisäksi löytää puoliksi kirjoitetut nimet ja siirtää osoitteen kuntaan, jossa katu todella on.
  • 4 Laaja: Lisäksi hyväksyy samalta kuulostavat nimet ja valitsee samannimisistä kaduista tunnetuimman. Luotettavuus ei ole koskaan korkea.
  • 5 Suurin: Kaikki, mikä voidaan löytää. Luotettavuus ei ole koskaan korkea.

Osoitteen mukana palautuu city_type, joka kertoo, onko jakelupaikka maakunnan pääkaupungissa vai maakunnan muussa kunnassa — ero, jolla on merkitystä sille, joka jakaa kampanjan kaupungeittain. provincial_capital on true, false tai null, kun meillä ei ole perusteita sanoa — ja silloin emme arvaa.

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

Postinumeron rinnalla tulee postcode_check: mistä se tulee (source) ja millä tarkkuudella (precision: house_number numero itse, interpolated saman kadun naapurinumerot, street kadun enemmistö, locality, municipality), kuinka moni osoitenumero sen sanoo (house_numbers) ja millä yksimielisyydellä (agreement, 0–1). Jos numerolle ei ole vahvistusta, tulos kantaa arvoa POSTCODE_UNCONFIRMED ja confirmed on false: postinumero jää annetuksi, jos se kuuluu kaupungille, ja se kannattaa tarkistaa.

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

Myös koordinaatit palautuvat kentässä geo (leveys- ja pituusaste WGS84) ja aluetunnisteet kentässä territory: Italiassa kunnan ISTAT-koodi ja kiinteistökoodi, CAB ja kadun kansallinen tunniste; muissa maissa country ja kunnan koodi kansallisessa rekisterissä (municipality_code). Kenttä precision kertoo, mille tasolle päästiin: house_number, kun talonumero on paikannettu, interpolated, kun tarkka numero puuttuu ja piste on arvioitu, street, kun meillä on kadun piste, municipality, kun meillä on vain kunnan keskipiste. source kertoo, mistä piste on peräisin: anncsu on Italian kansallinen rekisteri, inspire maan kansallinen rekisteri, osm OpenStreetMap: silloin tiedot ovat © OpenStreetMap contributors, ODbL-lisenssi, ja lähdemaininta on toistettava, jos julkaiset ne. Jos maan rekisteri vaatii lähdemaininnan, se tulee viestiin. Eräajojen CSV-tiedostossa ne ovat sarakkeet latitude, longitude, geo_precision, istat_code ja 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" } }

Osoitteeseen kirjoitettu kerros, porras ja huoneisto palautuvat myös omana tietonaan kentässä sub_address: luettelo type- ja value-pareja, luettuna maan postisääntöjen mukaan (Saksassa merkin ”//” jälkeen, Ranskassa omalla rivillään, Portugalissa ”3º Esq”). Tyypit ovat unit (huoneisto), staircase (porras), floor (kerros), block, building, building_number ja block_number. Osoiterivi pysyy maan muodossa. Mitä emme tunnista, jää sellaiseksi kuin se kirjoitettiin eikä tule luetteloon: emme arvaa. Kun annettu yksikkö löytyy tästä osoitenumerosta, sub_address_confirmed on true, muuten null, ei koskaan false: se, ettemme löydä sitä, ei tarkoita, että se olisi väärä.

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

Duplikaattien poiston päätepiste

POST /api/v1/dedupe

Tunnistaa tietueet, jotka viittaavat samaan henkilöön samassa osoitteessa, vaikka ne olisi kirjoitettu eri tavalla: lempinimet ja nimien vastaavuudet (Dany ≈ Daniela), sukunimi ja etunimi vaihtaneet paikkaa, lyhenteet ("V. Roma" ≈ "Via Roma"), kirjoitusvirheet. Osoitteiden vertailu kulkee normalisointimoottorin kautta: saman kadun kaksi kirjoitusasua yhdistyvät kanoniseen muotoon ennen vertailua. Enintään 500 yhteystietoa kutsua kohden (tietueet + vertailulista); suuremmille listoille käytä erätyötä omalta tililtäsi.

Osoitekirjat. Osoitekirjan yhteystiedolla (Applen Yhteystiedot, Google, Outlook: vCard-malli) on useita osoitteita, puhelinnumeroita ja sähköposteja, kullakin oma nimikkeensä. Päätepiste ottaa ne vastaan sellaisinaan, ilman ylärajaa: addresses on lista objekteja, joissa on type ja tavalliset kentät; phones ja emails ovat listoja, joissa kukin alkio on pelkkä arvo ("340 7491386") tai {"type": "work", "value": "02 66710423"}, myös sekaisin; tavalliset litteät kentät pysyvät voimassa ja lasketaan ensimmäiseksi osoitteeksi ja ensimmäiseksi yhteystiedoksi. Kaksi yhteystietoa on sama henkilö, jos mikä tahansa niiden osoitteiden pari täsmää (toisen työpaikka toisen ainoan osoitteen kanssa), tai jos niillä on sama nimi ja yhteinen puhelin tai sähköposti, missä tahansa asemassa ja millä tahansa nimikkeellä. Nimike ei vaikuta täsmäytykseen: se palautuu sellaisena kuin se saapui, lisäksi type_normalized vCard-sanastossa (home, work, cell…), jotta sovellus tietää, mihin kirjoittaa takaisin. Yksi yhteystieto on yksi käsittely riippumatta siitä, montako osoitetta ja yhteystietoa sillä on.

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" }
    ]
  }'

Vastaus ryhmittelee duplikaatit kenttään groups: jokainen ryhmä luettelee jäsentensä id-tunnisteet kentässä members, ilmoittaa, mikä säilytetään (main_record), ja ehdottaa yhdistettyä tietuetta record: paras nimi ja osoitteiden ja yhteystietojen yhdiste (addresses, phones, emails), kullakin tyyppinsä, alkuperä kentässä provenance (mistä yhteystiedoista se tulee) ja duplikaatit poistettuina: sama katu kahdella kirjoitusasulla on yksi osoite, sama numero kahdella nimikkeellä yksi numero. Yhteystiedot, joille ei löytynyt vastinetta, ovat kentässä singles objekteina {id, outcome}: tuloksella outcome INTERNAL_DUPLICATE yhteystiedolla ei ole duplikaatteja muiden kanssa, mutta sillä on niitä sisällään (osoite kirjoitettu kahdesti, toistuva numero), ja se sisältää sulautetun tietueensa record. Se tunnistaa saman kadun eri tavoin kirjoitettuna ("V. Leopardi 4" ≈ "Via Giacomo Leopardi 4"), automaattisesti korjatun postinumeron ja paikkaa vaihtaneet sukunimen ja etunimen.

Duplikaattien poiston parametrit
ParametriTyyppiKuvaus
recordsarrayPakollinen. Tietueet kentillä last_name, first_name, address, postcode, city, province ja valinnaisilla id, gender, email, phone, country. Ulkomaiset tietueet (kenttä country tai maakunta EE) tunnistetaan myös eri tavalla kirjoitettuina (”Hauptstr. 5” ja ”Hauptstraße 5”); kaksi eri maata ei ole koskaan sama tietue. Yhteinen puhelin tai sähköposti yhdistää kaksi tietuetta myös eri osoitteella: enintään probable, jos yhteystieto on henkilökohtainen, vain ambiguous, jos se kuuluu jaetulle paikalle (lankapuhelin, yleinen sähköpostiosoite)
addresses, phones, emailsarrayValinnaisia, jokaisen tietueen sisällä: osoitekirjan listat, ilman ylärajaa (ks. yllä). phone ja email hyväksyvät samat kolme muotoa: pelkän arvon, listan arvoja, listan {type, value}-objekteja
tax_codestringValinnainen, jokaisen tietueen sisällä. Jos se on kelvollinen ja vastaa tietueen nimeä, kaksi tietuetta samalla koodilla ovat sama henkilö myös eri osoitteissa (certain, peruste ”sama verotunnus”); kahdella kelvollisella mutta erilaisella koodilla ne eivät ole koskaan certain eivätkä probable. Koodi, joka ei vastaa nimeä, ei vaikuta
referencearrayValinnainen: kahden listan tila. Jokaista tietuetta haetaan vertailulistasta; vastaus kentillä matches ja not_found
min_levelstringcertain | probable (oletus) | ambiguous: kuinka joustava täsmäytys on. certain = kadun ja talonumeron on täsmättävä; ambiguous jättää talonumeron huomiotta. Kaksi tietuetta ilman osoitetta ja paikkakuntaa eivät ole koskaan certain
foreignstringdeclared (oletus: ulkomainen on vain tietue, joka ilmoittaa maan) | detect (myös tekstin selvistä merkeistä: maan nimi, tunnettu ulkomainen kaupunki, postinumero muodossa, jota Italiassa ei ole)
precisionint1–5 (oletus 3), sama asteikko kuin yhteystiedon tarkistuksessa: tässä se laajentaa sukunimen lukemista. Tasolle 3 asti se luetaan kirjain kirjaimelta; tasolla 4 rinnastetaan tietueet, joiden sukunimi on kirjoitettu välilyönnillä tai ilman (”La Pera”, ”Lapera”), tasolla 5 myös ne, joiden sukunimi kuulostaa samalta (”Lepera”, ”La Pera”). Nämä ryhmät eivät koskaan ylitä tasoa ambiguous, ja ilman min_level-arvoa tarkkuus 4 tai 5 asettaa vähimmäistasoksi ambiguous. Osoitteen tarkistus ei muutu
saveboolOletus true: tulos pysyy luettavissa 30 päivää kutsulla GET /api/v1/dedupe?job=<koodi>; koodi saapuu kentässä job. Kutsulla POST {"job", "group", "processed": true} merkitset ryhmän tarkistetuksi
asyncboolYli 500 yhteystietoa, enintään 100 000: kutsu vastaa heti HTTP 202 ja työn koodin, ja kaksoiskappaleiden haku menee tiedostojen jonoon. Kutsulla GET /api/v1/dedupe?job=<code> luet tilan ja, kun työ on valmis, tuloksen rivi riviltä; parametrilla format=zip zipin, jossa ovat siistitty tiedosto, poistettavat kaksoiskappaleet, ryhmät ja mikä muuttuu. Vain yksi lista: ilman kenttää reference

Italialaisen verotunnuksen päätepiste

POST /api/v1/tax-code

Kolme toimintoa luonnollisten henkilöiden italialaiselle verotunnukselle (codice fiscale): generate luo sen henkilötiedoista, validate tarkistaa olemassa olevan koodin (muoto, tarkistusmerkki ja omocodia), extract poimii sen sisältämät tiedot — syntymäaika, ikä, sukupuoli, syntymäkunta tai ulkomainen syntymävaltio. Lisäksi compare tarkistaa, että koodi vastaa ilmoitettuja henkilötietoja. Kattaa kaikkien Italian kuntien ja ulkomaisten valtioiden kiinteistörekisterikoodit. Sukunimi ja etunimi on annettava latinalaisin kirjaimin: jos nimi on kirjoitettu muulla kirjaimistolla, koodi lasketaan asiakirjaan merkitystä translitteraatiosta, joka ei ole yksiselitteinen (Dmitrij/Dmitry); ei-latinalainen nimi palauttaa cognome_non_latino tai nome_non_latino, ja compare-toiminnossa ulkomailla syntyneen nimen ero tuo mukanaan huomautuksen mahdollisesti erilaisesta translitteraatiosta.

Ensimmäiset 500 kevyttä käsittelyä kuukaudessa ovat ilmaisia (verotunnus mukaan lukien), ja kiintiö on yksi ja sama kaikissa käyttötavoissa: se, mitä teet täällä, verkkosivulla ja erätiedostoissa, lasketaan samasta kiintiöstä. Sen ylittävältä osalta kevyet käsittelyt maksavat hintansa (ks. hinnat).

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" }

Suurille määrille: { "action": "validate", "items": [ … ] } käsittelee enintään 500 kohdetta kutsua kohden, kullakin oma korrelaatio-id. Poiminta merkitsee arvolla ambiguous_year tapaukset, joissa vuoden kaksi numeroa eivät erota vuosisataa (1926 vs. 2026).

Jokainen vastaus sisältää kentät outcome, reason, notes ja comments pyynnön kielellä: GENERATED toiminnolle generate, tyhjä kelvolliselle koodille toiminnossa validate, MATCH tai MISMATCH toiminnolle compare (ja differences: poikkeavat kentät). Kun koodi ei läpäise tarkistuksia, tulos on jokin alla luetelluista TAX_CODE_*-koodeista ja error antaa lyhyen muodon (check_digit, length, format, homocode, month, date, place, empty); toiminnossa generate se kertoo, mikä tieto puuttuu tai ei ratkea (last_name, first_name, gender, birth_date, birth_place, ambiguous_place ja options, last_name_non_latin). suggestion sisältää oikean koodin, kun tarkistus osaa rakentaa sen.

Rikastamisen päätepiste

POST /api/v1/enrichment

Rikastaa nimen: sukupuoli pääteltynä etunimestä, kohteen tyyppi (luonnollinen henkilö tai oikeushenkilö), normalisoitu titteli (Dr.ssa, Avv., …) ja tervehdysmuodot valmiina kirjeenvaihtoon — "Egregio Sig. Rossi", "Gentile Dr.ssa Bianchi", "Spett.le" yrityksille, "Gentile Famiglia" perheille, "Caro/Cara" tuttavalliseen sävyyn. Tunnistaa myös sukunimen avioliittomuodon ("Rossi in Verdi" → nainen, molempien sukunimien erittelyllä). Kenttä gender hyväksyy myös kirjoitetut muodot (”maschio”, ”donna”, ”Sig.ra”, ”male”); X tarkoittaa organisaatiota ja G perhettä tai pariskuntaa. Jos titteli puuttuu, päättelemme sen kentästä profession (ammatti) tai education, kun jompikumpi on annettu. Sanastot ovat italialaisia.

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": "Dr.ssa",
    "formal_salutation": "Gentile Dr.ssa Rossi", "informal_salutation": "Cara Maria", … }

Erissä: { "items": [ … ] }, enintään 500 kutsua kohden. Tulos on ENRICHED (sukupuoli ja tervehdykset asetettu), LEGAL_PERSON (yritys tai yhteisö: käsitellään toiminimenä) tai PARTIAL (etunimi puuttuu tai sukupuolta ei voi päätellä): reason kertoo miksi, comments mitä lisätä.

Sähköpostin tarkistuksen päätepiste

POST /api/v1/email

Tarkistaa sähköpostiosoitteen: syntaksi, verkkotunnuksen olemassaolo (MX/A-tietueet), yleisten verkkotunnusten kirjoitusvirheet korjausehdotuksen kanssa (gmial.com → gmail.com), kertakäyttöiset verkkotunnukset, yleisosoitteet (info@, laskutus@: eivät henkilön osoitteita). Emme tee yksittäisen postilaatikon SMTP-tarkistusta, joka on tungetteleva ja epäluotettava käytäntö. Erä items enintään 500; "dns": false ohittaa verkkotunnuksen haun.

Varma kirjoitusvirhe korjataan suoraan: kun osoite sellaisenaan ei ole edes osoite (nimi@verkkotunnus,fi pilkulla) tai kun korjaus osuu tunnettuun palveluntarjoajaan (gmai.com → gmail.com, myös yhden kirjaimen päässä, jos kirjoitettu verkkotunnus ei vastaanota postia), email palautuu korjattuna, corrected_from sisältää kirjoitetun muodon ja tulos on MODIFIED EMAIL_DOMAIN. Mahdollinen kirjoitusvirhe missä tahansa muussa verkkotunnuksessa (rossi.con) jää ehdotukseksi: EMAIL_TYPO ja korjaus kentässä suggestion, ja tarkistukset (domain_exists, domain_checked) tehdään sille; osoitetta sellaisenaan ei tarkisteta.

Verkkotunnus, joka on yhden näppäilyn päässä tunnetusta palveluntarjoajasta, korjataan precision-arvon mukaan (1-5, oletus 3; 4 ja 5 lasketaan 3:ksi). Tasolla 1 vain, jos kirjoitettua verkkotunnusta ei ole (gmail.cob, hotmial.ocm); tasolla 2 myös, jos se on olemassa mutta ei vastaanota postia (libreo.it); tasolla 3 myös, jos se vastaanottaa sähköpostia: pysäköidyt verkkotunnukset, todelliset organisaatiot (libera.it, lice.it) ja korvakuulolta kirjoitetut muodot (gemail.com, jmail.com). Väärä pääte missä tahansa verkkotunnuksessa (studiorossi.con) korjataan, jos oikea verkkotunnus vastaanottaa sähköpostia. Kirjoitusvirheen tason alapuolella, joka palautetaan kentässä typo_level, osoite jää kirjoitetuksi ja similar_to sisältää todennäköisesti tarkoitetun osoitteen huomautuksen kera. Asetuksella "fix_typos": false, koko kutsulle tai yksittäiselle alkiolle, mitään kirjoitusvirhettä ei korjata: osoite jää kirjoitetuksi ja korjaus tulee kenttään similar_to. Hyödyllinen, kun henkilö on vahvistanut haluavansa juuri sen osoitteen.

Puhelinnumeron tarkistuksen päätepiste

POST /api/v1/phone

Tarkistaa numeron soittamatta kenellekään: muoto, luokka ja tyyppi, pituus numerointisuunnitelman mukaan, lankanumeron suuntanumeroalue ja operaattori, jolle numerolohko alun perin osoitettiin. class on se tulkinta, jota listan työstämiseen tarvitaan: mobile (voit lähettää tekstiviestin), landline (soitat virka-aikana), special (ei henkilön numero: hätänumerot, yleishyödylliset palvelunumerot, maksuttomat ja erikoismaksulliset numerot), foreign numeroille, joissa on kansainvälinen suuntanumero. Kun tunnistamme myös tarkan palvelun, type kertoo sen (maksuton, erikoismaksullinen, jaettu kustannus, yleishyödyllinen palvelu). Ilman plusmerkkiä kirjoitetun Italian suuntanumeron (39347…, klassinen vientitiedostojen virhe) poistamme, kun numerot eivät jätä epäilystä — 3934567890 pysyy matkapuhelinnumerona, joka se on. Jos samassa kentässä on useita numeroita (”347… - 338…”), erotamme ne: ne palautuvat kenttinä phone, phone2, phone3, eikä phone ole koskaan tyhjä, kun vähintään yksi numero on olemassa. Asetuksella "format": "international" italialainen numero tulee muodossa +39…; oletusarvo national jättää sen ilman suuntanumeroa ja lisää suuntanumeron vain ulkomaisiin. Ulkomaisille numeroille palautuu myös e164, suuntanumeron maa kentässä country_code, ja suuntanumeron jälkeinen kotimaan nolla poistetaan (”+44 (0)20…” ja ”+44 20…” antavat saman numeron). Kun kutsussa tai kohteessa on country_code (tai country), ilman suuntanumeroa kirjoitettu numero luetaan kyseisen maan kansalliseksi numeroksi: ”020 7946 0958” Yhdistyneen kuningaskunnan tietueessa on Lontoo, ei Milano. Ilman maata se pysyy italialaisena. Erä items enintään 500.

Tietueen oman maan numero ei ole ”ulkomainen”: siellä missä tunnemme numerointisuunnitelman se saa oman class-arvonsa (mobile, landline, special), format-arvolla national se pysyy ilman maatunnusta maansa muodossa (suuntanumeron nolla mukaan lukien), ja e164-kentän rinnalla palautuu national_number. PHONE_FOREIGN ja class foreign jäävät numeroille, jotka ovat eri maasta kuin tietue.

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

Verkkosivun tarkistuksen päätepiste

POST /api/v1/website

Tarkistaa, että osoite on oikein kirjoitettu ja että sivusto todella vastaa: verkkotunnuksen olemassaolo, HTTP-pyyntö uudelleenohjauksia seuraten, lopullinen vastauskoodi, varmenteen kelvollisuus. Sisältöä ei arvioida. Myös tässä useat osoitteet samassa kentässä palautuvat muodossa website, website2, website3. Asetuksella "network": false tarkistamme vain muodon ottamatta yhteyttä sivustoon. Erä items enintään 100: jokainen tarkistus avaa yhteyden, joten erä on pienempi kuin muissa päätepisteissä.

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"}'

Osoitteiden automaattitäydennyksen päätepiste

POST /api/v1/suggest

Aloitatko tyhjästä? Widget ra-suggerisci.js ja pieni välityspalvelin omalla palvelimellasi riittävät: token ei koskaan päädy selaimeen.

Ehdotuksia sitä mukaa kuin käyttäjä kirjoittaa osoitetta lomakkeeseesi: koko Italian katurekisteri nimi täydennettynä (”via verdi” → ”Via Giuseppe Verdi”), kunta ja maakunta; postinumero tulee valinnan mukana, suurissa postinumeroalueisiin jaetuissa kaupungeissa talonumeron oikea. Toimii istunnoittain: asiakasohjelma luo UUID:n jokaiselle täytettävälle osoitteelle, ehdotuskyselyt ovat ilmaisia, ja maksat yhden osoitteen tarkistuksen, kun käyttäjä valitsee ja kentät täyttyvät (toiminto select, joka palauttaa moottorin jo normalisoiman tietueen). Lomakkeeseen jo täytetyt kentät — myös osittaiset — kulkevat mukana kontekstina ja rajaavat ehdotuksia.

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"}'

Kun katu on valittu, talonumero täydentyy: antamalla street_id osittaisen numeron kanssa saat kadun olemassa olevat numerot ja arvon exists tosi/epätosi kirjoitetun numeron tarkistamiseen — ja valinnan voi toistaa talonumeron kanssa ilman lisäveloitusta: veloitus on istunto- ja katukohtainen, ei napsautuskohtainen; toinen katu samassa istunnossa on uusi veloitus. Talonumerot täydennetään vain siinä istunnossa, joka valitsi kyseisen kadun. Postinumeroalueisiin jaetuissa kaupungeissa juuri talonumero määrää tarkan postinumeron.

API-token ei koskaan mene selaimeen: valmis widget (ra-suggerisci.js) kutsuu palvelimellasi olevaa pientä välityspalvelinta, joka lisää tokenin ja välittää pyynnön eteenpäin. Jokainen istunto sallii enintään 30 kutsua ja kestää 10 minuuttia; istunnot ilman valintaa ovat ilmaisia 200:aan asti päivässä tokenia kohti, plus viisi jokaista valintaa kohti. Widget, valmis proxy ja esimerkkilomake ovat Oma lomakkeesi -kitissä.

Toimii jokaisessa palvelussa olevassa maassa (tänään Ranska, Saksa, Espanja, Alankomaat, Belgia, Suomi, Sveitsi, Tšekki, Portugali, Tanska, Norja, Itävalta, Slovakia, Kroatia, Kreikka, Romania, Unkari, Slovenia, Irlanti, Islanti, Luxemburg, Liechtenstein, San Marino, Monaco, Andorra, Vatikaanivaltio; ajantasainen luettelo on kohdassa Maat): kun annat country_code tai country, ehdotukset tulevat sen maan rekisteristä, ja teksti kirjoitetaan kuten siellä kirjoitetaan — katu, numero, postinumero ja kaupunki vaikka yhteen kenttään: «kalverstraat 92 amst», «92 rue de rivoli paris», Alankomaissa «1012PH 92». Jokainen vastaus sisältää kentän parsed, eli miten palvelin luki kadun (street), numeron (house_number) ja postinumeron (postcode): lomakkeesi tietää, missä numero on, tuntematta maan sääntöjä. Ehdotukset sisältävät kadun, kaupungin, mahdollisen kylän ja kentän source (registry, tai osm siellä, missä kansallinen rekisteri ei julkaise); postinumero ja talonumerot eivät koskaan ole ehdotuksissa: ne tulevat valinnan mukana, joka kulkee moottorin läpi ja palauttaa saman tietueen kuin /contact (postcode rekisterin vahvistamana, geo talonumeron tarkkuudella). Valinnan mukana voit antaa myös kentän postcode, lomakkeeseen kirjoitetun. attribution on lähdemerkintä, joka näytetään ehdotusten vieressä: rekisterin lisenssi vaatii sen. Jos maa puuttuu, oletetaan IT; maalle, joka ei ole palvelussa, vastaus on edelleen HTTP 200 ja supported:false sekä hints:[], ilman istuntoa ja ilman veloitusta. Istunto kuuluu yhdelle maalle: jos maa vaihtuu, asiakas luo uuden UUID:n (muuten 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"}

Suuret määrät: asynkroninen työ

Tavalliset kutsut vastaavat heti, ja siksi niillä on kohteiden yläraja — minuutteja kestävä HTTP-pyyntö ei hyödytä ketään. Ylärajat seuraavat käsittelyn raskautta:

Kohteiden ylärajat kutsua kohden
PäätepisteKohteita kutsua kohdenMiksi
/phone5.000välitön tarkistus
/tax-code, /enrichment2.000nopea tarkistus
/contact, /email, /dedupe500täydellinen tarkistus
/website100yksi yhteys sivustoon jokaista osoitetta kohden

Näiden lukujen yli listaa ei tarvitse pilkkoa käsin: lisää "async": true, niin kutsu palaa heti koodin kanssa ja käsittely menee samaan jonoon kuin tiedostojen lataukset. Enintään 100 000 kohdetta kutsua kohden, ja sivulla Omat työt näkyy vain yksi työ.

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 … ]}'

HTTP/1.1 202 Accepted
Location: /api/v1/contact?job=369e46e9e7bb…

{"ok":true,"job":"369e46e9e7bb…","state":"queued","rows":100000,"check":"/api/v1/contact?job=369e46e9e7bb…"}

Sen jälkeen tulos luetaan tarvittaessa, ja se saapuu JSON-muodossa tai CSV-tiedostona:

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

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

Parametrilla format=zip lataat sen sijaan kaikki työn tiedostot yhdessä zipissä: siistitty tiedosto omilla sarakkeillasi ja korjaukset valmiiksi kirjoitettuina siellä, missä ne on vahvistettu; tarkistettavat rivit; mikä muuttuu, solu solulta; koko tulos; niitä selittävä README. Parametrilla format=zip_xlsx samat tiedostot ovat Excel-muodossa.

Alle 5 000 rivillä tulos palautuu myös kentässä results JSON-vastauksen sisällä; sen yli se ladataan CSV-tiedostona. Veloitus tapahtuu, kun työ laitetaan jonoon, ja käsittelemättä jäänyt osa palautuu saldoosi, jos työ pysähtyy. Tokenin on kuuluttava tilille: työ päätyy sinun jonoosi.

Kutsu, joka laittaa työn jonoon, vastaa koodilla HTTP 202 ja otsakkeella Location, joka osoittaa työhön. Kun et enää tarvitse tulosta, poistat sen DELETE-kutsulla samaan osoitteeseen: vastaus on HTTP 204, eikä tiedostoja ja tietoja enää ole. Työ, joka on vielä jonossa tai käsittelyssä, vastaa koodilla 409 job_running: poista se, kun se on valmis. Jos et poista sitä itse, työ poistuu itsestään 30 päivän kuluttua. Sama koskee /dedupe-kutsun tallennettua tulosta.

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

HTTP/1.1 204 No Content

Tuloskoodit

Jokainen vastaus sisältää kentän outcome: luettelo avainsanoja, tyhjä, kun ei ole mitään ilmoitettavaa. Kaava on aina <conditions> [MODIFIED <types>] — ehdot edessä, muutokset lopussa — ja se pätee kaikkiin palveluihin. Vieressä on outcome_label (tai kind) arvoilla ok, modified, warning, error, sekä reason, joka selittää yhdellä rivillä. Koodit ovat tunnisteita: niitä verrataan, ei käännetä; "language": "it"-arvolla tulevat italialaiset koodit (LOCALITA_NON_TROVATA MODIFICATO CAP INDIRIZZO), samat sana sanalta.

Osoite (osoitteen tarkistus)

Tuloskoodit — osoite (osoitteen tarkistus)
KoodiMerkitys
OKEi muutoksia tarpeen, osoite jo oikein (tyhjä tulos)
MODIFIEDOsoite normalisoitu, perässä muuttuneet kentät: POSTCODE, PROVINCE, CITY/CITY_FORM, STREET/STREET_FORM, BUILDING (pääte _FORM = vain muoto/aksentit, arvo oli jo oikein). Kentän rakenne on <ehdot> [MODIFIED <tyypit>]: mahdolliset ehdot tulevat ensin, MODIFIED ja sen tyypit lopussa
PO_BOXJakelu postilokeroon tunnistettu (ei katu): muoto CASELLA POSTALE n
LOCALITY_WITHOUT_STREETOsoite on kylä tai taajama ilman kadunnimeä; jakelu on silti mahdollinen
CITY_NOT_FOUNDKuntaa ei tunnistettu
CITY_AMBIGUOUSKunnan nimi esiintyy useammassa maakunnassa
STREET_NOT_FOUNDKatua ei ole rekisteröity tälle paikkakunnalle
STREET_AMBIGUOUSKadunnimi esiintyy kunnan useammalla alueella
STREET_TYPE_MISSINGKadun tyyppiä ei tunnisteta (Via/Corso/Piazza… puuttuu)
HOUSE_NUMBER_MISSINGTalonumero puuttuu tai ei kelpaa
HOUSE_NUMBER_INVALID_FORMATTalonumero tunnistamattomassa muodossa
POSTCODE_UNCONFIRMEDKatu on olemassa, mutta sille numerolle ei ole vahvistusta postinumerosta: annettu jää, jos se kuuluu kaupungille
POSTCODE_PRESUMEDKatu on olemassa ja postinumeron asetimme itse ilman osoitenumeron vahvistusta: kadulla on useampi eikä numero ratkaise, tai sitä ei ollut annettu ja se tulee naapurinumeroista
INCOMPLETE_DATATietoa ei riitä normalisointiin
FOREIGNMuu kuin italialainen osoite maansa postimuodossa; jos kansallinen rekisteri on käytössä, katu ja talonumero on tarkistettu, ja viesti kertoo sen (vain italiaksi)
HOUSE_NUMBER_NOT_FOUNDUlkomaat: katu on kansallisessa rekisterissä, annettu talonumero ei (vain siellä, missä rekisterissä on kaikki talonumerot: osittaisesta lähteestä tai OpenStreetMapista puuttuva numero ei ole tuomio)
POSTCODE_INVALID_FORMATUlkomainen: postinumero ei ole annetussa maassa käytössä olevassa muodossa
COUNTRY_UNRESOLVEDUlkomainen: osoitteeseen kirjoitettua maata ei ole ISO 3166-1 -luettelossa

Italian verotunnus (codice fiscale)

Tuloskoodit — italialainen verotunnus
KoodiMerkitys
TAX_CODE_INVALIDKoodi ei läpäise tarkistuksia; reason kertoo, mitä (tarkistusmerkki, pituus, kuukausi, päivämäärä, kunta), ja suggestion ehdottaa oikeaa muotoa, kun se on pääteltävissä
TAX_CODE_MISMATCHKoodi on kelvollinen, mutta se ei täsmää pyynnön sukunimeen, etunimeen, sukupuoleen tai päivämäärään
MODIFIED TAX_CODETarkistusmerkki puuttui: laskettu uudelleen 15 ensimmäisestä merkistä
MODIFIED TAX_CODE_FORMVain muoto siistittiin (isot kirjaimet, välilyönnit)
GENERATEDPäätepiste /tax-code, toiminto generate: koodi laskettu henkilötiedoista
MATCH / MISMATCHPäätepiste /tax-code, toiminto compare: koodi täsmää tietoihin tai ei; differences luettelee poikkeavat kentät

Päätepisteessä /tax-code samoilla tarkistuksilla on omat koodinsa — 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 — koska siellä verotunnus on tarkistuksen kohde, ei tietueen kenttä.

Rikastaminen

Tuloskoodit — rikastus
KoodiMerkitys
ENRICHEDLuonnollinen henkilö: sukupuoli pääteltiin tai vahvistettiin, titteli ja tervehdykset asetettu
LEGAL_PERSONYritys tai yhteisö: otsikko käsitellään toiminimenä (Spett.le)
PARTIALEtunimi puuttuu tai sukupuolta ei voi päätellä nimestä: neutraali tervehdys

Sähköposti

Tuloskoodit — sähköposti
KoodiMerkitys
EMAIL_INVALIDVirheellinen syntaksi
EMAIL_DOMAIN_NOT_FOUNDVerkkotunnus ei vastaanota sähköpostia (ei MX/A-tietuetta)
EMAIL_TYPOMahdollinen kirjoitusvirhe verkkotunnuksessa: korjaus on ehdotus, kentässä suggestion ja normalisoidussa kentässä
MODIFIED EMAIL_DOMAINVarma kirjoitusvirhe verkkotunnuksessa, korjattu: corrected_from sisältää kirjoitetun muodon
EMAIL_DISPOSABLEKertakäyttöinen sähköpostiverkkotunnus
EMAIL_ROLE_BASEDOrganisaation osoite (info@, tilaukset@), ei henkilön. Se on huomautus, ei virhe
EMAIL_EMPTYKentässä ei ole osoitetta
MODIFIED EMAIL_FORMVain muoto siistittiin (välilyönnit, isot kirjaimet)

Puhelin

Tuloskoodit — puhelin
KoodiMerkitys
PHONE_INVALIDEi tunnistettava numero
PHONE_LENGTH_ANOMALOUSNumeroiden määrä ei sovi numerointisuunnitelmaan
PHONE_OUT_OF_PLANEi ala numerolla 0 (lankapuhelin) eikä 3 (matkapuhelin)
PHONE_FOREIGNNumero, jossa on muu kuin Italian kansainvälinen suuntanumero (tai ulkomaisen tietueen kansallinen numero): tarkistamme vain muodon, E.164-muodossa
PHONE_SPECIALMaksuton tai erikoismaksullinen numero: ei henkilökohtainen yhteystieto
PHONE_SERVICEYleishyödyllinen palvelunumero (112, 118…)
PHONE_WITH_EXTENSIONKentässä oli myös alanumero tai huomautus: tarkistamme vain numeron
PHONE_EMPTYKentässä ei ole numeroa
MODIFIED PHONE_FORMVain muoto siistittiin (välilyönnit, pisteet, suuntanumero)

Verkkosivu

Tuloskoodit — verkkosivu
KoodiMerkitys
WEBSITE_INVALIDEi oikein kirjoitettu verkko-osoite
WEBSITE_DOMAIN_NOT_FOUNDVerkkotunnusta ei ole olemassa (ei DNS-tietuetta)
WEBSITE_NOT_RESPONDINGVerkkotunnus on olemassa, mutta mikään palvelin ei vastaa
WEBSITE_PAGE_NOT_FOUNDSivusto vastaa, mutta sivua ei ole (404/410)
WEBSITE_ACCESS_DENIEDSivusto kieltää pääsyn (401/403): usein bottisuojaus
WEBSITE_CERTIFICATE_INVALIDSivusto vastaa, mutta varmennetta ei voi tarkistaa
WEBSITE_RESPONSE_ANOMALOUSOdottamaton vastauskoodi
WEBSITE_EMPTYKentässä ei ole osoitetta
MODIFIED WEBSITE_FORMOsoite täydennetty (protokolla, www) muuttamatta sen sisältöä

Mitä kukin kutsu kuluttaa

Jokainen kutsu kuluttaa palvelun laskurin käsittelyjä: osoitteen tarkistus (/contact, /suggest valittaessa), duplikaattien poisto (/dedupe) ja kevyet käsittelyt (/email, /phone, /website, /enrichment, /tax-code ilmaiskiintiön yli). Käsittelyjä ostetaan paketteina, jotka säilyvät, tai kuukausitilauksella; hinta 1 000 käsittelyä kohden laskee koon kasvaessa ja löytyy hintasivulta. Joka kuukausi ilmaisia ovat 50 osoitteen tarkistusta, 100 tietuetta duplikaattien poistossa ja 500 kevyttä käsittelyä.

Jokainen vastaus kertoo, mitä se kulutti ja mistä: JSON-vastauksen kenttä credit (counter, charged, free, subscription ja packs otettujen käsittelyjen ja jäljellä olevien kanssa, available, auto_topup automaattisesti ostettujen pakettien määrän kanssa, note) sekä otsakkeet X-RA-Charged, X-RA-Available ja, kun se aktivoituu, X-RA-Auto-Topup. Jos käytettävissä olevat käsittelyt eivät kata kutsua eikä laskurin automaattinen täydennys ole käytössä (tai se epäonnistuu), vastaus on 402 payment_required eikä mitään käsitellä.

402-vastauksessa on myös credit.purchase_url: tilisi Krediitit-sivu, jossa on pienin puuttuvan määrän kattava paketti valmiina avattavaksi.

Jäljellä olevien käsittelyjen määrän saa selville kuluttamatta yhtään kutsulla GET /api/v1/credit. Jokaiselle kolmesta laskurista (contact, dedupe, light) se palauttaa arvon available, kuukauden jäljellä olevat ilmaiset (free) ja päivän, jolloin ne nollautuvat (1. päivä), tilauksen subscription (jäljellä, koko, uusiutuminen), aktiiviset paketit packs yksi kerrallaan jäljellä olevine käsittelyineen (ne eivät vanhene) ja ostettujen määrän, automaattisen täydennyksen auto_topup (käytössä, koko, katto ja kuukauden kulutus euroina), käytön (used tässä kuussa, yhteensä, viimeisin käyttö) ja ennen kaikkea tilan state, koska pelkkä nolla ei kerro, ovatko käsittelyt loppuneet vai etkö käytä kyseistä palvelua: never_used, free (ei koskaan ostettu, työskentelet kuukauden ilmaisilla), free_used_up, active, awaiting_renewal, used_up (olet ostanut aiemmin eikä mitään ole jäljellä: täydennä), sekä huomautuksen warning. Ylimpänä needs_topup luettelee laskurit, jotka vaativat toimia, ja endpoint kertoo, mitä laskuria kukin päätepiste kuluttaa. Vaatii tilin tokenin.

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", … } }
Kunkin päätepisteen kuluttama laskuri
PäätepisteLaskuriKäsittelyt
/contactOsoitteen tarkistus1 tietuetta kohden (osoite, nimi, verotunnus, sähköposti, puhelin ja verkkosivu yhdessä)
/suggestOsoitteen tarkistus1 valittua osoitetta kohden (kirjoittaminen on ilmaista)
/dedupeDuplikaattien poisto1 tietuetta kohden (sisältää normalisoinnin)
/tax-codeKevyet käsittelyt1 koodia kohden, ilmaiskiintiön yli
/emailKevyet käsittelyt1 sähköpostia kohden
/phoneKevyet käsittelyt1 numeroa kohden
/websiteKevyet käsittelyt1 sivustoa kohden
/enrichmentKevyet käsittelyt1 nimeä kohden

Maksat tarkistettua kohdetta kohden, et kutsua kohden: jos kentässä on kaksi puhelinnumeroa tai kaksi sähköpostia, tarkistamme ne kaikki (enintään kolme riviä kohden), ja jokainen kuluttaa yhden käsittelyn. Eräkutsu kuluttaa yhtä paljon kuin sen sisältämät käsittelyt. Jos krediitit ovat lopussa eikä automaattinen täydennys ole käytössä, API vastaa HTTP 402 (riittämättömät krediitit); kutsurajan ylityttyä se vastaa HTTP 429 arvolla retry_after. Ostat paketin omalta tililtäsi tai aktivoit tilauksen maksaaksesi käsittelystä vähemmän.

Kutsuraja

60 pyyntöä minuutissa yksittäisillä kutsuilla, 10 minuutissa eräkutsuilla, 300 minuutissa automaattitäydennyksellä.

Mitattu tuotanto-API:ssa kahdellakymmenellä rinnakkaisella kutsulla: noin 200 tarkistusta sekunnissa, mediaani alle 60 millisekuntia.

Yksi laskenta

API, verkkosivu ja erätyöt kuluttavat samoja laskureita: paketti kelpaa kaikkialla.

Versiointi

Päätepisteet on versioitu (/api/v1/): kun uusi versio julkaistaan, vanha pysyy toiminnassa, ja sen sulkemispäivä ilmoitetaan hyvissä ajoin.

Valmis integroimaan?

Rekisteröi tili, luo token, osta tarvitsemasi käsittelyt ja tee ensimmäinen kutsu alle minuutissa.

Luo oma tokenisi

Katso hinnat