> Reverse Contact API documentation. This is the Markdown copy of https://docs.reversecontact.com/sdk/javascript/enrich
> Every page is listed at https://docs.reversecontact.com/llms.txt, every endpoint with its credit cost and status at https://docs.reversecontact.com/catalog.json

# client.enrich

> Use client.enrich in the Reverse Contact TypeScript SDK to match people and companies, with method signatures, parameters, costs and error handling.

- Last verified: 2026-11-04

Look up people and companies from identifying details. You get a matched profile or `null`.

| Method | Endpoint | Cost |
| ------ | -------- | ---- |
| `client.enrich.person()` | [Enrich profile](https://docs.reversecontact.com/endpoints/enrich-person) | 2 credits when a person is found, full profile included. A 404 is free. |
| `client.enrich.company()` | [Enrich company](https://docs.reversecontact.com/endpoints/enrich-company) | 2 credits when a company is found, full profile included. A 404 is free. |

Create `client` by following [Install and configure](https://docs.reversecontact.com/sdk/javascript/install). The `@reverse-contact/sdk` package exports `Body`, `Data`, `Query` and the other types used in the signatures.

JSON responses contain `data` and optional `quotas` and `metadata`. They also include the original `response`, with its body already read. See [First call](https://docs.reversecontact.com/sdk/javascript/first-call) for response handling.

HTTP errors use the [APIError subclasses and retry rules](https://docs.reversecontact.com/sdk/javascript/errors-and-retries): `BadRequestError`, `AuthenticationError`, `InsufficientCreditsError`, `PermissionDeniedError`, `NotFoundError`, `ConflictError`, `GoneError`, `UnprocessableEntityError`, `RateLimitError`, `DailyLimitError`, `KeyCreditLimitError`, `UnavailableForLegalReasonsError` and `InternalServerError`, according to the API response. Other statuses use `APIError`.

## person()

Provide at least one identifying field: `email`, `firstName`, `lastName`, `companyDomain` or `companyName`. Add more details to help identify the right person.

**Signature**

```typescript [TypeScript SDK]
client.enrich.person(
  params: Body<"enrichPerson">,
  options?: RequestOptions
): Promise<Result<Data<"enrichPerson">> | null>
```

**Parameters**

| Name | Type | Description |
| ---- | ---- | ----------- |
| `params` **required** | `Body<"enrichPerson">` | Request body. See the fields and their requirements below. |
| `params.email` | `string` | Professional email address to look up (e.g. `jane.doe@acme.com`). |
| `params.firstName` | `string` | First name of the person to look up. |
| `params.lastName` | `string` | Last name of the person to look up. |
| `params.companyDomain` | `string` | Company domain to help disambiguate (e.g. `acme.com` or `https://acme.com`). |
| `params.companyName` | `string` | Company name to help disambiguate (e.g. `Acme Corp`). |
| `params.fullProfile` | `boolean` | Deprecated and ignored. Enrich always returns the full profile at the same cost. The API still accepts this field for compatibility, but you can remove it. |
| `options` | `RequestOptions` | Optional per-request `timeout`, `maxRetries`, `headers` and `signal`. See [Client options](https://docs.reversecontact.com/sdk/javascript/client-options). |

**Returns**

`Result<Data<"enrichPerson">>` with the profile in `data.person`, or `null` for a no-match lookup.

**Errors**

Calls can raise the HTTP `APIError` subclasses listed above. Network failures or cancellation raise `APIConnectionError`, and attempt timeouts raise `APITimeoutError`. `ReverseContactError` reports invalid SDK options or an invalid successful JSON response. A lookup with no match returns `null`. An unknown route still raises `NotFoundError`.

**Example**

**Example**

```typescript [TypeScript SDK]
const result = await client.enrich.person({ email: "jane.doe@acme.com" });
console.log(result?.data.person ?? "No confident match");
```

## company()

Provide a company domain. The full profile is included. `fullProfile` is deprecated and ignored, but existing requests can still use it.

**Signature**

```typescript [TypeScript SDK]
client.enrich.company(
  params: Body<"enrichCompany">,
  options?: RequestOptions
): Promise<Result<Data<"enrichCompany">> | null>
```

**Parameters**

| Name | Type | Description |
| ---- | ---- | ----------- |
| `params` **required** | `Body<"enrichCompany">` | Request body. See the fields and their requirements below. |
| `params.domain` **required** | `string` | Company domain to look up. A bare domain or a full URL works (e.g. `acme.com` or `https://acme.com`). |
| `params.fullProfile` | `boolean` | Deprecated and ignored. Enrich always returns the full profile at the same cost. The API still accepts this field for compatibility, but you can remove it. |
| `options` | `RequestOptions` | Optional per-request `timeout`, `maxRetries`, `headers` and `signal`. See [Client options](https://docs.reversecontact.com/sdk/javascript/client-options). |

**Returns**

`Result<Data<"enrichCompany">>` with the profile in `data.company`, or `null` for a no-match lookup.

**Errors**

Calls can raise the HTTP `APIError` subclasses listed above. Network failures or cancellation raise `APIConnectionError`, and attempt timeouts raise `APITimeoutError`. `ReverseContactError` reports invalid SDK options or an invalid successful JSON response. A lookup with no match returns `null`. An unknown route still raises `NotFoundError`.

**Example**

**Example**

```typescript [TypeScript SDK]
const result = await client.enrich.company({ domain: "acme.com" });
console.log(result?.data.company ?? "No confident match");
```

## Related guides

[First call](https://docs.reversecontact.com/sdk/javascript/first-call), [Errors and retries](https://docs.reversecontact.com/sdk/javascript/errors-and-retries). Return to the [TypeScript SDK overview](https://docs.reversecontact.com/sdk/javascript).

## FAQ

### How do I enrich a person from an email in TypeScript?

Call `client.enrich.person({ email })`. A match returns the profile in `result.data.person` and costs 2 credits.

### What does client.enrich return when no profile matches?

`client.enrich.person()` and `client.enrich.company()` return `null` for no-match lookups. Those lookups cost no credits.

### Does fullProfile change the enrichment cost?

`fullProfile` is deprecated and ignored. Enrichment includes the full profile for 2 credits per match.
