Skip to main content
GET
/
api
/
deep-research
/
people
/
{id}
/
report
Fetch the latest report for a deep research person
curl --request GET \
  --url https://app.puffle.ai/api/deep-research/people/{id}/report \
  --header 'Authorization: Bearer <token>'
{
  "report": {
    "id": "33333333-3333-3333-3333-333333333333",
    "person_id": "11111111-1111-1111-1111-111111111111",
    "version": 1,
    "content": {
      "summary": "Jane Smith is the VP of Engineering at Acme Corp...",
      "icp_score": 91,
      "outreach_angles": [
        "Recent 40 percent engineering headcount growth"
      ]
    },
    "change_summary": null,
    "generated_at": "2026-04-21T18:00:00Z"
  }
}

Overview

Returns the highest-version row from deep_research_reports for the given person, or { report: null } if no report has been generated yet. This is the canonical polling endpoint after createDeepResearchPerson or runDeepResearch. Reports carry:
  • content — a free-form JSON object (summary, ICP score, background, company intel, outreach angles, source citations). Shape evolves as the pipeline improves; parse defensively.
  • change_summary — human-readable diff vs the prior version. Null on first version.
  • version — monotonically increasing integer.
Safe to call repeatedly. No side effects, no credit cost. Internal UI endpoint. Partner-authenticated callers should use getResearchV1, which returns a richer envelope including the person row.

AI agent notes

Polling cadence: every 30 seconds after kicking off a run. Typical pipeline duration is 1 to 5 minutes.Terminal signals — stop polling when you see any of:
  • report is non-null (pipeline complete; version is the authoritative one to present)
  • The person’s status (via listDeepResearchPeople) is failed — retry via runDeepResearch or surface the failure to the human
  • More than 10 minutes have elapsed without a report — treat as stuck and retry via runDeepResearch
Report schema is not fixed. Treat content as an opaque JSON blob. Render known fields (summary, icp_score, outreach_angles) when present; degrade gracefully when absent.No side effects. Poll as often as needed, within the overall 100 req/min rate limit on the API.

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Path Parameters

id
string<uuid>
required

Deep research person UUID

Pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$

Response

Latest report (may be null while the pipeline is still running).

report
object
required

The latest report generated for a person. Versions are monotonically increasing; the polling endpoints always return the highest-version report.