# Per-lead enrichment and history

> emails returns { "emails": [...] }: every message scheduled for that lead in this campaign, ordered by scheduled time, the audit trail for "what did we…

Source: https://warmerly.com/docs/campaigns/per-lead-enrichment-and-history

```text
GET  /campaigns/{id}/leads/{leadId}/emails
POST /campaigns/{id}/leads/{leadId}/retry-enrichment
POST /campaigns/{id}/leads/research
```

`emails` returns `{ "emails": [...] }`: every message scheduled for that lead in this campaign, ordered by scheduled time, the audit trail for "what did we actually say to this person". Each has `id`, `stepId`, `status`, `subject`, `bodyText`, `bodyHtml`, `scheduledAt`, `sentAt`, `openedAt`, `clickedAt`, `repliedAt`, `bouncedAt` and `error`.

`retry-enrichment` re-runs enrichment (contact-info check, then the paid email-finder fallback) for one lead whose earlier attempt failed or found nothing. Automatic enrichment fires only once per lead, so this is the only way to give a failed lookup another go. It needs a lead that has a LinkedIn profile URL (`404` otherwise), uses the **email lookup** allowance and returns `402` with code `quota_exhausted` when that is exhausted. It returns `{ "started": true }` straight away and the lookup continues on the server.

`research` generates website research summaries, which feed personalisation, for up to **20 leads per call**: pass `{ "leadIds": ["…"], "force": false }` (1 to 20 UUIDs). It is idempotent per lead: leads that already have a fresh summary are skipped unless `force` is `true`. The response is `{ "results": [{ "leadId", "ok", "summary", "reason" }], "generated", "total" }`, so a partial failure is visible rather than silent. It spends AI credits ([Usage & limits](https://warmerly.com/docs/usage)).

## More from Campaigns

- [Readiness check](https://warmerly.com/docs/campaigns/readiness-check): Everything that would stop this campaign sending, as a list of checks, the same set the dashboard shows…
- [Preview a rendered message](https://warmerly.com/docs/campaigns/preview-a-rendered-message): Renders one step exactly as it would send, merge fields resolved against a real lead, AI opener included,…
- [Leads across every campaign](https://warmerly.com/docs/campaigns/leads-across-every-campaign): One flat, paged view of every lead in the project's campaigns, rather than one campaign at a time.…
