Updated 2026-08-30
A username lookup across social media returns every platform where that handle is registered, out of hundreds checked in one request. It confirms that a profile exists under the handle; it does not read the profile, and it does not claim the same person is behind every hit.
Send the handle as query; the type is detected, so a string with no @ and no digits-only shape is treated as a username. The response is one entry per platform that answered: registered: true where a profile exists under that handle, false where the platform confirmed there is none, plus method and checkedAt for each. There is no derived pass for a username - the handle is already the handle - so derivedMatches is always zero here.
curl -X POST "https://api.digifootprint.dev/v1/lookup?wait=true" \
-H "Authorization: Bearer dfp_your_key" \
-H "Content-Type: application/json" \
-d '{"query": "janedoe_dev"}'{
"query": "janedoe_dev",
"platformsChecked": 887,
"matches": 5,
"socialMatches": 4,
"derivedMatches": 0,
"servedFromCache": false,
"results": [
{ "platform": "github", "registered": true, "method": "public_api", "checkedAt": "2026-08-30T10:02:11.044Z" },
{ "platform": "reddit", "registered": true, "method": "public_api", "checkedAt": "2026-08-30T10:02:11.097Z" },
{ "platform": "instagram", "registered": true, "method": "public_api", "checkedAt": "2026-08-30T10:02:11.230Z" },
{ "platform": "twitter", "registered": true, "method": "public_api", "checkedAt": "2026-08-30T10:02:11.301Z" },
{ "platform": "telegram", "registered": true, "method": "public_api", "checkedAt": "2026-08-30T10:02:11.355Z" },
{ "platform": "tiktok", "registered": false, "method": "public_api", "checkedAt": "2026-08-30T10:02:11.418Z" }
],
"breaches": null,
"webMentions": [],
"phoneDetails": null
}Note breaches: null: breach data is keyed on email addresses, so for a username query that source is not consulted and the field says so, instead of pretending to have checked. Public web mentions are still resolved for a handle, and [] there means checked and nothing found.
A username is the widest input there is. Most social networks, forums, developer platforms and creator sites are keyed on a handle, which is why 864 of the 887 platforms in the standard band accept one, against a much shorter list for an email address. 25 of them - including GitHub, Reddit, Instagram, Telegram and YouTube - form the instant tier that answers in around half a second. A deep lookup extends past the standard band into the long tail; the trade-offs are on the depth guide.
Because a full username sweep touches hundreds of platforms, it is the input that benefits most from streaming: each platform arrives as its own event the moment it lands, so a UI can fill in as the sweep runs rather than waiting for the slowest site. Browse the social category to see which platforms accept a handle.
The single most important caveat in username lookup: handles collide. janedoe_dev on GitHub and janedoe_dev on Instagram may be one person or two, and a short or common handle will exist on dozens of platforms held by dozens of people. The API reports what it can verify - a profile exists under this handle here - and stops. It does not link hits to each other, score how likely they are to be the same person, or fetch anything from the profiles to compare.
That is a feature for the people this is built for. An investigator wants the candidate list and will corroborate it through proper channels. A trust-and-safety team checking whether a brand’s handle has been taken on other platforms wants existence, not contents. A signup flow using the handle as a secondary signal wants a count. None of them are served by a guess dressed up as a match.
Three outcomes, and only two of them appear in the response. registered: true is a confirmed profile. registered: false is a platform that answered and has no profile under the handle. A platform that blocked the check, timed out, or returned something we could not interpret is the third outcome, and it is omitted from results entirely - never reported as false, because an unknown is not a fact. Compare results.length to platformsChecked to see how much of the sweep produced an answer.
Answers are cached and say so. servedFromCache flags a response that reused anything, and every entry’s checkedAt is the real time it was established, so you can decide for yourself whether a two-day-old negative on a platform where handles are created every minute is fresh enough. The caching page lists how long each kind of answer is trusted.
OSINT and investigations: turn one known handle into a list of platforms to examine, with a timestamp for each. Trust and safety: check whether a handle reported for impersonation or abuse exists across the platforms you care about, and whether a brand handle is registered where it should be. Fraud prevention: a chosen username that exists on many established platforms is mild evidence of a real person; one that exists nowhere is mild evidence of nothing. In every case the check returns which profiles exist, not their contents, and our terms rule out harassment and stalking. The email-first version of this is on finding accounts by email; the umbrella is the social profile lookup API. Free lookups to start - see pricing.