> ## Documentation Index
> Fetch the complete documentation index at: https://www.hirebase.org/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Reveal Contact

> Reveal a work email and/or direct phone number for one hiring contact by LinkedIn profile.

<Warning>
  **Enabled on request.** Gated on the same `hiring_manager_api` feature as the
  [Hiring Manager Contacts API](/docs/api-reference/jobs/contacts); keys without it
  receive `403` with `X-Billing-Code: feature_missing`.
</Warning>

<Info>
  **Billing.** Settled when the task finishes: `m_contact_email_reveals` once
  if an email was found, `m_contact_phone_reveals` once if a phone number was
  found. Nothing is charged when nothing is found.
</Info>

Turn a contact you already have (for example a row from a contacts result,
or someone you found yourself) into a way to reach them. Submit the LinkedIn
profile, then poll [Task Status](/docs/api-reference/tasks/get-task-status).

## Request Body

<ParamField body="linkedin_url" type="string" required>
  The contact's LinkedIn profile URL (`linkedin.com/in/...`), e.g. `profile_url`
  from a contacts result.
</ParamField>

<ParamField body="name" type="string">
  The contact's name. Improves matching.
</ParamField>

<ParamField body="reveal_email" type="boolean" default="true">
  Return the work email when one is found.
</ParamField>

<ParamField body="reveal_phone" type="boolean" default="false">
  Return a direct phone number (mobile preferred) when one is found. Typically
  adds one to three minutes. At least one of `reveal_email` / `reveal_phone`
  must be true.
</ParamField>

## Response

A task object (`type: "enrich_contact"`). When `state` is `"finished"`,
`result` holds:

<ResponseField name="name" type="string" />

<ResponseField name="role" type="string | null" />

<ResponseField name="profile_url" type="string" />

<ResponseField name="photo_url" type="string | null" />

<ResponseField name="email" type="string | null">
  Work email, when `reveal_email` was set and one was found.
</ResponseField>

<ResponseField name="email_status" type="string | null">
  e.g. `verified`, `likely`, `unavailable`.
</ResponseField>

<ResponseField name="phone_number" type="string | null">
  E.164, mobile preferred, when `reveal_phone` was set and one was found.
</ResponseField>

<ResponseField name="phone_numbers" type="object[] | null">
  Every number found: `sanitized_number`, `type`, `status`.
</ResponseField>

<ResponseField name="reveals" type="object">
  `{ "email": 0 | 1, "phone": 0 | 1 }` - what was found and billed.
</ResponseField>

## Example

```bash cURL theme={null}
curl -X POST "https://api.hirebase.org/v2/contacts/reveal" \
  -H "Content-Type: application/json" \
  -H "x-api-key: YOUR_API_KEY" \
  -d '{ "linkedin_url": "https://www.linkedin.com/in/drew-bratcher-b8a9283a", "name": "Drew Bratcher", "reveal_email": true, "reveal_phone": true }'
```

```json Result (task.result when finished) theme={null}
{
  "name": "Drew Bratcher",
  "role": "iOS Engineering Manager",
  "profile_url": "https://www.linkedin.com/in/drew-bratcher-b8a9283a",
  "photo_url": null,
  "email": "drew@example.com",
  "email_status": "verified",
  "phone_number": "+14155550158",
  "phone_numbers": [ { "sanitized_number": "+14155550158", "type": "mobile", "status": "valid_number" } ],
  "reveals": { "email": 1, "phone": 1 }
}
```

<Note>
  A task that ends `"failed"` with a **"not found"** error means no matching
  business profile exists for that LinkedIn URL; it is not charged. Personal
  emails and numbers are never returned.
</Note>
