Skip to main content
GET
/
api
/
enrichment
/
{id}
/
items
Get Enriched Leads
curl --request GET \
  --url https://app.puffle.ai/api/enrichment/{id}/items \
  --header 'Authorization: Bearer <token>'
{
  "items": [
    {
      "id": "<string>",
      "runId": "<string>",
      "leadId": "<string>",
      "listId": "<string>",
      "membershipId": "<string>",
      "status": "<string>",
      "result": "<unknown>",
      "skippedReason": "<string>",
      "error": {
        "message": "<string>",
        "details": "<unknown>"
      },
      "attempts": 0,
      "metadata": {
        "inputSnapshot": "<unknown>",
        "leadSnapshot": "<unknown>",
        "result": "<unknown>",
        "provider": "<unknown>",
        "providerSubmissionId": "<string>"
      },
      "timing": {
        "startedAt": "<string>",
        "completedAt": "<string>",
        "createdAt": "<string>",
        "updatedAt": "<string>"
      }
    }
  ],
  "page": {
    "limit": 0,
    "nextCursor": "<string>",
    "hasMore": true
  }
}
CLI:
puffle enrichment results --id <id>
puffle enrichment results --id <id> --status <status> --lead-id <lead-id> --cursor <cursor> --limit <limit>

Overview

Returns per-Lead results for one Enrichment. Each item maps one Lead in the original scope to one execution attempt — its status, the enriched values, any error reason, and timing. This is where you read the actual enriched data after the Enrichment completes. Cursor-paginated. Default limit is 50; max 100. Items are ordered by id ascending and the cursor is the last item’s id — pagination is stable within an Enrichment.

Filtering

  • status — narrow to pending, running, completed, skipped, or failed. Useful for triaging errors after a Run finishes (?status=failed).
  • leadId — fetch the item for one specific Lead.
  • cursor — opaque pagination cursor; use the page.nextCursor from the previous response.
See also: Enrich leads · Enrichment status · Cancel enrichment.

AI agent notes

The post-run journey:
  1. Wait for Enrichment status to report a terminal status (completed, failed, or cancelled).
  2. GET /api/enrichment/{id}/items — paginate through all items, or filter to read only what you need.
  3. For triage, prefer ?status=failed — tens of thousands of completed pages do not help an agent decide what to do next.
  4. For one specific Lead’s result, use ?leadId={id} instead of paging.
Response shape: { items: [...], page: { limit, nextCursor, hasMore } }. Each item includes the Lead id, run id, status, attempt counts, the enriched output payload, skippedReason for skipped items, and error.message for failed items. The output attribute key is available at run.output.attributeKey; fetch it from Enrichment status when needed.On 404: the parent Enrichment does not exist for the effective user. Items are never returned individually — always through this listing endpoint.For high-level status without per-Lead detail, use Enrichment status — it is cheaper and returns run.status, run.scope.resolvedCount, and run.timing.

Authorizations

Authorization
string
header
required

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

Path Parameters

id
string
required
Minimum string length: 1

Query Parameters

status
enum<string>
Available options:
pending,
running,
completed,
skipped,
failed
leadId
string
cursor
string
limit
string

Response

Enrichment results.

items
object[]
required
page
object
required