> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cortado.pro/llms.txt
> Use this file to discover all available pages before exploring further.

# Get a Contact

> Retrieve a single contact, including custom fields

## Endpoint

```
GET https://api.cortado.pro/api/v1/ext/contacts/{id}
```

Returns one contact by its UUID.

## Request

```bash theme={null}
curl -H "Authorization: Bearer cort_your_key_here" \
  https://api.cortado.pro/api/v1/ext/contacts/c0ffee00-1111-2222-3333-444455556666
```

### Path Parameters

| Parameter | Type | Description                                                                                    |
| --------- | ---- | ---------------------------------------------------------------------------------------------- |
| `id`      | UUID | The contact's ID. Copy it from the contact's URL in Cortado, or read `contact_id` from a lead. |

## Response

```json theme={null}
{
  "id": "c0ffee00-1111-2222-3333-444455556666",
  "organization_id": "3b1c9a2e-77d4-4c0b-9f61-2a5e8d3f4c11",
  "first_name": "Ada",
  "last_name": "Lovelace",
  "email": "ada@example.com",
  "phone_number": "+15135550142",
  "custom_fields": {
    "dietary_notes": "Vegetarian"
  },
  "archived_at": null,
  "created_at": "2026-09-01T14:02:11Z",
  "updated_at": "2026-09-03T09:45:00Z"
}
```

### Fields

| Field             | Type           | Description                                                              |
| ----------------- | -------------- | ------------------------------------------------------------------------ |
| `id`              | string         | The contact's UUID                                                       |
| `organization_id` | string         | The organization the contact belongs to                                  |
| `first_name`      | string         | First name                                                               |
| `last_name`       | string         | Last name                                                                |
| `email`           | string \| null | Email address                                                            |
| `phone_number`    | string \| null | Phone number                                                             |
| `custom_fields`   | object         | Your organization's custom fields. **Omitted** when the contact has none |
| `archived_at`     | string \| null | When the contact was archived                                            |
| `created_at`      | string         | When the contact was created                                             |
| `updated_at`      | string         | When the contact was last changed                                        |

<Note>
  `custom_fields` keys come from the custom fields your organization has defined. Adding or renaming a custom field in Cortado changes what appears here, so have your integration read fields by name rather than by position.
</Note>

## Errors

| Status | `error`                               | Cause                                                  |
| ------ | ------------------------------------- | ------------------------------------------------------ |
| `400`  | `invalid_id`                          | `{id}` is not a valid UUID                             |
| `401`  | `missing_api_key` / `invalid_api_key` | Missing, malformed, or revoked key                     |
| `403`  | `api_access_disabled`                 | API access is off for the organization                 |
| `404`  | `not_found`                           | No such contact, or it belongs to another organization |
| `429`  | —                                     | Rate limit exceeded                                    |

See [Errors](/api/errors) for the full response format.
