# ContactOut — 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)
Find anyone's email and phone number. Sales and recruitment intelligence with LinkedIn enrichment, people search, company search, email verification, and decision maker discovery.
**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
### People Enrich
Enrich a person using multiple data points (name, email, phone, LinkedIn, company).
`POST /v1/people/enrich`
**Estimated cost:** $0.55
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `full_name` | string | No | |
| `first_name` | string | No | |
| `last_name` | string | No | |
| `email` | string | No | |
| `phone` | string | No | |
| `linkedin_url` | string | No | |
| `company` | array | No | |
| `company_domain` | string | No | |
| `job_title` | string | No | |
| `location` | string | No | |
| `education` | array | No | |
| `include` | array | No | work_email, personal_email, phone |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"contactout","path":"/v1/people/enrich","body":{"full_name":"<string>","first_name":"<string>","last_name":"<string>","email":"<string>","phone":"<string>","linkedin_url":"<string>","company":"<array>","company_domain":"<string>","job_title":"<string>","location":"<string>","education":"<array>","include":"<array>"}}'
```
### Get Contact from LinkedIn
Get contact details for a LinkedIn profile.
`GET /v1/people/linkedin`
**Estimated cost:** Dynamic — use `"dryRun": true` in the Run API request to check the exact cost before calling.
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `profile` | string | Yes | |
| `include_phone` | boolean | No | |
| `email_type` | string | No | |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"contactout","path":"/v1/people/linkedin","method":"GET","query":{"profile":"<string>","include_phone":"<boolean>","email_type":"<string>"}}'
```
### Enrich from LinkedIn URL
Get full profile details (email, phone, work history, education, skills) from a LinkedIn profile URL.
`GET /v1/linkedin/enrich`
**Estimated cost:** Dynamic — use `"dryRun": true` in the Run API request to check the exact cost before calling.
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `profile` | string | Yes | LinkedIn profile URL |
| `profile_only` | boolean | No | If true, returns profile without contact info |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"contactout","path":"/v1/linkedin/enrich","method":"GET","query":{"profile":"<string>","profile_only":"<boolean>"}}'
```
### Enrich from Email
Get profile details from an email address.
`GET /v1/email/enrich`
**Estimated cost:** $0.33
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `email` | string | Yes | Email address |
| `include` | string | No | Data to include (work_email) |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"contactout","path":"/v1/email/enrich","method":"GET","query":{"email":"<string>","include":"<string>"}}'
```
### Batch Contact LinkedIn (v1)
Get contact details for up to 30 LinkedIn profiles.
`POST /v1/people/linkedin/batch`
**Estimated cost:** Dynamic — use `"dryRun": true` in the Run API request to check the exact cost before calling.
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `profiles` | array | Yes | |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"contactout","path":"/v1/people/linkedin/batch","body":{"profiles":"<array>"}}'
```
### People Count
Count matching profiles for search criteria.
`POST /v1/people/count`
**Cost:** Free
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `name` | string | No | Name of the profile |
| `job_title` | array | No | Job titles |
| `company` | array | No | Company names |
| `domain` | array | No | Company domains |
| `location` | array | No | Locations |
| `industry` | array | No | Industries |
| `seniority` | array | No | Seniority levels |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"contactout","path":"/v1/people/count","body":{"name":"<string>","job_title":"<array>","company":"<array>","domain":"<array>","location":"<array>","industry":"<array>","seniority":"<array>"}}'
```
### Domain Enrich
Get company information from domain names.
`POST /v1/domain/enrich`
**Estimated cost:** Dynamic — use `"dryRun": true` in the Run API request to check the exact cost before calling.
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `domains` | array | Yes | |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"contactout","path":"/v1/domain/enrich","body":{"domains":"<array>"}}'
```
---
Full details and an interactive quickstart: https://orthogonal.com/discover/contactout