# Hunter — 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) Hunter.io API for finding and verifying professional email addresses. Domain search, email finder, email verification, and company/person enrichment. **Verified:** no ## 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": "", "data": { ... } }`. ## Endpoints ### Combined Enrichment Get both person AND company information from an email address in a single request. `GET /v2/combined/find` **Estimated cost:** $0.01 | Field | Type | Required | Description | |-------|------|----------|-------------| | `email` | string | Yes | Email address to enrich | ```bash curl -X POST 'https://api.orthogonal.com/v1/run' \ -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \ -H 'Content-Type: application/json' \ -d '{"api":"hunter","path":"/v2/combined/find","method":"GET","query":{"email":""}}' ``` ### Email Enrichment Get detailed person information from an email address - name, location, employment, social profiles. `GET /v2/people/find` **Estimated cost:** $0.01 | Field | Type | Required | Description | |-------|------|----------|-------------| | `email` | string | No | Email address to enrich | | `linkedin_handle` | string | No | LinkedIn handle to enrich | ```bash curl -X POST 'https://api.orthogonal.com/v1/run' \ -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \ -H 'Content-Type: application/json' \ -d '{"api":"hunter","path":"/v2/people/find","method":"GET","query":{"email":"","linkedin_handle":""}}' ``` ### Email Count Get count of email addresses we have for a domain, broken down by department and seniority. FREE endpoint. `GET /v2/email-count` **Estimated cost:** $0.01 | Field | Type | Required | Description | |-------|------|----------|-------------| | `domain` | string | No | Domain to count emails for | | `company` | string | No | Company name (domain preferred) | | `type` | string | No | Filter: personal or generic | ```bash curl -X POST 'https://api.orthogonal.com/v1/run' \ -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \ -H 'Content-Type: application/json' \ -d '{"api":"hunter","path":"/v2/email-count","method":"GET","query":{"domain":"","company":"","type":""}}' ``` ### Company Enrichment Get detailed company information from a domain - industry, description, location, size, tech stack, funding. `GET /v2/companies/find` **Estimated cost:** $0.01 | Field | Type | Required | Description | |-------|------|----------|-------------| | `domain` | string | Yes | Company domain to enrich (e.g. hunter.io) | ```bash curl -X POST 'https://api.orthogonal.com/v1/run' \ -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \ -H 'Content-Type: application/json' \ -d '{"api":"hunter","path":"/v2/companies/find","method":"GET","query":{"domain":""}}' ``` ### Email Finder Find the most likely email address for a person given their name and company domain. `GET /v2/email-finder` **Estimated cost:** $0.01 | Field | Type | Required | Description | |-------|------|----------|-------------| | `domain` | string | No | Company domain (e.g. reddit.com) | | `company` | string | No | Company name (domain preferred) | | `first_name` | string | No | Person first name | | `last_name` | string | No | Person last name | | `full_name` | string | No | Full name (if first/last not available) | | `linkedin_handle` | string | No | LinkedIn profile handle | ```bash curl -X POST 'https://api.orthogonal.com/v1/run' \ -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \ -H 'Content-Type: application/json' \ -d '{"api":"hunter","path":"/v2/email-finder","method":"GET","query":{"domain":"","company":"","first_name":"","last_name":"","full_name":"","linkedin_handle":""}}' ``` ### Email Verifier Verify if an email address is deliverable. Returns status (valid, invalid, accept_all, webmail, disposable, unknown). `GET /v2/email-verifier` **Estimated cost:** $0.01 | Field | Type | Required | Description | |-------|------|----------|-------------| | `email` | string | Yes | Email address to verify | ```bash curl -X POST 'https://api.orthogonal.com/v1/run' \ -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \ -H 'Content-Type: application/json' \ -d '{"api":"hunter","path":"/v2/email-verifier","method":"GET","query":{"email":""}}' ``` ### Domain Search Find all email addresses for a domain. Returns emails with sources, confidence scores, and verification status. 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. `GET /v2/domain-search` **Estimated cost:** $0.01 | Field | Type | Required | Description | |-------|------|----------|-------------| | `domain` | string | Yes | Domain to search (e.g. stripe.com) | | `limit` | integer | No | Max emails to return (default 10) | | `offset` | integer | No | Skip N emails For later offset pages of the same logical search, keep non-pagination parameters unchanged and pass top-level parentRequestId from the first Orthogonal /v1/run response. | | `type` | string | No | Filter: personal or generic | | `seniority` | string | No | Filter: junior, senior, or executive | | `department` | string | No | Filter by department (sales, marketing, etc) | ```bash curl -X POST 'https://api.orthogonal.com/v1/run' \ -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \ -H 'Content-Type: application/json' \ -d '{"api":"hunter","path":"/v2/domain-search","method":"GET","query":{"domain":"","limit":"","offset":"","type":"","seniority":"","department":""}}' ``` ### Discover Companies Find companies matching criteria using filters or natural language. Returns up to 100 companies per request. FREE endpoint. 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. `POST /v2/discover` **Estimated cost:** $0.01 | Field | Type | Required | Description | |-------|------|----------|-------------| | `query` | string | No | Natural language search (e.g. Companies in Europe in Tech) | | `headquarters_location` | object | No | Filter by HQ location | | `industry` | object | No | Filter by industry | | `headcount` | array | No | Filter by employee count ranges | | `limit` | integer | No | Max results (default 100) | | `offset` | integer | No | Skip N results for pagination For later offset pages of the same logical search, keep non-pagination parameters unchanged and pass top-level parentRequestId from the first Orthogonal /v1/run response. | ```bash curl -X POST 'https://api.orthogonal.com/v1/run' \ -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \ -H 'Content-Type: application/json' \ -d '{"api":"hunter","path":"/v2/discover","body":{"query":"","headquarters_location":"","industry":"","headcount":"","limit":"","offset":""}}' ``` --- Full details and an interactive quickstart: https://orthogonal.com/discover/hunter