# Fiber AI — 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)
Reach anyone on the planet with verified contacts. Fiber AI delivers the most accurate contact data, period.
**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": "<usd>", "data": { ... } }`.
## Endpoints
### Convert text into profile search filters
Takes free-form text (e.g., 'Software engineers in US with 5+ years of experience') and converts it into a structured set of filters for profile search. This endpoint helps transform natural language queries into standardized search parameters such as job titles, skills, seniority, locations, past experiences, education, languages, and more.
`POST /v1/text-to-search-params/profiles`
**Estimated cost:** $0.04
**Docs:** https://api.fiber.ai/docs/#tag/agentic-search/POST/v1/text-to-search-params/profiles
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `query` | string | Yes | |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"fiber","path":"/v1/text-to-search-params/profiles","body":{"query":"<string>"}}'
```
### Search profiles from text
Takes free-form text (e.g., 'Software engineers in US with 5+ years of experience') and returns a list of matching profiles. The endpoint interprets natural language queries and applies structured filters such as job titles, seniority, skills, locations, past jobs, education, and languages to identify relevant people. 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 /v1/natural-language-search/profiles`
**Estimated cost:** Dynamic — use `"dryRun": true` in the Run API request to check the exact cost before calling.
**Docs:** https://api.fiber.ai/docs/#tag/agentic-search/POST/v1/natural-language-search/profiles
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `query` | string | Yes | |
| `pageSize` | integer | No | The number of profiles to return, if you need to get more results, you can paginate. |
| `getDetailedEducation` | boolean | No | Whether to include deep details about each educational item, like the school's LinkedIn URL, website, location, etc. That'll be put in the detailedEducation array. This slows down the API call, so only enable this if you need it. |
| `getDetailedWorkExperience` | boolean | No | Whether to include deep details about each work experience item, like the company's LinkedIn URL, website, location, etc. That'll be put in the detailedWorkExperience array. This slows down the API call, so only enable this if you need it. |
| `cursor` | string | No | A pagination cursor returned from a previous search response. Use this to fetch the next page of results. For later cursor 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":"fiber","path":"/v1/natural-language-search/profiles","body":{"query":"<string>","pageSize":"<integer>","getDetailedEducation":"<boolean>","getDetailedWorkExperience":"<boolean>","cursor":"<string>"}}'
```
### Fetch LinkedIn post comments
Fetches paginated comments for a LinkedIn post. Each page contains up to 10 comments. 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 /v1/linkedin-live-fetch/post-comments`
**Estimated cost:** $0.04
**Docs:** https://api.fiber.ai/docs/#tag/live-fetch/POST/v1/linkedin-live-fetch/post-comments
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `contentId` | string | Yes | You can get LinkedIn posts from the Profile or Company Posts endpoints. (e.g., 'urn:li:activity:7123456789012345678' or 'urn:li:ugcPost:7391650829398675456') |
| `cursor` | string | No | Pagination cursor for fetching additional pages of posts For later cursor 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":"fiber","path":"/v1/linkedin-live-fetch/post-comments","body":{"contentId":"<string>","cursor":"<string>"}}'
```
### Live fetch LinkedIn company
Returns an enriched company with details for a given LinkedIn company identifier
`POST /v1/linkedin-live-fetch/company/single`
**Estimated cost:** $0.04
**Docs:** https://api.fiber.ai/docs/#tag/live-fetch/POST/v1/linkedin-live-fetch/company/single
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `type` | string | Yes | Identifier type. One of: 'slug' (company vanity name, e.g. 'microsoft'), 'orgId' (LinkedIn organization ID, e.g. '1441'), 'liUrl' (full LinkedIn company URL), or 'fiberId' (Fiber company ID, e.g. 'comp_1441'). |
| `value` | string | Yes | The company's LinkedIn slug (e.g., 'microsoft'), LinkedIn URL (e.g., 'https://www.linkedin.com/company/microsoft' or 'https://www.linkedin.com/company/1441'), LinkedIn organization ID (e.g., '1441' for Google), or Fiber company ID (e.g., 'comp_1441') |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"fiber","path":"/v1/linkedin-live-fetch/company/single","body":{"type":"<string>","value":"<string>"}}'
```
### Convert text into company search filters
Takes free-form text (e.g., 'Series A startups in USA with 50–200 employees') and converts it into a structured set of filters for company search. This endpoint helps transform natural language queries into standardized search parameters such as industries, funding stages, headcount ranges, locations, and more.
`POST /v1/text-to-search-params/companies`
**Estimated cost:** $0.04
**Docs:** https://api.fiber.ai/docs/#tag/agentic-search/POST/v1/text-to-search-params/companies
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `query` | string | Yes | |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"fiber","path":"/v1/text-to-search-params/companies","body":{"query":"<string>"}}'
```
### Investor search
Search for investors with flexible filtering capabilities 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 /v1/investor-search`
**Estimated cost:** Dynamic — use `"dryRun": true` in the Run API request to check the exact cost before calling.
**Docs:** https://api.fiber.ai/docs/#tag/search/POST/v1/investor-search
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `searchParams` | object | Yes | Investor search filter parameters |
| `pageSize` | integer | No | Number of investors to return per page (max 1000) |
| `cursor` | string | No | Pagination cursor returned from a previous search response. Use this to fetch the next page of results. Null for the first page. For later cursor 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":"fiber","path":"/v1/investor-search","body":{"searchParams":"<object>","pageSize":"<integer>","cursor":"<string>"}}'
```
### Job postings search
Search for job postings with flexible filtering capabilities 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 /v1/job-search`
**Estimated cost:** Dynamic — use `"dryRun": true` in the Run API request to check the exact cost before calling.
**Docs:** https://api.fiber.ai/docs/#tag/search/POST/v1/job-search
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `searchParams` | object | Yes | Job search filter parameters |
| `pageSize` | integer | No | Number of jobs to return per page (max 1000) |
| `cursor` | string | No | Pagination cursor for fetching next page of results For later cursor 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":"fiber","path":"/v1/job-search","body":{"searchParams":"<object>","pageSize":"<integer>","cursor":"<string>"}}'
```
### Kitchen sink person lookup
Search for a person using a variety of parameters such as LinkedIn slug, LinkedIn URL, or their current company information. Returns profile data for the person if found.
`POST /v1/kitchen-sink/person`
**Estimated cost:** Dynamic — use `"dryRun": true` in the Run API request to check the exact cost before calling.
**Docs:** https://api.fiber.ai/docs/#tag/kitchen-sink/POST/v1/kitchen-sink/person
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `profileIdentifier` | object | No | Object identifying the profile — NOT a bare string. Shape: { "identifier": <id type>, "value": <the id> }, e.g. {"identifier":"linkedinUrl","value":"https://www.linkedin.com/in/jdoe"}. If provided and correct, no other fields are needed. If you are unsure of the identifier type, omit this and instead pass emailAddress, or personName together with companyName / companyDomain. |
| `emailAddress` | string | No | The email address of the person to search for |
| `personName` | object | No | |
| `jobTitle` | object | No | |
| `companyIdentifier` | string | No | The company the profile is currently working at. If provided the accuracy of the lookup increases. You do not need to pass in any other company parameters if you pass this. |
| `companyName` | object | No | |
| `companyDomain` | object | No | |
| `numProfiles` | integer | No | The maximum number of profiles you want to fetch. Profiles are sorted by best match first. |
| `liveFetch` | boolean | No | Whether to fetch the freshest copy of the found profiles's LinkedIn data (costs extra). If omitted or set to false, we'll give the cached data present in our database. The boolean flag is deprecated and will be removed in future. Please use the object instead. |
| `forceCompanyMatch` | boolean | No | Whether to strictly match the company. If true, we will strictly lookup prospects which belong to given company details. |
| `fuzzySearch` | boolean | No | Whether to use fuzzy search on names, job titles and other parameters. This is good if you are not sure about the exact name or job title. |
| `getDetailedEducation` | boolean | No | Whether to include deep details about each educational item, like the school's LinkedIn URL, website, location, etc. That'll be put in the detailedEducation array. This slows down the API call, so only enable this if you need it. |
| `getDetailedWorkExperience` | boolean | No | Whether to include deep details about each work experience item, like the company's LinkedIn URL, website, location, etc. That'll be put in the detailedWorkExperience array. This slows down the API call, so only enable this if you need it. |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"fiber","path":"/v1/kitchen-sink/person","body":{"profileIdentifier":"<object>","emailAddress":"<string>","personName":"<object>","jobTitle":"<object>","companyIdentifier":"<string>","companyName":"<object>","companyDomain":"<object>","numProfiles":"<integer>","liveFetch":"<boolean>","forceCompanyMatch":"<boolean>","fuzzySearch":"<boolean>","getDetailedEducation":"<boolean>","getDetailedWorkExperience":"<boolean>"}}'
```
### Kitchen sink company lookup
Search for a company using a variety of parameters such as LinkedIn slug, LinkedIn URL, name, etc. Returns complete company data if found.
`POST /v1/kitchen-sink/company`
**Estimated cost:** Dynamic — use `"dryRun": true` in the Run API request to check the exact cost before calling.
**Docs:** https://api.fiber.ai/docs/#tag/kitchen-sink/POST/v1/kitchen-sink/company
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `companyIdentifier` | string | No | A unique identifier for the company. Accepts one of: linkedinSlug, linkedinUrl, or linkedinOrgID. Providing this increases the accuracy and speed of the lookup. If this is provided, you do not need to supply companyName or companyDomain. |
| `companyName` | object | No | |
| `companyDomain` | object | No | |
| `numCompanies` | integer | No | The number of companies you want to fetch. Companies are sorted by best match first. |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"fiber","path":"/v1/kitchen-sink/company","body":{"companyIdentifier":"<string>","companyName":"<object>","companyDomain":"<object>","numCompanies":"<integer>"}}'
```
### People search
Search for people using 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.
`POST /v1/people-search`
**Estimated cost:** Dynamic — use `"dryRun": true` in the Run API request to check the exact cost before calling.
**Docs:** https://api.fiber.ai/docs/#tag/search/POST/v1/people-search
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `searchParams` | object | No | Search parameters for people search. |
| `pageSize` | integer | No | The number of profiles to return, if you need to get more results, you can paginate. |
| `cursor` | string | No | A pagination cursor returned from a previous search response. Use this to fetch the next page of results. For later cursor pages of the same logical search, keep non-pagination parameters unchanged and pass top-level parentRequestId from the first Orthogonal /v1/run response. |
| `currentCompanies` | array | No | Filter people by the companies they are currently working for. If you want to search over many companies, we suggest using the Combined Search API, which is optimized for this use case. |
| `prospectExclusionListIDs` | array | No | Filter out people which belong to the given prospect exclusion lists |
| `companyExclusionListIDs` | array | No | Filter out people who work at companies which belong to the given company exclusion lists |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"fiber","path":"/v1/people-search","body":{"searchParams":"<object>","pageSize":"<integer>","cursor":"<string>","currentCompanies":"<array>","prospectExclusionListIDs":"<array>","companyExclusionListIDs":"<array>"}}'
```
### Search companies from text
Takes free-form text (e.g., 'Series A startups in USA with 50–200 employees') and returns a list of matching companies. The endpoint interprets natural language queries and applies structured filters such as industries, funding stages, headcount ranges, and locations to identify relevant companies. 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 /v1/natural-language-search/companies`
**Estimated cost:** Dynamic — use `"dryRun": true` in the Run API request to check the exact cost before calling.
**Docs:** https://api.fiber.ai/docs/#tag/agentic-search/POST/v1/natural-language-search/companies
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `query` | string | Yes | |
| `pageSize` | integer | No | The number of companies to return, if you need to get more results, you can paginate. |
| `cursor` | string | No | A pagination cursor returned from a previous search response. Use this to fetch the next page of results. For later cursor 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":"fiber","path":"/v1/natural-language-search/companies","body":{"query":"<string>","pageSize":"<integer>","cursor":"<string>"}}'
```
### Company search
Search for companies using 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.
`POST /v1/company-search`
**Estimated cost:** Dynamic — use `"dryRun": true` in the Run API request to check the exact cost before calling.
**Docs:** https://api.fiber.ai/docs/#tag/search/POST/v1/company-search
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `searchParams` | object | Yes | Search parameters for company search API. |
| `pageSize` | integer | No | The number of companies to return, if you need to get more results, you can paginate. |
| `cursor` | string | No | A pagination cursor returned from a previous search response. Use this to fetch the next page of results. For later cursor pages of the same logical search, keep non-pagination parameters unchanged and pass top-level parentRequestId from the first Orthogonal /v1/run response. |
| `companyExclusionListIDs` | array | No | Filter out companies which belong to the given company exclusion lists. You can create company exclusion lists via /v1/exclusions/companies/create-list |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"fiber","path":"/v1/company-search","body":{"searchParams":"<object>","pageSize":"<integer>","cursor":"<string>","companyExclusionListIDs":"<array>"}}'
```
### Validate a single email
Checks if a given email is likely to bounce using a waterfall of strategies. Works for catch-all email addresses, which are increasingly common yet hard for other APIs to validate.
`POST /v1/validate-email/single`
**Estimated cost:** $0.02
**Docs:** https://api.fiber.ai/docs/#tag/validation/POST/v1/validate-email/single
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `email` | string | Yes | The email to validate |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"fiber","path":"/v1/validate-email/single","body":{"email":"<string>"}}'
```
### Live fetch LinkedIn profile
Returns an enriched profile with details for a given LinkedIn profile identifier
`POST /v1/linkedin-live-fetch/profile/single`
**Estimated cost:** $0.04
**Docs:** https://api.fiber.ai/docs/#tag/live-fetch/POST/v1/linkedin-live-fetch/profile/single
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `identifier` | string | Yes | Identifier can be a profile's LinkedIn slug (e.g. 'williamhgates' from <linkedin.com/in/williamhgates>), a Sales Navigator URN (e.g. 'ACwAAA.....'), or a full LinkedIn URL (e.g. 'https://www.linkedin.com/in/williamhgates/') |
| `getDetailedEducation` | boolean | No | Whether to include deep details about each educational item, like the school's LinkedIn URL, website, location, etc. That'll be put in the detailedEducation array. This slows down the API call, so only enable this if you need it. |
| `getDetailedWorkExperience` | boolean | No | Whether to include deep details about each work experience item, like the company's LinkedIn URL, website, location, etc. That'll be put in the detailedWorkExperience array. This slows down the API call, so only enable this if you need it. |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"fiber","path":"/v1/linkedin-live-fetch/profile/single","body":{"identifier":"<string>","getDetailedEducation":"<boolean>","getDetailedWorkExperience":"<boolean>"}}'
```
### Fetch LinkedIn profile posts
Fetches recent posts from a LinkedIn profile. Returns a paginated feed of posts with optional cursor for pagination. Each page returns up to 50 posts. 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 /v1/linkedin-live-fetch/profile-posts`
**Estimated cost:** $0.04
**Docs:** https://api.fiber.ai/docs/#tag/live-fetch/POST/v1/linkedin-live-fetch/profile-posts
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `identifier` | string | Yes | Identifier can be a profile's LinkedIn slug (e.g. 'williamhgates' from <linkedin.com/in/williamhgates>), a Sales Navigator URN (e.g. 'ACwAAA.....'), or a full LinkedIn URL (e.g. 'https://www.linkedin.com/in/williamhgates/') |
| `cursor` | string | No | Pagination cursor for fetching additional pages of posts For later cursor 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":"fiber","path":"/v1/linkedin-live-fetch/profile-posts","body":{"identifier":"<string>","cursor":"<string>"}}'
```
### Find person by email
Do a reverse lookup: given an email address, find someone's LinkedIn profile and personal details. Note: if you also have the person's name, company, etc., you'll get better results with the Kitchen Sink endpoint, where you can pass all the information you have.
`POST /v1/email-to-person/single`
**Estimated cost:** $0.04
**Docs:** https://api.fiber.ai/docs/#tag/email-lookup/POST/v1/email-to-person/single
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `email` | string | Yes | The person's email address for which you want to do a reverse lookup |
| `num_profiles` | number | No | Number of profiles to return. Maximum 10 profiles can be returned for given query. The returned profiles will be sorted by best match first. |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"fiber","path":"/v1/email-to-person/single","body":{"email":"<string>","num_profiles":"<number>"}}'
```
### Fetch LinkedIn post reactions
Fetches paginated reactions of a specific type for a LinkedIn post. Each page contains up to 10 reactions. 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 /v1/linkedin-live-fetch/post-reactions`
**Estimated cost:** $0.04
**Docs:** https://api.fiber.ai/docs/#tag/live-fetch/POST/v1/linkedin-live-fetch/post-reactions
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `contentId` | string | Yes | You can get LinkedIn posts from the Profile or Company Posts endpoints. (e.g., 'urn:li:activity:7123456789012345678' or 'urn:li:ugcPost:7391650829398675456') |
| `reactionType` | string | No | Type of reaction to fetch. If null, all reactions will be fetched. |
| `cursor` | string | No | Pagination cursor for fetching additional pages of posts For later cursor 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":"fiber","path":"/v1/linkedin-live-fetch/post-reactions","body":{"contentId":"<string>","reactionType":"<string>","cursor":"<string>"}}'
```
### Poll depth chart generation result
Polls the status of a depth chart generation. Returns the org chart when complete.
`POST /v1/depth-chart/poll`
**Cost:** Free
**Docs:** https://api.fiber.ai/docs/#tag/company-info/POST/v1/depth-chart/poll
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `reportId` | string | Yes | Report ID returned by the /depth-chart/start endpoint. |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"fiber","path":"/v1/depth-chart/poll","body":{"reportId":"<string>"}}'
```
### Company count
Get count of companies matching search filters. Use to estimate result sizes before running a full search.
`POST /v1/company-count`
**Estimated cost:** $0.02
**Docs:** https://api.fiber.ai/docs/#tag/search/POST/v1/company-count
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `searchParams` | object | Yes | Search parameters for company search. |
| `companyExclusionListIDs` | array | No | Company exclusion list IDs to filter out. |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"fiber","path":"/v1/company-count","body":{"searchParams":"<object>","companyExclusionListIDs":"<array>"}}'
```
### Get company revenue estimate
Fetches the most recent annual revenue estimate for a company. Pass a LinkedIn company URL, domain, and/or company name.
`POST /v1/company-revenue`
**Estimated cost:** $0.08
**Docs:** https://api.fiber.ai/docs/#tag/company-info/POST/v1/company-revenue
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `companyMetadata` | object | Yes | Company identifier object with optional fields: name, domain, linkedinUrl, linkedinOrgId. |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"fiber","path":"/v1/company-revenue","body":{"companyMetadata":"<object>"}}'
```
### Start depth chart generation
Generates an organizational depth chart for a company. Classifies employees by function. Async. Poll with /depth-chart/poll.
`POST /v1/depth-chart/start`
**Estimated cost:** $0.18
**Docs:** https://api.fiber.ai/docs/#tag/company-info/POST/v1/depth-chart/start
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `company` | object | Yes | Company identifier. Set 'identifier' to 'linkedinUrl', 'linkedinSlug', 'linkedinOrgId', or 'domain' and provide the corresponding 'value'. |
| `functions` | array | No | Optional list of function/department labels to classify employees into (e.g. ['Engineering', 'Sales']). |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"fiber","path":"/v1/depth-chart/start","body":{"company":"<object>","functions":"<array>"}}'
```
### Validate a single phone number
Validates a phone number and returns whether it's valid, reachable, carrier info, and caller name.
`POST /v1/validate-phone/single`
**Estimated cost:** $0.06
**Docs:** https://api.fiber.ai/docs/#tag/validation/POST/v1/validate-phone/single
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `phoneNumber` | string | Yes | Phone number to validate. E.164 format recommended (e.g. +14155551234). |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"fiber","path":"/v1/validate-phone/single","body":{"phoneNumber":"<string>"}}'
```
### Get company scouting report
Generates a comprehensive scouting report for a company including news, founders, funding, media links, and historical headcount.
`POST /v1/scouting-report`
**Estimated cost:** $0.12
**Docs:** https://api.fiber.ai/docs/#tag/company-info/POST/v1/scouting-report
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `company` | object | Yes | Company identifier. Set 'identifier' to 'linkedinUrl', 'linkedinSlug', 'linkedinOrgId', or 'domain' and provide the corresponding 'value'. |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"fiber","path":"/v1/scouting-report","body":{"company":"<object>"}}'
```
### Poll batch contact details
Polls a batch contact details task. Returns partial results as they complete.
`POST /v1/contact-details/batch/poll`
**Cost:** Free
**Docs:** https://api.fiber.ai/docs/#tag/contact-details/POST/v1/contact-details/batch/poll
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `taskId` | string | Yes | Task ID from the batch start endpoint. |
| `cursor` | string | No | Pagination cursor from previous poll response. |
| `take` | integer | No | Number of people to return per page. Defaults to 100. |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"fiber","path":"/v1/contact-details/batch/poll","body":{"taskId":"<string>","cursor":"<string>","take":"<integer>"}}'
```
### Start batch contact details
Batch contact reveal for up to 2000 people. Async. Poll with /contact-details/batch/poll.
`POST /v1/contact-details/batch/start`
**Estimated cost:** Dynamic — use `"dryRun": true` in the Run API request to check the exact cost before calling.
**Docs:** https://api.fiber.ai/docs/#tag/contact-details/POST/v1/contact-details/batch/start
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `personDetails` | array | Yes | Array of objects. Each item has linkedinUrl: {value: "https://linkedin.com/in/..."} |
| `enrichmentTypes` | object | No | Contact types to request. Defaults to all true. |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"fiber","path":"/v1/contact-details/batch/start","body":{"personDetails":"<array>","enrichmentTypes":"<object>"}}'
```
### Poll exhaustive contact details result
Polls the status of an exhaustive contact reveal task. Returns status and results when complete.
`POST /v1/contact-details/exhaustive/poll`
**Cost:** Free
**Docs:** https://api.fiber.ai/docs/#tag/contact-details/POST/v1/contact-details/exhaustive/poll
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `taskId` | string | Yes | Task ID from the exhaustive start endpoint. |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"fiber","path":"/v1/contact-details/exhaustive/poll","body":{"taskId":"<string>"}}'
```
### Start exhaustive contact details reveal
Maximum-coverage async contact reveal. Runs all waterfall steps in parallel. Poll with /contact-details/exhaustive/poll.
`POST /v1/contact-details/exhaustive/start`
**Estimated cost:** Dynamic — use `"dryRun": true` in the Run API request to check the exact cost before calling.
**Docs:** https://api.fiber.ai/docs/#tag/contact-details/POST/v1/contact-details/exhaustive/start
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `linkedinUrl` | string | Yes | Person's LinkedIn URL or slug. |
| `enrichmentType` | object | No | Enrichment types to request. Defaults to all true. |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"fiber","path":"/v1/contact-details/exhaustive/start","body":{"linkedinUrl":"<string>","enrichmentType":"<object>"}}'
```
### People search count
Get count of profiles matching search filters. Use to estimate result sizes before running a full search.
`POST /v1/people-search/count`
**Estimated cost:** $0.02
**Docs:** https://api.fiber.ai/docs/#tag/search/POST/v1/people-search/count
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `searchParams` | object | No | Search parameters for people search. |
| `currentCompanies` | array | No | Filter people by the companies they currently work for. |
| `prospectExclusionListIDs` | array | No | Prospect exclusion list IDs to filter out. |
| `companyExclusionListIDs` | array | No | Company exclusion list IDs to filter out. |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"fiber","path":"/v1/people-search/count","body":{"searchParams":"<object>","currentCompanies":"<array>","prospectExclusionListIDs":"<array>","companyExclusionListIDs":"<array>"}}'
```
### Reveal contact details (standard)
Standard synchronous contact reveal. Returns emails and/or phone numbers for a person given their LinkedIn URL. Best balance of speed, cost, and coverage.
`POST /v1/contact-details/single`
**Estimated cost:** Dynamic — use `"dryRun": true` in the Run API request to check the exact cost before calling.
**Docs:** https://api.fiber.ai/docs/#tag/contact-details/POST/v1/contact-details/single
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `linkedinUrl` | string | Yes | Person's LinkedIn URL or bare slug (e.g. 'https://www.linkedin.com/in/william-h-gates'). |
| `enrichmentType` | object | No | Enrichment types to request. Defaults to all true. Set fields to false to reduce cost. |
| `validateEmails` | boolean | No | Whether to bounce-validate emails before returning. No additional cost. |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"fiber","path":"/v1/contact-details/single","body":{"linkedinUrl":"<string>","enrichmentType":"<object>","validateEmails":"<boolean>"}}'
```
### Combined search count
Get total count of companies and people matching search filters in one call.
`POST /v1/combined-search/count`
**Estimated cost:** $0.04
**Docs:** https://api.fiber.ai/docs/#tag/search/POST/v1/combined-search/count
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `companyParams` | object | Yes | Company search parameters. |
| `profileParams` | object | No | Profile search parameters. |
| `companyExclusionListIDs` | array | No | Company exclusion list IDs to filter out. |
| `prospectExclusionListIDs` | array | No | Prospect exclusion list IDs to filter out. |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"fiber","path":"/v1/combined-search/count","body":{"companyParams":"<object>","profileParams":"<object>","companyExclusionListIDs":"<array>","prospectExclusionListIDs":"<array>"}}'
```
### Reveal contact details (turbo)
Fastest synchronous contact reveal using premium enrichment stack. Higher cost, lowest latency.
`POST /v1/contact-details/turbo/sync`
**Estimated cost:** Dynamic — use `"dryRun": true` in the Run API request to check the exact cost before calling.
**Docs:** https://api.fiber.ai/docs/#tag/contact-details/POST/v1/contact-details/turbo/sync
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `linkedinUrl` | string | Yes | Person's LinkedIn URL or entity URN. |
| `enrichmentType` | object | No | Enrichment types to request. Defaults to all true. |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"fiber","path":"/v1/contact-details/turbo/sync","body":{"linkedinUrl":"<string>","enrichmentType":"<object>"}}'
```
### Find LinkedIn URL from X handle
Resolves a Twitter/X handle to a LinkedIn profile URL.
`POST /v1/twitter-handle-to-linkedin/single`
**Estimated cost:** $0.06
**Docs:** https://api.fiber.ai/docs/#tag/social-media/POST/v1/twitter-handle-to-linkedin/single
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `handle` | string | Yes | Twitter/X handle, with or without '@'. |
| `context` | string | No | Optional hint to disambiguate common-name handles. |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"fiber","path":"/v1/twitter-handle-to-linkedin/single","body":{"handle":"<string>","context":"<string>"}}'
```
### Fetch Instagram post details
Fetches details for a specific Instagram post.
`POST /v1/instagram/post-details`
**Estimated cost:** $0.04
**Docs:** https://api.fiber.ai/docs/#tag/instagram/POST/v1/instagram/post-details
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `postUrl` | string | Yes | Full Instagram post URL or shortcode. |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"fiber","path":"/v1/instagram/post-details","body":{"postUrl":"<string>"}}'
```
### Fetch Twitter/X tweet replies
Fetches paginated replies to a given tweet. 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 /v1/twitter/tweet-replies`
**Estimated cost:** $0.04
**Docs:** https://api.fiber.ai/docs/#tag/social-media/POST/v1/twitter/tweet-replies
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `tweetId` | string | Yes | Numeric tweet ID. |
| `cursor` | string | No | Pagination cursor. For later cursor 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":"fiber","path":"/v1/twitter/tweet-replies","body":{"tweetId":"<string>","cursor":"<string>"}}'
```
### Fetch Instagram user profile
Fetches an Instagram user profile by handle.
`POST /v1/instagram/profile`
**Estimated cost:** $0.04
**Docs:** https://api.fiber.ai/docs/#tag/instagram/POST/v1/instagram/profile
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `handle` | string | Yes | Instagram handle, with or without '@'. |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"fiber","path":"/v1/instagram/profile","body":{"handle":"<string>"}}'
```
### Fetch Instagram user reels
Fetches paginated reels from an Instagram user. 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 /v1/instagram/user-reels`
**Estimated cost:** $0.04
**Docs:** https://api.fiber.ai/docs/#tag/instagram/POST/v1/instagram/user-reels
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `handle` | string | Yes | Instagram handle. |
| `nextPageToken` | string | No | Pagination token. For continuation billing, 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":"fiber","path":"/v1/instagram/user-reels","body":{"handle":"<string>","nextPageToken":"<string>"}}'
```
### Start GitHub lookup
Looks up GitHub profiles for a list of people. Async. Poll with /github-lookup/poll.
`POST /v1/github-lookup/trigger`
**Estimated cost:** Dynamic — use `"dryRun": true` in the Run API request to check the exact cost before calling.
**Docs:** https://api.fiber.ai/docs/#tag/github/POST/v1/github-lookup/trigger
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `overallContext` | string | Yes | Descriptor of what the people have in common. |
| `people` | array | Yes | List of people. Each item needs inputType (linkedinUrl\|linkedinUserId\|manual) plus the corresponding field. E.g. {inputType: "linkedinUrl", linkedinUrl: "https://linkedin.com/in/..."} |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"fiber","path":"/v1/github-lookup/trigger","body":{"overallContext":"<string>","people":"<array>"}}'
```
### Poll GitHub lookup results
Polls the status of a GitHub lookup agent run.
`POST /v1/github-lookup/poll`
**Cost:** Free
**Docs:** https://api.fiber.ai/docs/#tag/github/POST/v1/github-lookup/poll
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `githubAgentRunId` | string | Yes | Agent run ID from the trigger endpoint. |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"fiber","path":"/v1/github-lookup/poll","body":{"githubAgentRunId":"<string>"}}'
```
### Poll GitHub to LinkedIn lookup
Polls the status of a GitHub to LinkedIn batch lookup.
`POST /v1/github-to-linkedin/polling`
**Cost:** Free
**Docs:** https://api.fiber.ai/docs/#tag/github/POST/v1/github-to-linkedin/polling
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `githubAgentRunId` | string | Yes | Agent run ID from the trigger endpoint. |
| `cursor` | string | No | Pagination cursor. |
| `pageSize` | number | No | Results per page. Default: 10. |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"fiber","path":"/v1/github-to-linkedin/polling","body":{"githubAgentRunId":"<string>","cursor":"<string>","pageSize":"<number>"}}'
```
### Find person by GitHub username
Finds LinkedIn profile and/or email from a GitHub username. Synchronous.
`POST /v1/github-to-linkedin/single`
**Estimated cost:** Dynamic — use `"dryRun": true` in the Run API request to check the exact cost before calling.
**Docs:** https://api.fiber.ai/docs/#tag/github/POST/v1/github-to-linkedin/single
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `githubUsername` | string | Yes | GitHub username to look up. |
| `outputType` | string | No | What to extract: 'linkedin', 'email', or 'both'. Default: 'both'. |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"fiber","path":"/v1/github-to-linkedin/single","body":{"githubUsername":"<string>","outputType":"<string>"}}'
```
### Start GitHub to LinkedIn lookup
Batch GitHub to LinkedIn lookup. Async. Poll with /github-to-linkedin/polling.
`POST /v1/github-to-linkedin/trigger`
**Estimated cost:** Dynamic — use `"dryRun": true` in the Run API request to check the exact cost before calling.
**Docs:** https://api.fiber.ai/docs/#tag/github/POST/v1/github-to-linkedin/trigger
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `overallContext` | string | No | Descriptor of what the people have in common. |
| `people` | array | Yes | List of GitHub usernames. Max 1000. |
| `outputType` | string | No | What to extract: 'linkedin', 'email', or 'both'. Default: 'linkedin'. |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"fiber","path":"/v1/github-to-linkedin/trigger","body":{"overallContext":"<string>","people":"<array>","outputType":"<string>"}}'
```
### Fetch Instagram post comments
Fetches paginated comments on an Instagram post. 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 /v1/instagram/post-comments`
**Estimated cost:** $0.04
**Docs:** https://api.fiber.ai/docs/#tag/instagram/POST/v1/instagram/post-comments
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `postUrl` | string | Yes | Full Instagram post URL or shortcode. |
| `nextPageToken` | string | No | Pagination token. For continuation billing, 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":"fiber","path":"/v1/instagram/post-comments","body":{"postUrl":"<string>","nextPageToken":"<string>"}}'
```
### Fetch Instagram user posts
Fetches paginated posts from an Instagram user. 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 /v1/instagram/user-posts`
**Estimated cost:** $0.04
**Docs:** https://api.fiber.ai/docs/#tag/instagram/POST/v1/instagram/user-posts
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `handle` | string | Yes | Instagram handle. |
| `nextPageToken` | string | No | Pagination token. For continuation billing, 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":"fiber","path":"/v1/instagram/user-posts","body":{"handle":"<string>","nextPageToken":"<string>"}}'
```
### Fetch Twitter/X user profile
Fetches a Twitter/X user profile by handle.
`POST /v1/twitter/profile`
**Estimated cost:** $0.04
**Docs:** https://api.fiber.ai/docs/#tag/social-media/POST/v1/twitter/profile
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `handle` | string | Yes | Twitter/X handle, with or without leading '@'. |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"fiber","path":"/v1/twitter/profile","body":{"handle":"<string>"}}'
```
### Search Twitter/X tweets
Search tweets by query string. Supports Twitter search operators. 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 /v1/twitter/search`
**Estimated cost:** $0.04
**Docs:** https://api.fiber.ai/docs/#tag/social-media/POST/v1/twitter/search
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `query` | string | Yes | Tweet search query. |
| `cursor` | string | No | Pagination cursor. For later cursor 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":"fiber","path":"/v1/twitter/search","body":{"query":"<string>","cursor":"<string>"}}'
```
### Fetch Twitter/X tweet details
Fetches full details for a specific tweet by ID.
`POST /v1/twitter/tweet-details`
**Estimated cost:** $0.04
**Docs:** https://api.fiber.ai/docs/#tag/social-media/POST/v1/twitter/tweet-details
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `tweetId` | string | Yes | Numeric tweet ID. |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"fiber","path":"/v1/twitter/tweet-details","body":{"tweetId":"<string>"}}'
```
### Fetch Twitter/X tweet quote tweets
Fetches paginated quote tweets for a given tweet. 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 /v1/twitter/tweet-quotes`
**Estimated cost:** $0.04
**Docs:** https://api.fiber.ai/docs/#tag/social-media/POST/v1/twitter/tweet-quotes
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `tweetId` | string | Yes | Numeric tweet ID. |
| `cursor` | string | No | Pagination cursor. For later cursor 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":"fiber","path":"/v1/twitter/tweet-quotes","body":{"tweetId":"<string>","cursor":"<string>"}}'
```
### Fetch Twitter/X tweet retweeters
Fetches paginated list of users who retweeted a tweet. 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 /v1/twitter/tweet-retweeters`
**Estimated cost:** $0.04
**Docs:** https://api.fiber.ai/docs/#tag/social-media/POST/v1/twitter/tweet-retweeters
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `tweetId` | string | Yes | Numeric tweet ID. |
| `cursor` | string | No | Pagination cursor. For later cursor 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":"fiber","path":"/v1/twitter/tweet-retweeters","body":{"tweetId":"<string>","cursor":"<string>"}}'
```
### Fetch Twitter/X user followers
Fetches paginated followers of a Twitter/X user. 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 /v1/twitter/user-followers`
**Estimated cost:** $0.04
**Docs:** https://api.fiber.ai/docs/#tag/social-media/POST/v1/twitter/user-followers
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `handle` | string | Yes | Twitter/X handle. |
| `cursor` | string | No | Pagination cursor. For later cursor 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":"fiber","path":"/v1/twitter/user-followers","body":{"handle":"<string>","cursor":"<string>"}}'
```
### Fetch Twitter/X user following
Fetches paginated list of accounts a Twitter/X user follows. 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 /v1/twitter/user-following`
**Estimated cost:** $0.04
**Docs:** https://api.fiber.ai/docs/#tag/social-media/POST/v1/twitter/user-following
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `handle` | string | Yes | Twitter/X handle. |
| `cursor` | string | No | Pagination cursor. For later cursor 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":"fiber","path":"/v1/twitter/user-following","body":{"handle":"<string>","cursor":"<string>"}}'
```
### Fetch Twitter/X user mentions
Fetches paginated mentions of a Twitter/X user. 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 /v1/twitter/user-mentions`
**Estimated cost:** $0.04
**Docs:** https://api.fiber.ai/docs/#tag/social-media/POST/v1/twitter/user-mentions
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `handle` | string | Yes | Twitter/X handle. |
| `cursor` | string | No | Pagination cursor. For later cursor 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":"fiber","path":"/v1/twitter/user-mentions","body":{"handle":"<string>","cursor":"<string>"}}'
```
### Fetch Twitter/X user tweets
Fetches paginated tweets from a Twitter/X user. 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 /v1/twitter/user-tweets`
**Estimated cost:** $0.04
**Docs:** https://api.fiber.ai/docs/#tag/social-media/POST/v1/twitter/user-tweets
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `handle` | string | Yes | Twitter/X handle. |
| `cursor` | string | No | Pagination cursor. For later cursor 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":"fiber","path":"/v1/twitter/user-tweets","body":{"handle":"<string>","cursor":"<string>"}}'
```
### Fetch TikTok video comments
Fetches paginated comments on a TikTok video. 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 /v1/tiktok/video-comments`
**Estimated cost:** $0.04
**Docs:** https://api.fiber.ai/docs/#tag/tiktok/POST/v1/tiktok/video-comments
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `videoUrl` | string | Yes | Full TikTok video URL. |
| `nextPageToken` | string | No | Pagination token. For continuation billing, 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":"fiber","path":"/v1/tiktok/video-comments","body":{"videoUrl":"<string>","nextPageToken":"<string>"}}'
```
### Fetch YouTube video comments
Fetches paginated comments on a YouTube video. 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 /v1/youtube/video-comments`
**Estimated cost:** $0.04
**Docs:** https://api.fiber.ai/docs/#tag/youtube/POST/v1/youtube/video-comments
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `videoId` | string | Yes | YouTube video ID or full URL. |
| `nextPageToken` | string | No | Pagination token. For continuation billing, 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":"fiber","path":"/v1/youtube/video-comments","body":{"videoId":"<string>","nextPageToken":"<string>"}}'
```
### Fetch YouTube video details
Fetches details for a specific YouTube video.
`POST /v1/youtube/video-details`
**Estimated cost:** $0.04
**Docs:** https://api.fiber.ai/docs/#tag/youtube/POST/v1/youtube/video-details
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `videoId` | string | Yes | YouTube video ID or full URL. |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"fiber","path":"/v1/youtube/video-details","body":{"videoId":"<string>"}}'
```
### Fetch TikTok video details
Fetches details for a specific TikTok video.
`POST /v1/tiktok/video-details`
**Estimated cost:** $0.04
**Docs:** https://api.fiber.ai/docs/#tag/tiktok/POST/v1/tiktok/video-details
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `videoUrl` | string | Yes | Full TikTok video URL. |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"fiber","path":"/v1/tiktok/video-details","body":{"videoUrl":"<string>"}}'
```
### Fetch TikTok song details
Fetches details for a TikTok song.
`POST /v1/tiktok/song-details`
**Estimated cost:** $0.04
**Docs:** https://api.fiber.ai/docs/#tag/tiktok/POST/v1/tiktok/song-details
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `songUrl` | string | Yes | Full TikTok music/song URL. |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"fiber","path":"/v1/tiktok/song-details","body":{"songUrl":"<string>"}}'
```
### Fetch YouTube channel info
Fetches YouTube channel info and paginated videos. 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 /v1/youtube/channel`
**Estimated cost:** $0.04
**Docs:** https://api.fiber.ai/docs/#tag/youtube/POST/v1/youtube/channel
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `channelIdentifier` | string | Yes | YouTube @handle, channel ID, or full URL. |
| `nextPageToken` | string | No | Pagination token. For continuation billing, 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":"fiber","path":"/v1/youtube/channel","body":{"channelIdentifier":"<string>","nextPageToken":"<string>"}}'
```
### Search YouTube videos
Searches YouTube videos by query. 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 /v1/youtube/search`
**Estimated cost:** $0.04
**Docs:** https://api.fiber.ai/docs/#tag/youtube/POST/v1/youtube/search
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `query` | string | Yes | Search query string. |
| `nextPageToken` | string | No | Pagination token. For continuation billing, 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":"fiber","path":"/v1/youtube/search","body":{"query":"<string>","nextPageToken":"<string>"}}'
```
### Fetch YouTube video transcript
Fetches the transcript of a YouTube video.
`POST /v1/youtube/transcript`
**Estimated cost:** $0.04
**Docs:** https://api.fiber.ai/docs/#tag/youtube/POST/v1/youtube/transcript
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `videoId` | string | Yes | YouTube video ID or full URL. |
| `languageCode` | string | No | BCP-47 language code (e.g. 'en', 'es'). |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"fiber","path":"/v1/youtube/transcript","body":{"videoId":"<string>","languageCode":"<string>"}}'
```
### Fetch popular TikTok hashtags
Fetches trending TikTok hashtags.
`POST /v1/tiktok/popular-hashtags`
**Estimated cost:** $0.04
**Docs:** https://api.fiber.ai/docs/#tag/tiktok/POST/v1/tiktok/popular-hashtags
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `country` | string | No | ISO 3166-1 alpha-3 country code. |
| `periodDays` | number | No | Time period: 7, 30, or 120 days. |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"fiber","path":"/v1/tiktok/popular-hashtags","body":{"country":"<string>","periodDays":"<number>"}}'
```
### TikTok unified search
Unified search returning both videos and users. 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 /v1/tiktok/unified-search`
**Estimated cost:** $0.04
**Docs:** https://api.fiber.ai/docs/#tag/tiktok/POST/v1/tiktok/unified-search
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `query` | string | Yes | Search query. |
| `nextPageToken` | string | No | Pagination token. For continuation billing, 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":"fiber","path":"/v1/tiktok/unified-search","body":{"query":"<string>","nextPageToken":"<string>"}}'
```
### Fetch TikTok videos using a song
Fetches TikTok videos that use a specific song. 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 /v1/tiktok/song-videos`
**Estimated cost:** $0.04
**Docs:** https://api.fiber.ai/docs/#tag/tiktok/POST/v1/tiktok/song-videos
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `songUrl` | string | Yes | Full TikTok music/song URL. |
| `nextPageToken` | string | No | Pagination token. For continuation billing, 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":"fiber","path":"/v1/tiktok/song-videos","body":{"songUrl":"<string>","nextPageToken":"<string>"}}'
```
### Fetch TikTok trending feed
Fetches the TikTok trending feed. 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 /v1/tiktok/trending-feed`
**Estimated cost:** $0.04
**Docs:** https://api.fiber.ai/docs/#tag/tiktok/POST/v1/tiktok/trending-feed
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `nextPageToken` | string | No | Pagination token. For continuation billing, 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":"fiber","path":"/v1/tiktok/trending-feed","body":{"nextPageToken":"<string>"}}'
```
### Fetch popular TikTok songs
Fetches popular TikTok songs.
`POST /v1/tiktok/popular-songs`
**Estimated cost:** $0.04
**Docs:** https://api.fiber.ai/docs/#tag/tiktok/POST/v1/tiktok/popular-songs
_No parameters required._
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"fiber","path":"/v1/tiktok/popular-songs"}'
```
### Fetch TikTok video transcript
Fetches the transcript of a TikTok video.
`POST /v1/tiktok/video-transcript`
**Estimated cost:** $0.04
**Docs:** https://api.fiber.ai/docs/#tag/tiktok/POST/v1/tiktok/video-transcript
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `videoUrl` | string | Yes | Full TikTok video URL. |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"fiber","path":"/v1/tiktok/video-transcript","body":{"videoUrl":"<string>"}}'
```
### Fetch TikTok comment replies
Fetches paginated replies to a TikTok comment. 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 /v1/tiktok/comment-replies`
**Estimated cost:** $0.04
**Docs:** https://api.fiber.ai/docs/#tag/tiktok/POST/v1/tiktok/comment-replies
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `commentId` | string | Yes | Comment ID to fetch replies for. |
| `videoUrl` | string | Yes | TikTok video URL the comment belongs to. |
| `nextPageToken` | string | No | Pagination token. For continuation billing, 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":"fiber","path":"/v1/tiktok/comment-replies","body":{"commentId":"<string>","videoUrl":"<string>","nextPageToken":"<string>"}}'
```
### Fetch popular TikTok creators
Fetches popular TikTok creators, optionally filtered by country.
`POST /v1/tiktok/popular-creators`
**Estimated cost:** $0.04
**Docs:** https://api.fiber.ai/docs/#tag/tiktok/POST/v1/tiktok/popular-creators
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `country` | string | No | ISO 3166-1 alpha-3 country code (e.g. 'USA'). Omit for global. |
| `sort` | string | No | Sort order. Omit for default ranking. |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"fiber","path":"/v1/tiktok/popular-creators","body":{"country":"<string>","sort":"<string>"}}'
```
### Fetch TikTok user profile
Fetches a TikTok user profile by handle.
`POST /v1/tiktok/profile`
**Estimated cost:** $0.04
**Docs:** https://api.fiber.ai/docs/#tag/tiktok/POST/v1/tiktok/profile
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `handle` | string | Yes | TikTok handle, with or without '@'. |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"fiber","path":"/v1/tiktok/profile","body":{"handle":"<string>"}}'
```
### Search TikTok hashtag videos
Searches TikTok videos by hashtag. 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 /v1/tiktok/search-hashtag`
**Estimated cost:** $0.04
**Docs:** https://api.fiber.ai/docs/#tag/tiktok/POST/v1/tiktok/search-hashtag
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `query` | string | Yes | Hashtag to search (with or without '#'). |
| `nextPageToken` | string | No | Pagination token. For continuation billing, 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":"fiber","path":"/v1/tiktok/search-hashtag","body":{"query":"<string>","nextPageToken":"<string>"}}'
```
### Search TikTok videos by keyword
Searches TikTok videos by keyword or phrase. 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 /v1/tiktok/search-keyword`
**Estimated cost:** $0.04
**Docs:** https://api.fiber.ai/docs/#tag/tiktok/POST/v1/tiktok/search-keyword
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `query` | string | Yes | Keyword or phrase to search. |
| `nextPageToken` | string | No | Pagination token. For continuation billing, 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":"fiber","path":"/v1/tiktok/search-keyword","body":{"query":"<string>","nextPageToken":"<string>"}}'
```
### Search TikTok users
Searches TikTok users by query. 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 /v1/tiktok/search-users`
**Estimated cost:** $0.04
**Docs:** https://api.fiber.ai/docs/#tag/tiktok/POST/v1/tiktok/search-users
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `query` | string | Yes | Search query for TikTok users. |
| `nextPageToken` | string | No | Pagination token. For continuation billing, 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":"fiber","path":"/v1/tiktok/search-users","body":{"query":"<string>","nextPageToken":"<string>"}}'
```
### Fetch TikTok user followers
Fetches paginated followers of a TikTok user. 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 /v1/tiktok/user-followers`
**Estimated cost:** $0.04
**Docs:** https://api.fiber.ai/docs/#tag/tiktok/POST/v1/tiktok/user-followers
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `handle` | string | Yes | TikTok handle. |
| `nextPageToken` | string | No | Pagination token. For continuation billing, 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":"fiber","path":"/v1/tiktok/user-followers","body":{"handle":"<string>","nextPageToken":"<string>"}}'
```
### Fetch TikTok user following
Fetches paginated list of accounts a TikTok user follows. 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 /v1/tiktok/user-following`
**Estimated cost:** $0.04
**Docs:** https://api.fiber.ai/docs/#tag/tiktok/POST/v1/tiktok/user-following
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `handle` | string | Yes | TikTok handle. |
| `nextPageToken` | string | No | Pagination token. For continuation billing, 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":"fiber","path":"/v1/tiktok/user-following","body":{"handle":"<string>","nextPageToken":"<string>"}}'
```
### Fetch TikTok user videos
Fetches paginated videos from a TikTok user. 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 /v1/tiktok/user-videos`
**Estimated cost:** $0.04
**Docs:** https://api.fiber.ai/docs/#tag/tiktok/POST/v1/tiktok/user-videos
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `handle` | string | Yes | TikTok handle. |
| `nextPageToken` | string | No | Pagination token. For continuation billing, 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":"fiber","path":"/v1/tiktok/user-videos","body":{"handle":"<string>","nextPageToken":"<string>"}}'
```
### POST /v1/multi-source/search
Multi-source AI search. Searches across multiple data sources using natural language. Pricing coming soon from Fiber.
`POST /v1/multi-source/search`
**Estimated cost:** Dynamic — use `"dryRun": true` in the Run API request to check the exact cost before calling.
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `search` | object | Yes | For initial: {request:'initial', query:'...', pageSize:10}. For pagination: {request:'subsequent', cursor:'...'} |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"fiber","path":"/v1/multi-source/search","body":{"search":"<object>"}}'
```
### POST /v1/natural-language-search/combined/sync
Natural language search for both companies and profiles. Converts text query to search params and returns results. Fixed cost for param generation plus per-result charges.
`POST /v1/natural-language-search/combined/sync`
**Estimated cost:** Dynamic — use `"dryRun": true` in the Run API request to check the exact cost before calling.
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `query` | string | Yes | Natural language query (e.g. 'Senior PMs at Series A FinTech in NYC') |
| `companyConfig` | object | Yes | {pageSize, exclusionListIDs, companyCursor} |
| `profileConfig` | object | Yes | {pageSize, exclusionListIDs, profileCursor, getDetailedEducation, getDetailedWorkExperience} |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"fiber","path":"/v1/natural-language-search/combined/sync","body":{"query":"<string>","companyConfig":"<object>","profileConfig":"<object>"}}'
```
### POST /v1/combined-search/paginated
Combined people and company search with pagination. Returns both companies and profiles matching filters. Charged per result returned.
`POST /v1/combined-search/paginated`
**Estimated cost:** Dynamic — use `"dryRun": true` in the Run API request to check the exact cost before calling.
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `companyConfig` | object | No | Company search config with searchParams and pageSize |
| `profileConfig` | object | No | Profile search config with searchParams and pageSize |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"fiber","path":"/v1/combined-search/paginated","body":{"companyConfig":"<object>","profileConfig":"<object>"}}'
```
### POST /v1/natural-language-search/job-description-search
Search for profiles matching a job description using natural language. Converts JD text to search params and returns matching candidates.
`POST /v1/natural-language-search/job-description-search`
**Estimated cost:** Dynamic — use `"dryRun": true` in the Run API request to check the exact cost before calling.
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `search` | object | Yes | For initial: {request:'initial', query:'...', pageSize:25}. For pagination: {request:'subsequent', cursor:'...'} |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"fiber","path":"/v1/natural-language-search/job-description-search","body":{"search":"<object>"}}'
```
### POST /v1/real-estate/listings
Search real estate listings by location. Supports filtering by price, bedrooms, property type, and more. Charged per page of results. 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 /v1/real-estate/listings`
**Estimated cost:** Dynamic — use `"dryRun": true` in the Run API request to check the exact cost before calling.
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `location` | object | Yes | Either {type:'raw', rawQuery:'Austin TX'} or {type:'structured', city:'Austin', stateCode:'TX'} |
| `nextPageToken` | string | No | Pagination token from previous response For continuation billing, keep non-pagination parameters unchanged and pass top-level parentRequestId from the first Orthogonal /v1/run response. |
| `sortBy` | string | No | Sort order |
| `listingStatus` | string | No | Listing category |
| `homeTypes` | array | No | Property types to include |
| `price` | object | No | Price range {min, max} |
| `bedrooms` | object | No | Bedroom count {min} |
| `bathrooms` | object | No | Bathroom count {min} |
| `keywords` | string | No | Keywords to match in listing text |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"fiber","path":"/v1/real-estate/listings","body":{"location":"<object>","nextPageToken":"<string>","sortBy":"<string>","listingStatus":"<string>","homeTypes":"<array>","price":"<object>","bedrooms":"<object>","bathrooms":"<object>","keywords":"<string>"}}'
```
### POST /v1/social-media-lookup/polling
Poll for social media lookup results.
`POST /v1/social-media-lookup/polling`
**Cost:** Free
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `socialMediaFinderRunId` | string | Yes | Run ID from /social-media-lookup/trigger |
| `cursor` | string | No | Pagination cursor |
| `pageSize` | number | No | Results per page (default 10) |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"fiber","path":"/v1/social-media-lookup/polling","body":{"socialMediaFinderRunId":"<string>","cursor":"<string>","pageSize":"<number>"}}'
```
### POST /v1/social-media-lookup/trigger
Find social media profiles (Twitter, Instagram) for a person. Async: poll with /social-media-lookup/polling.
`POST /v1/social-media-lookup/trigger`
**Estimated cost:** Dynamic — use `"dryRun": true` in the Run API request to check the exact cost before calling.
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `person` | object | Yes | Person to look up. Use {inputType:'linkedinUrl', linkedinUrl:'...'} or {inputType:'manual', firstName:'...', lastName:'...'} |
| `platforms` | array | No | Platforms to search (default: ['TWITTER']) |
| `overallContext` | string | No | Context to help disambiguation (e.g. 'AI researcher at OpenAI') |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"fiber","path":"/v1/social-media-lookup/trigger","body":{"person":"<object>","platforms":"<array>","overallContext":"<string>"}}'
```
### POST /v1/stealth-founders/count
Count stealth or ex-stealth startup founders matching search criteria.
`POST /v1/stealth-founders/count`
**Estimated cost:** Dynamic — use `"dryRun": true` in the Run API request to check the exact cost before calling.
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `stealthConfig` | object | Yes | Object with mode. Use {"mode":"in-stealth"} or {"mode":"left-stealth"}. Optional date filters. |
| `searchParams` | object | No | Optional profile search filters |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"fiber","path":"/v1/stealth-founders/count","body":{"stealthConfig":"<object>","searchParams":"<object>"}}'
```
### POST /v1/stealth-founders/search
Search for stealth or ex-stealth startup founders. Returns profiles of founders currently in or who have left stealth mode. Charged per profile found. 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 /v1/stealth-founders/search`
**Estimated cost:** Dynamic — use `"dryRun": true` in the Run API request to check the exact cost before calling.
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `stealthConfig` | object | Yes | Object with mode. Use {"mode":"in-stealth"} or {"mode":"left-stealth"}. Optional date filters. |
| `searchParams` | object | No | Optional profile search filters |
| `pageSize` | integer | No | Profiles per page (default 25) |
| `cursor` | string | No | Pagination cursor For later cursor 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":"fiber","path":"/v1/stealth-founders/search","body":{"stealthConfig":"<object>","searchParams":"<object>","pageSize":"<integer>","cursor":"<string>"}}'
```
### POST /v1/google-maps-search/start
Start a search on Google Maps. Searches businesses by query across specified areas. Charges 3 credits ($0.06) per business found. Async: poll with /google-maps-search/poll.
`POST /v1/google-maps-search/start`
**Estimated cost:** Dynamic — use `"dryRun": true` in the Run API request to check the exact cost before calling.
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `query` | string | Yes | Search query for Google Maps (e.g. 'dominos pizza'). Do not include location. |
| `maxResults` | integer | No | Max results to return (default 100, max 10000) |
| `strategy` | object | Yes | Search strategy. Use {"strategy":"whole-usa"} or {"strategy":"specific-areas","unionAll":[...]} |
| `name` | string | No | Optional project name for reference |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"fiber","path":"/v1/google-maps-search/start","body":{"query":"<string>","maxResults":"<integer>","strategy":"<object>","name":"<string>"}}'
```
### POST /v1/google-maps-search/poll
Poll for Google Maps search results. Returns paginated business data.
`POST /v1/google-maps-search/poll`
**Cost:** Free
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `searchID` | string | Yes | Search ID from /google-maps-search/start |
| `pageSize` | integer | No | Results per page (default 25) |
| `cursor` | string | No | Pagination cursor from previous response |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"fiber","path":"/v1/google-maps-search/poll","body":{"searchID":"<string>","pageSize":"<integer>","cursor":"<string>"}}'
```
### POST /v1/google-maps-search/check
Check progress of a Google Maps search. Returns completion percentage.
`POST /v1/google-maps-search/check`
**Cost:** Free
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `searchID` | string | Yes | Search ID from /google-maps-search/start |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"fiber","path":"/v1/google-maps-search/check","body":{"searchID":"<string>"}}'
```
### POST /v1/domain-lookup/trigger
Find domains and websites for a list of companies. Async: poll with /domain-lookup/polling. Max 400 companies per request.
`POST /v1/domain-lookup/trigger`
**Estimated cost:** Dynamic — use `"dryRun": true` in the Run API request to check the exact cost before calling.
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `overAllContext` | string | Yes | What the companies have in common (e.g. 'British freight brokers') |
| `companyInfo` | array | Yes | Companies to look up (max 400) Array items with fields: name, domain, country, state, city, address, findEmailDomains, otherContext, description |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"fiber","path":"/v1/domain-lookup/trigger","body":{"overAllContext":"<string>","companyInfo":"<array>"}}'
```
### POST /v1/domain-lookup/polling
Poll for domain lookup results.
`POST /v1/domain-lookup/polling`
**Cost:** Free
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `domainAgentRunId` | string | Yes | Run ID from /domain-lookup/trigger |
| `cursor` | string | No | Pagination cursor |
| `pageSize` | number | No | Results per page (default 10) |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"fiber","path":"/v1/domain-lookup/polling","body":{"domainAgentRunId":"<string>","cursor":"<string>","pageSize":"<number>"}}'
```
### POST /v1/local-business-search/poll
Poll for local business search results.
`POST /v1/local-business-search/poll`
**Cost:** Free
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `researchRunId` | string | Yes | Research run ID from /local-business-search/start |
| `pageSize` | integer | No | Results per page (default 25) |
| `cursor` | string | No | Pagination cursor |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"fiber","path":"/v1/local-business-search/poll","body":{"researchRunId":"<string>","pageSize":"<integer>","cursor":"<string>"}}'
```
### POST /v1/local-business-search/start
Start an AI-powered local business search. Finds company details, decision makers, and contact info. Async: poll with /local-business-search/poll.
`POST /v1/local-business-search/start`
**Estimated cost:** Dynamic — use `"dryRun": true` in the Run API request to check the exact cost before calling.
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `companies` | array | Yes | Companies to research Array items with fields: companyName, companyWebsite, companyCity, companyState, companyCountryName, companyCountryCode, companyAddress, context |
| `jobTitles` | array | No | Job titles to find at each company (e.g. ['CEO','Owner']) |
| `strictJobTitleMatch` | boolean | No | If true, only match exact role variants |
| `contactPreferences` | object | No | Controls which contact data to fetch |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"fiber","path":"/v1/local-business-search/start","body":{"companies":"<array>","jobTitles":"<array>","strictJobTitleMatch":"<boolean>","contactPreferences":"<object>"}}'
```
### POST /v1/natural-language-search/combined-search-param
Converts natural language text into structured company and profile search parameters. Does not return results, only the search params.
`POST /v1/natural-language-search/combined-search-param`
**Estimated cost:** Dynamic — use `"dryRun": true` in the Run API request to check the exact cost before calling.
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `query` | string | Yes | Natural language query to convert to search params |
```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api":"fiber","path":"/v1/natural-language-search/combined-search-param","body":{"query":"<string>"}}'
```
---
Full details and an interactive quickstart: https://orthogonal.com/discover/fiber