# Get contact by ID

Retrieve a single contact by UUID with full aggregation data including
markers, active flows, and custom field values.

Endpoint: GET /leads/api/leads/{uuid}
Version: 1.0.0
Security: bearerAuth

## Path parameters:

  - `uuid` (string, required)
    Contact UUID

## Query parameters:

  - `disable_aggregation` (boolean)
    If true, returns only the raw contact without markers, flows, and custom fields. Faster for simple lookups.

## Response 200 fields (application/json):

  - `lead` (any)
    Contact object or null if not found

  - `markers` (array)

  - `flows` (array)
    Flows this contact is enrolled in

  - `flows.uuid` (string)

  - `flows.lead_uuid` (string)

  - `flows.flow_uuid` (string)

  - `flows.status` (string)

  - `custom_fields` (array)

  - `custom_fields.uuid` (string)

  - `custom_fields.custom_field_uuid` (string)

  - `custom_fields.object_type` (string)
    Enum: "lead", "company"

  - `custom_fields.object_uuid` (string)

  - `custom_fields.value` (string,null)

## Response 401 fields (application/json):

  - `error` (object)

  - `error.reason` (string)
    Error category
    Example: "validation_error"

  - `error.message` (string)
    Detailed error message
    Example: "The name field is required."

  - `error.data` (object)
    Additional context (field-level errors for validation)

  - `message` (string)
    Example: "Validation failed"

  - `code` (integer)
    Example: 422


