# Signalbase — 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)

Real-time funding, acquisition, hiring, and job change signals API. Includes investor data, company search, people discovery, and batch CSV 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": "<usd>", "data": { ... } }`.

## Endpoints

### Get Acquisition Signals

Fetch acquisition signals with filtering by date, country, deal amount, and company details.

`GET /signals/acquisitions`

**Estimated cost:** $0.14

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `page` | integer | No | Page number |
| `limit` | integer | No | Results per page (max: 100) |
| `date_preset` | string | No | Relative date shorthand |
| `countries` | string | No | Acquired company HQ. Comma-separated country codes |
| `exclude_countries` | string | No | Acquired company HQ denylist. Comma-separated country names or codes to exclude |
| `acquirer_countries` | string | No | Acquiring company HQ. Comma-separated country codes |
| `exclude_acquirer_countries` | string | No | Acquiring company HQ denylist. Comma-separated country names or codes to exclude |
| `categories` | string | No | Pipe-separated company categories / industries |
| `subcategories` | string | No | Comma-separated subcategory IDs |
| `industry` | string | No | Comma-separated exact industry names |
| `company_domain` | string | No | Acquired company website domain |
| `company_linkedin_url` | string | No | Acquired company LinkedIn URL |
| `company_name` | string | No | Search by acquired company name (partial match, fuzzy) |
| `search` | string | No | Free-text search across company name & industry |
| `amount_min` | integer | No | Minimum acquisition amount in whole dollars |
| `amount_max` | integer | No | Maximum acquisition amount in whole dollars |
| `employee_count_min` | integer | No | Minimum company employee count |
| `employee_count_max` | integer | No | Maximum company employee count |
| `founded_year_min` | integer | No | Minimum company founded year |
| `founded_year_max` | integer | No | Maximum company founded year |
| `currency` | string | No | Filter by currency (ISO 4217 code) |
| `verification_status` | string | No | Comma-separated statuses: verified, unverified, pending |
| `acquiring_company` | string | No | Search by acquiring company name (partial match) |
| `sort_by` | string | No | Sort field: occurred_at, discovered_at, amount, employee_count |
| `sort_order` | string | No | Sort direction: asc or desc |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"signalbase","path":"/signals/acquisitions","method":"GET","query":{"page":"<integer>","limit":"<integer>","date_preset":"<string>","countries":"<string>","exclude_countries":"<string>","acquirer_countries":"<string>","exclude_acquirer_countries":"<string>","categories":"<string>","subcategories":"<string>","industry":"<string>","company_domain":"<string>","company_linkedin_url":"<string>","company_name":"<string>","search":"<string>","amount_min":"<integer>","amount_max":"<integer>","employee_count_min":"<integer>","employee_count_max":"<integer>","founded_year_min":"<integer>","founded_year_max":"<integer>","currency":"<string>","verification_status":"<string>","acquiring_company":"<string>","sort_by":"<string>","sort_order":"<string>"}}'
```

### Get Companies

Browse and search companies with filtering by industry, size, location, and founding year.

`GET /companies`

**Estimated cost:** $0.14

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `page` | integer | No | Page number |
| `limit` | integer | No | Results per page (max: 100) |
| `search` | string | No | Free-text search across company name, industry, description, keywords, and specialties |
| `domain` | string | No | Company website domain — exact match |
| `linkedin_url` | string | No | Company LinkedIn URL — exact match |
| `countries` | string | No | Comma-separated country codes |
| `exclude_countries` | string | No | Comma-separated country names or codes to exclude |
| `industry` | string | No | Comma-separated industry names — exact match |
| `categories` | string | No | Pipe-separated industry categories |
| `subcategories` | string | No | Comma-separated subcategory IDs |
| `employee_count_min` | integer | No | Minimum employee count |
| `employee_count_max` | integer | No | Maximum employee count |
| `founded_year_min` | integer | No | Minimum founded year |
| `founded_year_max` | integer | No | Maximum founded year |
| `sort_by` | string | No | Sort field: name, employee_count, founded_year, created_at |
| `sort_order` | string | No | Sort direction: asc or desc |
| `count` | boolean | No | Return count of results without consuming credits |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"signalbase","path":"/companies","method":"GET","query":{"page":"<integer>","limit":"<integer>","search":"<string>","domain":"<string>","linkedin_url":"<string>","countries":"<string>","exclude_countries":"<string>","industry":"<string>","categories":"<string>","subcategories":"<string>","employee_count_min":"<integer>","employee_count_max":"<integer>","founded_year_min":"<integer>","founded_year_max":"<integer>","sort_by":"<string>","sort_order":"<string>","count":"<boolean>"}}'
```

### Create CSV Enrichment Job

Submit companies for batch enrichment with funding, acquisition, hiring, job change, and investor intelligence. 1 credit per job.

`POST /csv-enrichment`

**Estimated cost:** $0.14

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `companies` | array | No | Companies to enrich |
| `fileName` | string | No | Optional label stored on the enrichment job |
| `wait` | boolean | No | If true, the API waits up to timeout seconds and returns completed results inline when available |
| `timeout` | integer | No | Maximum wait time in seconds when wait=true |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"signalbase","path":"/csv-enrichment","body":{"companies":"<array>","fileName":"<string>","wait":"<boolean>","timeout":"<integer>"}}'
```

### Get CSV Enrichment Job

Poll enrichment job status and retrieve completed results. Free upstream (0 credits).

`GET /csv-enrichment/{jobId}`

**Estimated cost:** $0.01

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `jobId` | string | Yes | Path parameter — substitute directly into the endpoint `path`. |
| `limit` | integer | No | Number of results to return |

```bash
# Replace {jobId} in "path" with real values before sending
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"signalbase","path":"/csv-enrichment/{jobId}","method":"GET","query":{"limit":"<integer>"}}'
```

### Get Funding Signals

Fetch funding signals with filtering by date, country, round type, amount, industry, and more.

`GET /signals/funding`

**Estimated cost:** $0.14

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `page` | integer | No | Page number |
| `limit` | integer | No | Results per page (max: 100) |
| `dateFrom` | string | No | Filter by date from (ISO-8601 string) |
| `dateTo` | string | No | Filter by date to (ISO-8601 string) |
| `date_preset` | string | No | Relative date shorthand |
| `countries` | string | No | Comma-separated country codes |
| `exclude_countries` | string | No | Comma-separated country names or codes to exclude |
| `categories` | string | No | Pipe-separated company categories / industries |
| `subcategories` | string | No | Comma-separated subcategory IDs |
| `industry` | string | No | Comma-separated exact industry names |
| `company_domain` | string | No | Company website domain |
| `company_linkedin_url` | string | No | LinkedIn company URL |
| `company_name` | string | No | Search by company name (partial match, fuzzy) |
| `search` | string | No | Free-text search across company name & industry |
| `amount_min` | integer | No | Minimum funding amount |
| `amount_max` | integer | No | Maximum funding amount |
| `employee_count_min` | integer | No | Minimum company employee count |
| `employee_count_max` | integer | No | Maximum company employee count |
| `founded_year_min` | integer | No | Minimum company founded year |
| `founded_year_max` | integer | No | Maximum company founded year |
| `round` | string | No | Comma-separated round types |
| `round_flavor` | string | No | Comma-separated round flavors |
| `currency` | string | No | Filter by ISO 4217 currency code |
| `verification_status` | string | No | Comma-separated statuses |
| `investor_name` | string | No | Search by investor name (partial match) |
| `sort_by` | string | No | Sort field |
| `sort_order` | string | No | Sort direction |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"signalbase","path":"/signals/funding","method":"GET","query":{"page":"<integer>","limit":"<integer>","dateFrom":"<string>","dateTo":"<string>","date_preset":"<string>","countries":"<string>","exclude_countries":"<string>","categories":"<string>","subcategories":"<string>","industry":"<string>","company_domain":"<string>","company_linkedin_url":"<string>","company_name":"<string>","search":"<string>","amount_min":"<integer>","amount_max":"<integer>","employee_count_min":"<integer>","employee_count_max":"<integer>","founded_year_min":"<integer>","founded_year_max":"<integer>","round":"<string>","round_flavor":"<string>","currency":"<string>","verification_status":"<string>","investor_name":"<string>","sort_by":"<string>","sort_order":"<string>"}}'
```

### Get Hiring Signals

Fetch hiring signals (open job postings) with position, department, seniority, and location filters.

`GET /signals/hiring`

**Estimated cost:** $0.14

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `page` | integer | No | Page number |
| `limit` | integer | No | Results per page (max: 100) |
| `dateFrom` | string | No | Filter by date from (ISO-8601 string) |
| `dateTo` | string | No | Filter by date to (ISO-8601 string) |
| `date_preset` | string | No | Relative date shorthand |
| `search` | string | No | Free-text search across company name, industry, job title, location, and city |
| `description` | string | No | Full-text keyword search over the job description body only |
| `city` | string | No | Free-text search on city, location, and region |
| `countries` | string | No | Comma-separated country codes |
| `exclude_countries` | string | No | Comma-separated country names or codes to exclude |
| `job_countries` | string | No | Comma-separated country codes matching the job listing location only |
| `states` | string | No | Comma-separated US state codes |
| `categories` | string | No | Pipe-separated industry categories |
| `subcategories` | string | No | Comma-separated subcategory IDs |
| `positions` | string | No | Comma-separated position IDs |
| `departments` | string | No | Comma-separated department IDs |
| `seniorities` | string | No | Comma-separated seniority IDs |
| `company_domain` | string | No | Company website domain |
| `company_linkedin_url` | string | No | LinkedIn company URL |
| `company_name` | string | No | Search by company name (partial match, fuzzy) |
| `team_size` | string | No | Comma-separated team size ranges |
| `applicants` | string | No | Comma-separated applicant ranges |
| `sort_by` | string | No | Sort field |
| `sort_order` | string | No | Sort direction |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"signalbase","path":"/signals/hiring","method":"GET","query":{"page":"<integer>","limit":"<integer>","dateFrom":"<string>","dateTo":"<string>","date_preset":"<string>","search":"<string>","description":"<string>","city":"<string>","countries":"<string>","exclude_countries":"<string>","job_countries":"<string>","states":"<string>","categories":"<string>","subcategories":"<string>","positions":"<string>","departments":"<string>","seniorities":"<string>","company_domain":"<string>","company_linkedin_url":"<string>","company_name":"<string>","team_size":"<string>","applicants":"<string>","sort_by":"<string>","sort_order":"<string>"}}'
```

### Get Investors

Fetch investor data including VCs, angels, PE firms, corporate investors, accelerators, and more.

`GET /signals/investors`

**Estimated cost:** $0.14

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `page` | integer | No | Page number |
| `limit` | integer | No | Results per page (max: 100) |
| `type` | string | No | Comma-separated investor types |
| `countries` | string | No | Comma-separated country codes |
| `ticket_size_min` | integer | No | Minimum ticket size in USD |
| `ticket_size_max` | integer | No | Maximum ticket size in USD |
| `sort_by` | string | No | Sort field: name, created_at, ticket_size_min, ticket_size_max |
| `sort_order` | string | No | Sort direction: asc or desc |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"signalbase","path":"/signals/investors","method":"GET","query":{"page":"<integer>","limit":"<integer>","type":"<string>","countries":"<string>","ticket_size_min":"<integer>","ticket_size_max":"<integer>","sort_by":"<string>","sort_order":"<string>"}}'
```

### Search People

Discover people across employees and job-change subjects, filtered by title, function, seniority, geography, and signal activity.

`GET /people`

**Estimated cost:** $0.14

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `page` | integer | No | Page number |
| `limit` | integer | No | Results per page (max: 100) |
| `title` | string | No | Title or comma-separated list (e.g. CTO,VP of Engineering) |
| `function` | string | No | Comma-separated function ids |
| `seniority` | string | No | Comma-separated seniority ids |
| `country` | string | No | ISO 3166-1 alpha-2 code or comma-separated list (e.g. US,NL) |
| `exclude_countries` | string | No | Comma-separated country codes to exclude |
| `city` | string | No | Free-text city (partial match) |
| `company_size` | string | No | Comma-separated size bands |
| `industry` | string | No | Industry or comma-separated list (case-insensitive exact match) |
| `linkedin_url` | string | No | Person LinkedIn profile URL (/in/ or /pub/) |
| `company_domain` | string | No | Company website domain (e.g. novartis.com) |
| `company_linkedin_url` | string | No | Company LinkedIn URL (e.g. linkedin.com/company/novartis) |
| `signal_type` | string | No | Comma-separated signal type(s): funding_round, acquisition, job_change |
| `signal_date_range` | string | No | Lookback window as <n><unit> with unit d/w/m/y — e.g. 30d, 6m, 12m, 2y |
| `include_former` | boolean | No | Currently only false is supported |
| `count` | string | No | Set to true to return only the total count, without data rows and without consuming credits |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"signalbase","path":"/people","method":"GET","query":{"page":"<integer>","limit":"<integer>","title":"<string>","function":"<string>","seniority":"<string>","country":"<string>","exclude_countries":"<string>","city":"<string>","company_size":"<string>","industry":"<string>","linkedin_url":"<string>","company_domain":"<string>","company_linkedin_url":"<string>","signal_type":"<string>","signal_date_range":"<string>","include_former":"<boolean>","count":"<string>"}}'
```

### Get Job Change Signals

Fetch job change signals with role, department, seniority, and LinkedIn filters. Person names are GDPR-masked.

`GET /signals/job-changes`

**Estimated cost:** $0.14

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `page` | integer | No | Page number |
| `limit` | integer | No | Results per page (max: 100) |
| `dateFrom` | string | No | Filter by date from (ISO-8601 string) |
| `dateTo` | string | No | Filter by date to (ISO-8601 string) |
| `date_preset` | string | No | Relative date shorthand |
| `search` | string | No | Free-text search across company name, industry, person name, and role |
| `countries` | string | No | Comma-separated country codes |
| `exclude_countries` | string | No | Comma-separated country names or codes to exclude |
| `personLinkedinUrl` | string | No | Exact LinkedIn URL for a person |
| `company_linkedin_url` | string | No | LinkedIn company URL |
| `company_domain` | string | No | Company website domain |
| `source` | string | No | Exact match on source |
| `company_name` | string | No | Search by company name (partial match, fuzzy) |
| `new_role` | string | No | Search by new role / job title |
| `keyword` | string | No | Search by keyword tag |
| `positions` | string | No | Comma-separated position IDs |
| `departments` | string | No | Comma-separated department IDs |
| `seniorities` | string | No | Comma-separated seniority IDs |
| `sort_by` | string | No | Sort field |
| `sort_order` | string | No | Sort direction |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"signalbase","path":"/signals/job-changes","method":"GET","query":{"page":"<integer>","limit":"<integer>","dateFrom":"<string>","dateTo":"<string>","date_preset":"<string>","search":"<string>","countries":"<string>","exclude_countries":"<string>","personLinkedinUrl":"<string>","company_linkedin_url":"<string>","company_domain":"<string>","source":"<string>","company_name":"<string>","new_role":"<string>","keyword":"<string>","positions":"<string>","departments":"<string>","seniorities":"<string>","sort_by":"<string>","sort_order":"<string>"}}'
```

---

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