---
title: "Multi-source AI search"
method: POST
path: "/v1/multi-source/search"
tags: ["Agentic search"]
---

# Multi-source AI search

`POST /v1/multi-source/search`

AI-powered natural language search across multiple sources (LinkedIn, Google Maps, web, and more). Ideal for local business search where companies/employees have spotty web or LinkedIn presence.

**Pagination flow:**

1. **First page** — send `{ search: { request: "initial", query: "...", pageSize: 10 } }`. The `pageSize` you choose here is locked for the entire session.
2. **Subsequent pages** — send `{ search: { request: "subsequent", cursor: "<nextCursor>" } }`.
3. When `nextCursor` is `null` in the response, there are no more results.

<span>⚡ <strong>Rate limit:</strong> 120 requests per 1 minute</span>

<span>💰 <strong>Cost:</strong> Credits are charged after the search completes based on results: 2 credits per company found and 2 credits per prospect found. Each query resolves to either companies or prospects, so only one rate applies per page.&nbsp;<span title="Pricing shown is default pricing. Actual pricing may vary. Your total charge depends on the number of results returned and which entity type the query resolves to.">ⓘ</span></span>

## Request body

- object
  - `apiKey` string, required — Your Fiber API key
  - `search` union, required
    - object
      - `request` 'initial', required — Use "initial" for the first page of a new search. Provide query, pageSize, and any filters.
      - `query` string, required — Natural language search query, e.g. "pizza shops in NYC" or "Series A SaaS founders in London". The API infers whether to return companies or people.
      - `pageSize` integer — Number of results per page (default 10, max 1000). This value is locked for the entire pagination session.
      - `companyFilters` object, nullable — Optional filters applied on top of the AI-derived company filters (e.g. country, funding stage, employee count, etc).
        - `country_codes` string[], nullable — ISO 3166-1 alpha-3 country codes (e.g. USA, GBR).
        - `min_relevance` number, nullable — Minimum relevance score (0.0–1.0). Higher values mean a closer match to your query.
        - `funding_stages` string[], nullable — Last funding round stage filter. Acquired, public, closed, and unknown stages are not supported.
        - `employee_growth` string[], nullable — Year-over-year employee growth trend. Elements are OR-ed together.
        - `website_traffic` string[], nullable — Monthly website traffic bucket filter. Elements are OR-ed together.
        - `employee_count` object, nullable — Filter by number of employees (inclusive range).
          - `min` integer, nullable
          - `max` integer, nullable
        - `founded_year` object, nullable — Filter by company founding year (inclusive range).
          - `min` integer, nullable
          - `max` integer, nullable
        - `revenue` object, nullable — Annual revenue in USD (inclusive range).
          - `min` number, nullable
          - `max` number, nullable
        - `is_b2b` boolean, nullable — If `true`, include only B2B companies. If `false`, exclude B2B companies.
        - `is_tech` boolean, nullable — If `true`, include only tech companies. If `false`, exclude tech companies.
        - `is_saas` boolean, nullable — If `true`, include only SaaS companies. If `false`, exclude SaaS companies.
        - `is_startup` boolean, nullable — If `true`, include only startup-stage companies. If `false`, exclude startups.
        - `website_traffic_growth` string[], nullable — Year-over-year website traffic growth trend. Elements are OR-ed together.
        - `has_linkedin_page` boolean, nullable — If `true`, include only companies with a LinkedIn page. If `false`, exclude them.
        - `has_employees_on_linkedin` boolean, nullable — If `true`, include only companies that have employees listed on LinkedIn. If `false`, exclude them.
        - `has_public_emails` boolean, nullable — If `true`, include only companies with public contact emails. If `false`, exclude them.
        - `has_company_phone` boolean, nullable — If `true`, include only companies with a phone number. If `false`, exclude them.
        - `hiring_is` boolean, nullable — If `true`, include only companies that are currently hiring. If `false`, exclude them.
        - `is_ai` boolean, nullable — If `true`, include only AI-related companies. If `false`, exclude them.
      - `peopleFilters` object, nullable — Optional filters applied on top of the AI-derived people filters (e.g. job titles, country, max people per company). Only used when the query resolves to a people search.
        - `country_codes` string[], nullable — ISO 3166-1 alpha-3 country codes (e.g. USA, GBR).
        - `min_relevance` number, nullable — Minimum relevance score (0.0–1.0). Higher values mean a closer job-title match.
        - `job_titles` object, nullable
          - `include` string[], nullable — Job titles to search for. Abbreviations are supported (e.g. 'CTO'). Elements are OR-ed together.
          - `exclude` string[], nullable — Job title keywords to exclude from results.
        - `max_people_per_company` integer, nullable — Maximum number of people to return per matched company.
        - `company_linkedin_ids` string[], nullable — Restrict results to people from these companies. Provide the numeric LinkedIn company IDs returned by Fiber's company search endpoints.
    - object
      - `request` 'subsequent', required — Use "subsequent" for page 2 and beyond. Only the cursor from the previous response is required; all other parameters are stored server-side.
      - `cursor` string, required — The `nextCursor` value returned by the previous response. Valid for 3 days.

## Response `200`

Default Response

- object
  - `output` object, required
    - `data` union, required — Search results — either companies or prospects, never both
      - object
        - `type` 'companies', required
        - `results` object[], required — Matched companies
          - `name` string, nullable — Company name
          - `domain` string, nullable — Company domain
          - `websiteUrl` string, nullable — Company website URL
          - `linkedinUrl` string, nullable — LinkedIn company page URL using the numeric company ID (e.g. https://linkedin.com/company/1234). Null if unavailable.
          - `industry` string, nullable — Primary industry. The value comes from the data provider and may vary in format.
          - `employeeCount` integer, nullable — Estimated employee count
          - `city` string, nullable — Company city
          - `countryCode` string, nullable — Company country (ISO alpha-3 code, e.g. USA)
          - `foundedYear` integer, nullable — Year the company was founded
          - `description` string, nullable — Company description
      - object
        - `type` 'prospects', required
        - `results` object[], required — Matched prospects with company info
          - `firstName` string, nullable — First name
          - `lastName` string, nullable — Last name
          - `jobTitle` string, nullable — Job title
          - `headline` string, nullable — LinkedIn headline
          - `linkedinUrl` string, nullable — LinkedIn profile URL
          - `countryCode` string, nullable — Person's country (ISO alpha-3 code, e.g. USA)
          - `companyName` string, nullable — The person's current company name
          - `companyDomain` string, nullable — The person's current company domain
          - `companyLinkedinUrl` string, nullable — The person's current company LinkedIn URL
          - `companyCity` string, nullable — The person's current company city
          - `companyCountryCode` string, nullable — The person's current company headquarters country (ISO alpha-3 code, e.g. USA)
    - `message` string, required
    - `nextCursor` string, nullable — Cursor for the next page. Pass this as `cursor` in a `{ request: "subsequent", cursor: "..." }` request. `null` means there are no more results. Cursors expire after 3 days.
  - `chargeInfo` union, required
    - object — Credits were charged immediately for this operation
      - `method` 'charged-now', required
      - `creditsCharged` number, required
      - `lowCreditAlert` object, nullable — Contains a link to get more credits, a warning message, and the remaining credit count.
        - `getMoreCreditsUrl` string, uri, required — URL to top up credits or restart billing cycle to get fresh credits.
        - `message` string, required — Human-readable credits warning.
        - `availableCredits` number, required — Number of credits remaining in the current billing period.
    - object — Credits will be charged after the operation completes
      - `method` 'charging-later', required
      - `message` string, required
      - `lowCreditAlert` object, nullable — Contains a link to get more credits, a warning message, and the remaining credit count.
        - `getMoreCreditsUrl` string, uri, required — URL to top up credits or restart billing cycle to get fresh credits.
        - `message` string, required — Human-readable credits warning.
        - `availableCredits` number, required — Number of credits remaining in the current billing period.
    - object — Credits that were charged for an asynchronous operation
      - `method` 'charged-for-async-process', required
      - `creditsCharged` number, required
      - `message` string, required
      - `lowCreditAlert` object, nullable — Contains a link to get more credits, a warning message, and the remaining credit count.
        - `getMoreCreditsUrl` string, uri, required — URL to top up credits or restart billing cycle to get fresh credits.
        - `message` string, required — Human-readable credits warning.
        - `availableCredits` number, required — Number of credits remaining in the current billing period.
    - object — No credits were charged for this operation
      - `method` 'free', required
      - `message` string, required
      - `lowCreditAlert` object, nullable — Contains a link to get more credits, a warning message, and the remaining credit count.
        - `getMoreCreditsUrl` string, uri, required — URL to top up credits or restart billing cycle to get fresh credits.
        - `message` string, required — Human-readable credits warning.
        - `availableCredits` number, required — Number of credits remaining in the current billing period.
    - object — Credits were refunded for this operation
      - `method` 'credits-refunded', required
      - `creditsRefunded` number, required
      - `message` string, required
      - `lowCreditAlert` object, nullable — Contains a link to get more credits, a warning message, and the remaining credit count.
        - `getMoreCreditsUrl` string, uri, required — URL to top up credits or restart billing cycle to get fresh credits.
        - `message` string, required — Human-readable credits warning.
        - `availableCredits` number, required — Number of credits remaining in the current billing period.
  - `warnings` object[], nullable — Warnings about extraneous fields in request
    - `field` string, required — Full path to extraneous field (e.g., 'searchParams.ExtraField')
    - `message` string, required — Warning message
  - `advice` string[], nullable — Tips, recommendations, and suggestions for using this API effectively.

## Other responses

- `400` — Default Response
- `401` — Default Response
- `402` — Default Response
- `403` — Default Response
- `404` — Default Response
- `422` — Default Response
- `429` — Default Response
- `500` — Default Response
- `503` — Default Response

---

[API](https://skmtc.net/fiber/apis/fiber-ai-api.md) · [All operations](https://skmtc.net/fiber/apis/fiber-ai-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/fiber/fiber-ai-api/versions/0c537984b99f/schema)
