Kick off an async deep research report on a person identified by LinkedIn URL. Public partner endpoint.
first_name, last_name, and linkedin_url, and returns a partner-scoped envelope containing the person row, current status, and (when ready) the report content inline.
The LinkedIn URL is normalized server-side to https://www.linkedin.com/in/<slug> and used as the dedup key per partner. Resubmitting the same URL does NOT create a duplicate — instead, the server branches on the existing row’s current status:
| Existing status | Behavior | Response code |
|---|---|---|
complete | Return the cached report synchronously. No pipeline re-run. | 200 |
running / idle | Return current status with report: null. No duplicate pipeline launch. | 200 |
failed | Atomically flip to running, re-trigger the pipeline. | 202 |
| no existing row | Insert new row, trigger the pipeline. | 202 |
partner-deep-research-enrich) and typically completes in 1 to 5 minutes.
status: "complete" means the report is already cached and returned inline.Polling sequence:createResearchV1 with the target person.status: "complete", you have the report — done.status: "running", poll getResearchV1 with the returned person.id every 30 seconds.status is complete (report inline) or failed (retry by re-submitting the same payload to createResearchV1).linkedin_url repeatedly — duplicate submissions return the cached row rather than queueing new work. Use this as the canonical retry primitive.Input constraints:first_name and last_name are capped at 100 characters each.linkedin_url must contain linkedin.com/in/ somewhere in the string.Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
All three fields are required. The server uses the normalized LinkedIn URL as the dedup key per partner — re-submitting the same URL returns the existing row rather than creating a duplicate.
Person's first name. Required. Max 100 characters.
100Person's last name. Required. Max 100 characters.
100LinkedIn profile URL. Required. Must contain linkedin.com/in/. Normalized server-side to https://www.linkedin.com/in/<slug>.
Returned when the person already exists for this partner — either complete (report inline) or running/idle (report null). Idempotent; no pipeline side effect.
The canonical partner-API envelope for a single research person. Same shape is returned by createResearchV1, getResearchV1, and the duplicate-return path of createResearchV1.
A person tracked for deep research. The row is created first; enrichment + report generation happen asynchronously in a Trigger.dev pipeline.
Lifecycle of a deep research person. idle is a fresh row with no run in flight; running means a Trigger.dev pipeline is active; complete means the latest report is ready; failed means the pipeline errored and the row is retry-eligible.
idle, running, complete, failed Report body — a JSON object with summary, background, company intel, outreach angles, and source citations. Shape evolves; treat fields defensively.
Human-readable diff vs the prior version. Null on first version or when no report exists.