> 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/agents/

# The contact data API for AI agents and AI SDR builders

Your agent adds one MCP server or reads one page, then finds people, work emails, mobiles and company profiles. No key and no signup to try it.

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

**Short answer:** Your AI agent should get contact data from a tool call, not from memory, because language models [guess when they lack a fact](https://arxiv.org/abs/2509.04664). Enrich.chat is a contact data API built for agents: add the MCP server at enrich.chat/mcp or paste one prompt, and it returns work emails with a status, mobiles and company profiles. You get 10 free lookups a day, then monthly credit plans from $29, and credits are spent only on matches.

## Key takeaways

- Language models guess when they lack a fact, so contact data should come from a tool call, not from memory.
- One prompt onboards any agent: it adds the MCP server at enrich.chat/mcp or reads enrich.chat/agents.md. The free tier needs no key, and SDKs are planned.
- Every work email comes back verified, catch_all or unknown, and every mobile with a line of mobile or unknown.
- 10 free lookups a day per IP, then monthly credit plans with an API key. A 402 tells the agent to pause, share the upgrade link and resume.

## What your agent gets from one prompt

- **One prompt to onboard.** Your agent adds enrich.chat/mcp, or reads enrich.chat/agents.md once, and learns every endpoint, rule and error.
- **A status on every field.** 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 of mobile or unknown, and you see the result.
- **Credits only on matches.** 10 credits per work email, 250 per mobile. 0 credits when nothing is found.
- **MCP server or plain GET.** Add enrich.chat/mcp with no key, or call plain GET endpoints. JSON out. SDKs are planned.
- **Pause and resume.** A 402 carries an upgrade link, so your agent can stop, share it and pick up where it left off once you have a key.

## From one prompt to a verified answer

1. **Paste one prompt.** Tell your agent to read enrich.chat/agents.md. It learns the API in a single fetch.
2. **The agent calls the API.** It sends GET requests to /v1/search, /v1/person or /v1/company, at most 5 a second.
3. **You get checked answers.** Every email and mobile comes back with its status. Misses are marked not found and use 0 credits.

## Why can't an AI agent just know someone's email address?

An AI agent can't know a work email from memory. A language model is not a live directory, and when it lacks a fact it tends to guess. A [2025 paper by researchers at OpenAI and Georgia Tech](https://arxiv.org/abs/2509.04664) argues that training and tests reward guessing over saying "I don't know." The paper uses birthdays as its example: a fact seen once or never in training is one the model will often get wrong. A work email or a mobile number is that kind of fact, and it changes when people change jobs.

So the answer looks right and may still be wrong. A guess like `j.doe@acmelogistics.com` follows a real pattern, but nothing checked the mailbox. [Anthropic's guide to reducing hallucinations](https://platform.claude.com/docs/en/test-and-evaluate/strengthen-guardrails/reduce-hallucinations) gives the fix: let the model admit it does not know, and back every claim with a source. For contact data, that source is a tool call that returns the address with a status.

**Figure 1: Ungrounded and grounded answers to the same contact question.** The same request, find the work email for Jane Doe at Acme Logistics, answered two ways. A model on its own predicts a likely pattern and returns an unchecked guess with no status. A model with a tool call sends GET /v1/person, the answer comes back with a status such as verified, or as not found at 0 credits.

*Illustrative example. A model on its own fills a missing fact with a plausible pattern. A tool call returns a checked value or an honest miss. Background: [Kalai et al., 2025](https://arxiv.org/abs/2509.04664).*

## How does an AI agent call a contact data API?

An agent calls an API through tool use, also called function calling. You describe each tool with a name, a short description and a JSON Schema for its inputs. The model decides when to call it, your app runs the request, and the result goes back to the model as data. [OpenAI's function calling guide](https://developers.openai.com/api/docs/guides/function-calling) and [Anthropic's tool use docs](https://platform.claude.com/docs/en/agents-and-tools/tool-use/overview) describe the same loop: request, tool call, tool result, final answer.

Enrich.chat fits that loop because every endpoint is a plain HTTPS GET, listed in [agents.md](https://enrich.chat/agents.md). The **Schema** tab at the top of this page is a ready tool definition for `/v1/person` in Anthropic's format. OpenAI takes the same JSON Schema under `parameters`.

| Endpoint | What the agent sends | What comes back |
| --- | --- | --- |
| `/v1/search` | `q` in plain English, plus filters like title or country | Name, title, company, LinkedIn URL |
| `/v1/person` | A LinkedIn URL, an email, or name plus company | Profile, work email and mobile, each with a status |
| `/v1/email` | Name plus domain, or a LinkedIn URL | Work email with its status |
| `/v1/mobile` | A LinkedIn URL | Mobile with its line type |
| `/v1/company` | A domain | Name, domain, industry, headcount, state, country |
| `/v1/company/tech` | A domain | The technologies the company runs on |
| `/v1/company/people` | A domain plus a title | People at that company |

For every field, see the [people enrichment API](https://enrich.chat/api/person-enrichment/) and the [LinkedIn URL to email and mobile API](https://enrich.chat/api/linkedin-to-contact/). [Anthropic's advice on writing tools for agents](https://www.anthropic.com/engineering/writing-tools-for-agents) says a tool should return high-signal context and errors that explain how to fix the call. Enrich.chat does both. Each field carries a status, and the 402 and 429 responses tell the agent what to do next.

**Figure 2: The agent loop, from one prompt to a verified answer.** A sequence diagram with four parts: you, your agent, the agents.md instructions and the Enrich.chat API. You paste one prompt. The agent reads agents.md once and learns the endpoints and rules. It then sends GET /v1/person, gets back JSON with a status on every field, and gives you a verified answer or says the person was not found.

*The agent reads the instructions once, then calls the API as a tool and reports the result. This is the tool calling loop described in [OpenAI's](https://developers.openai.com/api/docs/guides/function-calling) and [Anthropic's](https://platform.claude.com/docs/en/agents-and-tools/tool-use/overview) docs.*

## How do you connect Enrich.chat to ChatGPT, Claude, Cursor, Codex or n8n?

You connect any of them with one prompt: *Use www.enrich.chat to find the work email and mobile for Jane Doe at acme.com.* The agent reads [enrich.chat/agents.md](https://enrich.chat/agents.md), learns the endpoints and rules, and starts calling. If your client supports MCP, you can add the remote server at `enrich.chat/mcp` instead. It needs no sign-in and no key, and the [install page](https://enrich.chat/install/) has one-click Cursor and VS Code links plus steps for Claude, Claude Code, ChatGPT and Codex. There is no SDK to install, and SDKs are planned. The prompt approach follows the [llms.txt proposal](https://llmstxt.org/), which suggests one Markdown file that tells agents how to use a site.

```text
Use www.enrich.chat to find 10 heads of sales at US SaaS companies with 50 to 200 employees, with verified work emails. Flag catch-all emails and only report what the API returns.
```

| Agent | How to set it up | Watch for |
| --- | --- | --- |
| ChatGPT and Codex | In ChatGPT, add the MCP server as a developer-mode connector (steps on the [install page](https://enrich.chat/install/)). Or paste the prompt into [Codex](https://help.openai.com/en/articles/20001275-chatgpt-work-and-codex), which can run web requests, or add the server there with `codex mcp add enrich --url enrich.chat/mcp`. OpenAI is [retiring custom GPTs](https://help.openai.com/en/articles/8554397-creating-and-editing-gpts), so GPT Actions are no longer the route. | Codex asks before it uses the network. Approve the request. The free tier needs no key. |
| Claude | Add the MCP server as a custom connector, or run `claude mcp add --transport http enrich enrich.chat/mcp` in Claude Code. Or paste the prompt and Claude Code runs each call with curl. | Claude's [web fetch tool](https://platform.claude.com/docs/en/agents-and-tools/tool-use/web-fetch-tool) only opens URLs that appear in the conversation, so keep the link in your message. |
| Cursor | Use the one-click link on the [install page](https://enrich.chat/install/), or ask the agent in chat and it runs curl in your terminal. | Cursor's [sandbox can block network calls](https://cursor.com/docs/agent/tools/terminal). Approve the command or change the run mode. |
| Codex | Paste the prompt into a task. | In [Codex cloud, agent internet access is off by default](https://learn.chatgpt.com/docs/environments/cloud-environment). Turn on limited access for the environment. |
| n8n | Add an [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/), or attach it to an AI Agent node as a tool. | The free tier needs no key. With a paid plan, store your key as a header credential: `Authorization: Bearer pp_...` |
| Your own code | Define one tool per endpoint. Your handler sends the GET request. | Return the JSON to the model as the tool result, unchanged. |

Make and Zapier work the same way through their HTTP modules. To test search before you wire up an agent, try the free [AI lead list builder](https://enrich.chat/tools/lead-list-builder/).

## What should an agent do with each status and error?

An agent should report only what the API returned, exactly as returned, and say "not found" for anything missing. Those rules open [agents.md](https://enrich.chat/agents.md), so every agent reads them before its first call. The email status sits in `work_email.status` and the line type in `mobile.line`. This table maps each response to the right action.

| Response | What it means | What the agent does |
| --- | --- | --- |
| Email `verified` | Our records mark the mailbox as verified | Reports the email as returned |
| Email `catch_all` | The domain accepts any address, so the mailbox cannot be confirmed | Reports it and says it is risky. Test a domain with the [catch-all checker](https://enrich.chat/tools/catch-all-checker/) |
| Email `unknown` | We could not confirm the mailbox | Says it is unconfirmed, never verified |
| Mobile `mobile` | The number is a mobile number | Reports it. The line type is not a live check and does not show who owns it |
| Mobile `unknown` | The number's type could not be told | Says the type is unknown |
| No match | `found` is false, and it uses 0 credits | Says "not found" and never guesses a value |
| HTTP 401 `invalid_api_key` | The key is wrong or was revoked | Stops and asks you to check the key on your [account page](https://enrich.chat/account/), or leaves it out and uses the free tier |
| HTTP 402 `free_limit_reached` | The free limit is used up | Stops, shares the `upgrade_url`, resumes after `resets_at` or once it has a key |
| HTTP 402 `credits_exhausted` | The key's credits for this month are used up | Stops and tells you to upgrade or wait for the monthly renewal |
| HTTP 402 `plan_inactive` | The plan behind the key is not active | Stops and tells you to check the plan on your [account page](https://enrich.chat/account/) |
| HTTP 429 | Too many requests | Waits `retry_after` seconds, then continues |
| HTTP 400 or 503 | A bad request, or temporarily unavailable | Fixes a 400 before retrying. Retries a 503 once after `retry_after` seconds |

Agents should send at most 5 requests per second. A [429 status](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/429) is the standard HTTP signal that a client sent too many requests in a given time. The `retry_after` value says how many seconds to wait.

### What happens at the free limit?

Every IP gets 10 free lookups a day, with no signup. After that, the API returns HTTP 402 `free_limit_reached` with an `upgrade_url` and a `resets_at` time. [MDN notes that HTTP 402](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/402) has no standard use convention, so the response body spells out the next step. The agent stops, sends you the link in one short message and keeps track of the rows it finished.

The link goes to [enrich.chat/account/](https://enrich.chat/account/). There you log in with your email and a one-time code, pick Growth, Scale or Pro, and pay through Dodo Payments checkout. Your API key appears on that page. Credits renew with each monthly payment, and unused credits do not roll over. The agent sends the key as `Authorization: Bearer pp_...` or as `?key=pp_...`.

**Figure 3: How an agent pauses at the free limit and resumes.** A list processed with one lookup per row. The first rows run on the free tier. At the row where the free limit is reached, the API returns HTTP 402. The agent stops, shares the upgrade link, you pick a plan on the account page and give it your API key, and it resumes at the first unfinished row.

*One row per lookup. The 402 response tells the agent to stop cleanly, so it can resume without skipping a row. Source: [agents.md](https://enrich.chat/agents.md).*

## Do you need an MCP server for B2B data in an AI agent?

No, but you can use one. An agent that can send an HTTPS request does not need MCP to get contact data. The [Model Context Protocol](https://modelcontextprotocol.io/docs/getting-started/intro) is an open standard for connecting AI apps to outside tools and data, and several data vendors now offer an MCP server. Most run on that vendor's account and bill from that vendor's credits. Enrich.chat offers an MCP server too, with no sign-in.

| Option | How the agent connects | What you need | How you pay |
| --- | --- | --- | --- |
| ZoomInfo MCP | Remote server with OAuth sign-in for each user ([docs](https://docs.gtm.ai/docs/connect-to-zoominfo-mcp)) | A ZoomInfo license, self-serve or Enterprise | No public prices: [quotes come from sales](https://www.zoominfo.com/pricing). MCP uses the [same credits](https://pipeline.zoominfo.com/operations/zoominfo-mcp-server) as the app and API |
| Apollo MCP | Remote server with OAuth or a master API key ([docs](https://docs.apollo.io/docs/apollo-mcp)) | An Apollo account. Free accounts on a personal email cannot search or enrich | Monthly or yearly plans. Enrichment uses plan credits. [API access is on Custom plans](https://www.apollo.io/pricing) |
| Lusha MCP | Remote server with OAuth or an API key ([docs](https://docs.lusha.com/user-guide/mcp/lusha-model-context-protocol-mcp-server)) | Any Lusha plan with API credits | Calls draw from your credit pool |
| HubSpot MCP | Remote server through a user-level app ([docs](https://developers.hubspot.com/mcp)) | A HubSpot account on the new Developer Platform | Works on the records already in your CRM |
| Enrich.chat | Remote server at `enrich.chat/mcp` with no sign-in ([install steps](https://enrich.chat/install/)), or one prompt: the agent reads [agents.md](https://enrich.chat/agents.md) and sends HTTPS GET requests | Nothing for 10 lookups a day, then a [paid plan](https://enrich.chat/account/) and a `pp_` key | Monthly credit plans from $29: 10 credits per email, 250 per mobile, 0 on a miss |

### When is a vendor MCP server the better choice?

A vendor MCP server is the better choice when your team already pays for that vendor and wants its data inside Claude or ChatGPT. [Apollo's MCP](https://docs.apollo.io/docs/apollo-mcp) also covers sequences and email, and HubSpot's works on the records you already keep. Enrich.chat has no built-in sequencing or dialer and no visual table builder, and its MCP tools are read-only lookups. If you want a plain data layer that any agent or script can call, priced in credits with unlimited seats, Enrich.chat is the simpler fit. We cover each option in [ZoomInfo MCP](https://enrich.chat/blog/zoominfo-mcp/), [HubSpot MCP](https://enrich.chat/blog/hubspot-mcp/), [LinkedIn MCP servers compared](https://enrich.chat/blog/linkedin-mcp/) and the [Apollo MCP alternative](https://enrich.chat/blog/apollo-mcp-alternative/) guide.

## What rules should an AI SDR follow with contact data?

An AI SDR must follow the same laws as a human rep, and the team that runs it is responsible. Check three rules before your agent sends anything.

- **Email in the US:** [CAN-SPAM](https://www.law.cornell.edu/uscode/text/15/7704) requires a working opt-out in every commercial email. It bars sending more than 10 business days after someone opts out.
- **Calls in the US:** [the TCPA](https://www.law.cornell.edu/uscode/text/47/227) bars autodialed or prerecorded calls to mobile numbers without the person's prior express consent.
- **UK contacts:** [the ICO says](https://ico.org.uk/for-organisations/direct-marketing-and-privacy-and-electronic-communications/business-to-business-marketing/) that a work email naming a person is personal data. That person can object to direct marketing at any time.

People can remove their data at [enrich.chat/opt-out/](https://enrich.chat/opt-out/), and requests are processed within 15 days. Enrich.chat never logs in to LinkedIn. A LinkedIn URL is only a lookup key. For outreach workflows built on these rules, see [Claude for sales](https://enrich.chat/blog/claude-for-sales/) and [50 lead generation prompts](https://enrich.chat/blog/chatgpt-lead-generation-prompts/). Check what each lookup costs on the [pricing page](https://enrich.chat/pricing/).

## Frequently asked questions

### What data API should my AI agent use to find contacts?

Use an API your agent can call directly, that returns a status for every field and uses no credits on misses. Enrich.chat was built for that. Paste one prompt, the agent adds the MCP server at enrich.chat/mcp or reads enrich.chat/agents.md, then looks up people, work emails, mobiles and company profiles. Each email comes back verified, catch_all or unknown, and catch-all domains are flagged. You get 10 free lookups a day, then [monthly credit plans](https://enrich.chat/pricing/) from $29.

### Why does ChatGPT make up email addresses?

ChatGPT and other language models predict likely text, and when a fact is missing they tend to guess. [Researchers at OpenAI and Georgia Tech](https://arxiv.org/abs/2509.04664) argue that training and tests reward guessing over admitting uncertainty. A pattern like first.last@company.com looks right, so the model fills it in without checking the mailbox. The fix is grounding: have the agent call a contact data API and report only what it returns, or say not found.

### Do I need an MCP server to give Claude or ChatGPT contact data?

No, but Enrich.chat has one. The [Model Context Protocol](https://modelcontextprotocol.io/docs/getting-started/intro) plugs tools into AI apps, and ZoomInfo, Apollo and Lusha run servers tied to their own accounts and credits. Ours is at enrich.chat/mcp (no sign-in, no key) with the same 10 free lookups a day, and the [install page](https://enrich.chat/install/) has one-click links and steps for Claude, ChatGPT, Cursor, VS Code and Codex. Without MCP, an agent can read agents.md and call the plain GET API. SDKs are planned.

### What happens when my agent runs out of free lookups?

The API returns HTTP 402 free_limit_reached with an upgrade_url that points to [enrich.chat/account/](https://enrich.chat/account/), plus a resets_at time. Your agent should stop calling, send you the link in one short message and keep track of the rows it finished. On that page you log in with your email and a one-time code, pick Growth, Scale or Pro, pay through Dodo Payments checkout, and your API key appears. Give it to the agent as Authorization: Bearer pp_... and it continues from the first unfinished row. You can also wait for the daily reset. Lookups that find no match use 0 credits and do not count against the free limit.

### How many requests per second can an AI agent send to Enrich.chat?

Agents should send at most 5 requests per second. If they go faster, the API returns HTTP 429 with a retry_after value in seconds, and the agent should wait that long before it continues. A 400 error means the request was malformed and should be fixed, not retried as is. A 503 error is temporary, so retry once after the retry_after seconds. These rules are in [enrich.chat/agents.md](https://enrich.chat/agents.md).

### Can an AI SDR use www.enrich.chat without per-seat fees or an annual contract?

Yes. Every plan has unlimited seats, bills monthly and can be cancelled anytime. The plans are Growth $29 for 100,000 credits, Scale $90 for 500,000 credits, Pro $299 for 2,500,000 credits. A work email found uses 10 credits, a mobile 250 and a person or company profile 5, with 0 credits when nothing is found. Higher plans cost less per credit and allow more requests. Platforms can ask about Enterprise at sales@enrich.chat, from $2,000 a month. See the [pricing page](https://enrich.chat/pricing/) for details.

## Sources

1. [Why Language Models Hallucinate](https://arxiv.org/abs/2509.04664)
2. [Reduce hallucinations](https://platform.claude.com/docs/en/test-and-evaluate/strengthen-guardrails/reduce-hallucinations)
3. [Function calling](https://developers.openai.com/api/docs/guides/function-calling)
4. [Tool use with Claude](https://platform.claude.com/docs/en/agents-and-tools/tool-use/overview)
5. [Writing effective tools for agents, with agents](https://www.anthropic.com/engineering/writing-tools-for-agents)
6. [Web fetch tool](https://platform.claude.com/docs/en/agents-and-tools/tool-use/web-fetch-tool)
7. [Terminal (agent tools)](https://cursor.com/docs/agent/tools/terminal)
8. [Cloud environments](https://learn.chatgpt.com/docs/environments/cloud-environment)
9. [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/)
10. [The /llms.txt file](https://llmstxt.org/)
11. [429 Too Many Requests](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/429)
12. [402 Payment Required](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/402)
13. [What is the Model Context Protocol (MCP)?](https://modelcontextprotocol.io/docs/getting-started/intro)
14. [Connect to ZoomInfo MCP](https://docs.gtm.ai/docs/connect-to-zoominfo-mcp)
15. [ZoomInfo MCP Server: Bring Verified B2B Data Into Your GTM Workflows](https://pipeline.zoominfo.com/operations/zoominfo-mcp-server)
16. [ZoomInfo pricing](https://www.zoominfo.com/pricing)
17. [Apollo MCP](https://docs.apollo.io/docs/apollo-mcp)
18. [Apollo pricing](https://www.apollo.io/pricing)
19. [Lusha Model Context Protocol (MCP) Server](https://docs.lusha.com/user-guide/mcp/lusha-model-context-protocol-mcp-server)
20. [HubSpot MCP](https://developers.hubspot.com/mcp)
21. [15 U.S. Code 7704 (CAN-SPAM requirements)](https://www.law.cornell.edu/uscode/text/15/7704)
22. [47 U.S. Code 227 (TCPA)](https://www.law.cornell.edu/uscode/text/47/227)
23. [Business-to-business marketing](https://ico.org.uk/for-organisations/direct-marketing-and-privacy-and-electronic-communications/business-to-business-marketing/)
24. [ChatGPT Work and Codex](https://help.openai.com/en/articles/20001275-chatgpt-work-and-codex)
25. [Creating and editing GPTs](https://help.openai.com/en/articles/8554397-creating-and-editing-gpts)

## Examples

**Prompt**

```text
# Paste into ChatGPT, Claude, Cursor or Codex
Use www.enrich.chat to find the work email and mobile for Jane Doe at acme.com.

# Then ask for what you need
Find the head of sales at acmelogistics.com with a work email. Only report what the API returns, and flag catch-all emails.
```

**Schema**

```json
{
  "name": "enrich_person",
  "description": "Get a work email and mobile from Enrich.chat GET /v1/person. Report only returned fields and flag catch_all emails.",
  "input_schema": {
    "type": "object",
    "properties": {
      "linkedin_url": {"type": "string"},
      "email": {"type": "string"},
      "name": {"type": "string"},
      "company": {"type": "string", "description": "Company website, like acme.com"},
      "fields": {"type": "string", "default": "email,mobile,profile"}
    }
  }
}
```

**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
}
```

## 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

Give your agent contact data in one prompt

```text
Use www.enrich.chat to find 10 heads of sales at US SaaS companies with 50 to 200 employees, with verified work emails. Flag catch-all emails and only report what the API returns.
```

## Related

- [Apollo MCP: setup, costs and a no-sign-in alternative](https://enrich.chat/blog/apollo-mcp-alternative/)
- [ZoomInfo MCP: setup, limits and alternatives](https://enrich.chat/blog/zoominfo-mcp/)
- [Claude for sales: workflows and prompts](https://enrich.chat/blog/claude-for-sales/)
