# Ocean.io People Search

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

Search and filter professional person profiles by job title, seniority, department, skills, location, and company attributes, returning enriched person records with pagination support.

## Facts

- Endpoint: POST https://x402.orthogonal.com/ocean-io/v3/search/people
- Price: $1/call
- Payment: x402
- Status: unknown
- Last checked: 2026-09-14
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/ocean-io-people-search-033f9d83
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_YLvm_GqL9aLLVALAcX3O0

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 ocean-io-people-search-033f9d83 -d '<json body>'
```

Example prompt: Find me up to 100 Director or VP-level people in the Engineering or Product departments based in the United States, with skills in machine learning — include their LinkedIn URLs, emails, and current job titles.

## When to prefer this

Use this endpoint when you need to search a large database of professional profiles with granular filters (seniority, department, skills, location, company) and require paginated, enriched results including LinkedIn URLs and email addresses. Prefer this over generic web-scraping approaches when you need structured, up-to-date B2B people data at scale (up to 10,000 results per query) for sales prospecting, recruiting, or market research.

## Known failure modes

- Invalid filter values (e.g. unsupported seniority or department enum strings) return a validation error
- Exceeding the size limit of 10,000 returns an error
- Invalid or expired searchAfter pagination cursor returns an error or empty results
- Missing or invalid x402 payment header causes a 402 Payment Required response
- Overly restrictive filter combinations may return zero results
- Requested fields not in the allowed field list may be rejected

## How this service works

Search for people using filters (job title, seniority, department, skills, location) with optional company filters. Returns enriched person profiles. Use the size parameter to control max results (1-10,000). Use searchAfter from the previous response to paginate.

## Output

Returns a paginated list of enriched person profiles matching the filters. Each profile can include: id, name, firstName, lastName, LinkedIn URL, email address, job title, department, seniority, location (country, state, city), skills, work experiences (with company domain, dates, and descriptions), photo URL, and a summary. A searchAfter cursor is returned to retrieve the next page of results.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "size": {
   "type": "integer",
   "description": "Max results to return (1-10,000). Default: 50."
  },
  "fields": {
   "type": "array",
   "description": "string[] - Fields to return in Person objects (reduces bandwidth). Options: \"id\", \"domain\", \"name\", \"firstName\", \"lastName\", \"country\", \"state\", \"location\", \"linkedinUrl\", \"seniorities\", \"departments\", \"photo\", \"jobTitle\", \"jobTitleEnglish\", \"currentJobDescription\", \"experiences\", \"summary\", \"skills\", \"email\", \"updatedAt\". Nested fields: \"experiences.domain\", \"experiences.jobTitle\", \"experiences.dateFrom\", \"experiences.dateTo\", \"experiences.description\", \"experiences.linkedinCompanyHandle\", \"email.address\"."
  },
  "searchAfter": {
   "type": "string",
   "description": "Pagination cursor returned by the previous response to get the next page of results."
  },
  "peopleFilters": {
   "type": "object",
   "description": "People filters object. Fields: lookalikeLinkedinHandles: string[], countries: string[] (ISO 3166 alpha-2), excludeCountries: string[], regions: string[], states: object[] ({country: string, abbreviation: string}), excludeStates: object[], cities: object[] ({country: string, city: string}), names: string[], seniorities: string[] (enum: \"Owner\", \"Founder\", \"Board Member\", \"C-Level\", \"Partner\", \"VP\", \"Head\", \"Director\", \"Manager\", \"Other\"), departments: string[] (enum: \"Accounting and Finance\", \"Board\", \"Business Support\", \"Customer Relations\", \"Design\", \"Editorial Personnel\", \"Engineering\", \"Founder/Owner\", \"Healthcare\", \"HR\", \"Legal\", \"Management\", \"Manufacturing\", \"Marketing and Advertising\", \"Operations\", \"PR and Communications\", \"Procurement\", \"Product\", \"Quality Control\", \"R&D\", \"Sales\", \"Security\", \"Supply Chain\", \"Other\"), jobTitleKeywords: object {anyOf: string[], allOf: string[], noneOf: string[]}, skills: object {anyOf: string[], allOf: string[], noneOf: string[]}, allJobDescriptions: object {anyOf: string[], allOf: string[], noneOf: string[]}, currentJobDescription: object {anyOf: string[], allOf: string[], noneOf: string[]}, profileDescription: object {anyOf: string[], allOf: string[], noneOf: string[]}, includePeopleIds: string[], includeLinkedinHandles: string[], excludePeopleIds: string[], excludeLinkedinHandles: string[], fieldsExist: string[], fieldsNotExist: string[], changedPositionAfter: string (YYYY-MM-DD), c
… (truncated)
```

## More

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