# Ploid — Orthogonal API

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

Agent-native people API: people search, identity resolution, contact enrichment (email/phone), social profile enrichment across 8 platforms, and public LinkedIn reads (profiles, posts, comments, companies, search).

**Verified:** no

## Access

**Run API:** `POST https://mono.orthogonal.com/v1/run`
**Auth:** `Authorization: Bearer $ORTHOGONAL_API_KEY`
Get an API key at https://mono.orthogonal.com/account/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

### LinkedIn profile

Fetch a public LinkedIn profile by URL, vanity slug, or @handle.

`GET /linkedin/profile`

**Estimated cost:** $0.01308

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `url` | string | Yes | LinkedIn profile URL, slug, or @handle |
| `identifier` | string | No | Alias for url |

```bash
curl -X POST 'https://mono.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"ploid","path":"/linkedin/profile","method":"GET","query":{"url":"<string>","identifier":"<string>"}}'
```

### Search people

Synchronous people search over Ploid's people index with a semantic query and/or structured filters (title, seniority, company, industry, location). Returns up to 150 people inline with person_id, LinkedIn, title, company, location. type: instant|fast (index only), auto|deep (evidence-verified, slower). Runs synchronously only (async is fixed to false). $0.1308 per 10 results returned, rounded up to the next 10 (1 to 10 = $0.1308, 11 to 20 = $0.2616, max $1.962 at 150); zero results is free. x402/MPP prepay for num_results requested (default 10).

`POST /search`

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

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `query` | string | No | Semantic query, e.g. 'software engineers at fintech companies in San Francisco'. Supply this, a filter, or both. |
| `type` | string | No | instant \| fast \| auto \| deep (default auto) |
| `num_results` | integer | No | 1 to 150 (default 10) |
| `filters` | object | No | Object with any of: title, seniority, company, industry, location |
| `criteria` | array | No | Up to 5 plain-English conditions every result must satisfy (auto/deep only) |
| `contents` | object | No | Object {fields: [linkedin,title,company,location,name]} |
| `category` | string | No | Always 'people' |

```bash
curl -X POST 'https://mono.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"ploid","path":"/search","body":{"query":"<string>","type":"<string>","num_results":"<integer>","filters":"<object>","criteria":"<array>","contents":"<object>","category":"<string>"}}'
```

### Resolve person

Identify one person from a full name plus at least one clue (company or domain, role, location, address, work/personal email, or phone). Returns the permanent person_id usable with /enrich. $0.2616 when found; no match is free (x402/MPP prepay $0.2616).

`POST /resolve`

**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 | Full name |
| `company` | string | No | Company name or domain |
| `role` | string | No | Job title |
| `location` | string | No | City, region, or country |
| `address` | string | No | Street or mailing address |
| `work_email` | string | No | Work email |
| `personal_email` | string | No | Personal email |
| `phone` | string | No | Phone number |

```bash
curl -X POST 'https://mono.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"ploid","path":"/resolve","body":{"name":"<string>","company":"<string>","role":"<string>","location":"<string>","address":"<string>","work_email":"<string>","personal_email":"<string>","phone":"<string>"}}'
```

### Enrich contact

Resolve contact fields for one person. Identify with exactly one of linkedin_url, person_id, email (reverse lookup), or name + company_domain, and request fields (1 to 3, unique): work_email, personal_email, phone. Each field reports found/not_found/unavailable with confidence, source, last_seen. Charged only for fields found: work_email $0.1308, personal_email $0.1308, phone $1.308 (max $1.5696). x402/MPP prepay per requested field.

`POST /enrich`

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

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `fields` | array | Yes | Array of work_email, personal_email, phone |
| `linkedin_url` | string | No | LinkedIn profile URL (linkedin.com/in/...) |
| `person_id` | string | No | Ploid person_id from /search or /resolve |
| `email` | string | No | Email for reverse lookup |
| `name` | string | No | Full name (use with company_domain) |
| `company_domain` | string | No | Company domain, e.g. acme.com |
| `first_name` | string | No | Optional first name hint |
| `last_name` | string | No | Optional last name hint |

```bash
curl -X POST 'https://mono.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"ploid","path":"/enrich","body":{"fields":"<array>","linkedin_url":"<string>","person_id":"<string>","email":"<string>","name":"<string>","company_domain":"<string>","first_name":"<string>","last_name":"<string>"}}'
```

### Enrich social profile

Resolve one public social profile from a handle, slug, or profile URL. Platforms: linkedin, x, instagram, tiktok, youtube, github, reddit, facebook. $0.1308 per profile found; not found (404) is free.

`POST /socials`

**Estimated cost:** $0.1308

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `platform` | string | Yes | linkedin \| x \| instagram \| tiktok \| youtube \| github \| reddit \| facebook |
| `identifier` | string | Yes | Handle, vanity slug, or profile URL on that platform |

```bash
curl -X POST 'https://mono.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"ploid","path":"/socials","body":{"platform":"<string>","identifier":"<string>"}}'
```

### LinkedIn people search

Structured LinkedIn people search by keywords, location, title, current company, and school. Paginate with cursor (each page billed separately). $0.1308 per 10 results returned, rounded up to the next 10 (1 to 10 = $0.1308, 11 to 20 = $0.2616, max $1.308 at limit 100); zero results is free. x402/MPP prepay for limit requested (default 25 = $0.3924).

`POST /linkedin/search`

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

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `filters` | object | Yes | Object with keywords, location, title, currentCompany, school (strings or arrays up to 10) |
| `limit` | integer | No | 1 to 100 (default 25) |
| `cursor` | string | No | Pagination cursor from a previous response |

```bash
curl -X POST 'https://mono.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"ploid","path":"/linkedin/search","body":{"filters":"<object>","limit":"<integer>","cursor":"<string>"}}'
```

### LinkedIn profile posts

Recent posts for a LinkedIn profile (text and dates).

`GET /linkedin/posts`

**Estimated cost:** $0.1308

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `identifier` | string | Yes | LinkedIn profile URL, slug, or @handle |
| `limit` | integer | No | 1 to 20 (default 10) |

```bash
curl -X POST 'https://mono.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"ploid","path":"/linkedin/posts","method":"GET","query":{"identifier":"<string>","limit":"<integer>"}}'
```

### LinkedIn profile comments

Comments a LinkedIn profile has posted.

`GET /linkedin/profiles/comments`

**Estimated cost:** $0.1308

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `profile` | string | No | LinkedIn profile URL or slug (or use profileId) |
| `profileId` | string | No | LinkedIn profile ID (alternative to profile) |
| `postedLimit` | string | No | Optional posted-time limit, passed through to Ploid |
| `page` | string | No | Page number |
| `paginationToken` | string | No | Pagination token |

```bash
curl -X POST 'https://mono.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"ploid","path":"/linkedin/profiles/comments","method":"GET","query":{"profile":"<string>","profileId":"<string>","postedLimit":"<string>","page":"<string>","paginationToken":"<string>"}}'
```

### LinkedIn company

Get a LinkedIn company page by URL, universal name, or search term.

`GET /linkedin/companies/get`

**Estimated cost:** $0.1308

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `url` | string | No | Company LinkedIn URL |
| `universalName` | string | No | Company universal name, e.g. microsoft |
| `search` | string | No | Company name search |

```bash
curl -X POST 'https://mono.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"ploid","path":"/linkedin/companies/get","method":"GET","query":{"url":"<string>","universalName":"<string>","search":"<string>"}}'
```

### LinkedIn company posts

Recent posts from a LinkedIn company page.

`GET /linkedin/companies/posts`

**Estimated cost:** $0.1308

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `company` | string | No | Company LinkedIn URL or name (or use companyId / companyUniversalName) |
| `companyId` | string | No | LinkedIn company ID |
| `companyUniversalName` | string | No | Company universal name |
| `postedLimit` | string | No | Optional posted-time limit, passed through to Ploid |
| `scrapePostedLimit` | string | No | Optional posted-time limit, passed through to Ploid |
| `page` | string | No | Page number |
| `paginationToken` | string | No | Pagination token |

```bash
curl -X POST 'https://mono.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"ploid","path":"/linkedin/companies/posts","method":"GET","query":{"company":"<string>","companyId":"<string>","companyUniversalName":"<string>","postedLimit":"<string>","scrapePostedLimit":"<string>","page":"<string>","paginationToken":"<string>"}}'
```

---

Full details and an interactive quickstart: https://mono.orthogonal.com/publisher/ploid
