Dasselbe System,
in Ihrer App.

Ein Endpunkt pro Dienst, ein Aufruf, die Antwort Feld für Feld dokumentiert: Kontaktprüfung, Dublettenbereinigung, E-Mail, Telefon, Website, italienische Steuernummer, Autovervollständigung. Einzeln oder in Stapeln; bei großen Dateien kommt der Auftrag in die Warteschlange, und Sie holen ihn ab, wenn er fertig ist.

OpenAPI-Spezifikation: openapi.json, um den Client zu generieren oder sie in Ihr Werkzeug zu importieren.

Ein Endpunkt pro Dienst, mit demselben Namen, den der Dienst auf dieser Website hat: /contact, /dedupe, /email, /phone, /website, /tax-code, /enrichment. Jeder akzeptiert ein Element im Anfragetext oder eine Liste in items, bis zu 500 pro Aufruf (100 bei Websites, die einzeln kontaktiert werden müssen). Die Dublettenbereinigung ist die Ausnahme und verlangt immer eine Liste: Sie vergleicht die Datensätze untereinander. Gesondert stehen /suggest, die Autovervollständigung für Formulare (sie arbeitet sitzungsweise, während der Nutzer tippt, nicht in Stapeln), und /credit, das sagt, wie viele Vorgänge übrig sind und in welchem Zustand jeder Zähler ist, ohne welche zu verbrauchen.

Authentifizierung

Der API-Host ist www.radaraddress.com. Feldnamen, Endpunktnamen und Werte sind englische Bezeichner, in jeder Sprache gleich; Etiketten, Begründungen und Meldungen folgen der Sprache der Anfrage ("language": "de" oder ?language=de, oder der Header Accept-Language, oder die Sprache des Kontos). Der Header Content-Language sagt, in welcher Sprache die Antwort gekommen ist.

Der Zugang zur API erfolgt über einen Bearer-Token. Das Konto ist kostenlos: Sie erzeugen den Token in Ihrem Konto und übergeben ihn im Header jeder Anfrage in dieser Form:

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

Beim Erstellen können Sie dem Token ein optionales Ablaufdatum geben: Nach diesem Datum erhalten Anfragen HTTP 401 mit dem Code token_expired; ohne Ablaufdatum gilt der Token, bis Sie ihn widerrufen. Sie können ihn jederzeit in Ihrem Konto widerrufen oder neu erzeugen; dort sehen Sie auch die letzte Verwendung und die Zahl der bedienten Anfragen. Eine Anfrage ohne Token oder mit ungültigem Token liefert HTTP 401.

Die italienischen Namen, für wer sie schon verwendet

Die API hat eine einzige Version, auf Englisch. Wer mit den italienischen Namen integriert hat, muss nichts ändern: italienische Felder werden in jeder Anfrage akzeptiert, die Endpunkte antworten auch unter ihrem italienischen Namen (/contatto, /deduplica, /codicefiscale, /arricchimento, /telefono, /sito, /suggerisci, /nazioni, /credito), und die Antwort kommt mit den italienischen Schlüsseln und Codes für wer es mit "language": "it" verlangt oder www.radaraddress.it ohne Sprachangabe aufruft.

Die vollständige Tabelle der Felder: Englisch → Italienisch
EnglischItalienischEnglischItalienisch
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

Auch die Optionswerte haben einen italienischen Namen: format nazionale/internazionale, action genera/valida/estrai/confronta/seleziona, foreign dichiarati/rileva, min_level certo/probabile/ambiguo; mit "language": "it" kommen so auch level, confidence, state, die Codes von outcome und die Spaltenüberschriften der Dateien. Bei der Eingabe werden auch gängige Synonyme akzeptiert (zip, surname, phone_number, date_of_birth…) und dieselben Überschriften in den Dateien der Stapelverarbeitung.

Endpunkt Kontaktprüfung

POST /api/v1/contact

Bringt den ganzen Kontakt in Ordnung: die Adresse nach dem Poststandard ihres Landes — in Italien und in den Ländern mit Register im Dienst werden Straße und Hausnummer im nationalen Adressregister geprüft, in den übrigen erscheint die Adresse in der Postform des Landes —, den Namen und — wenn die Anfrage ihn enthält — die italienische Steuernummer, die bereinigt, bei fehlendem Prüfzeichen ergänzt und mit Nachname, Vorname, Geschlecht und Geburtsdatum abgeglichen wird. Ein Kontakt je Aufruf oder bis zu 500 in items: das Schema ist bei allen anderen Endpunkten dasselbe.

Das Land wird mit country_code (ISO 3166-1: IT, DE, FR…) oder mit country angegeben, geschrieben wie es kommt: „Germania“, „Germany“, „Deutschland“, „Bundesrepublik Deutschland“, „UK“, „Holland“. Fehlt es, wird Italien angenommen. In den Ländern mit Register im Dienst — heute Frankreich, Deutschland, Spanien, Niederlande, Belgien, Finnland, Tschechien, Portugal, Dänemark, Norwegen, Österreich, Schweiz, Slowakei, Kroatien, Rumänien, Ungarn, Slowenien, Irland, Island, Luxemburg, Liechtenstein, San Marino, Monaco, Andorra, Vatikanstadt, die aktuelle Liste steht unter Länder — werden Straße und Hausnummer wie in Italien im nationalen Adressregister geprüft: Postleitzahl bestätigt oder ergänzt, Koordinaten der Hausnummer in geo, Stadtteil oder Arrondissement in district, wo die Stadt welche hat (Hamburg-Altstadt, Paris 4e Arrondissement), Gemeindecode des Registers in territory.municipality_code. Auf Italienisch trägt das Ergebnis FOREIGN, gefolgt von den Änderungen, in den anderen Sprachen nur die Änderungen; gibt es die Straße, aber nicht die Nummer, HOUSE_NUMBER_NOT_FOUND. In den übrigen Ländern arbeiten wir an der Form, und die Meldung sagt es: Postleitzahl im Format des Landes, Straßenabkürzungen aufgelöst, Großschreibung und Ortsname, wie die Post dieses Landes sie schreibt (Hauptstr. 5, Monaco di Baviera → Hauptstraße 5, MÜNCHEN), mit der Länderzeile. In beiden Fällen kommt address_key zurück, die Form, mit der die Dublettenprüfung dieselbe Straße in zwei Schreibweisen erkennt. Mit "foreign": "detect" wird ein Datensatz ohne Land, der in Italien nicht gefunden wird, als ausländisch erkannt, wenn der Text es klar sagt; der Standard declared lässt nur das ausländisch, was es angibt. Der vollständige Länderkatalog, mit Kurz- und amtlichem Namen, auf Englisch und in der Sprache des Landes, steht unter GET /api/v1/countries und lässt sich mit ?q=Germania, ?q=Deutschland oder ?q=DE abfragen.

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

Für den Stapel dieselben Felder in items; die Antwort ist { count, results: [ { id, result } ] } in derselben Reihenfolge wie gesendet.

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

Derselbe Endpunkt für eine Adresse in einem anderen Land: country_code genügt. Hier Hamburg, geprüft im deutschen Register, mit Stadtteil und Koordinaten der Hausnummer.

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

Optionen, die für den ganzen Aufruf gelten: postal_form (erzwingt auch normalized in der postalischen Form), preserve_original (behält den vom Nutzer geschriebenen Namen und gibt den kanonischen gesondert aus), precision 1–5 (Standard 3; über 3 ist der Abgleich näherungsweise, und die Zuverlässigkeit wird nicht high sein).

Zusammen mit der Adresse kommt city_type, das sagt, ob der Zustellpunkt in einer Provinzhauptstadt oder in einem Ort der Provinz liegt – der Unterschied, der zählt, wenn eine Kampagne nach Städten aufgeteilt wird. provincial_capital ist true, false oder null, wenn wir keine Anhaltspunkte dafür haben – und in diesem Fall raten wir nicht.

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

Neben der PLZ kommt postcode_check: woher sie stammt (source) und wie genau (precision: house_number die Nummer selbst, interpolated die Nachbarnummern derselben Straße, street die Mehrheit der Straße, locality, municipality), wie viele Hausnummern das belegen (house_numbers) und mit welcher Übereinstimmung (agreement, 0 bis 1). Fehlt für diese Nummer eine Bestätigung, trägt das Ergebnis POSTCODE_UNCONFIRMED und confirmed ist false: die PLZ bleibt wie angegeben, sofern sie zur Stadt gehört, und sollte geprüft werden.

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

Zurück kommen auch die Koordinaten in geo (Breite und Länge WGS84) und die Gebietskennungen in territory: in Italien ISTAT-Code und Katastercode der Gemeinde, CAB und nationale Straßenkennung; in den übrigen Ländern country und der Gemeindecode des nationalen Registers (municipality_code). Das Feld precision sagt, welche Stufe erreicht wurde: house_number, wenn die Hausnummer georeferenziert ist, interpolated, wenn die genaue Nummer fehlt und der Punkt geschätzt ist, street, wenn wir den Punkt der Straße haben, municipality, wenn nur der Gemeindemittelpunkt vorliegt. source sagt, woher der Punkt stammt: anncsu ist das italienische nationale Register, inspire das nationale Register des Landes, osm OpenStreetMap: dann sind die Daten © OpenStreetMap contributors, Lizenz ODbL, und die Quellenangabe ist zu übernehmen, wenn Sie sie veröffentlichen. Wo das Register eines Landes eine Quellenangabe verlangt, steht sie in der Meldung. In der CSV der Stapelaufträge sind es die Spalten latitude, longitude, geo_precision, istat_code und cadastral_code.

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

Etage, Treppe und Wohnung aus der Anschrift kommen zusätzlich als eigene Daten in sub_address zurück: eine Liste von Paaren aus type und value, gelesen nach den Postregeln des jeweiligen Landes (in Deutschland nach „//“, in Frankreich in einer eigenen Zeile, in Portugal „3º Esq“). Die Typen sind unit (Wohnung), staircase (Treppe), floor (Etage), block, building, building_number und block_number. Die Adresszeile bleibt in der Form des Landes. Was wir nicht erkennen, bleibt so, wie es geschrieben war, und steht nicht in der Liste: Wir raten nicht. Ist die angegebene Einheit unter dieser Hausnummer verzeichnet, ist sub_address_confirmed true, sonst null, nie false: Dass wir sie nicht finden, heißt nicht, dass sie falsch ist.

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

Endpunkt Dublettenbereinigung

POST /api/v1/dedupe

Erkennt die Datensätze, die sich auf dieselbe Person an derselben Adresse beziehen, auch wenn sie unterschiedlich geschrieben sind: Kurzformen und Entsprechungen von Vornamen (Dany ≈ Daniela), Nachname und Vorname vertauscht, Abkürzungen ("V. Roma" ≈ "Via Roma"), Tippfehler. Der Adressvergleich läuft über die Normalisierung: Zwei Schreibweisen derselben Straße fallen vor dem Vergleich auf die kanonische Form zusammen. Höchstens 500 Kontakte pro Aufruf (Datensätze + Referenz); für größere Listen nutzen Sie die Stapelverarbeitung in Ihrem Konto.

Adressbücher. Ein Kontakt im Adressbuch (Apple Kontakte, Google, Outlook: das vCard-Modell) hat mehrere Adressen, mehrere Telefonnummern und mehrere E-Mail-Adressen, jede mit einer Bezeichnung. Der Endpunkt nimmt sie so entgegen, ohne Obergrenze: addresses ist eine Liste von Objekten mit type und den üblichen Feldern; phones und emails sind Listen, in denen jedes Element der bloße Wert ist ("340 7491386") oder {"type": "work", "value": "02 66710423"}, auch gemischt; die üblichen flachen Felder bleiben gültig und gelten als erste Adresse und erste Kontaktangabe. Zwei Kontakte sind dieselbe Person, wenn irgendein Paar ihrer Adressen übereinstimmt (das Büro des einen mit der einzigen Adresse des anderen) oder wenn sie denselben Namen und eine Telefonnummer oder E-Mail gemeinsam haben, an beliebiger Stelle und mit beliebiger Bezeichnung. Die Bezeichnung hat kein Gewicht beim Abgleich: Sie kommt zurück, wie sie angekommen ist, plus type_normalized im vCard-Vokabular (home, work, cell …), damit die App weiß, wohin sie zurückschreiben soll. Ein Kontakt ist ein Vorgang, egal wie viele Adressen und Kontaktangaben er hat.

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

Die Antwort gruppiert die Dubletten in groups: Jede Gruppe listet die ids ihrer members auf, sagt, welcher zu behalten ist (main_record), und schlägt den konsolidierten record vor: den besten Namen und die Vereinigung von Adressen und Kontaktangaben (addresses, phones, emails), jede mit ihrem Typ, mit provenance (aus welchen Kontakten sie stammt) und dublettenfrei: Dieselbe Straße in zwei Schreibweisen ist eine Adresse, dieselbe Nummer mit zwei Bezeichnungen eine Nummer. Kontakte ohne Treffer stehen in singles, als Objekte {id, outcome}: Mit outcome INTERNAL_DUPLICATE hat der Kontakt keine Dubletten mit anderen, aber welche in sich selbst (Adresse zweimal geschrieben, Nummer wiederholt), und bringt seinen zusammengeführten record mit. Es erkennt dieselbe Straße in verschiedenen Schreibweisen ("V. Leopardi 4" ≈ "Via Giacomo Leopardi 4"), die automatisch berichtigte Postleitzahl und vertauschte Nach- und Vornamen.

Parameter der Dublettenbereinigung
ParameterTypBeschreibung
recordsarrayErforderlich. Datensätze mit last_name, first_name, address, postcode, city, province und optional id, gender, email, phone, country. Ausländische Datensätze (Feld country oder Provinz EE) werden auch in unterschiedlicher Schreibweise erkannt („Hauptstr. 5“ und „Hauptstraße 5“); zwei verschiedene Länder sind nie derselbe Datensatz. Eine gemeinsame Telefonnummer oder E-Mail bringt zwei Datensätze auch bei unterschiedlicher Adresse zusammen: höchstens probable, wenn die Kontaktangabe persönlich ist, nur ambiguous, wenn sie zu einem gemeinsam genutzten Ort gehört (ein Festnetzanschluss, eine allgemeine E-Mail-Adresse)
addresses, phones, emailsarrayOptional, in jedem Datensatz: die Listen des Adressbuchs, ohne Obergrenze (siehe oben). phone und email akzeptieren dieselben drei Formen: den bloßen Wert, eine Liste von Werten, eine Liste von {type, value}
tax_codestringOptional, in jedem Datensatz. Ist er gültig und stimmt er mit dem Namen des Datensatzes überein, sind zwei Datensätze mit demselben Code dieselbe Person, auch bei unterschiedlichen Adressen (certain, Grund „dieselbe Steuernummer“); mit zwei gültigen, verschiedenen Codes sind sie nie certain oder probable. Ein Code, der nicht zum Namen passt, hat kein Gewicht
referencearrayOptional: Modus mit zwei Listen. Jeder Datensatz wird in der Referenz gesucht; Antwort mit matches und not_found
min_levelstringcertain | probable (Standard) | ambiguous: wie elastisch der Abgleich ist. certain = Straße und Hausnummer müssen übereinstimmen; ambiguous ignoriert die Hausnummer. Zwei Datensätze ohne Adresse und ohne Ort sind nie certain
foreignstringdeclared (Standard: ausländisch ist nur der Datensatz, der das Land angibt) | detect (auch aus expliziten Hinweisen im Text: Name des Landes, bekannte ausländische Stadt, Postleitzahl in einer nicht italienischen Form)
saveboolStandard true: Das Ergebnis bleibt 30 Tage lang mit GET /api/v1/dedupe?job=<code> abrufbar; der Code kommt im Feld job. Mit POST {"job", "group", "processed": true} markieren Sie eine Gruppe als geprüft

Endpunkt italienische Steuernummer

POST /api/v1/tax-code

Drei Aktionen auf der italienischen Steuernummer natürlicher Personen: generate aus den Personendaten, validate einen vorhandenen Code (Format, Prüfzeichen und Omocodia), extract die enthaltenen Informationen – Geburtsdatum, Alter, Geschlecht, Geburtsgemeinde oder Geburtsland. Zusätzlich prüft compare, ob ein Code zu den angegebenen Personendaten passt. Abgedeckt sind die Katastercodes aller italienischen Gemeinden und der ausländischen Staaten. Nachname und Vorname sind in lateinischen Buchstaben zu übergeben: Bei einem Namen in einem anderen Alphabet wird der Code auf der im Dokument angegebenen Transliteration berechnet, die nicht eindeutig ist (Dmitrij/Dmitry); ein nicht lateinischer Name liefert cognome_non_latino oder nome_non_latino, und bei compare trägt eine Abweichung im Namen einer im Ausland geborenen Person einen Hinweis auf eine möglicherweise andere Transliteration.

Die ersten 500 einfachen Prüfungen im Monat sind kostenlos (Steuernummer eingeschlossen), und das Freikontingent ist ein einziges über alle Nutzungsarten hinweg: Was Sie hier, auf der Website und in Stapeldateien tun, zählt auf dasselbe Kontingent. Darüber hinaus werden einfache Prüfungen zu ihrem Preis berechnet (siehe Preise).

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

Für Volumen: { "action": "validate", "items": [ … ] } verarbeitet bis zu 500 Elemente pro Aufruf, jedes mit seiner eigenen Korrelations-id. Die Extraktion kennzeichnet mit ambiguous_year die Fälle, in denen die zwei Ziffern des Jahres das Jahrhundert nicht unterscheiden (1926 vs. 2026).

Jede Antwort trägt outcome, reason, notes und comments in der Sprache der Anfrage: GENERATED bei generate, leer bei gültigem Code in validate, MATCH oder MISMATCH bei compare (mit differences: die abweichenden Felder). Besteht der Code die Prüfungen nicht, ist das Ergebnis einer der unten aufgeführten TAX_CODE_*-Codes und error gibt die Kurzform (check_digit, length, format, homocode, month, date, place, empty); bei generate sagt es, welche Angabe fehlt oder sich nicht auflösen lässt (last_name, first_name, gender, birth_date, birth_place, ambiguous_place mit options, last_name_non_latin). suggestion trägt den korrekten Code, wenn die Prüfung ihn rekonstruieren kann.

Endpunkt Anreicherung

POST /api/v1/enrichment

Reichert einen Namen an: Geschlecht aus dem Vornamen abgeleitet, Art des Subjekts (natürliche oder juristische Person), normalisierter Titel (Dott.ssa, Avv., …) und Anredeformen fertig für die Korrespondenz – "Egregio Sig. Rossi", "Gentile Dott.ssa Bianchi", "Spett.le" für Unternehmen, "Gentile Famiglia" für Haushalte, "Caro/Cara" für die informelle Anrede. Erkennt auch die Ehenamensform im Nachnamen ("Rossi in Verdi" → Frau, mit beiden Nachnamen im Detail). Das Feld gender akzeptiert auch ausgeschriebene Formen („maschio“, „donna“, „Sig.ra“, „male“); X kennzeichnet eine Organisation und G eine Familie oder ein Paar. Fehlt der Titel, leiten wir ihn aus profession (dem Beruf) oder aus education ab, wenn eines davon angegeben ist. Die Verzeichnisse sind italienisch.

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

Stapelweise: { "items": [ … ] }, bis zu 500 pro Aufruf. Das Ergebnis ist ENRICHED (Geschlecht und Anreden gesetzt), LEGAL_PERSON (Firma oder Einrichtung: als Firmenname behandelt) oder PARTIAL (Vorname fehlt oder Geschlecht nicht ableitbar): reason sagt warum, comments was zur Vervollständigung fehlt.

Endpunkt E-Mail-Prüfung

POST /api/v1/email

Prüft eine E-Mail-Adresse: Syntax, Existenz der Domain (MX-/A-Einträge), Tippfehler bei gängigen Domains mit Korrekturvorschlag (gmial.com → gmail.com), Wegwerf-Domains, unpersönliche Adressen (info@, buchhaltung@: keine Person). Eine SMTP-Prüfung des einzelnen Postfachs machen wir nicht – eine aufdringliche und unzuverlässige Praxis. Stapel items bis zu 500; "dns": false überspringt die Domain-Abfrage.

Ein sicherer Tippfehler wird direkt korrigiert: wenn die Adresse in der geschriebenen Form gar keine Adresse ist (name@domain,de mit Komma) oder wenn die Korrektur bei einem bekannten Anbieter landet (gmai.com → gmail.com, auch mit einem Buchstaben Abstand, wenn die geschriebene Domain keine Post empfängt), kommt email korrigiert zurück, corrected_from enthält die geschriebene Form und das Ergebnis ist MODIFIED EMAIL_DOMAIN. Ein möglicher Tippfehler bei einer beliebigen Domain (rossi.con) bleibt ein Vorschlag: EMAIL_TYPO mit der Korrektur in suggestion, und die Prüfungen (domain_exists, domain_checked) laufen an ihr; die Adresse in der geschriebenen Form wird nicht geprüft.

Endpunkt Telefonprüfung

POST /api/v1/phone

Prüft eine Nummer, ohne jemanden anzurufen: Form, Klasse und Typ, Länge nach dem Nummerierungsplan, Ortsnetz des Festnetzanschlusses und Anbieter, dem der Block ursprünglich zugeteilt wurde. Die class ist die Lesart, die man braucht, um eine Liste zu bearbeiten: mobile (Sie können eine SMS schicken), landline (Sie rufen zu Bürozeiten an), special (nicht die Nummer einer Person: Notruf, öffentliche Dienste, kostenlose und Sondertarifnummern), foreign für Nummern mit internationaler Vorwahl. Erkennen wir auch den genauen Dienst, sagt type es (kostenlose Nummer, Sondertarif, geteilte Kosten, öffentlicher Dienst). Die italienische Vorwahl ohne + (39347…, ein klassischer Exportfehler) entfernen wir, wenn die Ziffern keinen Zweifel lassen – 3934567890 bleibt die Mobilnummer, die sie ist. Stehen im selben Feld mehrere Nummern („347… - 338…“), trennen wir sie: Sie kommen als phone, phone2, phone3 zurück, und phone ist nie leer, wenn mindestens eine Nummer vorhanden ist. Mit "format": "international" kommt die italienische Nummer in der Form +39… heraus; der Standardwert national lässt sie ohne Vorwahl und setzt die Vorwahl nur bei ausländischen Nummern. Für ausländische Nummern kommt auch e164 zurück, das Land der Vorwahl in country_code, und die führende Null nach der Vorwahl wird entfernt („+44 (0)20…“ und „+44 20…“ ergeben dieselbe Nummer). Mit country_code (oder country) im Aufruf oder im Element wird eine Nummer ohne Vorwahl als nationale Nummer dieses Landes gelesen: „020 7946 0958“ in einem britischen Datensatz ist London, nicht Mailand. Ohne Land bleibt sie italienisch. Stapel items bis zu 500.

Eine Nummer aus dem Land des Datensatzes ist nicht „ausländisch“: Wo wir den Nummernplan kennen, erhält sie ihre class (mobile, landline, special), mit format national bleibt sie ohne Ländervorwahl in der Form ihres Landes (Verkehrsausscheidungsziffer eingeschlossen), und neben e164 kommt national_number zurück. PHONE_FOREIGN und class foreign bleiben für Nummern aus einem anderen Land als dem des Datensatzes.

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

Endpunkt Website-Prüfung

POST /api/v1/website

Prüft, dass die Adresse richtig geschrieben ist und dass die Website wirklich antwortet: Existenz der Domain, HTTP-Anfrage mit verfolgten Weiterleitungen, Endcode, Gültigkeit des Zertifikats. Kein Urteil über den Inhalt. Auch hier kommen mehrere Adressen im selben Feld als website, website2, website3 zurück. Mit "network": false prüfen wir nur die Form, ohne die Website zu kontaktieren. Stapel items bis zu 100: Jede Prüfung öffnet eine Verbindung, deshalb ist der Stapel kleiner als bei den anderen Endpunkten.

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

Endpunkt Adress-Autovervollständigung

POST /api/v1/suggest

Sie fangen bei null an? Das Widget ra-suggerisci.js und ein kleiner Proxy auf Ihrem Server genügen: der Token gelangt nie in den Browser.

Vorschläge während der Eingabe einer Adresse in Ihrem Formular: das gesamte italienische Straßenverzeichnis, mit vervollständigtem Namen („via verdi“ → „Via Giuseppe Verdi“), Gemeinde und Provinz; die Postleitzahl kommt mit der Auswahl, in den großen Städten mit Postzonen die richtige zur Hausnummer. Es arbeitet sitzungsweise: Der Client erzeugt für jede Adresse, die gerade ausgefüllt wird, eine UUID, die Vorschlagsabfragen sind kostenlos, und Sie zahlen eine Kontaktprüfung, wenn der Nutzer auswählt und die Felder gefüllt werden (Aktion select, die den bereits vom System normalisierten Datensatz zurückgibt). Die im Formular schon ausgefüllten Felder – auch teilweise – reisen als Kontext mit und grenzen die Vorschläge ein.

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

Ist die Straße gewählt, wird die Hausnummer vervollständigt: Übergibt man street_id mit der angefangenen Nummer, erhält man die vorhandenen Hausnummern dieser Straße, mit exists wahr/falsch zur Validierung der eingegebenen – und die Auswahl lässt sich mit der Hausnummer ohne neue Berechnung wiederholen: Berechnet wird pro Sitzung und pro Straße, nicht pro Klick; eine andere Straße in derselben Sitzung ist eine neue Berechnung. Hausnummern werden nur in der Sitzung vervollständigt, die diese Straße ausgewählt hat. In Städten mit Postzonen bestimmt die Hausnummer die genaue Postleitzahl.

Der API-Token gelangt nie in den Browser: Das fertige Widget (ra-suggerisci.js) ruft einen kleinen Proxy auf Ihrem Server auf, der den Token hinzufügt und weiterleitet. Jede Sitzung erlaubt bis zu 30 Aufrufe und gilt 10 Minuten; Sitzungen ohne Auswahl sind bis zu 200 pro Tag und Token kostenlos, plus fünf je Auswahl. Widget, fertiger Proxy und Beispielformular finden Sie im Kit von Ihr eigenes Formular.

Funktioniert in jedem Land im Dienst (heute Frankreich, Deutschland, Spanien, Niederlande, Belgien, Finnland, Tschechien, Portugal, Dänemark, Norwegen, Österreich, Schweiz, Slowakei, Kroatien, Rumänien, Ungarn, Slowenien, Irland, Island, Luxemburg, Liechtenstein, San Marino, Monaco, Andorra, Vatikanstadt; die aktuelle Liste steht unter Länder): Mit country_code oder country kommen die Vorschläge aus dem Register dieses Landes, und der Text wird so geschrieben, wie man ihn dort schreibt — Straße, Hausnummer, Postleitzahl und Stadt auch in einem einzigen Feld: «kalverstraat 92 amst», «92 rue de rivoli paris», in den Niederlanden «1012PH 92». Jede Antwort enthält parsed, also wie der Server Straße (street), Hausnummer (house_number) und Postleitzahl (postcode) gelesen hat: Ihr Formular weiß, wo die Nummer steht, ohne die Regeln des Landes zu kennen. Die Vorschläge enthalten Straße, Stadt, gegebenenfalls Ortsteil und source (registry, oder osm, wo das nationale Register nichts veröffentlicht); Postleitzahl und Hausnummern stehen nie in den Vorschlägen: Sie kommen mit der Auswahl, die durch die Engine läuft und denselben Datensatz wie /contact zurückgibt (postcode vom Register bestätigt, geo auf Hausnummernebene). Mit der Auswahl können Sie auch postcode übergeben, die im Formular geschriebene. attribution ist der Quellenhinweis, der neben den Vorschlägen anzuzeigen ist: Die Lizenz des Registers verlangt ihn. Fehlt das Land, wird IT angenommen; für ein Land außerhalb des Dienstes bleibt die Antwort HTTP 200 mit supported:false und hints:[], ohne Sitzung und ohne Abbuchung. Eine Sitzung gehört zu einem Land: Ändert es sich, erzeugt der Client eine neue UUID (sonst 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"}

Große Volumen: der asynchrone Auftrag

Normale Aufrufe antworten sofort, und deshalb haben sie eine Obergrenze an Elementen – eine HTTP-Anfrage, die Minuten dauert, nützt niemandem. Die Obergrenzen folgen dem Aufwand des Vorgangs:

Obergrenzen der Elemente pro Aufruf
EndpunktElemente pro AufrufWarum
/phone5.000sofortige Prüfung
/tax-code, /enrichment2.000schnelle Prüfung
/contact, /email, /dedupe500vollständige Prüfung
/website100eine Verbindung zur Website pro Adresse

Über diese Zahlen hinaus muss die Liste nicht von Hand aufgeteilt werden: Fügen Sie "async": true hinzu, und der Aufruf kommt sofort mit einem Code zurück, während die Verarbeitung in dieselbe Warteschlange wie der Datei-Upload geht. Bis zu 100.000 Elemente pro Aufruf, und in Meine Aufträge erscheint ein einziger.

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}

Dann lesen Sie ihn ab, wenn Sie ihn brauchen, und das Ergebnis kommt als JSON oder als 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

Unter 5.000 Zeilen kommt das Ergebnis auch in results innerhalb des JSON zurück; darüber wird es als CSV heruntergeladen. Berechnet wird, wenn der Auftrag in die Warteschlange gestellt wird, und der nicht verarbeitete Teil geht an Ihr Guthaben zurück, wenn der Auftrag abbricht. Der Token muss zu einem Konto gehören: Der Auftrag landet in Ihrer Warteschlange.

Ergebniscodes

Jede Antwort enthält das Feld outcome: eine Liste von Schlüsselwörtern, leer, wenn es nichts zu melden gibt. Das Schema ist immer <conditions> [MODIFIED <types>] — die Bedingungen vorne, die Änderungen am Ende — und gilt für alle Dienste. Daneben finden Sie outcome_label (oder kind) mit ok, modified, warning, error, und reason mit der Erklärung in einer Zeile. Die Codes sind Bezeichner: sie werden verglichen, nicht übersetzt; mit "language": "it" kommen die italienischen Codes (LOCALITA_NON_TROVATA MODIFICATO CAP INDIRIZZO), Wort für Wort dieselben.

Adresse (Kontaktprüfung)

Ergebniscodes – Adresse (Kontaktprüfung)
CodeBedeutung
OKKeine Änderung nötig, Adresse bereits korrekt (leeres Prüfergebnis)
MODIFIEDAdresse normalisiert, gefolgt von den geänderten Feldern: POSTCODE, PROVINCE, CITY/CITY_FORM, STREET/STREET_FORM, BUILDING (der Suffix _FORM = nur Format/Akzente, der Wert war schon korrekt). Das Schema des Feldes ist <conditions> [MODIFIED <types>]: etwaige Bedingungen kommen zuerst, MODIFIED und seine Typen am Ende
PO_BOXZustellung an ein Postfach erkannt (keine Straße): Form CASELLA POSTALE n
LOCALITY_WITHOUT_STREETDie Adresse ist ein Ortsteil ohne Straßennamen; die Zustellung ist trotzdem möglich
CITY_NOT_FOUNDGemeinde nicht erkannt
CITY_AMBIGUOUSGemeindename in mehreren Provinzen vorhanden
STREET_NOT_FOUNDStraße für diesen Ort nicht erfasst
STREET_AMBIGUOUSStraßenname in mehreren Teilen der Gemeinde vorhanden
STREET_TYPE_MISSINGStraßentyp nicht erkennbar (Via/Corso/Piazza … fehlt)
HOUSE_NUMBER_MISSINGHausnummer fehlt oder ungültig
HOUSE_NUMBER_INVALID_FORMATHausnummer in nicht erkannter Form
POSTCODE_UNCONFIRMEDDie Straße existiert, aber für diese Nummer gibt es keine Bestätigung der PLZ: die angegebene bleibt, sofern sie zur Stadt gehört
POSTCODE_PRESUMEDDie Straße existiert und die PLZ haben wir ohne Bestätigung durch die Hausnummer gesetzt: die Straße hat mehrere und die Nummer entscheidet nicht, oder es war keine angegeben und sie stammt von den benachbarten Hausnummern
INCOMPLETE_DATANicht genügend Informationen für die Normalisierung
FOREIGNNicht-italienische Adresse, in der Postform ihres Landes; wo das nationale Register im Dienst ist, sind Straße und Hausnummer geprüft, und die Meldung sagt es (nur auf Italienisch)
HOUSE_NUMBER_NOT_FOUNDAusland: Die Straße steht im nationalen Register, die angegebene Hausnummer nicht (nur wo das Register alle Hausnummern hat: aus einer unvollständigen Quelle oder aus OpenStreetMap ist eine fehlende Nummer kein Urteil)
POSTCODE_INVALID_FORMATAusland: Die Postleitzahl hat nicht die im angegebenen Land übliche Form
COUNTRY_UNRESOLVEDAusland: Das in der Adresse angegebene Land ist nicht im Katalog ISO 3166-1

Italienische Steuernummer

Ergebniscodes – italienische Steuernummer
CodeBedeutung
TAX_CODE_INVALIDDer Code besteht die Prüfungen nicht; reason sagt, welche (Prüfzeichen, Länge, Monat, Datum, Gemeinde), und suggestion schlägt die korrekte Form vor, wenn sie sich rekonstruieren lässt
TAX_CODE_MISMATCHDer Code ist gültig, passt aber nicht zu Nachname, Vorname, Geschlecht oder Datum der Anfrage
MODIFIED TAX_CODEDas Prüfzeichen fehlte: aus den ersten 15 Zeichen neu berechnet
MODIFIED TAX_CODE_FORMNur die Form wurde bereinigt (Großbuchstaben, Leerzeichen)
GENERATEDEndpoint /tax-code, Aktion generate: Code aus den Personendaten berechnet
MATCH / MISMATCHEndpoint /tax-code, Aktion compare: der Code stimmt mit den Daten überein oder nicht; differences nennt die abweichenden Felder

Am Endpunkt /tax-code haben dieselben Prüfungen eigene Codes – 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 –, weil dort die Steuernummer der Gegenstand der Prüfung ist und nicht ein Feld des Datensatzes.

Anreicherung

Ergebniscodes – Anreicherung
CodeBedeutung
ENRICHEDNatürliche Person: Geschlecht abgeleitet oder bestätigt, Titel und Anreden gesetzt
LEGAL_PERSONFirma oder Einrichtung: Anschrift als Firmenname behandelt (Spett.le)
PARTIALVorname fehlt oder Geschlecht aus dem Namen nicht ableitbar: neutrale Anrede

E-Mail

Ergebniscodes – E-Mail
CodeBedeutung
EMAIL_INVALIDUngültige Syntax
EMAIL_DOMAIN_NOT_FOUNDDie Domain empfängt keine E-Mails (kein MX-/A-Eintrag)
EMAIL_TYPOMöglicher Tippfehler in der Domain: Die Korrektur ist ein Vorschlag, in suggestion und im normalisierten Feld
MODIFIED EMAIL_DOMAINSicherer Tippfehler in der Domain, korrigiert: corrected_from enthält die geschriebene Form
EMAIL_DISPOSABLEWegwerf-E-Mail-Domain
EMAIL_ROLE_BASEDAdresse der Organisation (info@, bestellung@), nicht einer Person. Es ist ein Hinweis, kein Fehler
EMAIL_EMPTYKeine Adresse im Feld
MODIFIED EMAIL_FORMNur die Form wurde bereinigt (Leerzeichen, Großbuchstaben)

Telefon

Ergebniscodes – Telefon
CodeBedeutung
PHONE_INVALIDKeine erkennbare Nummer
PHONE_LENGTH_ANOMALOUSAnzahl der Ziffern nicht mit dem Nummerierungsplan vereinbar
PHONE_OUT_OF_PLANBeginnt weder mit 0 (Festnetz) noch mit 3 (Mobilfunk)
PHONE_FOREIGNNummer mit nicht italienischer internationaler Vorwahl (oder nationale Nummer eines ausländischen Datensatzes): Wir prüfen nur ihre Form, in E.164
PHONE_SPECIALKostenlose oder Sondertarifnummer: kein persönlicher Kontakt
PHONE_SERVICENummer für öffentliche Dienste (112, 118 …)
PHONE_WITH_EXTENSIONDas Feld enthielt auch eine Durchwahl oder eine Notiz: Wir prüfen nur die Nummer
PHONE_EMPTYKeine Nummer im Feld
MODIFIED PHONE_FORMNur die Form wurde bereinigt (Leerzeichen, Punkte, Vorwahl)

Website

Ergebniscodes – Website
CodeBedeutung
WEBSITE_INVALIDKeine korrekt geschriebene Webadresse
WEBSITE_DOMAIN_NOT_FOUNDDie Domain existiert nicht (kein DNS-Eintrag)
WEBSITE_NOT_RESPONDINGDie Domain existiert, aber kein Server antwortet
WEBSITE_PAGE_NOT_FOUNDDie Website antwortet, aber die Seite ist nicht da (404/410)
WEBSITE_ACCESS_DENIEDDie Website verweigert den Zugriff (401/403): oft ein Bot-Schutz
WEBSITE_CERTIFICATE_INVALIDDie Website antwortet, aber das Zertifikat lässt sich nicht prüfen
WEBSITE_RESPONSE_ANOMALOUSUnerwarteter Antwortcode
WEBSITE_EMPTYKeine Adresse im Feld
MODIFIED WEBSITE_FORMAdresse vervollständigt (Schema, www), ohne ihre Substanz zu ändern

Was jeder Aufruf verbraucht

Jeder Aufruf verbraucht Vorgänge vom Zähler des Dienstes: Kontaktprüfung (/contact, /suggest bei der Auswahl), Dublettenbereinigung (/dedupe) und einfache Prüfungen (/email, /phone, /website, /enrichment, /tax-code über das Freikontingent hinaus). Vorgänge kauft man als Pakete, die bleiben, oder mit einem Monatsabonnement; der Preis pro 1.000 sinkt mit der Größe und steht auf der Seite Preise. Jeden Monat sind 50 Kontaktprüfungen, 100 Datensätze in der Dublettenbereinigung und 500 einfache Prüfungen kostenlos.

Jede Antwort sagt, was sie verbraucht hat und woher: das Feld credit im JSON (counter, charged, free, subscription und packs mit den entnommenen Vorgängen und dem Rest, available, auto_topup mit der Zahl der automatisch gekauften Pakete, note) und die Header X-RA-Charged, X-RA-Available und, wenn sie eingreift, X-RA-Auto-Topup. Decken die verfügbaren Vorgänge den Aufruf nicht und ist die automatische Aufladung des Zählers nicht aktiv (oder schlägt fehl), lautet die Antwort 402 payment_required, und es wird nichts verarbeitet.

Um zu erfahren, wie viele Vorgänge übrig sind, ohne einen zu verbrauchen, gibt es GET /api/v1/credit. Für jeden der drei Zähler (contact, dedupe, light) liefert er available, die im Monat verbliebenen kostenlosen (free) und das Datum, an dem sie zurückgesetzt werden (der 1.), das subscription (Rest, Größe, Verlängerung), die aktiven packs einzeln mit dem, was übrig ist (sie verfallen nicht), und wie viele Sie gekauft haben, die auto_topup (aktiv, Größe, Limit und Ausgaben des Monats in Euro), die Nutzung (used im Monat, Gesamtwerte, letzte Nutzung) und vor allem den state, denn eine Null allein sagt nicht, ob Sie alles aufgebraucht haben oder diesen Dienst nicht nutzen: never_used, free (nie gekauft, Sie arbeiten im kostenlosen Monatskontingent), free_used_up, active, awaiting_renewal, used_up (Sie haben früher gekauft, und es ist nichts mehr übrig: nachladen), mit einem warning. Ganz oben listet needs_topup die Zähler auf, bei denen Handlungsbedarf besteht, und endpoint sagt, welchen Zähler jeder Endpunkt verbraucht. Erfordert den Token eines Kontos.

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", … } }
Von jedem Endpunkt verbrauchter Zähler
EndpunktZählerVorgänge
/contactKontaktprüfung1 pro Datensatz (Adresse, Name und Steuernummer zusammen)
/suggestKontaktprüfung1 pro ausgewählte Adresse (Tippen ist kostenlos)
/dedupeDublettenbereinigung1 pro Datensatz (Normalisierung inbegriffen)
/tax-codeEinfache Prüfungen1 pro Code, über das Freikontingent hinaus
/emailEinfache Prüfungen1 pro E-Mail
/phoneEinfache Prüfungen1 pro Nummer
/websiteEinfache Prüfungen1 pro Website
/enrichmentEinfache Prüfungen1 pro Name

Bezahlt wird pro geprüftem Element, nicht pro Aufruf: Stehen in einem Feld zwei Telefonnummern oder zwei E-Mail-Adressen, prüfen wir alle (bis zu drei pro Zeile), und jede zahlt ihren Preis. Ein Stapelaufruf verbraucht so viel wie die Vorgänge, die er enthält. Ist das Guthaben aufgebraucht und die automatische Aufladung nicht aktiv, antwortet die API mit HTTP 402 (Guthaben nicht ausreichend); nach Überschreiten des Rate-Limits antwortet sie mit HTTP 429 und retry_after. Ein Paket kaufen Sie in Ihrem Konto, oder Sie aktivieren ein Abonnement, um pro Vorgang weniger zu zahlen.

Rate-Limit

60 Anfragen pro Minute bei Einzelaufrufen, 10 pro Minute bei Stapelaufrufen, 300 pro Minute bei der Autovervollständigung.

Gemessen auf der Produktions-API mit zwanzig parallelen Aufrufen: etwa 200 Prüfungen pro Sekunde, Median unter 60 Millisekunden.

Eine einzige Zählung

API, Website und Stapelverarbeitung greifen auf dieselben Zähler zu: Ein Paket gilt überall.

Versionierung

Die Endpunkte sind versioniert (/api/v1/): Erscheint eine neue Version, bleibt die alte in Betrieb, und der Termin ihrer Abschaltung wird rechtzeitig angekündigt.

Bereit zur Integration?

Registrieren Sie das Konto, erzeugen Sie Ihren Token, kaufen Sie die Vorgänge, die Sie brauchen, und machen Sie den ersten Aufruf in weniger als einer Minute.

Erstellen Sie Ihren Token

Preise ansehen