# 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:** yes ## 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 ### Get Funding Signals Fetch funding signals with filtering by date, country, round type, amount, industry, and more. 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 /signals/funding` **Estimated cost:** $0.08 | Field | Type | Required | Description | |-------|------|----------|-------------| | `page` | integer | No | Page number For later pages of the same logical search, keep non-pagination parameters unchanged and pass top-level parentRequestId from the first Orthogonal /v1/run response. | | `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; takes precedence over dateFrom/dateTo. Valid values: today, yesterday, last_7d, last_14d, last_30d, last_60d, last_90d, last_6m, last_1y, last_2y, this_week, this_month, this_quarter, this_year, last_week, last_month, last_quarter, last_year. | | `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":"","limit":"","dateFrom":"","dateTo":"","date_preset":"","countries":"","exclude_countries":"","categories":"","subcategories":"","industry":"","company_domain":"","company_linkedin_url":"","company_name":"","search":"","amount_min":"","amount_max":"","employee_count_min":"","employee_count_max":"","founded_year_min":"","founded_year_max":"","round":"","round_flavor":"","currency":"","verification_status":"","investor_name":"","sort_by":"","sort_order":""}}' ``` ### 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.08 | 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":"","fileName":"","wait":"","timeout":""}}' ``` ### Get CSV Enrichment Job Poll enrichment job status and retrieve completed results. Free upstream (0 credits). `GET /csv-enrichment/{jobId}` **Estimated cost:** $0.08 | 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":""}}' ``` ### Get Hiring Signals Fetch hiring signals (open job postings) with position, department, seniority, and location 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. `GET /signals/hiring` **Estimated cost:** $0.08 | Field | Type | Required | Description | |-------|------|----------|-------------| | `page` | integer | No | Page number For later pages of the same logical search, keep non-pagination parameters unchanged and pass top-level parentRequestId from the first Orthogonal /v1/run response. | | `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; takes precedence over dateFrom/dateTo. Valid values: today, yesterday, last_7d, last_14d, last_30d, last_60d, last_90d, last_6m, last_1y, last_2y, this_week, this_month, this_quarter, this_year, last_week, last_month, last_quarter, last_year. | | `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":"","limit":"","dateFrom":"","dateTo":"","date_preset":"","search":"","description":"","city":"","countries":"","exclude_countries":"","job_countries":"","states":"","categories":"","subcategories":"","positions":"","departments":"","seniorities":"","company_domain":"","company_linkedin_url":"","company_name":"","team_size":"","applicants":"","sort_by":"","sort_order":""}}' ``` ### Get Investors Fetch investor data including VCs, angels, PE firms, corporate investors, accelerators, and more. 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 /signals/investors` **Estimated cost:** $0.08 | Field | Type | Required | Description | |-------|------|----------|-------------| | `page` | integer | No | Page number For later pages of the same logical search, keep non-pagination parameters unchanged and pass top-level parentRequestId from the first Orthogonal /v1/run response. | | `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":"","limit":"","type":"","countries":"","ticket_size_min":"","ticket_size_max":"","sort_by":"","sort_order":""}}' ``` ### Get Companies Browse and search companies with filtering by industry, size, location, and founding year. 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 /companies` **Estimated cost:** $0.08 | Field | Type | Required | Description | |-------|------|----------|-------------| | `page` | integer | No | Page number For later pages of the same logical search, keep non-pagination parameters unchanged and pass top-level parentRequestId from the first Orthogonal /v1/run response. | | `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":"","limit":"","search":"","domain":"","linkedin_url":"","countries":"","exclude_countries":"","industry":"","categories":"","subcategories":"","employee_count_min":"","employee_count_max":"","founded_year_min":"","founded_year_max":"","sort_by":"","sort_order":"","count":""}}' ``` ### Get Job Change Signals Fetch job change signals with role, department, seniority, and LinkedIn filters. Person names are GDPR-masked. 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 /signals/job-changes` **Estimated cost:** $0.08 | Field | Type | Required | Description | |-------|------|----------|-------------| | `page` | integer | No | Page number For later pages of the same logical search, keep non-pagination parameters unchanged and pass top-level parentRequestId from the first Orthogonal /v1/run response. | | `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; takes precedence over dateFrom/dateTo. Valid values: today, yesterday, last_7d, last_14d, last_30d, last_60d, last_90d, last_6m, last_1y, last_2y, this_week, this_month, this_quarter, this_year, last_week, last_month, last_quarter, last_year. | | `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":"","limit":"","dateFrom":"","dateTo":"","date_preset":"","search":"","countries":"","exclude_countries":"","personLinkedinUrl":"","company_linkedin_url":"","company_domain":"","source":"","company_name":"","new_role":"","keyword":"","positions":"","departments":"","seniorities":"","sort_by":"","sort_order":""}}' ``` ### Get Acquisition Signals Fetch acquisition signals with filtering by date, country, deal amount, and company details. 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 /signals/acquisitions` **Estimated cost:** $0.08 | Field | Type | Required | Description | |-------|------|----------|-------------| | `page` | integer | No | Page number For later pages of the same logical search, keep non-pagination parameters unchanged and pass top-level parentRequestId from the first Orthogonal /v1/run response. | | `limit` | integer | No | Results per page (max: 100) | | `date_preset` | string | No | Relative date shorthand; takes precedence over dateFrom/dateTo. Valid values: today, yesterday, last_7d, last_14d, last_30d, last_60d, last_90d, last_6m, last_1y, last_2y, this_week, this_month, this_quarter, this_year, last_week, last_month, last_quarter, last_year. | | `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":"","limit":"","date_preset":"","countries":"","exclude_countries":"","acquirer_countries":"","exclude_acquirer_countries":"","categories":"","subcategories":"","industry":"","company_domain":"","company_linkedin_url":"","company_name":"","search":"","amount_min":"","amount_max":"","employee_count_min":"","employee_count_max":"","founded_year_min":"","founded_year_max":"","currency":"","verification_status":"","acquiring_company":"","sort_by":"","sort_order":""}}' ``` ### Search People Discover people across employees and job-change subjects, filtered by title, function, seniority, geography, and signal activity. 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 /people` **Estimated cost:** $0.08 | Field | Type | Required | Description | |-------|------|----------|-------------| | `page` | integer | No | Page number For later pages of the same logical search, keep non-pagination parameters unchanged and pass top-level parentRequestId from the first Orthogonal /v1/run response. | | `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 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":"","limit":"","title":"","function":"","seniority":"","country":"","exclude_countries":"","city":"","company_size":"","industry":"","linkedin_url":"","company_domain":"","company_linkedin_url":"","signal_type":"","signal_date_range":"","include_former":"","count":""}}' ``` --- Full details and an interactive quickstart: https://orthogonal.com/discover/signalbase