---
title: "Get a lead's full timeline and notes"
method: GET
path: "/api/leads/{id}"
tags: ["Leads"]
---

# Get a lead's full timeline and notes

`GET /api/leads/{id}`

## Request

- Base URL: `https://api.setluca.com`
- URL: `https://api.setluca.com/api/leads/{id}`
- Auth: one of:
  - API key in cookie `luca.session_token`
  - API key in header `x-api-key`
  - HTTP bearer

The whole lead: timeline, notes, consents, linked identities, and custom fields. A redacted-tier key gets the structured record with the verbatim identity content withheld.

**API key scopes:** `leads:read`.

## Path parameters

- `id` string, uuid, required

## Headers

- `Luca-API-Version` '1'

## Response `200`

ok

- LeadDetailResponse
  - `lead` object, required
    - `id` string, uuid, required
    - `displayName` string, nullable, required
    - `channel` 'telegram' | 'instagram' | 'messenger' | 'whatsapp', required
    - `stage` string, required
    - `tags` string[], required
    - `customFields` object, required: Opaque JSON object
  - `journey` object[], required
    - `id` string, uuid, required
    - `state` string, required
    - `transitionedAt` string, required
    - `metadata` unknown
  - `journeyTruncated` boolean
  - `messages` object[], required
    - `id` string, uuid, required
    - `direction` string, required
    - `body` string, nullable, required
    - `receivedAt` string, nullable, required
    - `sentAt` string, nullable, required
    - `media` object[]
      - `id` string, uuid, required
      - `mediaUrl` string, required
      - `mediaType` 'audio' | 'image' | 'file', required
      - `storageKey` string, required
      - `transcript` string, nullable, required
      - `summary` string, nullable, required
      - `classification` string, nullable, required
      - `analysisStatus` 'pending' | 'completed' | 'failed' | 'skipped' | 'blocked' | 'cancelled', required
      - `safetyStatus` 'safe' | 'needs_review' | 'blocked', required
  - `notes` object[], required
    - `id` string, uuid, required
    - `coachId` string, uuid, required
    - `leadId` string, uuid, required
    - `authorUserId` string, nullable, required
    - `body` string, required
    - `createdAt` string, required
  - `notesTruncated` boolean
  - `identities` object[], required
    - `id` string, uuid, required
    - `channel` 'telegram' | 'instagram' | 'messenger' | 'whatsapp', required
    - `externalUserId` string, required
    - `displayName` string, nullable, required
    - `verificationStatus` 'inferred' | 'claimed' | 'verified' | 'rejected', required
    - `source` string, required
    - `sourceRef` string, nullable, required
  - `consents` object[], required
    - `id` string, uuid, required
    - `channel` 'telegram' | 'instagram' | 'messenger' | 'whatsapp', required
    - `purpose` 'booking_reminders' | 'marketing' | 'sales_follow_up' | 'support', required
    - `source` string, required
    - `evidenceId` string, required
    - `grantedAt` string, required
    - `revokedAt` string, nullable, required

## Other responses

- `401`: unauthorized
- `404`: not found
- `429`: rate limited
- `500`: internal error
- `503`: service unavailable

---

[API](https://skmtc.dev/setluca/apis/luca-api.md) · [All operations](https://skmtc.dev/setluca/apis/luca-api/llms.txt) · [OpenAPI document](https://skmtc.dev/setluca/apis/luca-api/revisions/90a200e4100b?raw)
