Skip to content

Retrieve a contact

Fetch one contact by its id — or by its email address.

http
GET /v1/contacts/{id}

Requires a Full access API key.

Path parameters

ParameterTypeRequiredDescription
idstringYesThe contact id, or the contact's email address. Anything containing an @ is treated as an address.

Example

bash
# by id
curl "https://api.sendgrail.com/v1/contacts/$CONTACT_ID" \
  -H "Authorization: Bearer $SENDGRAIL_API_KEY"

# or by email address
curl "https://api.sendgrail.com/v1/contacts/ada@example.com" \
  -H "Authorization: Bearer $SENDGRAIL_API_KEY"
js
const res = await fetch(
  `https://api.sendgrail.com/v1/contacts/${encodeURIComponent('ada@example.com')}`,
  { headers: { Authorization: `Bearer ${process.env.SENDGRAIL_API_KEY}` } },
);

const contact = await res.json();

Response

The contact object:

json
{
  "object": "contact",
  "id": "3f1c9a0e-6c5e-4a2b-9f2d-2b1a7c8e4d31",
  "email": "ada@example.com",
  "first_name": "Ada",
  "last_name": "Lovelace",
  "unsubscribed": false,
  "unsubscribed_at": null,
  "bounced_at": null,
  "source": "api",
  "properties": {
    "company_name": "Analytical Engines Ltd",
    "seats": 12
  },
  "created_at": "2026-07-14T19:44:32+00:00"
}

Id or email address, everywhere

Every contact endpoint — retrieve, update, delete, segments, topics — accepts either form in the path. The address is the thing your own system already knows; requiring you to look the id up first would be a round trip for nothing.

Addresses are matched lower-cased, the same way they're stored, so /v1/contacts/Ada@Example.com finds the same record. URL-encode the address if your HTTP client doesn't do it for you.

Not yours means not found

A contact belonging to another team answers 404, not 403 — an id that isn't yours is an id that doesn't exist, as far as your key is concerned.

json
{
  "message": "Contact not found.",
  "code": "not_found",
  "request_id": "8f2c1e64-1b17-4f8c-9f0e-3b6c1e0f5c31"
}

A Sending-access key on this endpoint is a 403: it's a valid key, it simply isn't allowed here. See API keys and Errors.

Transactional email on your own domain.