TL;DR: Send a POST with email or LinkedIn URL or company domain. Get back enriched fields. Same engine as the in-app Enrich button, no UI required.
When to use the API
Three patterns:
- CRM integration. Your CRM is the source of truth for net-new leads. As they're created, hit the Enrichment API to populate contact channels and persona fields before routing.
- Sequencer prep. Before a sequence launches, validate each lead's email via the Enrichment API. Replace bouncing emails on the fly.
- AI-agent workflows. Your LLM agent needs structured contact data on a person it just discovered. Call the Enrichment API, get the contact channels back as JSON.
API endpoint
POST /enrichment
Headers:
Authorization: Bearer <UNSTUCK_API_KEY>
Content-Type: application/json
Body:
{
"email": "person@company.com", // optional, identity hint
"linkedin_url": "https://...", // optional, identity hint
"company_domain": "company.com", // optional, identity hint
"channels": ["work_email", "phone"] // which channels to enrich
}
At least one identity hint (email, LinkedIn URL, company domain) must be provided. The waterfall runs for the specified channels.
Response:
{
"record_id": "lead_abc123",
"channels": {
"work_email": {
"value": "person@company.com",
"source": "Provider A",
"confidence": 0.94
},
"phone": {
"value": null,
"tried_providers": ["A", "B", "C"]
}
},
"credits_used": 4
}
Credit accounting via API
Identical to the in-app behavior. Each successful enrichment costs credits per the provider's rate. Failed attempts (waterfall exhausted, no contact found) cost zero.
The response includes credits_used so your downstream system can track burn. You can also poll /credits to check current balance before bulk-enriching via the API. For higher-volume needs (bulk backfills), use the bulk audience-enrich UI action, which respects internal batching.
Idempotency
The Enrichment API is idempotent on a record-channel basis. If you send the same enrich request for a record that's already been enriched for those channels, the response returns the cached values; no credits charged.
To force a re-enrichment via API, include force: true in the body. The previous values are cleared and the waterfall re-runs.