Documentation
Everything in the dashboard is available by API and MCP with the same key. Misses never cost credits. Account, usage and catalog calls are free.
1. Install the tag
<script async src="https://deanonymized.com/d.js?k=YOUR_PIXEL_KEY"></script>
4 KB, async, one first-party cookie (_dzid, 400 days). Honours Global Privacy Control and TCF v2 automatically. Shopify cart activity is captured without extra code.
Optional calls
dz('identify', 'jane@example.com'); // deterministic match (login, form, ESP click)
dz('consent', 'granted'); // or 'denied' — from your CMP
dz('track', 'pricing_toggle', { plan: 'pro' }); // custom event
dz('order', { id: '#1001', total: 129.00, email: 'jane@example.com' }); // attributionServer-side ingest
POST https://deanonymized.com/api/ingest
Content-Type: application/json
{ "k": "YOUR_PIXEL_KEY", "cid": "<your visitor id>", "ua": "<user agent>", "e": [{ "t": "pv", "u": "https://…", "p": "/pricing", "ts": 1730000000000 }] }2. Authentication
Authorization: Bearer dz_live_… # or X-API-Key header, or ?api_key=
Keys are scoped (read, enrich, search, ingest). Requests are limited to 600/min per key; records are limited per plan over 5-hour and 7-day windows.
3. Enrichment tools
POST /api/v1/<tool> with a JSON body, or { items: [...] } for batches up to 1,000. Each hit charges the listed credits; a miss returns status: "not_found" and charges nothing.
| Tool | Credits | Input | Returns |
|---|---|---|---|
| ip_to_company | 1 | ip | IP address → company domain with share of traffic |
| ip_to_hem | 1 | ip, user_agent? | IP → up to 3 hashed emails ranked by confidence |
| ip_to_business_profile | 3 | ip | IP → best person profile (name, title, company) |
| email_to_business_profile | 2 | Email or HEM → work profile | |
| email_to_linkedin | 1 | Email or HEM → best LinkedIn URL | |
| email_to_maid | 1 | Email or HEM → mobile advertising IDs | |
| email_activity | 1 | Email → last active date (suppress stale addresses) | |
| email_validate | 1 | Email → A–F send-safety grade with reason | |
| work_to_personal | 1 | Work email → personal hashed emails | |
| linkedin_to_business_profile | 4 | linkedin_url | LinkedIn URL → work profile incl. business email |
| linkedin_to_business_email | 4 | linkedin_url | LinkedIn URL → verified work email only |
| linkedin_to_personal_email | 2 | linkedin_url | LinkedIn URL → personal email (consented regions) |
| linkedin_to_hashed_emails | 1 | linkedin_url | LinkedIn URL → MD5/SHA256 variants for audience matching |
| linkedin_to_mobile | 3 | linkedin_url | LinkedIn URL → carrier-verified mobile (1 phone token) |
| find_linkedin | 1 | first_name, last_name, company_domain | First + last name + company domain → LinkedIn URL |
| find_email | 2 | first_name, last_name, company_domain | Name + company domain → business email with grade |
| universal_identity | 3 | Email or HEM → everything: profile, all hashes, device IDs | |
| domain_to_firmographics | 1 | domain | Company domain → firmographics (size, revenue, NAICS, HQ, tech) |
| maid_to_hem | 1 | maid | Mobile advertising ID → hashed emails |
Example
curl -X POST https://deanonymized.com/api/v1/linkedin_to_business_profile \
-H "Authorization: Bearer dz_live_…" -H "Content-Type: application/json" \
-d '{"linkedin_url":"linkedin.com/in/jane-example"}'
{
"ok": true, "tool": "linkedin_to_business_profile", "credits_charged": 4, "status": "found",
"result": {
"full_name": "Jane Example", "title": "VP Marketing", "seniority": "VP", "department": "Marketing",
"business_email": "jane.example@example.com", "business_email_grade": "A",
"business_email_grade_reason": "Validated 9 days ago, mailbox live", "business_email_validated_at": "2026-10-24T…",
"profile_last_seen": "2026-10-30T…", "company": { "name": "Example Co", "domain": "example.com", "employee_range": "201-500" }
}
}4. Search
POST /api/v1/people_search { "title": "VP Marketing", "size": "201-500", "grade": "AB", "page": 1 }
POST /api/v1/people_search { "company": "ramp.com", "count_only": true } # free preview
POST /api/v1/company_search { "industry": "Fintech", "size": "1001-5000" } # free5. Send-safety grades
- A validated in the last 30 days, mailbox live. Send.
- B known positive engagement in the last 180 days. Probably send.
- C catch-all domain. Your call.
- D bounce, complaint, spam trap or do-not-mail. Do not send.
- F no signal either way. Your call.
6. MCP
# Claude Code
claude mcp add --transport http deanonymized https://deanonymized.com/api/mcp --header "Authorization: Bearer dz_live_…"
# Claude Desktop / Cursor / ChatGPT connectors
{ "mcpServers": { "deanonymized": { "url": "https://deanonymized.com/api/mcp", "headers": { "Authorization": "Bearer dz_live_…" } } } }
# Local stdio
DEANONYMIZED_API_KEY=dz_live_… npx @deanonymized/mcpExtra MCP-only tools: website_visitors, find_decision_makers, draft_first_touch, account.
7. Webhooks out
X-Deanonymized-Timestamp: 1730000000000 X-Deanonymized-Signature: hex(HMAC_SHA256(secret, timestamp + "." + body))
Flat payload fields: id, identified_at, domain, level, confidence, intent_score, hot_lead, net_new, repeat, hot_pages, icp_tags, first_name, last_name, full_name, title, seniority, department, linkedin_url, email, email_grade, personal_email, mobile_phone, company_name, company_domain, industry, employee_range, revenue_range, city, state, country, page_views, sessions, last_pages, profile_url.
8. Account and usage
GET /api/v1/account # plan, balances, limits (free) GET /api/v1/usage?period=week # per-day usage by type (free) GET /api/v1/tools # this catalog (free, no auth)
9. Errors
200 with status: not_found means no data. 401 bad key. 403 missing scope. 404 unknown tool. 429 rate limit with retry_after_seconds. Free-plan credit exhaustion returns 200 with credits_exhausted: true.