> Enrich.chat gives AI agents verified work emails and mobiles. To use it from an agent, read https://enrich.chat/agents.md . This is the Markdown version of https://enrich.chat/api/person-enrichment/

# Person API for verified work emails, mobiles and profiles

Send a LinkedIn URL, an email, or a name and company to GET /v1/person. Get back a profile, a work email with its status and a mobile with its line type. Credits are spent only when something is found.

By Enrich.chat Editorial. Updated October 15, 2026.

**Short answer:** Enrich.chat's person API is one GET request: send a LinkedIn URL, an email, or a name and company to `/v1/person` and get back a profile, a work email marked verified, catch_all or unknown, and a mobile with a line type of mobile or unknown. A work email found uses 10 credits, a mobile 250 and a profile 5. A lookup that finds nothing uses 0, and 10 lookups a day are free without signup.

## Key takeaways

- `GET /v1/person` takes a LinkedIn URL, an email, or a name plus company. `fields=` picks email, mobile or profile.
- Every work email comes back marked verified, catch_all or unknown. Every mobile carries a line type, mobile or unknown, which is not a live-line check.
- Credits are spent per field found: 10 for a work email, 250 for a mobile, 5 for a profile. Misses use 0 credits, and each call returns `credits_used`.
- People Data Labs, Apollo and ZoomInfo also skip the charge on no match. They sell credit plans, seats or annual packages; Enrich.chat plans bill monthly and include unlimited seats.

## A person API built for agents and apps

- **Three ways to match.** Send a LinkedIn URL, an email, or a name and company. One identifier is enough.
- **A status on every email.** Each work email comes back verified, catch_all or unknown. Catch-all domains are flagged.
- **Mobiles with a line type.** Each mobile comes with a line type, mobile or unknown, in `mobile.line`.
- **Credits only on matches.** 10 credits per work email, 250 per mobile, 5 per profile. Nothing found, 0 credits.
- **One prompt to start.** Your agent reads enrich.chat/agents.md and starts calling, or adds the MCP server at enrich.chat/mcp. No SDK needed.
- **Plain GET, plain JSON.** Every endpoint is a GET request with query parameters. Unlimited seats on every plan.

## From one identifier to a checked contact

1. **Send one identifier.** Call `GET /v1/person` with a LinkedIn URL, an email, or a name and company. Add `fields=` to pick what you spend credits on.
2. **We match.** We find the person and return the work email with its status and the mobile with its line type.
3. **Read the status, then act.** Use verified emails, treat catch_all as risky, and see what every call used in `credits_used`.

## What is a person API?

A person API takes one identifier for a real person, such as a LinkedIn URL or a work email, and returns who they are and how to reach them. Enrich.chat's person API does this with one GET request to `/v1/person`. Each contact field comes back with a status or a type that says what we know about it.

The term is broad. The [Google People API](https://developers.google.com/people) reads and manages the signed-in user's own contacts. A person enrichment API, also called a people data API, contact enrichment API or lead enrichment API, looks up work data about people you have not met yet. Sales tools and AI agents use this kind to [enrich leads](https://enrich.chat/blog/what-is-data-enrichment/).

Enrich.chat has four people endpoints. Each one is a GET request on `https://enrich.chat/v1` with query parameters, and each returns JSON.

| Endpoint | You send | You get back |
| --- | --- | --- |
| `/v1/person` | `linkedin_url`, `email`, or `name` + `company` | Profile, work email and mobile, each with a status |
| `/v1/email` | `name` + `domain`, or `linkedin_url` | One work email with its status |
| `/v1/mobile` | `linkedin_url` | One mobile with its line type |
| `/v1/search` | `q` in plain English, plus filters | Name, title, company and LinkedIn URL per person |

Company data has its own endpoints, `/v1/company?domain=` and `/v1/company/people`. If your list starts with LinkedIn profiles, the [LinkedIn URL to email and mobile API](https://enrich.chat/api/linkedin-to-contact/) page walks through that flow.

## Which identifier should you send to GET /v1/person?

Send the strongest identifier you have: a LinkedIn URL first, then an email, then a name with a company. One identifier is enough for a match.

**Figure 1: Which identifier to send to the person API.** A decision flow. If you have a LinkedIn URL, send linkedin_url. If not, send an email. If not, send a name and company. If you have none of these, call GET /v1/search first and pass each result's LinkedIn URL to GET /v1/person, which returns the profile, work email and mobile and uses credits only on a match.

*Send the strongest identifier you have. With none, search first and pass each result's LinkedIn URL to `/v1/person`. Source: [Enrich.chat agent docs](https://enrich.chat/agents.md).*

- **`linkedin_url`**, for example `linkedin.com/in/jane-doe-ops`. Enrich.chat never logs in to LinkedIn or uses anyone's LinkedIn account. The URL is only a lookup key.
- **`email`**, work or personal. Use it to add a title, company and mobile to an address you have.
- **`name` plus `company`**. The company can be a name or a domain. A domain such as `acme.com` helps when two firms share a name.

Add `fields=email,mobile,profile` to choose what comes back. The default is all three. Mobiles cost the most, so ask for them only when you plan to call. The free tier needs no key. API keys are issued to paying subscribers: log in at [enrich.chat/account/](https://enrich.chat/account/) with your email, pick a plan, pay through checkout, and the key appears on that page. A key starts with `pp_`. Send it as `Authorization: Bearer pp_...` or as `&key=pp_...`.

### No identifier yet? Start with the people search API

If you only know who you want, call `/v1/search?q=` with a plain English description, such as "owners of dental clinics in Florida". You can narrow it with `title`, `seniority`, `industry`, `country`, `state`, `employees_min`, `employees_max` and `company_domain`. `limit` runs from 1 to 25 and defaults to 10. A search that is too broad returns `{"found": false, "hint": "..."}`.

Pass each result's LinkedIn URL to `/v1/person`, or add `with_email=true` to include the work email we hold, with status unknown. Each person a search returns uses 5 credits. The free [AI lead list builder](https://enrich.chat/tools/lead-list-builder/) runs the same kind of search in a browser.

## What does the person API return?

A match returns `"found": true` with a profile, a work email and a mobile. Each contact value sits next to its own status, so your code or agent can decide what to trust without guessing.

**Figure 2: Anatomy of a person API request and response.** The request is one GET to enrich.chat/v1/person with an identifier such as linkedin_url, an optional fields list and an optional API key header. The response returns a profile, a work email with status verified, catch_all or unknown, a mobile with line mobile or unknown, and credits_used, which is 0 when found is false.

*One GET request and the response it returns. Each contact value carries its own status. Example values from the [Enrich.chat agent docs](https://enrich.chat/agents.md).*

| Field | What it holds |
| --- | --- |
| `found` | true on a match. false means nothing matched and nothing was used. |
| `name`, `title` | Full name and current job title. |
| `linkedin_url` | The profile URL, which you can use as a lookup key later. |
| `company` | The employer, as an object with its `name`. |
| `work_email` | `value` plus `status`: verified, catch_all or unknown. |
| `mobile` | `value` plus `line`: mobile or unknown. |
| `credits_used` | The credits this call used, as an integer. 0 when nothing was found. |
| `free_lookups_remaining` | Free lookups left today. Present on the free tier. |

### What do verified, catch_all and unknown mean?

`work_email.status` and `mobile.line` say what we know about each value. Read them as instructions for what to do next.

| Status | What it means | What to do |
| --- | --- | --- |
| `verified` | Our records mark the mailbox as verified. | Use it. |
| `catch_all` | The email domain accepts every address, so the mailbox cannot be confirmed. | Treat it as risky and say so. |
| `unknown` email | We could not tell whether the mailbox exists. | Do not send in bulk without another check. |
| `mobile` | The number is a mobile number. That is its type, not a check that the line is live or that it belongs to the person. | Call or text within the rules that apply to you. |
| `unknown` mobile | The number's type could not be told. | Confirm the number before you rely on it. |

Show emails and numbers exactly as the API returns them, and never guess a missing one. The free [catch-all checker](https://enrich.chat/tools/catch-all-checker/) shows why some domains cannot be verified, and the [phone number validator](https://enrich.chat/tools/phone-number-validator/) checks a single number.

## How does the email finder API work?

The email finder API is `GET /v1/email`. Send a name and a company domain, or a LinkedIn URL, and get back one work email with its status. A work email found uses 10 credits, and no match uses 0.

```
GET https://enrich.chat/v1/email?name=Jane%20Doe&domain=acme.com
```

Use `/v1/email` when the email is all you need, such as to fill a sequence. An [email permutator](https://enrich.chat/tools/email-permutator/) lists addresses that might exist. The API returns one address with a status, and a catch-all domain is marked `catch_all`, never passed off as verified. To try it by hand, the free [email finder](https://enrich.chat/tools/email-finder/) takes a name and company.

```text
Use www.enrich.chat to find the work email for Jane Doe at acme.com, and tell me if it is verified or catch_all
```

### Need only the phone? Use GET /v1/mobile

The mobile endpoint, `/v1/mobile?linkedin_url=`, returns `{"found": true, "mobile": {...}}` or `{"found": false}`. Each mobile found uses 250 credits, and its line type is mobile or unknown. See also [how to get phone numbers from LinkedIn](https://enrich.chat/blog/find-phone-number-from-linkedin/).

## How do errors, rate limits and pricing work?

Errors are plain HTTP status codes with a JSON body, and credits are spent only on a match.

| Code | Meaning | What to do |
| --- | --- | --- |
| `400` | Bad or missing parameters. | Fix the request. Do not retry it unchanged. |
| `401` | `invalid_api_key`: the key is wrong or was revoked. | Check the key on your [account page](https://enrich.chat/account/), or leave it out to use the free tier. |
| `402` | `free_limit_reached`: today's free lookups are used. The body includes `upgrade_url` and `resets_at`. With a key, a 402 can also be `credits_exhausted` or `plan_inactive`. | Stop and tell the user. The `upgrade_url` points to [/account/](https://enrich.chat/account/). Free lookups resume after `resets_at`. Credits come back with the next monthly payment. |
| `429` | Too many requests. | Wait `retry_after` seconds, then continue. |
| `503` | `temporarily_unavailable`. Nothing was used. | Retry once after `retry_after` seconds. |

Keep to 5 requests per second. For a list, pick the best identifier per row, call once per row with only the fields you need, and mark misses as "not found". The [agent docs](https://enrich.chat/agents.md) also tell the agent to track finished rows, so it can pick up where it stopped after a 402.

```text
Use www.enrich.chat to enrich my list: for each row send the LinkedIn URL, else the email, else name and company. Add work email with status and mobile with line, mark misses as not found, and give me the total credits_used
```

### What does a person lookup cost?

Credits are spent per field found: 10 for a work email, 250 for a mobile and 5 for a person profile. Name, title and company come free with an email or mobile match. The `credits_used` field shows what each call used: a call that returns a work email and a mobile uses 260 credits. A response with `"found": false` uses 0.

Each IP gets 10 free lookups a day without signup, and nothing is charged on the free tier. For more, plans bill monthly and you can cancel anytime: Growth $29 for 100,000 credits, Scale $90 for 500,000 credits, Pro $299 for 2,500,000 credits. Every plan has unlimited seats and every product. Credits renew with each monthly payment, and unused credits do not roll over. The [pricing page](https://enrich.chat/pricing/) has a cost calculator, and plans are bought on your [account page](https://enrich.chat/account/).

### Privacy and opt-out

Anyone can remove their data at [enrich.chat/opt-out/](https://enrich.chat/opt-out/), and requests are processed within 15 days. You are responsible for the laws that apply to your outreach, such as TCPA rules for calls and texts, CAN-SPAM for email, and GDPR. B2B email is not exempt. The UK regulator's [guidance on business-to-business marketing](https://ico.org.uk/for-organisations/direct-marketing-and-privacy-and-electronic-communications/business-to-business-marketing/) says UK GDPR applies when a work address identifies a person, and that person can object to direct marketing.

## How does Enrich.chat compare with People Data Labs, Apollo and ZoomInfo?

All four person APIs skip the charge when nothing matches. [People Data Labs charges per match](https://docs.peopledatalabs.com/docs/reference-person-enrichment-api), [Apollo uses 0 credits](https://docs.apollo.io/reference/people-enrichment) when it finds nothing, and [ZoomInfo charges no credit](https://docs.gtm.ai/reference/enrichinterface_enrichcontact) for a "No match". They differ in how you buy, what you can send, and whether each contact field says how it was checked.

*Checked on each vendor's own pricing page and API docs on October 15, 2026.*

| API | How you pay | Free option | Commitment |
| --- | --- | --- | --- |
| Enrich.chat | Monthly credit plans from $29; 10 credits per email, 250 per mobile, 5 per profile | 10 lookups a day, no signup | Billed monthly, cancel anytime, unlimited seats |
| People Data Labs | [Credit plans; Pro from $98 a month for 350 credits](https://www.peopledatalabs.com/pricing/person) | [100 credits a month; emails and phones hidden](https://www.peopledatalabs.com/pricing/person) | [Pro monthly or annual; Enterprise on annual contracts](https://www.peopledatalabs.com/pricing/person) |
| Apollo API | [Per-seat plans with a shared credit pool](https://www.apollo.io/pricing); [1 credit per email, 8 more per mobile](https://docs.apollo.io/reference/people-enrichment) | [Free account registered with a work email](https://docs.apollo.io/reference/people-enrichment) | [Monthly or annual; advanced API on Custom plans](https://www.apollo.io/pricing) |
| ZoomInfo API | [Licenses plus credits, one per export; price on request](https://www.zoominfo.com/pricing) | [Free trial of the platform](https://www.zoominfo.com/pricing) | [Annual prepayment is standard, per Vendr](https://www.vendr.com/marketplace/zoominfo) |

*Checked on each vendor's own pricing page and API docs on October 15, 2026.*

| API | Inputs | Email check | Mobile |
| --- | --- | --- | --- |
| Enrich.chat | LinkedIn URL, email, or name + company | verified, catch_all or unknown | Same call, line type mobile or unknown |
| People Data Labs | [Profile URL, email, phone, or name + company, school or place](https://docs.peopledatalabs.com/docs/input-parameters-person-enrichment-api) | [No status field; first and last seen dates](https://docs.peopledatalabs.com/docs/fields) | [mobile_phone field](https://docs.peopledatalabs.com/docs/fields) |
| Apollo API | [Name, email, domain, LinkedIn URL or Apollo ID](https://docs.apollo.io/reference/people-enrichment) | [email_status field](https://docs.apollo.io/reference/people-enrichment) | [Sent later to a webhook](https://docs.apollo.io/reference/people-enrichment) |
| ZoomInfo API | [Person ID, email, phone, name + company, or social URL](https://docs.gtm.ai/reference/enrichinterface_enrichcontact) | [contactAccuracyScore per contact](https://docs.gtm.ai/reference/enrichinterface_enrichcontact) | [Mobile with a do-not-call flag](https://docs.gtm.ai/reference/enrichinterface_enrichcontact) |

Rate limits differ. [People Data Labs](https://docs.peopledatalabs.com/docs/reference-person-enrichment-api) defaults to 1,000 requests a minute for paying customers and 100 for free ones. [Apollo's rate limits page](https://docs.apollo.io/reference/rate-limits) ties limits to your plan, with paid plans allowed 1,000 enrichment calls a minute, and [ZoomInfo](https://docs.gtm.ai/reference/enrichinterface_enrichcontact) takes up to 25 contacts per request. Enrich.chat asks agents to stay under 5 requests a second.

### When is another person API the better choice?

- **People Data Labs** fits if you want bulk data you can store. Its Enterprise plan lists data license feeds on annual contracts, per [PDL's pricing page](https://www.peopledatalabs.com/pricing/person), and its [Person Search API](https://docs.peopledatalabs.com/docs/person-search-api) can query any field in the PDL schema. See our [People Data Labs pricing guide](https://enrich.chat/blog/people-data-labs-pricing/).
- **Apollo** fits if your reps also want a prospecting app with [email sequencing](https://www.apollo.io/pricing), and the API is a side door into the same account. See our [Apollo API guide](https://enrich.chat/blog/apollo-api/).
- **ZoomInfo** fits a company that already has a ZoomInfo contract and wants its accuracy score and do-not-call flags from one vendor. Vendr's buyer data puts the median contract at [$33,500 a year](https://www.vendr.com/marketplace/zoominfo). See [ZoomInfo API pricing](https://enrich.chat/blog/zoominfo-api-pricing/).
- **Clearbit, now part of HubSpot**, fits teams that work inside HubSpot. Since December 2023, new Clearbit sign-ups need a HubSpot account. When HubSpot shut the free Clearbit tools on April 30, 2025, it pointed users to Breeze Intelligence, per the [Clearbit changelog](https://clearbit.com/changelog). Our [Clearbit alternatives](https://enrich.chat/alternatives/clearbit/) page covers the options.

### What to watch out for with Enrich.chat

- There is no visual table builder or CSV upload screen. You work through an AI agent, the free tools or your own code.
- There is no built-in sequencing or dialer, and SDKs are planned. Plain HTTPS works today, and your agent can also use the remote [MCP server](https://enrich.chat/install/).

## Frequently asked questions

### Is there a free person enrichment API?

Yes. Enrich.chat gives every IP address 10 free lookups a day with no signup and no API key, so an agent can test `/v1/person` right away. After that, monthly credit plans start at $29 for 100,000 credits. A work email found uses 10 credits, a mobile 250 and a profile 5. By comparison, [People Data Labs' free plan](https://www.peopledatalabs.com/pricing/person) gives 100 credits a month but hides emails, phone numbers and addresses.

### What is the difference between a person API and the Google People API?

The [Google People API](https://developers.google.com/people) reads and manages the signed-in user's own Google contacts, so it only knows people that user already saved. A person enrichment API looks up work data about anyone from one identifier, such as a LinkedIn URL, an email, or a name and company. Use Google's API to sync an address book. Use a person API like Enrich.chat to find a work email or mobile you do not have yet.

### Do I need a LinkedIn account to look someone up by LinkedIn URL?

No. Enrich.chat never logs in to LinkedIn and never uses anyone's LinkedIn account. The LinkedIn URL is only a lookup key: you send `linkedin_url=linkedin.com/in/jane-doe-ops` to `/v1/person` and get back the profile, work email and mobile that match it. Your own LinkedIn account is never involved. The free [LinkedIn email finder](https://enrich.chat/tools/linkedin-email-finder/) runs the same kind of lookup in a browser.

### What happens if the person API finds no match?

You get `{"found": false}`, it uses 0 credits and it does not count against your free lookups. Your code or agent should mark that row as not found and move on, or try a different identifier, for example an email instead of a name and company. An agent should never guess an email or phone number to fill the gap. The same rule applies to `/v1/email` and `/v1/mobile`: an empty result costs nothing.

### How do I know if an email from the API is safe to send to?

Read `work_email.status`. A verified email is one our records mark as a verified mailbox. A catch_all email sits on a domain that accepts every address, so the mailbox cannot be confirmed and you should treat it as risky. An unknown status means we could not tell. The free [catch-all checker](https://enrich.chat/tools/catch-all-checker/) explains how catch-all domains behave.

### Can I use the person API from ChatGPT or Claude without writing code?

Yes. Paste a prompt that starts with "Use www.enrich.chat" and the agent reads the docs and calls the API itself. It works in ChatGPT, Claude, Cursor, Codex, n8n, Make and Zapier through HTTP, and in any code. No SDK is needed (SDKs are planned). You can also add the remote MCP server at enrich.chat/mcp with no key; the [install page](https://enrich.chat/install/) has one-click links and steps for Claude, ChatGPT, Cursor, VS Code and Codex. See the [data API for AI agents](https://enrich.chat/agents/) page for prompts and setup.

## Sources

1. [People Data Labs pricing: Person Data](https://www.peopledatalabs.com/pricing/person)
2. [Person Enrichment API: input parameters](https://docs.peopledatalabs.com/docs/input-parameters-person-enrichment-api)
3. [Person Enrichment API: reference](https://docs.peopledatalabs.com/docs/reference-person-enrichment-api)
4. [Person schema](https://docs.peopledatalabs.com/docs/fields)
5. [Person Search API](https://docs.peopledatalabs.com/docs/person-search-api)
6. [People Enrichment endpoint](https://docs.apollo.io/reference/people-enrichment)
7. [Apollo pricing](https://www.apollo.io/pricing)
8. [Enrich Contacts (ZoomInfo Enterprise API)](https://docs.gtm.ai/reference/enrichinterface_enrichcontact)
9. [ZoomInfo pricing](https://www.zoominfo.com/pricing)
10. [ZoomInfo software pricing](https://www.vendr.com/marketplace/zoominfo)
11. [Clearbit changelog](https://clearbit.com/changelog)
12. [Business-to-business marketing](https://ico.org.uk/for-organisations/direct-marketing-and-privacy-and-electronic-communications/business-to-business-marketing/)
13. [People API](https://developers.google.com/people)

## Examples

**cURL**

```bash
curl "https://enrich.chat/v1/person?linkedin_url=linkedin.com/in/jane-doe-ops&fields=email,mobile"

# The key is optional (free tier). With a paid key from
# enrich.chat/account/, add this line to the call:
#   -H "Authorization: Bearer $ENRICH_KEY"
```

**Response**

```json
{
  "found": true,
  "name": "Jane Doe",
  "title": "VP Operations",
  "company": {"name": "Acme Logistics"},
  "linkedin_url": "https://www.linkedin.com/in/jane-doe-ops",
  "work_email": {"value": "jane.doe@acmelogistics.com", "status": "verified"},
  "mobile": {"value": "+1 415 555 0142", "line": "mobile"},
  "credits_used": 260,
  "free_lookups_remaining": 9
}
```

**Python**

```python
import os
import requests

# Optional: a paid key from enrich.chat/account/ lifts the free limit
key = os.environ.get("ENRICH_KEY")
headers = {"Authorization": "Bearer " + key} if key else {}

r = requests.get(
    "https://enrich.chat/v1/person",
    params={
        "linkedin_url": "linkedin.com/in/jane-doe-ops",
        "fields": "email,mobile",
    },
    headers=headers,
    timeout=30,
)
person = r.json()

if r.status_code == 402:
    print("free limit reached, upgrade at", person["upgrade_url"])
elif not r.ok:
    print(person["error"], person["message"])
elif person["found"]:
    print(person["work_email"], person["mobile"], person["credits_used"])
else:
    print("not found, 0 credits")
```

**Node**

```javascript
const url = new URL("https://enrich.chat/v1/person");
url.searchParams.set("linkedin_url", "linkedin.com/in/jane-doe-ops");
url.searchParams.set("fields", "email,mobile");

// Optional: a paid key from enrich.chat/account/ lifts the free limit
const key = process.env.ENRICH_KEY;
const res = await fetch(url, key ? { headers: { Authorization: "Bearer " + key } } : {});
const person = await res.json();

if (res.status === 402) {
  console.log("free limit reached, upgrade at", person.upgrade_url);
} else if (!res.ok) {
  console.log(person.error, person.message);
} else if (person.found) {
  console.log(person.work_email, person.mobile, person.credits_used);
} else {
  console.log("not found, 0 credits");
}
```

## Prices

| What you get | Credits |
| --- | --- |
| Work email found | 10 |
| Mobile number found | 250 |
| Company tech stack or profile found | 5 |

10 free lookups a day for every IP address, no signup. Nothing is charged when nothing is found. Monthly plans start at $29 for 100,000 credits.

## Try this prompt

Enrich a person from your agent

```text
Use www.enrich.chat to find the work email and mobile for linkedin.com/in/jane-doe-ops, and tell me the status of each
```

## Related

- [LinkedIn URL to Email and Mobile API](https://enrich.chat/api/linkedin-to-contact/)
- [People Data Labs pricing](https://enrich.chat/blog/people-data-labs-pricing/)
- [Apollo API: endpoints, credit costs, rate limits and code](https://enrich.chat/blog/apollo-api/)
