---
title: "Get a contact"
method: GET
path: "/v1/sites/{site_id}/contacts/{contact_id}"
tags: ["Contacts"]
---

# Get a contact

`GET /v1/sites/{site_id}/contacts/{contact_id}`

## Request

- Base URL: `https://api.getsitecontrol.com`
- URL: `https://api.getsitecontrol.com/v1/sites/{site_id}/contacts/{contact_id}`
- Auth: HTTP bearer

One contact by id, with everything `list_contacts` gives for it. Call it to read a contact you know the id of; to find one by e-mail, use `list_contacts` with `email`.

## Path parameters

- `site_id` integer, required
- `contact_id` integer, required: Contact id from `list_contacts`

## Response `200`

Successful Response

- Contact
  - `id` integer, required
  - `email` string, required
  - `status` 'subscribed' | 'unsubscribed' | 'bounced', required: subscribed: subscribed to e-mails. unsubscribed: opted out, never subscribed, or has not confirmed the subscription yet. bounced: e-mails to the address bounced, or it was cleaned from the list.
  - `first_name` string, nullable
  - `last_name` string, nullable
  - `phone` string, nullable
  - `country` string, nullable: ISO 3166-1 alpha-2
  - `timezone` string, nullable: IANA time zone name
  - `language` string, nullable: ISO 639-1 code
  - `fields` object, required: Set values of custom fields by field id, typed by the field: a date as YYYY-MM-DD, a datetime in ISO 8601
  - `tags` ContactTag[], required
    - `id` integer, required
    - `name` string, required
  - `source` ContactSource, required
    - `type` 'widget' | 'automation' | 'manual' | 'import' | 'shopify' | 'mailchimp' | 'klaviyo' | 'api' | 'other', required: Where the contact came from; widget, automation, import, shopify, mailchimp, klaviyo name the source. api: added through the public API or an AI assistant (MCP). manual: added by hand in the admin. other: a source not listed here.
    - `id` integer, nullable: Depends on the type: the widget, the automation, the admin user, the import task, the Shopify customer, the Mailchimp id; for api the API key, or the user whose access added it when there is no key
  - `email_stats` ContactEmailStats, required: E-mails to the contact, the keys of `EmailMetrics`; `send` includes e-mails rejected on sending, also counted in `bounce`.
    - `send` integer, required
    - `deliver` integer, required
    - `bounce` integer, required
    - `open` integer, required
    - `click` integer, required
    - `unsubscribe` integer, required
    - `complaint` integer, required
  - `created_at` string, date-time, required: When the contact was added at its source; imports keep the original date
  - `updated_at` string, date-time, required: Last change; equals created_at when none was recorded
  - `warnings` string[], required: Empty unless the contact could not be read in full; wording is not stable, do not parse

## Other responses

- `400`: Unsupported GSC-Version
- `401`: Missing or invalid API key or access token
- `403`: Access denied
- `404`: `contact_not_found`: no contact with this id on the site, or it is deleted
- `422`: Validation failed
- `429`: Rate limited
- `503`: Temporarily unavailable; retry later

---

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