# Orthogonal People Search

> Orthogonal People Search is a paid API for AI agents from x402.orthogonal.com, paid per call via x402, $0.0245/call, status unknown (last checked 2026-10-18).

Search for professionals matching specific criteria including company domain, job title, seniority, location, and department, returning paginated results up to 10,000 records.

## Facts

- Endpoint: POST https://x402.orthogonal.com/company-enrich/people/search?utm_source=zero.xyz
- Price: $0.0245/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-18
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/orthogonal-people-search-2fa336dc
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_XuNbzn7eUCc5NHpNqYlAF

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability orthogonal-people-search-2fa336dc -d '<json body>'
```

Example prompt: Find me 50 VP-level or above marketing professionals currently working at SaaS companies in the US — filter to people in the marketing department, and show me page 1 of results.

## When to prefer this

Use this endpoint when you need to search across a large pool of professionals with multiple combinable filters (domain, title, seniority, geography, department, tenure) and need paginated access to up to 10,000 results. Prefer this over the async person search sibling when you need synchronous, structured, multi-filter queries rather than a name/role/geography lookup. Choose the scroll endpoint instead when you need more than 10,000 results.

## Known failure modes

- Invalid or unsupported country code returns empty results or validation error
- Exceeding 100 domains in the domains array triggers a validation error
- pageSize not provided causes a required field error
- Changing filters mid-pagination starts a new billable request — parentRequestId from prior search is no longer valid
- Requesting page beyond available results returns empty result set
- Malformed date strings for atCurrentCompanyAfter/Before or atCurrentPositionAfter/Before cause parsing errors
- Price calculation error may occur at billing layer without affecting search results

## How this service works

Search for people matching specific criteria. Supports filters for company domains, job titles, countries, states, cities, seniority, and more. Max 10,000 results via page-based pagination. Use the scroll endpoint for larger result sets. Pagination billing: call the first page normally and save billing.requestId from the Orthogonal /v1/run response. For later page, offset, or cursor calls on the same logical search, pass parentRequestId with unchanged non-pagination parameters. Valid continuation calls still get their own request IDs and quoted price, but are charged 0. Changing filters starts a new billable request. | ERROR: Unable to calculate price.

## Output

Returns a paginated list of professional profiles matching the specified filters, including name, job title, company, seniority, department, location, and other enrichment fields. Also returns a billing requestId that can be used as parentRequestId for subsequent pages of the same search at no additional charge.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "page": {
   "type": "integer",
   "description": "The page number to return. Must be greater than 0 For later pages of the same logical search, keep non-pagination parameters unchanged and pass top-level parentRequestId from the first Orthogonal /v1/run response."
  },
  "query": {
   "type": "string",
   "description": "The search query to apply on the company name and domain"
  },
  "domains": {
   "type": "array",
   "description": "The domains to find people for. Up to 100 domains are allowed."
  },
  "exclude": {
   "type": "object",
   "description": "Exclusion filters to apply on the people. If a person matches any of the filters here, it will be excluded from the results."
  },
  "pageSize": {
   "type": "integer",
   "description": "REQUIRED. Number of results per page (1-100). Determines cost: 2 credits ($0.0245) per result returned. Total call cost = pageSize x per-result cost."
  },
  "countries": {
   "type": "array",
   "description": "The 2 letter country codes to filter by"
  },
  "seniority": {
   "type": "array",
   "description": "The seniorities to filter by"
  },
  "department": {
   "type": "array",
   "description": "The departments to filter by"
  },
  "companyFilter": {
   "type": "object",
   "description": "The filters to be applied on the companies to find people for"
  },
  "positionQuery": {
   "type": "array",
   "description": "The list of search queries to apply on the person's current job position/title"
  },
  "atCurrentCompanyAfter": {
   "type": "string",
   "description": "Filter by current company join date - only include people who joined after this UTC date"
  },
  "atCurrentCompanyBefore": {
   "type": "string",
   "description": "Filter by current company join date - only include people who joined before this UTC date"
  },
  "atCurrentPositionAfter": {
   "type": "string",
   "description": "Filter by current position start date - only include people who started after this UTC date"
  },
  "atCurrentPositionBefore": {
   "type": "string",
   "description": "Filter by current position start date - only include people who started before this UTC date"
  }
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/orthogonal-people-search-2fa336dc/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from x402.orthogonal.com](https://www.zero.xyz/host/x402.orthogonal.com/llms.txt)
