Η ίδια μηχανή,
μέσα στην εφαρμογή σας.

Ένα endpoint ανά υπηρεσία, μία κλήση, η απάντηση τεκμηριωμένη πεδίο προς πεδίο: επαλήθευση επαφής, αφαίρεση διπλοεγγραφών, email, τηλέφωνο, ιστότοπος, ιταλικός φορολογικός κωδικός, αυτόματη συμπλήρωση. Μεμονωμένα ή σε παρτίδες· για τα μεγάλα αρχεία η εργασία μπαίνει σε ουρά και την παραλαμβάνετε όταν είναι έτοιμη.

Προδιαγραφή OpenAPI: openapi.json, για να δημιουργήσετε τον client ή να την εισαγάγετε στο εργαλείο σας.

Ένα endpoint ανά υπηρεσία, με το ίδιο όνομα που έχει η υπηρεσία σε αυτόν τον ιστότοπο: /contact, /dedupe, /email, /phone, /website, /tax-code, /enrichment. Καθένα δέχεται ένα στοιχείο στο σώμα του αιτήματος ή μια λίστα στο items, έως 500 ανά κλήση (100 για τους ιστότοπους, που πρέπει να προσπελαστούν ένας προς έναν). Η αφαίρεση διπλοεγγραφών είναι η εξαίρεση και θέλει πάντα λίστα: συγκρίνει τις εγγραφές μεταξύ τους. Χωριστά στέκουν το /suggest, η αυτόματη συμπλήρωση για φόρμες (δουλεύει ανά συνεδρία όσο ο χρήστης πληκτρολογεί, όχι σε παρτίδες), και το /credit, που λέει πόσες επεξεργασίες απομένουν και σε τι κατάσταση είναι κάθε μετρητής, χωρίς να καταναλώνει καμία.

Πιστοποίηση ταυτότητας

Ο host του API είναι www.radaraddress.com. Τα ονόματα των πεδίων, των endpoint και των τιμών είναι αγγλικά αναγνωριστικά, ίδια σε κάθε γλώσσα· οι ετικέτες, οι αιτίες και τα μηνύματα ακολουθούν τη γλώσσα του αιτήματος ("language": "de" ή ?language=de, ή η κεφαλίδα Accept-Language, ή η γλώσσα του λογαριασμού). Η κεφαλίδα Content-Language λέει σε ποια γλώσσα ήρθε η απάντηση.

Η πρόσβαση στο API γίνεται με token Bearer. Ο λογαριασμός είναι δωρεάν: δημιουργείτε το token από τον λογαριασμό σας και το συμπεριλαμβάνετε στην κεφαλίδα κάθε αιτήματος με αυτή τη μορφή:

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

Κατά τη δημιουργία μπορείτε να δώσετε στο token μια προαιρετική λήξη: μετά την ημερομηνία αυτή τα αιτήματα λαμβάνουν HTTP 401 με κωδικό token_expired· χωρίς λήξη το token ισχύει μέχρι να το ανακαλέσετε. Μπορείτε να το ανακαλέσετε ή να το αναδημιουργήσετε ανά πάσα στιγμή από τον λογαριασμό σας, όπου βλέπετε επίσης την τελευταία χρήση και τον αριθμό των αιτημάτων που εξυπηρετήθηκαν. Ένα αίτημα χωρίς token ή με μη έγκυρο token επιστρέφει HTTP 401.

Τα ιταλικά ονόματα, για όσους τα χρησιμοποιούν ήδη

Το API έχει μία μόνο έκδοση, στα αγγλικά. Όποιος ενσωμάτωσε με τα ιταλικά ονόματα δεν χρειάζεται να αλλάξει τίποτα: τα ιταλικά πεδία γίνονται δεκτά σε κάθε αίτημα, τα endpoint απαντούν και με το ιταλικό τους όνομα (/contatto, /deduplica, /codicefiscale, /arricchimento, /telefono, /sito, /suggerisci, /nazioni, /credito), και η απάντηση βγαίνει με τα ιταλικά κλειδιά και κωδικούς σε όποιον το ζητά με "language": "it" ή καλεί το www.radaraddress.it χωρίς να δηλώσει γλώσσα.

Ο πλήρης πίνακας των πεδίων: αγγλικά → ιταλικά
αγγλικάιταλικάαγγλικάιταλικά
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

Και οι τιμές των επιλογών έχουν ιταλικό όνομα: format nazionale/internazionale, action genera/valida/estrai/confronta/seleziona, foreign dichiarati/rileva, min_level certo/probabile/ambiguo· με "language": "it" βγαίνουν έτσι και τα level, confidence, state, οι κωδικοί του outcome και οι επικεφαλίδες των αρχείων. Στην είσοδο γίνονται δεκτά και συνηθισμένα συνώνυμα (zip, surname, phone_number, date_of_birth…), και οι ίδιες επικεφαλίδες στα αρχεία των μαζικών εργασιών.

Endpoint επαλήθευσης επαφής

POST /api/v1/contact

Τακτοποιεί ολόκληρη την επαφή: τη διεύθυνση στο ταχυδρομικό πρότυπο της χώρας της — στην Ιταλία και στις χώρες με το μητρώο σε λειτουργία, οδός και αριθμός επαληθεύονται στο εθνικό μητρώο διευθύνσεων· αλλού η διεύθυνση βγαίνει στην ταχυδρομική μορφή της χώρας —, το ονοματεπώνυμο και — αν το αίτημα τον περιέχει — τον ιταλικό φορολογικό κωδικό, που καθαρίζεται, συμπληρώνεται όταν λείπει μόνο ο χαρακτήρας ελέγχου και συγκρίνεται με επώνυμο, όνομα, φύλο και ημερομηνία γέννησης. Μία επαφή τη φορά, ή έως 500 στο items: το σχήμα είναι το ίδιο με κάθε άλλο endpoint.

Η χώρα δίνεται με country_code (ISO 3166-1: IT, DE, FR…) ή με country, γραμμένη όπως να 'ναι: «Germania», «Germany», «Deutschland», «Ομοσπονδιακή Δημοκρατία της Γερμανίας», «UK», «Ολλανδία». Αν λείπει, θεωρείται Ιταλία. Στις χώρες με το μητρώο σε λειτουργία — σήμερα Γαλλία, Γερμανία, Ισπανία, Κάτω Χώρες, Βέλγιο, Φινλανδία, Τσεχία, Πορτογαλία, Δανία, Νορβηγία, Αυστρία, Ελβετία, Σλοβακία, Κροατία, Ρουμανία, Ουγγαρία, Σλοβενία, Ιρλανδία, Ισλανδία, Λουξεμβούργο, Λιχτενστάιν, Άγιος Μαρίνος, Μονακό, Ανδόρα, Βατικανό, ο ενημερωμένος κατάλογος βρίσκεται στις Χώρες — οδός και αριθμός επαληθεύονται στο εθνικό μητρώο διευθύνσεων ακριβώς όπως στην Ιταλία: ταχυδρομικός κώδικας επιβεβαιωμένος ή συμπληρωμένος, συντεταγμένες του αριθμού στο geo, συνοικία ή arrondissement στο district όπου η πόλη τα έχει (Hamburg-Altstadt, Paris 4e Arrondissement), κωδικός δήμου στο territory.municipality_code. Στα ιταλικά το αποτέλεσμα φέρει FOREIGN ακολουθούμενο από τις αλλαγές, στις άλλες γλώσσες μόνο τις αλλαγές· αν η οδός υπάρχει και ο αριθμός όχι, HOUSE_NUMBER_NOT_FOUND. Στις άλλες χώρες δουλεύουμε στη μορφή, και το μήνυμα το λέει: ταχυδρομικός κώδικας στη μορφή της χώρας, συντομογραφίες της οδού ολογράφως, κεφαλαία και όνομα πόλης όπως τα γράφει το ταχυδρομείο εκείνης της χώρας (Hauptstr. 5, Munich → Hauptstraße 5, MÜNCHEN), με τη γραμμή της χώρας. Και στις δύο περιπτώσεις επιστρέφει το address_key, η μορφή με την οποία η αφαίρεση διπλοεγγραφών αναγνωρίζει την ίδια οδό γραμμένη με δύο τρόπους. Με "foreign": "detect" μια εγγραφή χωρίς χώρα που δεν βρίσκεται στην Ιταλία αναγνωρίζεται ως ξένη όταν το κείμενο το λέει ξεκάθαρα· η προεπιλογή declared αφήνει ως ξένη μόνο όποια το δηλώνει. Ο πλήρης κατάλογος των χωρών, με σύντομο και επίσημο όνομα, στα αγγλικά και στη γλώσσα της χώρας, είναι διαθέσιμος με GET /api/v1/countries και μπορεί να ερωτηθεί με ?q=Germania, ?q=Deutschland ή ?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"}'

Για την παρτίδα, τα ίδια πεδία μέσα στο items· η απάντηση είναι { count, results: [ { id, result } ] } με την ίδια σειρά που στάλθηκαν.

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

Το ίδιο endpoint για μια διεύθυνση σε άλλη χώρα: αρκεί το country_code. Εδώ το Αμβούργο, επαληθευμένο στο γερμανικό μητρώο, με τη συνοικία και τις συντεταγμένες του αριθμού.

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

Επιλογές που ισχύουν για ολόκληρη την κλήση: postal_form (φέρνει και το normalized στην ταχυδρομική μορφή), preserve_original (κρατά το όνομα όπως το έγραψε ο χρήστης και εκθέτει χωριστά το κανονικό), precision 1–5 (προεπιλογή 3· πάνω από 3 η αντιστοίχιση είναι προσεγγιστική και η αξιοπιστία δεν θα είναι high).

Μαζί με τη διεύθυνση έρχεται το city_type, που λέει αν το σημείο παράδοσης βρίσκεται σε πρωτεύουσα επαρχίας ή σε πόλη της επαρχίας — η διαφορά που μετράει για όποιον τμηματοποιεί μια καμπάνια ανά πόλη. Το provincial_capital είναι true, false ή null όταν δεν έχουμε στοιχεία για να το πούμε — και στην περίπτωση αυτή δεν μαντεύουμε.

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

Δίπλα στον ταχυδρομικό κώδικα έρχεται το postcode_check: από πού προέρχεται (source) και με ποια ακρίβεια (precision: house_number ο ίδιος ο αριθμός, interpolated οι γειτονικοί αριθμοί της ίδιας οδού, street η πλειοψηφία της οδού, locality, municipality), πόσοι αριθμοί το λένε (house_numbers) και με ποια συμφωνία (agreement, από 0 έως 1). Αν λείπει επιβεβαίωση για τον αριθμό, το αποτέλεσμα φέρει POSTCODE_UNCONFIRMED και το confirmed είναι false: ο ταχυδρομικός κώδικας μένει όπως δηλώθηκε, εφόσον ανήκει στην πόλη, και πρέπει να ελεγχθεί.

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

Επιστρέφουν επίσης οι συντεταγμένες στο geo (γεωγραφικό πλάτος και μήκος WGS84) και τα εδαφικά αναγνωριστικά στο territory: στην Ιταλία ο κωδικός ISTAT και ο κτηματολογικός κωδικός του δήμου, το CAB και το εθνικό αναγνωριστικό της οδού· στις άλλες χώρες το country και ο κωδικός του δήμου στο εθνικό μητρώο (municipality_code). Το πεδίο precision λέει σε ποιο επίπεδο φτάσαμε: house_number όταν ο αριθμός είναι γεωαναφερμένος, interpolated όταν ο ακριβής αριθμός λείπει και το σημείο εκτιμάται, street όταν έχουμε το σημείο της οδού, municipality όταν έχουμε μόνο το κέντρο του δήμου. Το source λέει από πού προέρχεται το σημείο: anncsu είναι το ιταλικό εθνικό μητρώο, inspire το εθνικό μητρώο της χώρας, osm το OpenStreetMap: στην περίπτωση αυτή τα δεδομένα είναι © OpenStreetMap contributors, άδεια ODbL, και η αναφορά προέλευσης πρέπει να αναπαράγεται αν τα δημοσιεύσετε. Όπου το μητρώο μιας χώρας απαιτεί αναφορά προέλευσης, βγαίνει στο μήνυμα. Στο CSV των μαζικών εργασιών είναι οι στήλες latitude, longitude, geo_precision, istat_code και 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" } }

Ο όροφος, η σκάλα και το διαμέρισμα που γράφονται στη διεύθυνση επιστρέφουν και ως χωριστό στοιχείο στο sub_address: μια λίστα ζευγών type και value, που διαβάζονται με τους ταχυδρομικούς κανόνες της χώρας (στη Γερμανία μετά το «//», στη Γαλλία σε δική τους γραμμή, στην Πορτογαλία «3º Esq»). Οι τύποι είναι unit (διαμέρισμα), staircase (σκάλα), floor (όροφος), block, building, building_number και block_number. Η γραμμή της διεύθυνσης μένει στη μορφή της χώρας. Ό,τι δεν αναγνωρίζουμε μένει όπως γράφτηκε και δεν μπαίνει στη λίστα: δεν το μαντεύουμε. Όταν η μονάδα που δηλώθηκε υπάρχει σε αυτόν τον αριθμό, το sub_address_confirmed είναι true· αλλιώς null, ποτέ false: το ότι δεν τη βρίσκουμε δεν σημαίνει ότι είναι λάθος.

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

Endpoint αφαίρεσης διπλοεγγραφών

POST /api/v1/dedupe

Αναγνωρίζει τις εγγραφές που αναφέρονται στο ίδιο πρόσωπο στην ίδια διεύθυνση ακόμη κι όταν είναι γραμμένες διαφορετικά: υποκοριστικά και ισοδυναμίες ονομάτων (Dany ≈ Daniela), επώνυμο και όνομα αντεστραμμένα, συντομογραφίες ("V. Roma" ≈ "Via Roma"), τυπογραφικά λάθη. Η σύγκριση των διευθύνσεων περνά από τη μηχανή κανονικοποίησης: δύο γραφές της ίδιας οδού συμπίπτουν στην κανονική μορφή πριν από τη σύγκριση. Το πολύ 500 επαφές ανά κλήση (εγγραφές + αναφορά)· για μεγαλύτερες λίστες χρησιμοποιήστε τη μαζική εργασία από τον λογαριασμό σας.

Βιβλία επαφών. Μια επαφή σε ένα βιβλίο επαφών (Επαφές της Apple, Google, Outlook: το μοντέλο vCard) έχει περισσότερες διευθύνσεις, τηλέφωνα και email, καθένα με μια ετικέτα. Το endpoint τα δέχεται όπως είναι, χωρίς όριο: το addresses είναι λίστα αντικειμένων με type και τα συνηθισμένα πεδία· τα phones και emails είναι λίστες όπου κάθε στοιχείο είναι η γυμνή τιμή ("340 7491386") ή {"type": "work", "value": "02 66710423"}, και ανάμεικτα· τα συνηθισμένα επίπεδα πεδία παραμένουν έγκυρα και μετρούν ως πρώτη διεύθυνση και πρώτο στοιχείο επικοινωνίας. Δύο επαφές είναι το ίδιο πρόσωπο αν οποιοδήποτε ζεύγος των διευθύνσεών τους ταιριάζει (το γραφείο της μιας με τη μοναδική διεύθυνση της άλλης), ή αν έχουν το ίδιο ονοματεπώνυμο και κοινό τηλέφωνο ή email, σε οποιαδήποτε θέση και με οποιαδήποτε ετικέτα. Η ετικέτα δεν βαραίνει στην αντιστοίχιση: επιστρέφει όπως έφτασε, συν το type_normalized στο λεξιλόγιο vCard (home, work, cell…), ώστε η εφαρμογή να ξέρει πού να γράψει πίσω. Μία επαφή είναι μία επεξεργασία, όσες διευθύνσεις και στοιχεία επικοινωνίας κι αν έχει.

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

Η απάντηση ομαδοποιεί τις διπλοεγγραφές στο groups: κάθε ομάδα απαριθμεί τα id των members της, λέει ποια να κρατηθεί (main_record) και προτείνει την ενοποιημένη record: το καλύτερο ονοματεπώνυμο και την ένωση διευθύνσεων και στοιχείων επικοινωνίας (addresses, phones, emails), καθένα με τον τύπο του, με provenance (από ποιες επαφές προέρχεται) και χωρίς διπλά: η ίδια οδός σε δύο γραφές είναι μία διεύθυνση, ο ίδιος αριθμός με δύο ετικέτες ένας αριθμός. Οι επαφές χωρίς αντιστοιχία βρίσκονται στο singles, ως αντικείμενα {id, outcome}: με outcome INTERNAL_DUPLICATE η επαφή δεν έχει διπλοεγγραφές με άλλες αλλά έχει διπλά στοιχεία στο εσωτερικό της (διεύθυνση γραμμένη δύο φορές, επαναλαμβανόμενος αριθμός), και φέρει τη συγχωνευμένη της record. Αναγνωρίζει την ίδια οδό γραμμένη με διαφορετικούς τρόπους ("V. Leopardi 4" ≈ "Via Giacomo Leopardi 4"), τον ταχυδρομικό κώδικα που διορθώθηκε αυτόματα και επώνυμο και όνομα αντεστραμμένα.

Παράμετροι της αφαίρεσης διπλοεγγραφών
ΠαράμετροςΤύποςΠεριγραφή
recordsarrayΥποχρεωτικό. Εγγραφές με last_name, first_name, address, postcode, city, province και προαιρετικά id, gender, email, phone, country. Οι ξένες εγγραφές (πεδίο country, ή επαρχία EE) αναγνωρίζονται ακόμη κι όταν είναι γραμμένες διαφορετικά («Hauptstr. 5» και «Hauptstraße 5»)· δύο διαφορετικές χώρες δεν είναι ποτέ η ίδια εγγραφή. Ένα κοινό τηλέφωνο ή email φέρνει κοντά δύο εγγραφές ακόμη και με διαφορετική διεύθυνση: το πολύ probable αν το στοιχείο επικοινωνίας είναι προσωπικό, μόνο ambiguous αν ανήκει σε κοινόχρηστο χώρο (σταθερό τηλέφωνο, γενικό email)
addresses, phones, emailsarrayΠροαιρετικά, μέσα σε κάθε εγγραφή: οι λίστες του βιβλίου επαφών, χωρίς όριο (βλ. παραπάνω). Τα phone και email δέχονται τις ίδιες τρεις μορφές: τη γυμνή τιμή, μια λίστα τιμών, μια λίστα από {type, value}
tax_codestringΠροαιρετικό, μέσα σε κάθε εγγραφή. Αν είναι έγκυρος και συνεπής με το ονοματεπώνυμο της εγγραφής, δύο εγγραφές με τον ίδιο κωδικό είναι το ίδιο πρόσωπο ακόμη και σε διαφορετικές διευθύνσεις (certain, αιτία «ίδιος φορολογικός κωδικός»)· με δύο έγκυρους, διαφορετικούς κωδικούς δεν είναι ποτέ certain ούτε probable. Ένας κωδικός που δεν ταιριάζει με το ονοματεπώνυμο δεν έχει βαρύτητα
referencearrayΠροαιρετικό: λειτουργία δύο λιστών. Κάθε εγγραφή αναζητείται στη λίστα αναφοράς· απάντηση με matches και not_found
min_levelstringcertain | probable (προεπιλογή) | ambiguous: πόσο ελαστική είναι η αντιστοίχιση. certain = οδός και αριθμός πρέπει να συμπίπτουν· ambiguous αγνοεί τον αριθμό. Δύο εγγραφές χωρίς διεύθυνση ούτε πόλη δεν είναι ποτέ certain
foreignstringdeclared (προεπιλογή: ξένη είναι μόνο η εγγραφή που δίνει τη χώρα) | detect (και από ρητές ενδείξεις στο κείμενο: όνομα της χώρας, γνωστή ξένη πόλη, ταχυδρομικός κώδικας σε μη ιταλική μορφή)
saveboolΠροεπιλογή true: το αποτέλεσμα παραμένει αναγνώσιμο για 30 ημέρες με GET /api/v1/dedupe?job=<code>· ο κωδικός έρχεται στο πεδίο job. Με POST {"job", "group", "processed": true} σημειώνετε μια ομάδα ως ελεγμένη

Endpoint ιταλικού φορολογικού κωδικού

POST /api/v1/tax-code

Τρεις ενέργειες στον ιταλικό φορολογικό κωδικό (codice fiscale) των φυσικών προσώπων: generate από τα προσωπικά στοιχεία, validate έναν υπάρχοντα κωδικό (μορφή, χαρακτήρας ελέγχου και omocodia), extract τις πληροφορίες που περιέχει — ημερομηνία γέννησης, ηλικία, φύλο, δήμος ή ξένη χώρα γέννησης. Επιπλέον το compare ελέγχει ότι ένας κωδικός ταιριάζει με τα δηλωμένα προσωπικά στοιχεία. Καλύπτει τους κτηματολογικούς κωδικούς κάθε ιταλικού δήμου και των ξένων χωρών. Επώνυμο και όνομα πρέπει να δίνονται με λατινικούς χαρακτήρες: για όποιον έχει όνομα σε άλλο αλφάβητο, ο κωδικός υπολογίζεται με τη μεταγραφή που αναγράφεται στο έγγραφο, η οποία δεν είναι μοναδική (Dmitrij/Dmitry)· ένα μη λατινικό όνομα επιστρέφει cognome_non_latino ή nome_non_latino, και στο compare μια διαφορά στο ονοματεπώνυμο κάποιου που γεννήθηκε στο εξωτερικό φέρει σημείωση για πιθανή διαφορετική μεταγραφή.

Οι πρώτες 500 ελαφριές επεξεργασίες τον μήνα είναι δωρεάν (μαζί με τον φορολογικό κωδικό), και η ποσόστωση είναι ενιαία για κάθε τρόπο χρήσης της υπηρεσίας: ό,τι κάνετε εδώ, στον ιστότοπο και στα μαζικά αρχεία μετράει στην ίδια ποσόστωση. Πέρα από αυτήν, οι ελαφριές επεξεργασίες πληρώνονται στην τιμή τους (βλ. τιμές).

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

Για μεγάλους όγκους: το { "action": "validate", "items": [ … ] } επεξεργάζεται έως 500 στοιχεία ανά κλήση, καθένα με το δικό του id συσχέτισης. Η εξαγωγή επισημαίνει με ambiguous_year τις περιπτώσεις όπου τα δύο ψηφία του έτους δεν ξεχωρίζουν τον αιώνα (1926 έναντι 2026).

Κάθε απάντηση φέρει outcome, reason, notes και comments στη γλώσσα του αιτήματος: GENERATED για generate, κενό για έγκυρο κωδικό στο validate, MATCH ή MISMATCH για compare (με differences: τα πεδία που διαφέρουν). Όταν ο κωδικός δεν περνά τους ελέγχους το αποτέλεσμα είναι ένας από τους κωδικούς TAX_CODE_* παρακάτω και το error δίνει τη σύντομη μορφή (check_digit, length, format, homocode, month, date, place, empty)· στο generate λέει ποιο στοιχείο λείπει ή δεν επιλύεται (last_name, first_name, gender, birth_date, birth_place, ambiguous_place με options, last_name_non_latin). Το suggestion φέρει τον σωστό κωδικό όταν ο έλεγχος μπορεί να τον ανασυνθέσει.

Endpoint εμπλουτισμού

POST /api/v1/enrichment

Εμπλουτίζει ένα ονοματεπώνυμο: φύλο που συνάγεται από το όνομα, τύπος υποκειμένου (φυσικό ή νομικό πρόσωπο), κανονικοποιημένος τίτλος (Dott.ssa, Avv., …) και προσφωνήσεις έτοιμες για αλληλογραφία — "Egregio Sig. Rossi", "Gentile Dott.ssa Bianchi", "Spett.le" για τις εταιρείες, "Gentile Famiglia" για τα νοικοκυριά, "Caro/Cara" για το ανεπίσημο ύφος. Αναγνωρίζει επίσης τη μορφή του επωνύμου συζύγου ("Rossi in Verdi" → γυναίκα, με τη λεπτομέρεια των δύο επωνύμων). Το πεδίο gender δέχεται και γραπτές μορφές («maschio», «donna», «Sig.ra», «male»)· το X δηλώνει φορέα και το G οικογένεια ή ζευγάρι. Αν ο τίτλος λείπει, τον συνάγουμε από το profession (το επάγγελμα) ή από το education, όταν δίνεται. Τα λεξικά είναι ιταλικά.

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

Σε παρτίδες: { "items": [ … ] }, έως 500 ανά κλήση. Το αποτέλεσμα είναι ENRICHED (φύλο και προσφωνήσεις ορισμένα), LEGAL_PERSON (εταιρεία ή φορέας: αντιμετωπίζεται ως επωνυμία) ή PARTIAL (λείπει το όνομα ή το φύλο δεν συνάγεται): το reason λέει γιατί, τα comments τι να προστεθεί.

Endpoint επαλήθευσης email

POST /api/v1/email

Επαληθεύει μια διεύθυνση email: σύνταξη, ύπαρξη του τομέα (εγγραφές MX/A), τυπογραφικά λάθη σε συνηθισμένους τομείς με προτεινόμενη διόρθωση (gmial.com → gmail.com), προσωρινοί τομείς, γενικές διευθύνσεις ρόλου (info@, accounts@: όχι ενός προσώπου). Δεν κάνουμε επαλήθευση SMTP της μεμονωμένης θυρίδας, πρακτική παρεμβατική και αναξιόπιστη. Παρτίδα items έως 500· το "dns": false παραλείπει την αναζήτηση του τομέα.

Ένα βέβαιο τυπογραφικό λάθος διορθώνεται αυτεπάγγελτα: όταν η διεύθυνση όπως είναι γραμμένη δεν είναι καν διεύθυνση (name@domain,com με το κόμμα) ή όταν η διόρθωση καταλήγει σε γνωστό πάροχο (gmai.com → gmail.com, ακόμη και με ένα γράμμα διαφορά όταν ο τομέας όπως γράφτηκε δεν λαμβάνει αλληλογραφία), το email βγαίνει διορθωμένο, το corrected_from φέρει ό,τι είχε γραφτεί και το αποτέλεσμα είναι MODIFIED EMAIL_DOMAIN. Ένα πιθανό τυπογραφικό λάθος σε οποιονδήποτε άλλο τομέα (rossi.con) παραμένει πρόταση: EMAIL_TYPO με τη διόρθωση στο suggestion, και οι έλεγχοι (domain_exists, domain_checked) γίνονται σε αυτήν· η διεύθυνση όπως είναι γραμμένη δεν επαληθεύεται.

Endpoint επαλήθευσης τηλεφώνου

POST /api/v1/phone

Ελέγχει έναν αριθμό χωρίς να καλέσει κανέναν: μορφή, κατηγορία και τύπος, μήκος σύμφωνα με το σχέδιο αριθμοδότησης, περιοχή του σταθερού και πάροχος στον οποίο αποδόθηκε αρχικά το μπλοκ. Η class είναι η ανάγνωση που χρειάζεστε για να δουλέψετε μια λίστα: mobile (μπορείτε να στείλετε SMS), landline (το καλείτε σε ώρες γραφείου), special (δεν είναι αριθμός προσώπου: έκτακτης ανάγκης, κοινής ωφέλειας, χωρίς χρέωση και με ειδική χρέωση), foreign για τους αριθμούς με διεθνές πρόθεμα. Όταν αναγνωρίζουμε και την ακριβή υπηρεσία, το type το λέει (χωρίς χρέωση, ειδική χρέωση, μερισμένο κόστος, κοινής ωφέλειας). Το ιταλικό πρόθεμα γραμμένο χωρίς το + (39347…, κλασικό λάθος των εξαγωγών) αφαιρείται όταν τα ψηφία δεν αφήνουν αμφιβολία — το 3934567890 παραμένει το κινητό που είναι. Αν το ίδιο πεδίο περιέχει περισσότερους αριθμούς («347… - 338…») τους χωρίζουμε: επιστρέφουν ως phone, phone2, phone3, και το phone δεν είναι ποτέ κενό όταν υπάρχει τουλάχιστον ένας αριθμός. Με "format": "international" ο ιταλικός αριθμός βγαίνει στη μορφή +39…· η προεπιλογή national τον αφήνει γυμνό και βάζει το πρόθεμα μόνο στους ξένους. Για τους ξένους αριθμούς επιστρέφει και το e164, η χώρα του προθέματος στο country_code, και το μηδέν του εθνικού δικτύου μετά το πρόθεμα αφαιρείται («+44 (0)20…» και «+44 20…» δίνουν τον ίδιο αριθμό). Με country_code (ή country) στην κλήση ή στο στοιχείο, ένας αριθμός γραμμένος χωρίς πρόθεμα διαβάζεται ως εθνικός αριθμός εκείνης της χώρας: το «020 7946 0958» σε μια εγγραφή του Ηνωμένου Βασιλείου είναι Λονδίνο, όχι Μιλάνο. Χωρίς χώρα παραμένει ιταλικός. Παρτίδα items έως 500.

Ένας αριθμός από την ίδια τη χώρα της εγγραφής δεν είναι «ξένος»: όπου γνωρίζουμε το σχέδιο αριθμοδότησης παίρνει την class του (mobile, landline, special), με format national μένει χωρίς κωδικό χώρας στη μορφή της χώρας του (μαζί με το μηδέν του εθνικού δικτύου), και επιστρέφει το national_number δίπλα στο e164. Τα PHONE_FOREIGN και class foreign παραμένουν για τους αριθμούς χώρας διαφορετικής από αυτή της εγγραφής.

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 επαλήθευσης ιστότοπου

POST /api/v1/website

Ελέγχει ότι η διεύθυνση είναι σωστά γραμμένη και ότι ο ιστότοπος πράγματι αποκρίνεται: ύπαρξη του τομέα, αίτημα HTTP με παρακολούθηση των ανακατευθύνσεων, τελικός κωδικός, εγκυρότητα του πιστοποιητικού. Καμία κρίση για το περιεχόμενο. Και εδώ περισσότερες διευθύνσεις στο ίδιο πεδίο επιστρέφουν ως website, website2, website3. Με "network": false ελέγχουμε μόνο τη μορφή, χωρίς να προσπελάσουμε τον ιστότοπο. Παρτίδα items έως 100: κάθε έλεγχος ανοίγει μια σύνδεση, οπότε η παρτίδα είναι μικρότερη από τα άλλα endpoint.

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 αυτόματης συμπλήρωσης διεύθυνσης

POST /api/v1/suggest

Ξεκινάτε από το μηδέν; Το widget ra-suggerisci.js και ένας μικρός proxy στον διακομιστή σας αρκούν: το token δεν πηγαίνει ποτέ στον browser.

Προτάσεις όσο ο χρήστης πληκτρολογεί μια διεύθυνση στη φόρμα σας: ολόκληρο το ιταλικό μητρώο οδών, με το όνομα συμπληρωμένο («via verdi» → «Via Giuseppe Verdi»), δήμο και επαρχία· ο ταχυδρομικός κώδικας έρχεται με την επιλογή, στις μεγάλες πόλεις με ζώνες ο σωστός του αριθμού. Λειτουργεί ανά συνεδρία: ο client δημιουργεί ένα UUID για κάθε διεύθυνση που συμπληρώνεται, τα ερωτήματα προτάσεων είναι δωρεάν, και πληρώνετε μία επαλήθευση επαφής όταν ο χρήστης επιλέγει και τα πεδία συμπληρώνονται (ενέργεια select, που επιστρέφει την εγγραφή ήδη κανονικοποιημένη από τη μηχανή). Τα πεδία που έχουν ήδη συμπληρωθεί στη φόρμα — έστω και εν μέρει — ταξιδεύουν ως πλαίσιο και περιορίζουν τις προτάσεις.

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

Αφού επιλεγεί η οδός, συμπληρώνεται ο αριθμός: περνώντας το street_id με τον μερικό αριθμό παίρνετε τους υπάρχοντες αριθμούς εκείνης της οδού, με exists true/false για να επικυρωθεί αυτός που πληκτρολογήθηκε — και η επιλογή μπορεί να επαναληφθεί με τον αριθμό χωρίς νέα χρέωση: η χρέωση είναι ανά συνεδρία και ανά οδό, όχι ανά κλικ· άλλη οδός στην ίδια συνεδρία είναι άλλη χρέωση. Οι αριθμοί συμπληρώνονται μόνο στη συνεδρία που επέλεξε εκείνη την οδό. Στις πόλεις με ζώνες ο αριθμός είναι αυτός που καθορίζει τον ακριβή ταχυδρομικό κώδικα.

Το token του API δεν πηγαίνει ποτέ στον browser: το έτοιμο widget (ra-suggerisci.js) καλεί έναν μικρό proxy στον διακομιστή σας, που προσθέτει το token και προωθεί. Κάθε συνεδρία επιτρέπει έως 30 κλήσεις και διαρκεί 10 λεπτά· οι συνεδρίες χωρίς επιλογή είναι δωρεάν έως 200 την ημέρα ανά token, συν πέντε για κάθε επιλογή. Widget, έτοιμο proxy και δείγμα form βρίσκονται στο κιτ του Το δικό σας form.

Λειτουργεί σε κάθε χώρα σε λειτουργία (σήμερα Γαλλία, Γερμανία, Ισπανία, Κάτω Χώρες, Βέλγιο, Φινλανδία, Τσεχία, Πορτογαλία, Δανία, Νορβηγία, Αυστρία, Ελβετία, Σλοβακία, Κροατία, Ρουμανία, Ουγγαρία, Σλοβενία, Ιρλανδία, Ισλανδία, Λουξεμβούργο, Λιχτενστάιν, Άγιος Μαρίνος, Μονακό, Ανδόρα, Βατικανό· η ενημερωμένη λίστα βρίσκεται στις Χώρες): με country_code ή country οι προτάσεις προέρχονται από το μητρώο εκείνης της χώρας, και το κείμενο γράφεται όπως το γράφουν εκεί — οδός, αριθμός, ταχυδρομικός κώδικας και πόλη ακόμη και σε ένα μόνο πεδίο: «kalverstraat 92 amst», «92 rue de rivoli paris», στην Ολλανδία «1012PH 92». Κάθε απάντηση φέρει το parsed, δηλαδή πώς ο διακομιστής διάβασε την οδό (street), τον αριθμό (house_number) και τον ταχυδρομικό κώδικα (postcode): η φόρμα σας ξέρει πού βρίσκεται ο αριθμός χωρίς να γνωρίζει τους κανόνες της χώρας. Οι προτάσεις φέρουν οδό, πόλη, τοποθεσία όπου υπάρχει, και source (registry, ή osm όπου το εθνικό μητρώο δεν δημοσιεύει)· ο ταχυδρομικός κώδικας και οι αριθμοί δεν βρίσκονται ποτέ στις προτάσεις: έρχονται με την επιλογή, που περνά από τη μηχανή και επιστρέφει την ίδια εγγραφή με το /contact (postcode επιβεβαιωμένος από το μητρώο, geo στον αριθμό). Με την επιλογή μπορείτε να περάσετε και το postcode, αυτό που γράφτηκε στη φόρμα. Το attribution είναι η αναφορά πηγής που πρέπει να εμφανίζεται δίπλα στις προτάσεις: η άδεια του μητρώου το απαιτεί. Αν λείπει η χώρα θεωρείται IT· για χώρα εκτός λειτουργίας η απάντηση παραμένει HTTP 200 με supported:false και hints:[], χωρίς δημιουργία συνεδρίας και χωρίς χρέωση. Μια συνεδρία ανήκει σε μία χώρα: αν αλλάξει, ο πελάτης δημιουργεί νέο UUID (αλλιώς 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"}

Μεγάλοι όγκοι: η ασύγχρονη εργασία

Οι κανονικές κλήσεις αποκρίνονται αμέσως, και γι' αυτό έχουν ένα όριο στοιχείων — ένα αίτημα HTTP που διαρκεί λεπτά δεν χρησιμεύει σε κανέναν. Τα όρια ακολουθούν το πόσο ακριβή είναι η επεξεργασία:

Όρια στοιχείων ανά κλήση
EndpointΣτοιχεία ανά κλήσηΓιατί
/phone5.000άμεσος έλεγχος
/tax-code, /enrichment2.000γρήγορος έλεγχος
/contact, /email, /dedupe500πλήρης έλεγχος
/website100μία σύνδεση με τον ιστότοπο για κάθε διεύθυνση

Πέρα από αυτούς τους αριθμούς δεν χρειάζεται να σπάσετε τη λίστα με το χέρι: προσθέτετε "async": true και η κλήση επιστρέφει αμέσως με έναν κωδικό, ενώ η επεξεργασία μπαίνει στην ίδια ουρά με τα ανεβασμένα αρχεία. Έως 100.000 στοιχεία ανά κλήση, και στις Εργασίες μου εμφανίζεται μία μόνο.

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}

Έπειτα το διαβάζετε όταν χρειαστεί, και το αποτέλεσμα έρχεται σε JSON ή ως 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

Κάτω από τις 5.000 γραμμές το αποτέλεσμα επιστρέφει και στο results μέσα στο JSON· από εκεί και πάνω, κατεβαίνει ως CSV. Η χρέωση γίνεται όταν η εργασία μπαίνει στην ουρά, και το μέρος που δεν επεξεργάστηκε επιστρέφει στο υπόλοιπό σας αν η εργασία σταματήσει. Το token πρέπει να ανήκει σε λογαριασμό: η εργασία καταλήγει στη δική σας ουρά.

Κωδικοί αποτελέσματος

Κάθε απάντηση περιλαμβάνει το πεδίο outcome: μια λίστα λέξεων-κλειδιών, κενή όταν δεν υπάρχει τίποτα να αναφερθεί. Το σχήμα είναι πάντα <conditions> [MODIFIED <types>] — οι συνθήκες μπροστά, οι αλλαγές στο τέλος — και ισχύει για όλες τις υπηρεσίες. Δίπλα βρίσκετε το outcome_label (ή kind) με ok, modified, warning, error, και το reason με την εξήγηση σε μία γραμμή. Οι κωδικοί είναι αναγνωριστικά: συγκρίνονται, δεν μεταφράζονται· με "language": "it" βγαίνουν οι ιταλικοί κωδικοί (LOCALITA_NON_TROVATA MODIFICATO CAP INDIRIZZO), οι ίδιοι λέξη προς λέξη.

Διεύθυνση (επαλήθευση επαφής)

Κωδικοί αποτελέσματος — διεύθυνση (επαλήθευση επαφής)
ΚωδικόςΣημασία
OKΚαμία αλλαγή δεν χρειάζεται, η διεύθυνση είναι ήδη σωστή (κενό αποτέλεσμα)
MODIFIEDΔιεύθυνση κανονικοποιημένη, ακολουθούμενη από τα πεδία που άλλαξαν: POSTCODE, PROVINCE, CITY/CITY_FORM, STREET/STREET_FORM, BUILDING (το επίθημα _FORM = μόνο μορφή/τόνοι, η τιμή ήταν ήδη σωστή). Το σχήμα του πεδίου είναι <conditions> [MODIFIED <types>]: οι τυχόν συνθήκες έρχονται πρώτες, το MODIFIED και οι τύποι του στο τέλος
PO_BOXΑναγνωρίστηκε παράδοση σε ταχυδρομική θυρίδα (όχι οδός): μορφή CASELLA POSTALE n
LOCALITY_WITHOUT_STREETΗ διεύθυνση είναι τοποθεσία χωρίς όνομα οδού· η παράδοση παραμένει δυνατή
CITY_NOT_FOUNDΟ δήμος δεν αναγνωρίστηκε
CITY_AMBIGUOUSΌνομα δήμου που υπάρχει σε περισσότερες από μία επαρχίες
STREET_NOT_FOUNDΟδός μη καταχωρισμένη για αυτή την πόλη
STREET_AMBIGUOUSΌνομα οδού που υπάρχει σε περισσότερες από μία περιοχές του δήμου
STREET_TYPE_MISSINGΤύπος οδού που δεν αναγνωρίζεται (λείπει Via/Corso/Piazza…)
HOUSE_NUMBER_MISSINGΑριθμός που λείπει ή δεν είναι έγκυρος
HOUSE_NUMBER_INVALID_FORMATΑριθμός σε μη αναγνωρίσιμη μορφή
POSTCODE_UNCONFIRMEDΗ οδός υπάρχει αλλά για τον αριθμό αυτόν δεν υπάρχει επιβεβαίωση του ταχυδρομικού κώδικα: μένει ο δηλωμένος, εφόσον ανήκει στην πόλη
POSTCODE_PRESUMEDΗ οδός υπάρχει και τον ταχυδρομικό κώδικα τον θέσαμε εμείς χωρίς επιβεβαίωση από τον αριθμό: η οδός έχει περισσότερους από έναν και ο αριθμός δεν αποφασίζει, ή δεν είχε δηλωθεί και προέρχεται από τους γειτονικούς αριθμούς
INCOMPLETE_DATAΑνεπαρκείς πληροφορίες για κανονικοποίηση
FOREIGNΜη ιταλική διεύθυνση, στην ταχυδρομική μορφή της χώρας της· όπου το εθνικό μητρώο είναι σε λειτουργία, οδός και αριθμός επαληθεύονται, και το μήνυμα το λέει (μόνο στα ιταλικά)
HOUSE_NUMBER_NOT_FOUNDΕξωτερικό: η οδός υπάρχει στο εθνικό μητρώο, ο αριθμός που δόθηκε όχι (μόνο όπου το μητρώο έχει όλους τους αριθμούς· από μερική πηγή ή από το OpenStreetMap ο αριθμός που λείπει δεν είναι ετυμηγορία)
POSTCODE_INVALID_FORMATΕξωτερικό: ο ταχυδρομικός κώδικας δεν έχει τη μορφή που χρησιμοποιείται στη χώρα που δόθηκε
COUNTRY_UNRESOLVEDΕξωτερικό: η χώρα που γράφτηκε στη διεύθυνση δεν υπάρχει στον κατάλογο ISO 3166-1

Ιταλικός φορολογικός κωδικός (codice fiscale)

Κωδικοί αποτελέσματος — ιταλικός φορολογικός κωδικός
ΚωδικόςΣημασία
TAX_CODE_INVALIDΟ κωδικός δεν περνά τους ελέγχους· το reason λέει ποιον (χαρακτήρας ελέγχου, μήκος, μήνας, ημερομηνία, δήμος) και το suggestion προτείνει τη σωστή μορφή όταν μπορεί να ανασυσταθεί
TAX_CODE_MISMATCHΟ κωδικός είναι έγκυρος αλλά δεν ταιριάζει με το επώνυμο, το όνομα, το φύλο ή την ημερομηνία του αιτήματος
MODIFIED TAX_CODEΈλειπε ο χαρακτήρας ελέγχου: υπολογίστηκε ξανά από τους πρώτους 15
MODIFIED TAX_CODE_FORMΜόνο η μορφή καθαρίστηκε (κεφαλαία, κενά)
GENERATEDEndpoint /tax-code, ενέργεια generate: κωδικός υπολογισμένος από τα προσωπικά στοιχεία
MATCH / MISMATCHEndpoint /tax-code, ενέργεια compare: ο κωδικός συμφωνεί ή όχι με τα στοιχεία· το differences απαριθμεί τα πεδία που διαφέρουν

Στο endpoint /tax-code οι ίδιοι έλεγχοι έχουν δικούς τους κωδικούς — 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 — επειδή εκεί ο φορολογικός κωδικός είναι το αντικείμενο του ελέγχου, όχι ένα πεδίο της εγγραφής.

Εμπλουτισμός

Κωδικοί αποτελέσματος — εμπλουτισμός
ΚωδικόςΣημασία
ENRICHEDΦυσικό πρόσωπο: φύλο συναγόμενο ή επιβεβαιωμένο, τίτλος και προσφωνήσεις ορισμένα
LEGAL_PERSONΕταιρεία ή φορέας: η επικεφαλίδα αντιμετωπίζεται ως επωνυμία (Spett.le)
PARTIALΛείπει το όνομα ή το φύλο δεν συνάγεται από το όνομα: ουδέτερη προσφώνηση

Email

Κωδικοί αποτελέσματος — email
ΚωδικόςΣημασία
EMAIL_INVALIDΜη έγκυρη σύνταξη
EMAIL_DOMAIN_NOT_FOUNDΟ τομέας δεν λαμβάνει email (καμία εγγραφή MX/A)
EMAIL_TYPOΠιθανό τυπογραφικό λάθος στον τομέα: η διόρθωση είναι πρόταση, στο suggestion και στο κανονικοποιημένο πεδίο
MODIFIED EMAIL_DOMAINΒέβαιο τυπογραφικό λάθος στον τομέα, διορθωμένο: το corrected_from φέρει ό,τι είχε γραφτεί
EMAIL_DISPOSABLEΤομέας προσωρινού email
EMAIL_ROLE_BASEDΔιεύθυνση οργανισμού (info@, orders@), όχι προσώπου. Είναι επισήμανση, όχι σφάλμα
EMAIL_EMPTYΚαμία διεύθυνση στο πεδίο
MODIFIED EMAIL_FORMΜόνο η μορφή καθαρίστηκε (κενά, κεφαλαία)

Τηλέφωνο

Κωδικοί αποτελέσματος — τηλέφωνο
ΚωδικόςΣημασία
PHONE_INVALIDΔεν είναι αναγνωρίσιμος αριθμός
PHONE_LENGTH_ANOMALOUSΠλήθος ψηφίων ασύμβατο με το σχέδιο αριθμοδότησης
PHONE_OUT_OF_PLANΔεν αρχίζει από 0 (σταθερό) ούτε από 3 (κινητό)
PHONE_FOREIGNΑριθμός με μη ιταλικό διεθνές πρόθεμα (ή εθνικός αριθμός ξένης εγγραφής): ελέγχουμε μόνο τη μορφή του, σε E.164
PHONE_SPECIALΑριθμός χωρίς χρέωση ή με ειδική χρέωση: δεν είναι προσωπικό στοιχείο επικοινωνίας
PHONE_SERVICEΑριθμός κοινής ωφέλειας (112, 118…)
PHONE_WITH_EXTENSIONΤο πεδίο περιείχε και εσωτερικό ή σημείωση: ελέγχουμε μόνο τον αριθμό
PHONE_EMPTYΚανένας αριθμός στο πεδίο
MODIFIED PHONE_FORMΜόνο η μορφή καθαρίστηκε (κενά, τελείες, πρόθεμα)

Ιστότοπος

Κωδικοί αποτελέσματος — ιστότοπος
ΚωδικόςΣημασία
WEBSITE_INVALIDΔεν είναι σωστά γραμμένη διεύθυνση ιστού
WEBSITE_DOMAIN_NOT_FOUNDΟ τομέας δεν υπάρχει (καμία εγγραφή DNS)
WEBSITE_NOT_RESPONDINGΟ τομέας υπάρχει αλλά κανένας διακομιστής δεν αποκρίνεται
WEBSITE_PAGE_NOT_FOUNDΟ ιστότοπος αποκρίνεται αλλά η σελίδα δεν υπάρχει (404/410)
WEBSITE_ACCESS_DENIEDΟ ιστότοπος αρνείται την πρόσβαση (401/403): συχνά είναι προστασία από ρομπότ
WEBSITE_CERTIFICATE_INVALIDΟ ιστότοπος αποκρίνεται αλλά το πιστοποιητικό δεν μπορεί να επαληθευτεί
WEBSITE_RESPONSE_ANOMALOUSΑπροσδόκητος κωδικός απόκρισης
WEBSITE_EMPTYΚαμία διεύθυνση στο πεδίο
MODIFIED WEBSITE_FORMΔιεύθυνση συμπληρωμένη (πρωτόκολλο, www) χωρίς να αλλάξει η ουσία της

Τι καταναλώνει κάθε κλήση

Κάθε κλήση καταναλώνει επεξεργασίες από τον μετρητή της υπηρεσίας: επαλήθευση επαφής (/contact, /suggest κατά την επιλογή), αφαίρεση διπλοεγγραφών (/dedupe) και ελαφριές επεξεργασίες (/email, /phone, /website, /enrichment, /tax-code πέρα από την ποσόστωση). Οι επεξεργασίες αγοράζονται σε πακέτα που μένουν, ή με μηνιαία συνδρομή· η τιμή ανά 1.000 πέφτει με το μέγεθος και βρίσκεται στη σελίδα τιμών. Κάθε μήνα είναι δωρεάν 50 επαληθεύσεις επαφής, 100 εγγραφές σε αφαίρεση διπλοεγγραφών και 500 ελαφριές επεξεργασίες.

Κάθε απάντηση λέει τι κατανάλωσε και από πού: το πεδίο credit του JSON (counter, charged, free, subscription και packs με τις επεξεργασίες που αφαιρέθηκαν και το υπόλοιπο, available, auto_topup με τον αριθμό των πακέτων που αγοράστηκαν αυτόματα, note) και οι κεφαλίδες X-RA-Charged, X-RA-Available και, όταν παρεμβαίνει, X-RA-Auto-Topup. Αν οι διαθέσιμες επεξεργασίες δεν καλύπτουν την κλήση και η αυτόματη επαναφόρτιση του μετρητή δεν είναι ενεργή (ή αποτύχει), η απάντηση είναι 402 payment_required και δεν επεξεργάζεται τίποτα.

Για να μάθετε πόσες επεξεργασίες απομένουν χωρίς να καταναλώσετε καμία υπάρχει το GET /api/v1/credit. Για καθέναν από τους τρεις μετρητές (contact, dedupe, light) επιστρέφει το available, τις δωρεάν (free) που απομένουν στον μήνα και την ημερομηνία που μηδενίζονται (η 1η), τη subscription (υπόλοιπο, μέγεθος, ανανέωση), τα ενεργά packs ένα προς ένα με ό,τι απομένει (δεν λήγουν) και πόσα αγοράσατε, το auto_topup (ενεργό, μέγεθος, όριο και δαπάνη του μήνα σε ευρώ), τη χρήση (used αυτόν τον μήνα, σύνολα, τελευταία χρήση) και προπάντων το state, γιατί ένα μηδέν από μόνο του δεν λέει αν εξαντλήσατε ή αν δεν χρησιμοποιείτε την υπηρεσία: never_used, free (ποτέ δεν αγοράσατε, εργάζεστε με τις δωρεάν του μήνα), free_used_up, active, awaiting_renewal, used_up (αγοράσατε στο παρελθόν και δεν απομένει τίποτα: χρειάζεται νέο πακέτο), με ένα warning. Στην κορυφή το needs_topup απαριθμεί τους μετρητές που χρειάζονται ενέργεια και το endpoint λέει ποιον μετρητή καταναλώνει κάθε endpoint. Απαιτεί token λογαριασμού.

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", … } }
Μετρητής που καταναλώνει κάθε endpoint
EndpointΜετρητήςΕπεξεργασίες
/contactΕπαλήθευση επαφής1 ανά εγγραφή (διεύθυνση, ονοματεπώνυμο και φορολογικός κωδικός μαζί)
/suggestΕπαλήθευση επαφής1 ανά επιλεγμένη διεύθυνση (η πληκτρολόγηση είναι δωρεάν)
/dedupeΑφαίρεση διπλοεγγραφών1 ανά εγγραφή (περιλαμβάνεται η κανονικοποίηση)
/tax-codeΕλαφριές επεξεργασίες1 ανά κωδικό, πέρα από την ποσόστωση
/emailΕλαφριές επεξεργασίες1 ανά email
/phoneΕλαφριές επεξεργασίες1 ανά αριθμό
/websiteΕλαφριές επεξεργασίες1 ανά ιστότοπο
/enrichmentΕλαφριές επεξεργασίες1 ανά ονοματεπώνυμο

Πληρώνετε ανά επαληθευμένο στοιχείο, όχι ανά κλήση: αν ένα πεδίο περιέχει δύο αριθμούς τηλεφώνου ή δύο email, τα επαληθεύουμε όλα (έως τρία ανά γραμμή) και καθένα πληρώνει την τιμή του. Μια κλήση παρτίδας καταναλώνει όσο οι επεξεργασίες που περιέχει. Αν οι επεξεργασίες έχουν εξαντληθεί και η αυτόματη επαναφόρτιση δεν είναι ενεργή, το API απαντά HTTP 402 (ανεπαρκείς επεξεργασίες)· μετά την υπέρβαση του ορίου ρυθμού απαντά HTTP 429 με retry_after. Αγοράζετε ένα πακέτο από τον λογαριασμό σας, ή ενεργοποιείτε μια συνδρομή για να πληρώνετε λιγότερο ανά επεξεργασία.

Όριο ρυθμού

60 αιτήματα το λεπτό στις μεμονωμένες κλήσεις, 10 το λεπτό στις κλήσεις παρτίδας, 300 το λεπτό στην αυτόματη συμπλήρωση.

Μετρήσεις στο API παραγωγής με είκοσι παράλληλες κλήσεις: περίπου 200 επαληθεύσεις το δευτερόλεπτο, διάμεσος κάτω από 60 χιλιοστά του δευτερολέπτου.

Ενιαία μέτρηση

Το API, ο ιστότοπος και οι μαζικές εργασίες αντλούν από τους ίδιους μετρητές: ένα πακέτο ισχύει παντού.

Εκδόσεις

Τα endpoint έχουν έκδοση (/api/v1/): όταν βγαίνει νέα έκδοση, η παλιά παραμένει σε λειτουργία και η ημερομηνία απενεργοποίησής της ανακοινώνεται εγκαίρως.

Έτοιμοι να ενσωματώσετε;

Δημιουργήστε τον λογαριασμό, παραγάγετε το token σας, αγοράστε τις επεξεργασίες που χρειάζεστε και κάντε την πρώτη κλήση σε λιγότερο από ένα λεπτό.

Δημιουργήστε το token σας

Δείτε τις τιμές