# FullEnrich — Orthogonal API

> Pay-per-use API on Orthogonal. Each call is billed to your Orthogonal balance.
> Base API: `https://api.orthogonal.com/v1/run` · [llms.txt](https://orthogonal.com/llms.txt) · [browse all APIs](https://orthogonal.com/discover)

FullEnrich aggregates 20+ data providers for B2B contact enrichment, reverse email lookup, and people/company search. Find work emails, mobile phones, personal emails, and professional profiles.

**Verified:** yes

## Access

**Run API:** `POST https://api.orthogonal.com/v1/run`
**Auth:** `Authorization: Bearer $ORTHOGONAL_API_KEY`
Get an API key at https://orthogonal.com/dashboard/settings/api-keys

Every call goes through the unified Run API: send the API `slug`, the endpoint `path`, and the `query`/`body` parameters. The response is `{ "success": true, "price": "<usd>", "data": { ... } }`.

## Endpoints

### Get Reverse Email Result

Retrieve results of a reverse email lookup by enrichment_id. Returns person and company profiles for the submitted emails.

`GET /contact/reverse/email/bulk/{enrichment_id}`

**Estimated cost:** $0

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `enrichment_id` | string | Yes | Path parameter — substitute directly into the endpoint `path`. |
| `enrichment_id` | string | Yes | The enrichment ID returned from the POST reverse email call |

```bash
# Replace {enrichment_id} in "path" with real values before sending
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"fullenrich","path":"/contact/reverse/email/bulk/{enrichment_id}","method":"GET","query":{"enrichment_id":"<string>"}}'
```

### Get Enrichment Result

Retrieve results of a bulk enrichment by enrichment_id. Use this to poll for results if not using webhooks. Returns contact data with emails, phones, and professional details.

`GET /contact/enrich/bulk/{enrichment_id}`

**Estimated cost:** $0

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `enrichment_id` | string | Yes | Path parameter — substitute directly into the endpoint `path`. |
| `enrichment_id` | string | Yes | The enrichment ID returned from the POST /contact/enrich/bulk call |

```bash
# Replace {enrichment_id} in "path" with real values before sending
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"fullenrich","path":"/contact/enrich/bulk/{enrichment_id}","method":"GET","query":{"enrichment_id":"<string>"}}'
```

### Start Bulk Enrichment

Start enrichment for up to 100 B2B contacts. Provide first_name + last_name + company or linkedin_url. Returns enrichment_id to poll for results. Async: results delivered via webhook or GET endpoint.

`POST /contact/enrich/bulk`

**Estimated cost:** Dynamic — use `"dryRun": true` in the Run API request to check the exact cost before calling.

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `name` | string | Yes | Name for this enrichment batch (visible in dashboard) |
| `webhook_url` | string | No | URL to receive results when enrichment completes |
| `webhook_events` | object | No | Per-event webhook URLs, e.g. {contact_finished: url} |
| `data` | array | Yes | Array of contacts to enrich (max 100). Each needs first_name+last_name+domain/company_name or linkedin_url. Optional: enrich_fields array (contact.work_emails, contact.personal_emails, contact.phones), custom object. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"fullenrich","path":"/contact/enrich/bulk","body":{"name":"<string>","webhook_url":"<string>","webhook_events":"<object>","data":"<array>"}}'
```

### Search People

Search for people based on various filters including job title, company, location, industry, and more. Multiple filters within the same field use AND logic. Returns professional details and company lite info. Costs 0.25 credits per result.

`POST /people/search`

**Estimated cost:** Dynamic — use `"dryRun": true` in the Run API request to check the exact cost before calling.

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `current_company_domains` | array | No | Filter by current company domains. Each item: {value, exclude?, exact_match?} |
| `current_company_names` | array | No | Filter by current company names. Each item: {value, exclude?, exact_match?} |
| `current_position_titles` | array | No | Filter by current job titles. Each item: {value, exclude?, exact_match?} |
| `current_position_seniority_level` | array | No | Filter by seniority level. Each item: {value, exclude?} |
| `current_company_industries` | array | No | Filter by company industries. Each item: {value, exclude?} |
| `current_company_headcounts` | array | No | Filter by company headcount ranges. Each item: {value, exclude?} |
| `current_company_headquarters` | array | No | Filter by company HQ locations. Each item: {value, exclude?} |
| `person_locations` | array | No | Filter by person locations. Each item: {value, exclude?} |
| `person_names` | array | No | Filter by person names. Each item: {value, exclude?, exact_match?} |
| `person_professional_network_urls` | array | No | Filter by LinkedIn profile URLs. Each item: {value, exclude?} |
| `current_position_job_functions` | array | No | Filter by job functions. Each item: {value, exclude?} |
| `person_skills` | array | No | Filter by person skills. Each item: {value, exclude?} |
| `limit` | number | No | Number of results to return (default: 10, max: 100) |
| `offset` | number | No | Number of results to skip for pagination (max: 10000) |
| `search_after` | string | No | Cursor for pagination beyond 10000 results |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"fullenrich","path":"/people/search","body":{"current_company_domains":"<array>","current_company_names":"<array>","current_position_titles":"<array>","current_position_seniority_level":"<array>","current_company_industries":"<array>","current_company_headcounts":"<array>","current_company_headquarters":"<array>","person_locations":"<array>","person_names":"<array>","person_professional_network_urls":"<array>","current_position_job_functions":"<array>","person_skills":"<array>","limit":"<number>","offset":"<number>","search_after":"<string>"}}'
```

### Reverse Email Lookup

Identify the person and company behind one or more email addresses. Returns full person profile (name, job title, work history) and company details (industry, headcount). Async: results via webhook or GET endpoint.

`POST /contact/reverse/email/bulk`

**Estimated cost:** Dynamic — use `"dryRun": true` in the Run API request to check the exact cost before calling.

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `name` | string | Yes | Name for this reverse lookup batch |
| `webhook_url` | string | No | URL to receive results when lookup completes |
| `data` | array | Yes | Array of objects with email field to look up |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"fullenrich","path":"/contact/reverse/email/bulk","body":{"name":"<string>","webhook_url":"<string>","data":"<array>"}}'
```

### Search Company

Search for companies based on various filters including industry, headcount, location, and more. Multiple filters within the same field use AND logic. Returns full company details. Costs 0.25 credits per result.

`POST /company/search`

**Estimated cost:** Dynamic — use `"dryRun": true` in the Run API request to check the exact cost before calling.

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `names` | array | No | Filter by company names. Each item: {value, exclude?, exact_match?} |
| `domains` | array | No | Filter by company domains. Each item: {value, exclude?, exact_match?} |
| `industries` | array | No | Filter by industries. Each item: {value, exclude?} |
| `headcounts` | array | No | Filter by headcount ranges. Each item: {value, exclude?} |
| `headquarters_locations` | array | No | Filter by HQ locations. Each item: {value, exclude?} |
| `types` | array | No | Filter by company types (Public, Private, etc). Each item: {value, exclude?} |
| `specialties` | array | No | Filter by company specialties. Each item: {value, exclude?} |
| `keywords` | array | No | Filter by keywords in company description. Each item: {value, exclude?} |
| `professional_network_urls` | array | No | Filter by LinkedIn company URLs. Each item: {value, exclude?} |
| `founded_years` | array | No | Filter by founding year. Each item: {value, exclude?} |
| `limit` | number | No | Number of results to return (default: 10, max: 100) |
| `offset` | number | No | Number of results to skip for pagination (max: 10000) |
| `search_after` | string | No | Cursor for pagination beyond 10000 results |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"fullenrich","path":"/company/search","body":{"names":"<array>","domains":"<array>","industries":"<array>","headcounts":"<array>","headquarters_locations":"<array>","types":"<array>","specialties":"<array>","keywords":"<array>","professional_network_urls":"<array>","founded_years":"<array>","limit":"<number>","offset":"<number>","search_after":"<string>"}}'
```

### Look Up Company

Look up a single company using its identifiers (domain, or professional network URL/ID). Returns the best matching company. Provide at least one identifier. Costs 0.25 credits per result.

`POST /company/lookup`

**Estimated cost:** Dynamic — use `"dryRun": true` in the Run API request to check the exact cost before calling.

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `domain` | string | No | Company domain to look up (e.g. anthropic.com) |
| `professional_network_url` | string | No | Professional network URL of the company (e.g. https://www.linkedin.com/company/anthropic) |
| `professional_network_id` | number | No | Professional network ID of the company (e.g. 1883877) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"fullenrich","path":"/company/lookup","body":{"domain":"<string>","professional_network_url":"<string>","professional_network_id":"<number>"}}'
```

### Look Up People

Look up a single person using their identifiers (professional network URL/ID, or full name combined with a company identifier). Returns the best matching person. Costs 0.25 credits per result.

`POST /people/lookup`

**Estimated cost:** Dynamic — use `"dryRun": true` in the Run API request to check the exact cost before calling.

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `person_name` | string | No | Full name of the person to look up |
| `person_professional_network_url` | string | No | Professional network profile URL of the person (e.g. https://www.linkedin.com/in/enzo-romera) |
| `person_professional_network_id` | number | No | Professional network profile ID of the person |
| `company_domain` | string | No | Domain of the company the person works for. Used to disambiguate when looking up by name. |
| `company_professional_network_url` | string | No | Professional network URL of the company. Used to disambiguate when looking up by name. |
| `company_professional_network_id` | number | No | Professional network ID of the company. Used to disambiguate when looking up by name. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"fullenrich","path":"/people/lookup","body":{"person_name":"<string>","person_professional_network_url":"<string>","person_professional_network_id":"<number>","company_domain":"<string>","company_professional_network_url":"<string>","company_professional_network_id":"<number>"}}'
```

---

Full details and an interactive quickstart: https://orthogonal.com/discover/fullenrich
