Footprint check

Which platforms an email address, phone number or username is registered on - the sweep, breach history and web mentions, with no other module.

Request

Send query (an email, phone number or username, detected for you), email, or phone.

POST /v2/footprint
curl -X POST https://api.digifootprint.dev/v2/footprint \
  -H "Authorization: Bearer dfp_live_..." \
  -H "Content-Type: application/json" \
  -d '{"query": "someone@example.com"}'
200 OK
{
  "lookupId": "2c7c1393-e854-4120-985c-f7f76f0869b1",
  "footprint": {
    "platformsChecked": 1944,
    "matches": 6,
    "socialMatches": 5,
    "derivedMatches": 1,
    "hits": ["github", "gravatar", "spotify", "google", "pinterest", "duolingo"],
    "servedFromCache": false,
    "results": [
      {
        "platform": "github",
        "registered": true,
        "method": "public_api",
        "icon": "https://digifootprint.dev/icons/github.svg",
        "checkedAt": "2026-09-28T18:53:14.440Z",
        "identity": "email"
      }
    ],
    "breaches": [
      { "name": "AlienStealerLogs", "date": "2025" },
      { "name": "Naz.API", "date": "2023" }
    ],
    "webMentions": [
      {
        "title": "Someone's profile",
        "url": "https://github.com/someone",
        "snippet": "How to reach me someone@example.com ...",
        "matchConfidence": "confirmed"
      }
    ]
  }
}

What comes back

The footprint object is the same one POST /v2/lookup returns. Every row in results carries the method that established it and when it was checked. A platform we could not confirm is left out, never reported as false.

breaches is null when not checked (a phone or username only, or the source is unavailable) and [] when checked and nothing was found. webMentions follows the same rule.

An email and a phone together

Send both and each gets its own sweep; identity on every result says which one it came from. That is two footprint lookups.

POST /v2/footprint
{
  "email": "someone@example.com",
  "phone": "+14155552671"
}

Choosing the phone platforms

A phone number is checked platform by platform and billed per platform that runs. With nothing named, the default set runs (WhatsApp and Telegram). Name others in checks.footprint.phone.platforms; an unknown platform is a 400. Send "email": false or "phone": false inside checks.footprint to skip one identity's sweep, and "breaches": false in checks to skip the breach lookup. Per-platform prices are on the rate card.

POST /v2/footprint
{
  "phone": "+14155552671",
  "checks": { "footprint": { "phone": { "platforms": ["whatsapp", "telegram", "facebook"] } } }
}

Speed

This endpoint waits for the full sweep, which usually takes several seconds and can run past fifteen when a slow platform is involved. To answer in one to three seconds and let the rest finish in the background, use POST /v2/lookup with {"checks": {"footprint": {"early": true}}}.

Billing

An email or username is one footprint lookup; a phone number is billed per platform that runs. No other module runs or is billed. An IP address has nothing to sweep: use POST /v2/ip for that.