---
title: "Get identities for a person"
method: GET
path: "/api/v1/people/{personId}/identities"
tags: ["People"]
---

# Get identities for a person

`GET /api/v1/people/{personId}/identities`

## Request

- Base URL: `https://api.recruitwithatlas.com`
- URL: `https://api.recruitwithatlas.com/api/v1/people/{personId}/identities`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/recruitwithatlas/apis/atlas-api/docs/api/v1/people/:personId/identities/get.ts> (a function with typed inputs; its response is checked against the schema)

Use this endpoint to retrieve all contact details (known as "identities") stored against a specific person in Atlas.

In Atlas, a person can have multiple ways of being contacted - for example, two email addresses, a mobile number, and a LinkedIn profile. Each of these is stored as a separate "identity". This endpoint returns all of them for a given person.

To use it, you need the person's Atlas ID (a unique identifier, returned by other endpoints like Search or Lookup). You can optionally filter the results to only return a specific type - for example, only phone numbers or only emails.

Each identity returned includes its `identityId`, its type (e.g. `email`, `phone`, `linkedin`), its value (e.g. `john@example.com`), whether it is currently active, and - when it is not - the `inactiveReason` (`unsubscribed`, `bounced`, `suppressed` or `other`). Inactive identities are included, unlike on `GET /api/v1/people/{id}`, which lists active identities only.

## Path parameters

- `personId` string, uuid, required: Person ID

## Query parameters

- `type` string: Comma-separated identity types to filter by

## Response `200`

Person identities

- object
  - `status` 'ok', required
  - `data` object[], required
    - `identityId` string, uuid, required: Identity ID - stable across reads, so use it as the key when syncing identities
    - `type` string, required
    - `value` string, required
    - `active` boolean, required: `false` when the identity is inactive; `inactiveReason` says why
    - `inactiveReason` 'bounced' | 'other' | 'unsubscribed' | 'suppressed' | 'null', nullable, required: Why the identity is inactive: `unsubscribed` - the person opted out of email; `bounced` - email to the address bounced; `suppressed` - the address is on the agency's suppression list; `other` - deactivated for another reason. `null` when the identity is active, or when it was deactivated without a recorded reason.

## Other responses

- `401`: Unauthorized - missing or invalid API key
- `404`: Resource not found
- `422`: Validation error - the request failed schema validation (`errors.fieldErrors`) or a business rule (`errors.formErrors`)
- `429`: Too many requests - the caller has exceeded the per-agency rate limit for the tier this endpoint counts against (default per minute: 1200 read / 400 write / 60 upload). Inspect the `RateLimit-*` headers — returned on every response, not only on 429s — and back off until the window resets. See the "Rate limits" section of the introduction for details.
- `500`: Internal server error

## Changes

- **2026-11-03** `158ee454751c`: 1 warning
  - added the new `undefined` enum value to the `data/items/inactiveReason` response property for the response status `200`
- **2026-10-20** `b7e1215476a1`: 2 info
  - added the required property `data/items/identityId` to the response with the `200` status
  - added the required property `data/items/inactiveReason` to the response with the `200` status
- **2026-10-03** `cd4bc8bbd95e`: 1 info
  - added the optional property `error` to the response with the `422` status

[Operation history](https://skmtc.dev/recruitwithatlas/apis/atlas-api/changes/api/v1/people/:personId/identities/get.md)

---

[API](https://skmtc.dev/recruitwithatlas/apis/atlas-api.md) - [All operations](https://skmtc.dev/recruitwithatlas/apis/atlas-api/llms.txt) - [OpenAPI document](https://skmtc.dev/recruitwithatlas/apis/atlas-api/revisions/65a1374ebd70?raw)
