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

# GET /v1/contacts/{id} — retrieve a contact record

> Fetch a single contact by its unique ID, returning all stored fields including emails, phones, addresses, and lifetime giving totals.

The Get Contact endpoint retrieves a single contact record by its unique identifier. The contact must belong to your merchant account — attempting to fetch a contact owned by another merchant returns `403 Forbidden`. Use [List Contacts](/docs/api/contacts/list) to discover contact IDs.

## Endpoint

```
GET https://0k90mc4jjj.execute-api.us-east-2.amazonaws.com/v1/contacts/{id}
```

## Authentication

<ParamField header="Authorization" type="string" required>
  Bearer token using your API key. Format: `Bearer cs_live_your_key`
</ParamField>

## Path parameters

<ParamField path="id" type="string" required>
  The unique identifier of the contact (UUID format).
</ParamField>

## Response

On success the endpoint returns a single Contact object directly (not wrapped in an array).

<ResponseField name="id" type="string">
  Unique identifier for the contact.
</ResponseField>

<ResponseField name="firstName" type="string">
  Contact's first name.
</ResponseField>

<ResponseField name="lastName" type="string">
  Contact's last name.
</ResponseField>

<ResponseField name="fullName" type="string">
  Full name derived from `firstName` and `lastName`.
</ResponseField>

<ResponseField name="organizationName" type="string">
  Organization or company name, if provided.
</ResponseField>

<ResponseField name="emails" type="object[]">
  List of email address objects.

  <Expandable title="email object">
    <ResponseField name="email" type="string">The email address.</ResponseField>
    <ResponseField name="is_primary" type="boolean">Whether this is the primary email.</ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="phones" type="object[]">
  List of phone number objects.

  <Expandable title="phone object">
    <ResponseField name="value" type="string">The phone number (E.164, e.g. `+34613628904`; legacy rows may carry older formats).</ResponseField>
    <ResponseField name="is_primary" type="boolean">Whether this is the primary phone.</ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="addresses" type="object[]">
  List of address objects.

  <Expandable title="address object">
    <ResponseField name="line1" type="string">Street address line 1.</ResponseField>
    <ResponseField name="line2" type="string">Street address line 2.</ResponseField>
    <ResponseField name="city" type="string">City.</ResponseField>
    <ResponseField name="region" type="string">State or region code (e.g., `MA`).</ResponseField>
    <ResponseField name="postal" type="string">Postal or ZIP code.</ResponseField>
    <ResponseField name="country" type="string">Country name.</ResponseField>
    <ResponseField name="is_primary" type="boolean">Whether this is the primary address.</ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="totalTransactionCount" type="number">
  Lifetime number of transactions associated with this contact.
</ResponseField>

<ResponseField name="totalTransactionValue" type="number">
  Lifetime total transaction value in dollars.
</ResponseField>

<ResponseField name="emailConsent" type="string">
  `SUBSCRIBED`, `UNSUBSCRIBED`, `NEVER_SUBSCRIBED` or `UNKNOWN`. Always
  present — derived server-side with suppression rules applied, so a contact
  the platform will not send to never reads as subscribed.
</ResponseField>

<ResponseField name="smsConsent" type="string">
  Same enum and derivation rules as `emailConsent`. SMS is an opt-in regime.
</ResponseField>

<ResponseField name="communicationConsent" type="boolean">
  Master consent flag, derived alongside the channel enums.
</ResponseField>

<ResponseField name="donor_status" type="string">
  Read-only. Computed giving status — e.g. `new_donor`, `repeat_donor`,
  `active_recurring`, `churned_recurring`.
</ResponseField>

<ResponseField name="has_active_subscription" type="boolean">
  Read-only. Whether the contact has an active recurring subscription.
</ResponseField>

<ResponseField name="is_lybunt" type="boolean">
  Read-only. Gave last year but not this year.
</ResponseField>

<ResponseField name="first_donation_at" type="string">
  Read-only. ISO timestamp of the first donation.
</ResponseField>

<ResponseField name="last_donation_at" type="string">
  Read-only. ISO timestamp of the most recent donation.
</ResponseField>

<ResponseField name="tags" type="string[]">
  Read-only via this API — tags are managed in the CharityStack dashboard.
</ResponseField>

<ResponseField name="anonymousDonation" type="boolean">
  Read-only. The contact chose to donate anonymously.
</ResponseField>

<Note>
  The analytics fields above (`donor_status`, `has_active_subscription`,
  `is_lybunt`, `first_donation_at`, `last_donation_at`, `tags`,
  `anonymousDonation`) are computed by CharityStack. Sending any of them to
  [Update Contact](/docs/api/contacts/update) or
  [Create Contact](/docs/api/contacts/create) returns `400 validation_failed` —
  they can never be edited through the public API.
</Note>

<ResponseField name="created_at" type="string">
  ISO 8601 timestamp of when the contact was created.
</ResponseField>

<ResponseField name="updated_at" type="string">
  ISO 8601 timestamp of the most recent update.
</ResponseField>

## Status codes

| Code  | Description                              |
| ----- | ---------------------------------------- |
| `200` | Contact returned successfully.           |
| `401` | Missing or invalid API key.              |
| `403` | Contact belongs to a different merchant. |
| `404` | No contact found with the given ID.      |

## Example

```bash cURL theme={null}
curl https://0k90mc4jjj.execute-api.us-east-2.amazonaws.com/v1/contacts/a1b2c3d4-e5f6-7890-abcd-ef1234567890 \
  -H "Authorization: Bearer cs_live_your_key"
```

**200 response**

```json theme={null}
{
  "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "firstName": "Jane",
  "lastName": "Smith",
  "fullName": "Jane Smith",
  "organizationName": "Smith Foundation",
  "emails": [
    { "value": "jane@smithfoundation.org", "is_primary": true }
  ],
  "phones": [
    { "value": "16175550101", "is_primary": true }
  ],
  "addresses": [
    {
      "line1": "456 Park Ave",
      "line2": "",
      "city": "Boston",
      "region": "MA",
      "postal": "02101",
      "country": "United States",
      "is_primary": true
    }
  ],
  "totalTransactionCount": 12,
  "totalTransactionValue": 3250.00,
  "created_at": "2024-03-15T10:22:00.000000",
  "updated_at": "2025-01-08T14:05:33.000000"
}
```
