Updated 2026-08-30
A username search API takes a handle and reports, platform by platform, whether an account with that name exists. This guide covers what the 864-platform username lookup returns, how it differs from an email lookup, and why a handle that exists is not the same as a person you have found.
For every platform that answered, one row: the platform, whether an account with that handle exists (registered), a label for how that was established (method) and the exact moment (checkedAt). matches counts the hits. For a username query derivedMatches is always zero - there is nothing to derive a handle from - and socialMatches equals matches, because no mailbox provider is involved. Public web mentions of the handle ride along when that source is enabled; breaches is null here because breach data is keyed on addresses, not handles. A platform we could not confirm is omitted from the list, never written up as registered: false.
curl -X POST "https://api.digifootprint.dev/v1/lookup?wait=true" \
-H "Authorization: Bearer dfp_your_key" \
-H "Content-Type: application/json" \
-d '{"query": "nkem_builds"}'{
"query": "nkem_builds",
"platformsChecked": 887,
"matches": 4,
"socialMatches": 4,
"derivedMatches": 0,
"servedFromCache": false,
"results": [
{ "platform": "github", "registered": true, "method": "public_api", "checkedAt": "2026-08-30T11:20:07.041Z" },
{ "platform": "reddit", "registered": true, "method": "public_api", "checkedAt": "2026-08-30T11:20:07.096Z" },
{ "platform": "twitter", "registered": false, "method": "public_api", "checkedAt": "2026-08-30T11:20:07.133Z" },
{ "platform": "instagram", "registered": true, "method": "public_api", "checkedAt": "2026-08-30T11:20:07.210Z" },
{ "platform": "twitch", "registered": false, "method": "public_api", "checkedAt": "2026-08-30T11:20:07.288Z" },
{ "platform": "stackoverflow", "registered": true, "method": "public_api", "checkedAt": "2026-08-30T11:20:07.402Z" }
],
"breaches": null,
"webMentions": [
{ "title": "nkem_builds on GitHub", "url": "https://github.com/nkem_builds", "snippet": "..." }
],
"phoneDetails": null
}A handle is how most of the internet keys a profile, so a username reaches far more platforms than any other input - 864 of the 887 in the registry, against 27 for an email address. That includes the large social networks such as Instagram, X and Tumblr; the developer platforms - GitHub, GitLab, npm, Stack Overflow; the gaming, creative and community platforms such as Twitch and Reddit; and a long tail of forums, marketplaces and niche services that rarely appear anywhere else. Each platform page says which inputs it accepts.
Reach and signal pull in opposite directions. An email hit says that exact address was used to open the account - strong evidence about the person who controls the mailbox. A username hit says a profile with that name exists - which may be the person you are looking at, or one of the many others who wanted the same handle. Short handles and common words collide constantly. That is why an email lookup tries the local part of the address as a handle but labels every such hit derivedFrom: "email_local_part" and keeps it out of matches: the same claim, with the same caveat, made explicit. Use the username search when you need breadth - to see the whole footprint of a handle someone chose - and the reverse email lookup when you need certainty about ownership. When both an email and a handle are on file, run both; the two responses share a shape and combine directly.
Hundreds of platforms do not answer at once, so the API offers three ways to wait. ?wait=true blocks until every platform has answered and returns the whole set - simplest to integrate, several seconds. The streaming endpoint sends a platform_result event for each platform as it lands, so a UI can paint the first hits in well under a second and fill in the rest as they arrive. And ?instant=true runs only the 25 highest-value platforms under a hard time ceiling, returning whatever answered inside it and omitting the rest - the same honest contract, with "ran out of time" added to the reasons a platform can be missing. Results are cached for a period that depends on what was found, and servedFromCache together with each row's checkedAt makes it explicit when a fact is fresh; see caching.
The response is a set of registration facts with timestamps and nothing more. No profile contents are collected: no names, photos, bios, follower counts or posts. That boundary is what makes a username search usable in trust and safety work - linking a new account to the handle a banned one used elsewhere - and in OSINT investigations, where the lookup is the first pass that tells an analyst where to look, not the investigation itself. Brand and product teams use the same call in reverse, reading registered: false as availability before a launch. Our terms restrict use to lawful, non-harassment purposes, and our privacy policy covers removal requests from people who are looked up. There are free lookups to start; the pricing section has the rest.