---
title: "Publicv1Leadrouter.Get Lead Details"
method: GET
path: "/v1/leads/{external_or_eve_lead_id}"
tags: ["v1"]
---

# Publicv1Leadrouter.Get Lead Details

`GET /v1/leads/{external_or_eve_lead_id}`

## Request

- Base URL: `https://app.eve.legal` (the document declares no server; this is the origin it was published from)
- URL: `https://app.eve.legal/v1/leads/{external_or_eve_lead_id}`
- Auth: OAuth 2
  - Password
  - Token URL: `token`

## Path parameters

- `external_or_eve_lead_id` string, required

## Response `200`

Successful Response

- LeadDetails
  - `id` string, uuid, required: ID of the lead
  - `externalId` string, nullable: External ID of the lead
  - `externalLeadUrl` string, nullable: External URL for the lead
  - `name` string, required: Name of the lead
  - `createdAt` string, required: Created at
  - `lastUpdatedAt` string, required: Last updated at
  - `status` 'OPEN' | 'SIGNED' | 'CLOSED' | 'NOT_CONTACTED' | 'NO_RESPONSE' | 'INVESTIGATION' | 'SUPERVISOR_REVIEW' | 'RETAINER_OUT' | 'SIGNED_NO_MATTER' | 'REFERRED_OUT', required: Public lead status: the legacy contract plus the lead workflow statuses. OPEN/SIGNED/CLOSED are the original values and stay valid for external consumers. The workflow values mirror the internal CPLeadWorkflowStatus: NOT_CONTACTED, NO_RESPONSE, INVESTIGATION, SUPERVISOR_REVIEW, RETAINER_OUT and REFERRED_OUT map 1:1, internal workflow SIGNED surfaces as SIGNED_NO_MATTER (retainer signed, lead not yet converted to a matter — distinct from legacy SIGNED), and workflow CLOSED reuses CLOSED. A lead WITH a workflow status returns the workflow-derived value; a lead without one returns the legacy 3-value mapping. On writes, the three legacy values keep their original semantics (legacy write path, so CLOSED needs no close reason); workflow values write the corresponding internal workflow status.
  - `sourceType` 'EVE_LEAD_INGESTION_API' | 'EVE_MANUAL' | 'EVE_SCRIBE' | 'EVE_VOICE_AI', required
  - `visibility` 'ORG' | 'USER', required
  - `voiceAgentMetadata` object, nullable, required: Voice agent metadata of the lead
  - `associatedUsers` User[]: Users associated with the lead
    - `email` string, required: Email of the user
    - `id` string, required: Eve ID of the user
  - `overview` LeadOverview, required
    - `caseType` string, nullable, required: Case type of the lead
    - `summary` string, required: Summary of the lead
    - `fields` LeadOverviewField[], required: Fields of the lead
      - `id` string, required: Id of the field
      - `key` string, required: Key of the field
      - `name` string, required: Name of the field
      - `value` string, nullable, required: Value of the field, if available
    - `leadScoreResult` LeadScoreResult, required
      - `score` integer, required: Score of the lead
      - `scoreReasoning` string, required: Reasoning of the lead score
  - `calls` CallData[], required: Call data of the lead
    - `id` string, uuid, required: ID of the call
    - `callSource` 'CALL_HARBOR' | 'CALL_RAIL' | 'DIALPAD' | 'EIGHTXEIGHT_WORK' | 'EVE_API' | 'FIVE9' | 'OTHER' | 'RING_CENTRAL_CX' | 'RING_CENTRAL_EX' | 'SCRIBE_CALL' | 'SPECTRUM_VOIP' | 'THREECX' | 'VOICE_AI_API' | 'ZOOM_CONTACT_CENTER' | 'ZOOM_PHONE', required
    - `fromNumber` string, nullable, required: Phone number of the caller
    - `transcript` string, required: Transcript of the lead
    - `documentStatus` 'UPLOADING' | 'INDEXING' | 'FAILED_UPLOADING' | 'FAILED_INDEXING' | 'PREPROCESSED' | 'FAILED_PREPROCESSING' | 'FAILED_UPSERT_INDEXING' | 'INVALID' | 'READY', required: Tracks the status of a copilot document
  - `chase` ChaseDetails
    - `chaseId` string, uuid, required: ID of the chase
    - `leadId` string, uuid, nullable: Eve lead id this chase belongs to — usable on GET /leads/{id} and /chase/stop
    - `status` 'ACTIVE' | 'ENDED', required
    - `endReason` 'COMPLETED' | 'OPTED_OUT' | 'STOPPED' | 'EXHAUSTED' | 'WRONG_NUMBER' | 'INVALID_NUMBER' | 'CALLBACK_REQUESTED' | 'DECLINED_AI'
    - `attemptsMade` integer, required: Dials placed so far
    - `nextAttemptAt` string, nullable: When the next dial is scheduled (ISO 8601); null when none is queued
    - `startedAt` string, required: When the chase started (ISO 8601)
    - `endedAt` string, nullable: When the chase ended (ISO 8601); null while active
    - `attempts` ChaseAttemptData[]: Per-dial history, oldest first
      - `attemptNumber` integer, required: 1-based position of this call attempt within the chase
      - `calledAt` string, nullable: When the dial was placed (ISO 8601); null if never dialed
      - `outcome` 'CONNECTED' | 'NOT_CONNECTED' | 'VOICEMAIL' | 'BUSY'
      - `voicemailLeft` boolean: Whether the scripted voicemail was left on this dial
      - `callId` string, uuid, nullable: Eve call id carrying the recording/transcript
    - `phone` string, nullable: The E.164 number this chase dials

## Other responses

- `401`: Unauthorized
- `422`: Validation Error

---

[API](https://skmtc.dev/eve/apis/eve-public-api.md) - [All operations](https://skmtc.dev/eve/apis/eve-public-api/llms.txt) - [OpenAPI document](https://skmtc.dev/eve/apis/eve-public-api/revisions/1a108b551ef3?raw)
