An email enrichment API returns what is verifiably known about an email address. This one answers in a single request: which of 886 platforms the address is registered on, every breach it has appeared in, and where it is mentioned on the public web - each fact stamped with how and when it was established, and anything unconfirmed left out rather than guessed.
Send the address as email. The same endpoint takes a phone number or a username in their own fields, without a different code path, and checks.email adds deliverability, disposable and age facts. Add ?wait=true and the answer returns on the same request.
curl -X POST "https://api.digifootprint.dev/v2/lookup?wait=true" \
-H "Authorization: Bearer dfp_your_key" \
-H "Content-Type: application/json" \
-d '{ "email": "someone@example.com", "checks": { "email": true }}'{
"lookupId": "c41d7f2b-...",
"input": { "email": "someone@example.com", "phone": null, "username": null, "ip": null },
"risk": { "score": 0 },
"footprint": {
"platformsChecked": 886,
"matches": 4,
"socialMatches": 4,
"derivedMatches": 0,
"hits": ["instagram", "spotify", "github", "duolingo"],
"servedFromCache": false,
"results": [
{ "platform": "instagram", "registered": true, "method": "public_api", "icon": "https://.../instagram.svg", "checkedAt": "2026-10-03T09:12:04.118Z", "identity": "email" },
{ "platform": "spotify", "registered": true, "method": "public_api", "icon": "https://.../spotify.svg", "checkedAt": "2026-10-03T09:12:04.201Z", "identity": "email" },
{ "platform": "github", "registered": true, "method": "public_api", "icon": "https://.../github.svg", "checkedAt": "2026-10-03T09:12:04.377Z", "identity": "email" },
{ "platform": "duolingo", "registered": true, "method": "public_api", "icon": "https://.../duolingo.svg", "checkedAt": "2026-10-03T09:12:04.512Z", "identity": "email" }
],
"breaches": [{ "name": "Collection1", "date": "2019-01-07" }, { "name": "LinkedIn", "date": "2012-05-05" }],
"webMentions": [{ "title": "someone (GitHub)", "url": "https://github.com/someone", "snippet": "someone@example.com - repositories", "matchConfidence": "confirmed" }],
"phoneReserved": null
},
"email": {
"address": "someone@example.com",
"deliverable": true,
"disposable": false,
"freeProvider": true,
"roleAccount": false,
"breaches": { "listed": true, "count": 2, "firstSeenAt": "2012-05-05", "lastSeenAt": "2019-01-07" },
"age": { "firstSeenAt": "2012-05-05", "ageDays": 5264, "source": "breach_records", "estimate": true },
"risk": { "score": 0 }
},
"phone": null,
"ip": null,
"meta": { "tier": "standard", "modules": ["footprint:email", "email"], "instant": false, "footprintComplete": true, "deadlineMs": null, "platformsPending": null }
}The email digital footprint is often the most telling part of the answer. A real person's address has years of accounts behind it - social networks, shopping, developer and creative sites - and usually some breach history. An address made for one signup has almost none. One request returns that footprint beside the deliverability and risk facts, and the free digital footprint checker shows it for any address.
These three names describe the same operation and this API serves all of them: start from an email address, find out where it exists. An email search across platforms and an email enrichment call are the same request here - what differs is only what you intend to do with the answer.
Of the 886 platforms in the registry, 27 accept an email address as input; the rest are keyed on a username. That asymmetry is a property of the platforms, not of this API, and it is why a username reaches further than an address does. See username search when you have a handle rather than an address, and coverage and accuracy for the exact counts by input type.
Most enrichment products return a name, a job title, a company and a confidence score. This one returns none of those, because none of them can be confirmed from an email address - they are inferred, and an inference presented beside a verified fact is indistinguishable from it once it reaches a risk model.
What comes back instead is narrow and checkable: registration exists or it does not, this breach contains the address or it does not, this page mentions it or it does not. Every entry carries its method and checkedAt. Where a source is not configured, footprint.breaches and footprint.webMentions are null rather than an empty array, so “we did not look” never reads as “we looked and found nothing”.
At signup, the count of platforms an address is registered on separates an established person from an address created minutes ago - see fraud prevention and thin digital footprints.
In regulated onboarding, breach dates give a demonstrable lower bound on how long an address has existed, which is difficult to fabricate - see AML compliance and KYC. In trust and safety, an address registered nowhere else is among the earliest fake-account signals available - see fake account detection.
15 free lookups to start, shared across your company domain, no card required. Then pay as you go at $0.03 per lookup (top up from $20), or a monthly plan from $49 with a credit equal to its price, spent at lower per-check rates. Every price, per check and per plan, is on the pricing page.