Enrich Contact
Contacts
Start Enrichment
Enqueue a Temporal enrichment workflow for the contact.
Returns 202 with { job_id } immediately. Frontend polls
GET /contacts/{contact_id}/enrich-status for progress.
POST
Enrich Contact
Runs a Temporal pipeline (Apollo people-search → Scrapin profile match → Hunter email verification → photo resolution) against a single contact, writing provider-namespaced results into
enrichment_data. It follows the same start/poll shape as CSV import.
Before enqueuing a workflow, checks a same-domain cache: if another contact on the same email domain has fresh (< 30 days old) cached enrichment, that’s returned synchronously as 200 and no workflow runs. Otherwise, resets the contact’s progress tracking (enrichment_data.meta, preserving any prior provider data) and starts ContactEnrichmentWorkflow, returning 202 immediately.
Auth
Requires a CRM manage scope and an active organization on the token. Any*:manage scope qualifies — in practice contacts:manage, deals:manage, companies:manage, or activities:manage.
Response
Either:200(cache hit) —{ "ok": true, "cached": true, "enrichment": <cached enrichment object> }202(workflow started) —{ "job_id": "<temporal workflow id>" }. Poll Get enrichment status with the samecontact_id(the job ID isn’t needed for polling — status is read off the contact row).