Identity Check — Name, Address, Email & Phone in One Call | Acuris Geo
This product is temporarily unavailable. We’re not taking new activity on it right now — check back soon, or email sales@acuris-geo.com with questions.

Do these four signals belong to one real person?

One call checks a name, postal address, email and phone number — each one validated against our own data, then cross-checked against each other. You get a single 0–100 identity score, a clear verdict, and the reasons behind it. Built on the same engines that validate addresses in 240+ countries.

Identity Check is available on request

This product is not sold self-serve. Tell us which signals you need to check — name, address, email, phone — plus the countries and the volume, and we’ll follow up by email. The document & biometric step-up is described below.

Temporarily unavailable API reference

What each result means

Every field the /identity response includes, and what it tells you about a person.

identity_score
A single 0–100 composite. Each signal you provide is scored and weighted (address 40 · email 30 · phone 20 · name 10, re-normalised over what you sent), then cross-signal mismatches subtract penalties. Lets your code branch simply: if score < 80: review.
verdict
Our overall read. verified (≥80) — every signal is real and they cohere. partial (50–79) — some signals check out, others are weak or inconsistent. unverified (<50) — the data doesn’t hold together. A placeholder or well-known fictional name (“Max Mustermann”, “John Doe”, “Mickey Mouse”) always caps the verdict at unverified, however good the rest looks.
signals.address
The full Acuris address-validation response — standardised address, match_type up to rooftop, corrections, per-component match flags. Same engine as /validate, 240+ countries.
signals.email
The full email check — format, DNS MX, disposable-domain, role-account and newly-registered-domain flags (the email’s domain was registered within the last ~90 days — a one-way signal: a hit is strong, absence proves nothing), did-you-mean typo suggestions. A deliverable but disposable inbox is capped: it verifies, but it isn’t an identity.
signals.phone
The full phone check — E.164 normalisation, numbering-plan validity, line type, region, carrier, time zones. Fully offline, nothing sent to a third party.
signals.name
Format and plausibility — placeholder and well-known fictional names (“John Doe”, “Mickey Mouse”), digits, single-token, suspicious patterns. Honest scope: we check that the name is plausible, not that it appears in any register.
consistency.email_name_match
Does the email’s local part plausibly belong to the named person? marie.peeters@… matches Marie Peeters (umlauts and jdoe-style initials handled); info@… against a person’s name returns no_match and costs 10 points.
consistency.phone_country_match
Does the phone number’s country (derived from the number itself) match the address country? A US mobile attached to a Brussels address returns false and costs 10 points.
consistency.email_domain_country_match
Informational only: whether the email’s ccTLD matches the address country. Generic domains (.com) return null and are never penalised.
signal_scores
The per-signal component scores (0–1) behind the composite, so you can see which signal dragged the total down.
consistency.ip_country_match
Does the caller’s IP geolocate to the same country as the address? Derived from Regional Internet Registry delegation data, entirely offline. A request from a US IP against Marie Peeters’ Brussels address returns false and shaves a small penalty — a risk signal, never a block. Only present when you pass an IP.
signals.ip.is_datacenter
Is the IP a hosting / cloud / datacenter range rather than a consumer ISP? We match AWS, GCP, Cloudflare and Oracle ranges; datacenter_provider names the one we hit. (Some commercial VPNs run on these; consumer VPNs on residential IPs are not detected.) Real customers rarely check out from a datacenter — a useful tell, weighed not gated.
signals.ip.is_tor
Is the IP a known Tor exit node? Checked against the public exit list. true applies a small penalty; like every IP signal it nudges the score and never decides the verdict on its own.
signals.address_flags
Special-use address detection: is_po_box, is_parcel_locker (Packstation), is_virtual_office (c/o, Regus and the like) and a poi_hint for non-residential premises, summed into residential_likelihood (high · medium · low). A perfectly valid address that is a mailbox, not a home — honest scope: a likelihood, not proof. Only present when something special is found.
area_deprivation
For German and English addresses: the official socioeconomic deprivation decile of the address’s neighbourhood — Germany from the RKI’s GISD at PLZ-5 level (CC BY 4.0), England from the government’s IMD 2019 per postcode (OGL). Each response carries its own decile_scale because the two indices run in opposite directions (IMD: 1 = most deprived; GISD: 10 = most deprived). This is an area statistic, not a statement about the person, and it is deliberately never part of identity_score — it’s informational enrichment for your own analytics (insurance risk, affordability, service targeting). England + Germany only; other addresses simply omit the block.
sanctions
A name-only screen against the official EU consolidated, OFAC SDN & Consolidated, UN, UK OFSI, Swiss SECO, French Trésor and Australian DFAT sanctions lists, run free on every call: hit, match_count, top_score and up to three matches. Honest scope: a name match for a human to adjudicate, not a determination that the person is sanctioned — name collisions are common, and this covers sanctions only, not PEP or adverse-media lists. Deliberately kept out of identity_score so a name clash can never quietly lower a verified verdict.
review_required
Set to true only when the sanctions screen returns a possible match, with sanctions_possible_match added to reasons. Your one branch for “send this to a human before proceeding” — separate from the score, so compliance routing never rides on a fraud number.
reasons
Machine-readable codes behind the verdict (e.g. name_is_placeholder, email_is_disposable, phone_region_differs_from_address_country) — for your code to act on programmatically.

What this checks — and what it doesn’t

Honesty first: this is a data-coherence check over the attributes you submit. It tells you whether the signals are real and whether they plausibly belong to one person — it is not a legally certified KYC identity proof against a government register.

What you get todayWhat it is not (yet)
✅ Address is real, deliverable-grade, to point-coordinate level 🪪 A match against a government / credit-bureau register
✅ Email exists, isn’t disposable, fits the name 📄 Document & biometric verification — not part of this check; available as a step-up
✅ Phone is valid and belongs to the address country ⚖️ A certified AML/KYC compliance artefact
✅ Synthetic-identity tells: placeholder & fictional names, role inboxes, cross-country mismatches
✅ Sanctions name-screen against EU, OFAC SDN & Consolidated, UN, UK OFSI, Swiss SECO, French Trésor and Australian DFAT lists, with a review_required flag 🔍 A determination that someone is sanctioned — a hit is a name match for human adjudication
✅ IP country / datacenter / Tor flags and special-use address detection as risk signals 🏛️ PEP or adverse-media screening — we cover sanctions lists only

Need government-grade identity? Our EUDI Wallet Verifier validates EU Digital Identity Wallet credentials (eIDAS 2.0) — cryptographically signed name, date of birth and address straight from a member-state-issued wallet, the method the EU is making the standard for remote identification from 2027. The identity check on this page is the fast, friction-free first filter; the document & biometric proof tier and the wallet flow are the proof.

Verifying a company, not a person? See Business Verification (KYB) — VAT (VIES), LEI (GLEIF) and registered-address checks in one call.

The step-up: document & biometric proof

When the coherence check isn’t enough — a regulated onboarding, a high-value account, a case your rules flag for review — the same API escalates that user to a full identity-document and biometric verification, presented inside your own flow.

🪪

Government ID capture

The user scans a passport, national ID card or driving licence in an in-page flow — document checks run automatically, no redirect away from your product.

🤳

Selfie liveness & face match

A short selfie sequence confirms a live person is present and compares the face to the document photo.

🔔

Verdict-first decision

The result reaches you by webhook or via GET /identity/proof/result as status and reason codes (approved, declined, resubmission_requested) — your systems receive the decision, not a copy of the document.

🪜

One identity ladder

Run the coherence check on everyone, escalate to document proof only where it’s warranted, and reserve the EUDI Wallet flow for state-issued credentials. Three tiers, one API family.

Temporarily unavailable

Commercials: quoted individually — contact sales for a price. Production onboarding includes the consent and data-protection setup for biometric processing. Document & biometric verification is performed by our specialist partner Veriff and delivered as part of your Acuris integration.

Fraud & compliance signals, in the same call

Beyond the four core signals, /identity folds in three free risk layers. Pass the caller’s IP and we add its country, datacenter and Tor flags, derived from offline Regional Internet Registry delegation data. The address leg flags special-use premises — PO boxes, parcel lockers, virtual offices — as a residential_likelihood. And every name is screened against the EU, OFAC SDN & Consolidated, UN, UK OFSI, Swiss SECO, French Trésor and Australian DFAT sanctions lists. None of this costs extra.

What a sanctions hit is — and isn’t. A hit is a name match surfaced for a human to adjudicate, not a determination that the person is sanctioned; name collisions are common. We screen sanctions lists only — not PEP (politically-exposed-persons) or adverse-media sources. By design the screen sits outside identity_score and instead raises a separate review_required flag, so a name clash never quietly lowers a verdict and a clean name never reads as “cleared”. The IP and address-risk flags work the same way: they adjust the score by small penalties but never gate the verdict on their own.

Every signal checked, then checked against each other

🎯

One 0–100 score

Four validations and the cross-checks collapse into a single number plus a verified / partial / unverified verdict your code can branch on.

🏠

Rooftop address validation

The address leg is full Acuris validation — standardisation, corrections and point-coordinate matching across 240+ countries.

✉️

Email ↔ name match

marie.peeters@… belongs to Marie Peeters; info@… doesn’t. Umlauts folded, jdoe-style initials understood.

📍

Phone ↔ country match

The number’s real region — derived from the numbering plan, not the caller’s claim — checked against the address country.

🎭

Synthetic-identity tells

Placeholder and fictional names (Max Mustermann, John Doe, Mickey Mouse), disposable inboxes and role accounts are flagged — a placeholder or fictional name alone caps the verdict at unverified.

🧾

Full sub-results included

You don’t just get the score — the complete address, email and phone validation responses ride along in signals.

🌐

IP & device intelligence

Pass the caller’s IP and we add its country, whether it’s a datacenter range (AWS, GCP, Cloudflare, Oracle) or a Tor exit — all offline, and free inside the same call.

📮

Special-use address detection

PO boxes, Packstation parcel lockers, virtual offices (c/o, Regus) and non-residential premises are flagged as a residential_likelihood — a real address that isn’t a home.

⚖️

Sanctions screening

Every name is screened free against the EU, OFAC SDN & Consolidated, UN, UK OFSI, Swiss SECO, French Trésor and Australian DFAT lists. A hit is a name match for your team to adjudicate — sanctions only, never auto-blocked.

🚦

Review-required routing

A possible sanctions match sets review_required: true — one clean branch to send a case to a human, kept entirely separate from the fraud score.

🇪🇺

EU data residency

Runs on the same EU-hosted stack as our address validation. US data residency optional.

Where teams put it to work

🛡️

Signup fraud screening

Score every new account before it gets credit, trial access or a promo code. A US phone, a mailinator inbox and a placeholder name on a Berlin address is a bot — reject it with reasons, in one call.

🛒

Checkout risk gating

Before accepting invoice payment or cash-on-delivery, check the order’s contact data holds together. Route low scores to prepayment instead of losing the parcel.

🏪

Marketplace seller onboarding

First-pass screening for new sellers and listers: coherent real-world contact data before a human reviews them — and before a fraudulent storefront goes live.

📈

Lead scoring & routing

Form fills with verified, coherent contact data are worth a sales call; asdf@test.com with score 12 isn’t. Push the identity score into your CRM and route accordingly.

🧹

CRM hygiene

Audit existing records: flag accounts whose email, phone and address no longer cohere — stale data, shared inboxes, fake registrations from before you screened.

⚖️

Pre-KYC triage

Full document KYC costs €1+ per check. Run this first and send only plausible identities into the expensive flow — and the obvious junk straight to rejection.

Three lines, any language

A one-line curl, or the same call straight from Node and Python — clean JSON, identical on every tier.

curl -X POST 'https://api.acuris-geo.com/identity' \
  -H 'X-Acuris-Key: YOUR_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "name":    {"first": "Marie", "last": "Peeters"},
    "address": "Avenue Louise 54, 1050 Bruxelles",
    "country": "bel",
    "email":   "marie.peeters@telenet.be",
    "phone":   "+32 470 12 34 56"
  }'

# → {
#     "identity_score": 100,
#     "verdict": "verified",
#     "consistency": {
#       "email_name_match": "matched",
#       "phone_country_match": true
#     },
#     "signals": { "address": {…}, "email": {…}, "phone": {…}, "name": {…} },
#     "credits_charged": { "primary": 1, "email": 1, "phone": 1 }
#   }
const res = await fetch("https://api.acuris-geo.com/identity", {
  method: "POST",
  headers: { "X-Acuris-Key": process.env.ACURIS_API_KEY, "Content-Type": "application/json" },
  body: JSON.stringify({
    name: { first: "Marie", last: "Peeters" },
    address: "Avenue Louise 54, 1050 Bruxelles",
    country: "bel",
    email: "marie.peeters@telenet.be",
    phone: "+32 470 12 34 56",
  }),
});
const r = await res.json();

console.log(r.identity_score, r.verdict, r.consistency.email_name_match);
// → 100 "verified" "matched"
import os, requests

r = requests.post(
    "https://api.acuris-geo.com/identity",
    headers={"X-Acuris-Key": os.environ["ACURIS_API_KEY"]},
    json={
        "name": {"first": "Marie", "last": "Peeters"},
        "address": "Avenue Louise 54, 1050 Bruxelles",
        "country": "bel",
        "email": "marie.peeters@telenet.be",
        "phone": "+32 470 12 34 56",
    },
).json()

print(r["identity_score"], r["verdict"], r["consistency"])
# → 100 verified {'email_name_match': 'matched', 'phone_country_match': True, …}

Priced individually, on request

Identity Check is priced individually, like our other identity and risk checks — the signals and volume you need differ too much for a one-size price. Sanctions screening, name/IP/address risk flags and consistency checks all run free inside every call.

Temporarily unavailable Need government-grade? EUDI Wallet