# Bytemine — Orthogonal API

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

Sales intelligence platform offering prospect search, contact enrichment, company intelligence, web crawling, funding/acquisition signals, LinkedIn post monitoring, proposal generation, meeting briefs, ROI calculators, and fraud detection.

**Verified:** yes

## Access

**Run API:** `POST https://api.orth.sh/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": "<usd>", "data": { ... } }`.

## Endpoints

### Start Recursive Crawl

Start a multi-page crawl job with sitemap discovery and configurable depth/page limits. Returns job_id. 1 credit per page.

`POST /crawl/start`

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

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `url` | string | Yes | Website URL to crawl |
| `max_depth` | integer | No | Maximum crawl depth (default 3) |
| `max_pages` | integer | No | Maximum pages to crawl (default 50) |

```bash
curl -X POST 'https://api.orth.sh/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"bytemine","path":"/crawl/start","body":{"url":"<string>","max_depth":"<integer>","max_pages":"<integer>"}}'
```

### Company Search

Search companies by name, industry, NAICS code, keywords, location, employee count. 1 credit per company returned.

`POST /b2b-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 | Company name or keyword to search |
| `industry` | string | No | Industry filter |
| `naics_code` | string | No | NAICS code filter |
| `keywords` | string | No | Keywords filter |
| `state` | string | No | 2-letter US state code |
| `city` | string | No | City name |
| `country` | string | No | Country filter |
| `min_employees` | integer | No | Minimum employee count |
| `max_employees` | integer | No | Maximum employee count |
| `has_website` | boolean | No | Filter to companies with websites |
| `page` | integer | No | Page number (default 1) |
| `page_size` | integer | No | Results per page (default 20, max 100) |

```bash
curl -X POST 'https://api.orth.sh/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"bytemine","path":"/b2b-search","body":{"query":"<string>","industry":"<string>","naics_code":"<string>","keywords":"<string>","state":"<string>","city":"<string>","country":"<string>","min_employees":"<integer>","max_employees":"<integer>","has_website":"<boolean>","page":"<integer>","page_size":"<integer>"}}'
```

### Prospect Search

Search the prospect database using filters like job title, seniority, industry, location, company size, and more. Returns masked results. 1 credit per result.

`POST /contacts/search`

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

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `page` | integer | No | Page number |
| `pageSize` | integer | No | Results per page (max 100) |
| `jobTitles` | array | No | Array of {value: string, included: boolean} |
| `seniorityLevels` | array | No | Seniority levels to filter by |
| `departments` | array | No | Departments to filter by |
| `skills` | array | No | Skills filter |
| `companyNames` | array | No | Company names to filter by |
| `urls` | array | No | Company website URLs to filter by |
| `industries` | array | No | Industry filters |
| `states` | array | No | US state filters |
| `cities` | array | No | City filters |
| `hasDirectDialOnly` | boolean | No | Only return contacts with direct dial numbers |
| `hasWorkEmail` | boolean | No | Only return contacts with work emails |

```bash
curl -X POST 'https://api.orth.sh/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"bytemine","path":"/contacts/search","body":{"page":"<integer>","pageSize":"<integer>","jobTitles":"<array>","seniorityLevels":"<array>","departments":"<array>","skills":"<array>","companyNames":"<array>","urls":"<array>","industries":"<array>","states":"<array>","cities":"<array>","hasDirectDialOnly":"<boolean>","hasWorkEmail":"<boolean>"}}'
```

### Acquisition Signals

Search real-time M&A/acquisition signals with filters for acquirer, amount, industry, date, and more. 1 credit per record. Use count='true' for free count-only query.

`POST /signals/acquisitions`

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

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `page` | integer | No | Page number |
| `limit` | integer | No | Results per page (max 100, default 20) |
| `dateFrom` | string | No | Start date (YYYY-MM-DD) |
| `dateTo` | string | No | End date (YYYY-MM-DD) |
| `date_preset` | string | No | Date shortcut: today, last_7d, last_30d, last_90d, this_month, etc. |
| `countries` | string | No | Comma-separated country codes |
| `search` | string | No | Search keyword |
| `industry` | string | No | Comma-separated industries |
| `company_name` | string | No | Filter by company name |
| `acquiring_company` | string | No | Filter by acquiring company |
| `amount_min` | integer | No | Minimum amount (USD cents) |
| `amount_max` | integer | No | Maximum amount (USD cents) |
| `sort_by` | string | No | Sort field: occurred_at, discovered_at, amount, employee_count |
| `sort_order` | string | No | asc or desc |

```bash
curl -X POST 'https://api.orth.sh/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"bytemine","path":"/signals/acquisitions","body":{"page":"<integer>","limit":"<integer>","dateFrom":"<string>","dateTo":"<string>","date_preset":"<string>","countries":"<string>","search":"<string>","industry":"<string>","company_name":"<string>","acquiring_company":"<string>","amount_min":"<integer>","amount_max":"<integer>","sort_by":"<string>","sort_order":"<string>"}}'
```

### Contact Enrichment

Enrich a single contact by email, phone, LinkedIn, Facebook, or name+company. Returns full profile with work email, phone, job title, company info. 1 credit per match.

`POST /contacts/enrich`

**Estimated cost:** $0.03

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `email` | string | No | Email address to look up |
| `phone` | string | No | Phone number to look up |
| `linkedin` | string | No | LinkedIn profile URL |
| `firstName` | string | No | First name (combine with lastName/company) |
| `lastName` | string | No | Last name |
| `companyName` | string | No | Company name for lookup |
| `companyDomain` | string | No | Company domain for lookup |
| `hasWorkEmail` | boolean | No | Only return if work email available |
| `hasPhone` | boolean | No | Only return if phone available |
| `hasDirectDial` | boolean | No | Only return if direct dial available |

```bash
curl -X POST 'https://api.orth.sh/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"bytemine","path":"/contacts/enrich","body":{"email":"<string>","phone":"<string>","linkedin":"<string>","firstName":"<string>","lastName":"<string>","companyName":"<string>","companyDomain":"<string>","hasWorkEmail":"<boolean>","hasPhone":"<boolean>","hasDirectDial":"<boolean>"}}'
```

### ICP Builder

Describe your ideal customer profile in plain text. Returns a job_id immediately. Provide a webhook_url to receive results when complete (required, as job polling is not available through this API). 50 credits per run.

`POST /v1/icp-builder`

**Estimated cost:** $1.5

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `description` | string | Yes | Plain-text ICP description of your ideal customer |
| `count` | integer | No | Number of companies to return (default 50, max 200) |
| `webhook_url` | string | No | URL for async result delivery |

```bash
curl -X POST 'https://api.orth.sh/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"bytemine","path":"/v1/icp-builder","body":{"description":"<string>","count":"<integer>","webhook_url":"<string>"}}'
```

### Funding Signals

Search real-time funding signals with filters for round type, amount, investor, industry, date, employee count, and more. 1 credit per record. Use count='true' for free count-only query.

`POST /signals/funding`

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

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `page` | integer | No | Page number |
| `limit` | integer | No | Results per page (max 100, default 20) |
| `dateFrom` | string | No | Start date (YYYY-MM-DD) |
| `dateTo` | string | No | End date (YYYY-MM-DD) |
| `date_preset` | string | No | Date shortcut: today, last_7d, last_30d, last_90d, this_month, etc. |
| `countries` | string | No | Comma-separated country codes |
| `round` | string | No | Comma-separated: Seed, Series A, Series B, Series C, etc. |
| `search` | string | No | Search keyword |
| `industry` | string | No | Comma-separated industries |
| `company_name` | string | No | Filter by company name |
| `investor_name` | string | No | Filter by investor name |
| `amount_min` | integer | No | Minimum amount (USD cents) |
| `amount_max` | integer | No | Maximum amount (USD cents) |
| `sort_by` | string | No | Sort field: occurred_at, discovered_at, amount, employee_count |
| `sort_order` | string | No | asc or desc |

```bash
curl -X POST 'https://api.orth.sh/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"bytemine","path":"/signals/funding","body":{"page":"<integer>","limit":"<integer>","dateFrom":"<string>","dateTo":"<string>","date_preset":"<string>","countries":"<string>","round":"<string>","search":"<string>","industry":"<string>","company_name":"<string>","investor_name":"<string>","amount_min":"<integer>","amount_max":"<integer>","sort_by":"<string>","sort_order":"<string>"}}'
```

### Unlock Prospects

Unlock full contact details (emails, phones, social profiles) for prospect PIDs obtained from /contacts/search. Requires gateway wrapper format: {path, method, body: {pids}}.

`POST /contacts/unlock`

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

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `path` | string | Yes | Always "/contacts/unlock" |
| `method` | string | Yes | Always "POST" |
| `body` | object | Yes | Object with pids: string[] (array of prospect PIDs from search results) |

```bash
curl -X POST 'https://api.orth.sh/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"bytemine","path":"/contacts/unlock","body":{"path":"<string>","method":"<string>","body":"<object>"}}'
```

### Company Lookalikes

Find companies similar to provided domains (max 10). Returns job_id immediately. Provide a webhook_url to receive results when complete (required, as job polling is not available through this API). 50 credits per run.

`POST /v1/company-lookalikes`

**Estimated cost:** $1.5

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `domains` | array | Yes | Company domains to find lookalikes for (max 10) |
| `webhook_url` | string | No | URL for async result delivery |
| `filters` | object | No | Optional filters: {industry: string[], state: string[], country: string} |

```bash
curl -X POST 'https://api.orth.sh/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"bytemine","path":"/v1/company-lookalikes","body":{"domains":"<array>","webhook_url":"<string>","filters":"<object>"}}'
```

### Company Enrichment

Enrich a company by name, website, LinkedIn URL, or company_id. Returns full profile with description, industries, NAICS, locations, posts, funding. 1 credit per match.

`POST /b2b-enrich`

**Estimated cost:** $0.03

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `company_name` | string | No | Company name to enrich |
| `website` | string | No | Company website (e.g. stripe.com) |
| `linkedin_url` | string | No | Company LinkedIn URL |
| `company_id` | integer | No | Internal company ID |

```bash
curl -X POST 'https://api.orth.sh/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"bytemine","path":"/b2b-enrich","body":{"company_name":"<string>","website":"<string>","linkedin_url":"<string>","company_id":"<integer>"}}'
```

### Map Website URLs

Discover all URLs on a website via sitemap + link extraction. Returns scored/sorted URLs without scraping content. 1 credit.

`POST /crawl/map`

**Estimated cost:** $0.03

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `url` | string | Yes | Website URL to map |
| `search` | string | No | Keyword filter for URLs |
| `limit` | integer | No | Max URLs to return (default 100) |

```bash
curl -X POST 'https://api.orth.sh/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"bytemine","path":"/crawl/map","body":{"url":"<string>","search":"<string>","limit":"<integer>"}}'
```

### Scrape Single Page

Scrape a URL and return markdown, links, metadata, and tech stack. Falls back to Firecrawl if needed. 1 credit.

`POST /crawl/scrape`

**Estimated cost:** $0.03

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `url` | string | Yes | URL to scrape |

```bash
curl -X POST 'https://api.orth.sh/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"bytemine","path":"/crawl/scrape","body":{"url":"<string>"}}'
```

### Extract Structured Data

Scrape a URL and extract structured data using a schema: company_profile, team_members, pricing, tech_stack, social_links, branding, full_intelligence. 2 credits.

`POST /crawl/extract`

**Estimated cost:** $0.06

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `url` | string | Yes | URL to extract structured data from |
| `schema` | string | Yes | Extraction schema: company_profile, team_members, pricing, tech_stack, social_links, branding, or full_intelligence |

```bash
curl -X POST 'https://api.orth.sh/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"bytemine","path":"/crawl/extract","body":{"url":"<string>","schema":"<string>"}}'
```

### Full Business Intelligence

Crawl a website's key pages and return comprehensive intel: company profile, contacts, social links, tech stack, sales signals, pain points, conversation starters. 1 credit per page (min 5).

`POST /crawl/intel`

**Estimated cost:** $0.15

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `url` | string | Yes | Website URL to analyze (full intelligence report) |

```bash
curl -X POST 'https://api.orth.sh/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"bytemine","path":"/crawl/intel","body":{"url":"<string>"}}'
```

### Batch Scrape

Scrape up to 100 URLs in parallel. Returns markdown, metadata, and tech stack per URL. 1 credit per URL.

`POST /crawl/batch`

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

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `urls` | array | Yes | Array of URLs to scrape (max 100) |

```bash
curl -X POST 'https://api.orth.sh/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"bytemine","path":"/crawl/batch","body":{"urls":"<array>"}}'
```

### Save Page Snapshot

Save a snapshot of a page's current content for change tracking. Use with /crawl/diff to detect changes. 1 credit.

`POST /crawl/snapshot`

**Estimated cost:** $0.03

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `url` | string | Yes | URL to take a snapshot of |

```bash
curl -X POST 'https://api.orth.sh/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"bytemine","path":"/crawl/snapshot","body":{"url":"<string>"}}'
```

### Generate Proposal

Generate a personalized sales or partnership proposal with branding, ROI projections, social proof, and outreach copy. Returns a public shareable URL. 10 credits.

`POST /v1/proposals/generate`

**Estimated cost:** $0.3

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `source_domain` | string | Yes | Your company domain |
| `target_domain` | string | Yes | Prospect company domain |
| `contact_name` | string | No | Contact name for personalization |
| `contact_email` | string | No | Contact email |
| `proposal_type` | string | No | sales or partnership |
| `cta_link` | string | No | Call-to-action URL |
| `calendar_embed` | string | No | Calendar embed HTML |

```bash
curl -X POST 'https://api.orth.sh/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"bytemine","path":"/v1/proposals/generate","body":{"source_domain":"<string>","target_domain":"<string>","contact_name":"<string>","contact_email":"<string>","proposal_type":"<string>","cta_link":"<string>","calendar_embed":"<string>"}}'
```

### Detect Page Changes

Compare a page's current content against a saved snapshot. Returns added/removed lines and change summary. 1 credit.

`POST /crawl/diff`

**Estimated cost:** $0.03

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `url` | string | Yes | URL to compare against its previous snapshot |

```bash
curl -X POST 'https://api.orth.sh/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"bytemine","path":"/crawl/diff","body":{"url":"<string>"}}'
```

### Continue Crawl Job

Resume processing pending pages in an existing crawl job. Call repeatedly until status is 'completed'.

`POST /crawl/continue`

**Estimated cost:** $0.03

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `job_id` | string | Yes | Crawl job ID to continue |

```bash
curl -X POST 'https://api.orth.sh/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"bytemine","path":"/crawl/continue","body":{"job_id":"<string>"}}'
```

### Crawl Job Status

Check crawl job status including pages crawled, found, and completion. Free, no credits.

`POST /crawl/status`

**Estimated cost:** $0

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `job_id` | string | Yes | Crawl job ID to check status |

```bash
curl -X POST 'https://api.orth.sh/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"bytemine","path":"/crawl/status","body":{"job_id":"<string>"}}'
```

### Get Crawl Results

Retrieve paginated results from a completed crawl. Each result includes URL, markdown, metadata, and links. Free, no credits.

`POST /crawl/results`

**Estimated cost:** $0

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `job_id` | string | Yes | Crawl job ID to get results for |
| `page` | integer | No | Page number (default 1) |
| `per_page` | integer | No | Results per page (default 50) |

```bash
curl -X POST 'https://api.orth.sh/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"bytemine","path":"/crawl/results","body":{"job_id":"<string>","page":"<integer>","per_page":"<integer>"}}'
```

### Meeting Brief

Generate a comprehensive meeting prep brief with company intel, contacts, talking points, objections, ice breakers, and pain points. 10 credits.

`POST /v1/apps/meeting-prep`

**Estimated cost:** $0.3

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `domain` | string | Yes | Prospect company domain |
| `your_domain` | string | No | Your company domain for context |
| `contact_email` | string | No | Contact email for person-level enrichment |
| `contact_linkedin` | string | No | Contact LinkedIn URL for person-level enrichment |

```bash
curl -X POST 'https://api.orth.sh/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"bytemine","path":"/v1/apps/meeting-prep","body":{"domain":"<string>","your_domain":"<string>","contact_email":"<string>","contact_linkedin":"<string>"}}'
```

### ROI Calculator

Generate a personalized ROI projection and business case with quantified savings, implementation timeline, risk analysis, and outreach copy. Returns a public shareable URL. 10 credits.

`POST /v1/apps/roi-calculator`

**Estimated cost:** $0.3

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `target_domain` | string | Yes | Prospect company domain |
| `your_domain` | string | No | Your company domain |
| `your_product_description` | string | No | Description of your product/service |
| `investment_amount` | string | No | Annual cost in dollars |
| `contact_email` | string | No | Contact email |
| `contact_linkedin` | string | No | Contact LinkedIn URL |
| `contact_name` | string | No | Contact name |
| `cta_link` | string | No | Call-to-action URL |

```bash
curl -X POST 'https://api.orth.sh/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"bytemine","path":"/v1/apps/roi-calculator","body":{"target_domain":"<string>","your_domain":"<string>","your_product_description":"<string>","investment_amount":"<string>","contact_email":"<string>","contact_linkedin":"<string>","contact_name":"<string>","cta_link":"<string>"}}'
```

---

Full details and an interactive quickstart: https://orthogonal.com/discover/bytemine
