# Orthogonal People Search

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

Search for professional profiles using rich filters like job title, company, location, education, and experience, with efficient paginated billing.

## Facts

- Endpoint: POST https://x402.orthogonal.com/fiber/v1/people-search
- Price: $0.5/call
- Payment: x402
- Status: unknown
- Last checked: 2026-09-14
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/orthogonal-people-search-cae994ae
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_dYyzOgizSTrxe-gHK5iV6

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-cae994ae -d '<json body>'
```

Example prompt: Find me 20 software engineers currently working at Series B startups in San Francisco who have at least 5 years of experience — include their detailed work history.

## When to prefer this

Choose this endpoint when you need to search for professional profiles with complex, multi-dimensional filters (title, company, location, experience, education, language, connections) and require paginated results with cost-efficient continuation. Prefer this over simpler people-search APIs when you need structured billing control across pagination, stealth company tracking, or detailed enriched work/education history.

## Known failure modes

- Invalid or expired cursor returns an error or empty results
- Missing required searchParams causes a 400 bad request
- Changing filter parameters while passing parentRequestId starts a new billable request
- Rate limits or quota exhaustion return a 429 or payment-related error
- Overly broad queries may return too many results requiring pagination
- getDetailedWorkExperience or getDetailedEducation flags significantly increase response latency

## How this service works

Search for people using filters 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.

## Output

A paginated list of professional profiles matching the search filters, each containing name, current job title, company, location, job status, follower/connection counts, work experience, and education. When getDetailedWorkExperience or getDetailedEducation is enabled, enriched items include LinkedIn URLs, company websites, and location details. The response also includes a cursor for pagination and a billing.requestId to use as parentRequestId for subsequent pages at no additional charge.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "cursor": {
   "type": "string",
   "description": "A pagination cursor returned from a previous search response. Use this to fetch the next page of results. For later cursor pages of the same logical search, keep non-pagination parameters unchanged and pass top-level parentRequestId from the first Orthogonal /v1/run response."
  },
  "pageSize": {
   "type": "integer",
   "description": "The number of profiles to return, if you need to get more results, you can paginate."
  },
  "searchParams": {
   "type": "object",
   "properties": {
    "tags": {
     "type": "object"
    },
    "keywords": {
     "type": "object"
    },
    "location": {
     "type": "object"
    },
    "pastJobs": {
     "type": "object"
    },
    "timeZone": {
     "type": "object"
    },
    "approxAge": {
     "type": "object"
    },
    "education": {
     "type": "object"
    },
    "fuzzyName": {
     "type": "object"
    },
    "jobStatus": {
     "type": "string"
    },
    "languages": {
     "type": "object"
    },
    "stealthV2": {
     "type": "string"
    },
    "jobTitleV2": {
     "type": "object"
    },
    "jobTitleV3": {
     "type": "object"
    },
    "isInStealth": {
     "type": "boolean"
    },
    "pastJobText": {
     "type": "object"
    },
    "exactProfile": {
     "type": "object"
    },
    "numFollowers": {
     "type": "object"
    },
    "leftStealthAt": {
     "type": "string"
    },
    "startedInRole": {
     "type": "string"
    },
    "numConnections": {
     "type": "object"
    },
    "companyMatchMode": {
     "type": "string"
    },
    "startedAtCompany": {
     "type": "string"
    },
    "yearsOfExperience": {
     "type": "object"
    },
    "country3LetterCode": {
     "type": "object"
    },
    "getDetailedEducation": {
     "type": "boolean",
     "description": "Whether to include deep details about each educational item, like the school's LinkedIn URL, website, location, etc. That'll be put in the detailedEducation array. This slows down the API call, so only enable this if you need it."
    },
    "keywordSearchOptions": {
     "type": "object"
    },
    "getDetailedWorkExperience": {
     "type": "boolean",
     "description": "Whether to include deep details about each work experience item, like the company's LinkedIn URL, website, location, etc. That'll be put in the detailedWorkExperience array. This slows down the API call, so only enable this if you need it."
    }
   },
   "descript
… (truncated)
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/orthogonal-people-search-cae994ae/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)
