> ## Documentation Index
> Fetch the complete documentation index at: https://www.hirebase.org/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Search Jobs

> Search for jobs using traditional filtering methods

Search for jobs using common filters such as job titles, experience level, salary range, etc., in the JSON request body. All requests require an API key (`x-api-key` header) — see [Authentication](/docs/authentication). API calls bill 1 unit of `m_jobs_api_calls` **per job returned** — see [Usage Headers & Metering](/docs/api-reference/billing/usage-headers). The easiest way to start using our API is to use our `Export` button on our [Search Page](https://app.hirebase.org/search), this allows you to edit the tune the request using our Job Filters UI and easily export as a Javascript or cURL request.

## Endpoint

```bash theme={null}
POST /v2/jobs/search
```

## Request Body

<Warning>
  Use `job_types` (plural) — `job_type` (singular) is silently ignored and your filter will not apply.
</Warning>

<Note>
  **Note:**

  * All request body fields are **optional**.
  * Filter combinations can be mixed and matched.
  * Use specific filters to narrow down search results and obtain relevant matches.
</Note>

<ParamField body="job_titles" type="string[]">
  Array of job titles to search for (matched against the parsed `job_title` field). Multiple entries are OR'd together. Each entry supports the following syntax:

  * **Unquoted, multi-word** (`"data scientist"` as a JSON string) — matches titles containing all of the words, in any order or position. Example match: "Scientist/Sr. Scientist, Bioinformatics Data".
  * **Quoted** (`"\"data scientist\""` — escaped quotes inside the JSON string) — matches the exact phrase only.
  * **`-` prefix** (`"-senior"`) — excludes titles containing the term. Works in any position in the array.

  Example — engineers, but not senior ones, plus exact-phrase data scientists:

  ```json theme={null}
  { "job_titles": ["engineer", "-senior", "\"data scientist\""] }
  ```

  <Note>
    **Special characters:** Slashes are supported (`"AI/ML Engineer"` works). Parentheses and square brackets are not accepted and return a `422` validation error. Avoid a spaced hyphen (`"engineer - data"`) inside a title — it currently returns a `500` error.
  </Note>
</ParamField>

<ParamField body="keywords" type="string[]">
  Array of keywords matched against `description`, `technologies`, `skills`, and `benefits`. Multiple entries are OR'd together.

  Keywords are a relevance signal, not a hard filter: results containing the exact phrase rank highest, followed by results containing all of the words, then results containing any of the words. Rare phrases will still return partial matches rather than zero results.

  Prefix an entry with `-` to exclude jobs matching it, e.g. `["machine learning", "-blockchain"]`. A keywords array may consist solely of exclusions. Exclusions apply to the same four fields — they do not apply to job titles, so use `job_titles` negation for that.

  <Warning>
    ⚠️ **Multi-word exclusions are word-level, not phrase-level.** A multi-word exclusion excludes jobs containing **any** of its words, not just the exact phrase. `"-language models"` excludes jobs mentioning "language" or "models" — including e.g. "predictive models". For precise exclusions, prefer single distinctive words.
  </Warning>
</ParamField>

<ParamField body="company_keywords" type="string[]">
  Array of keywords to match in company descriptions, services, and products
</ParamField>

<ParamField body="location_types" type="string[]">
  Array of work arrangements. Accepted values: `"Remote"`, `"Hybrid"`, `"In-Person"`.
</ParamField>

<ParamField body="geo_locations" type="object[]">
  Array of structured location objects with `city`, `region`, and `country`.

  <Expandable>
    <ParamField body="city" type="string">
      City name
    </ParamField>

    <ParamField body="region" type="string">
      State, region, or province
    </ParamField>

    <ParamField body="country" type="string">
      Country name
    </ParamField>
  </Expandable>
</ParamField>

<ParamField body="geofilter_params" type="object">
  Geographic filtering configuration

  <Note>
    Geo filtering is approximate — results are weighted toward the target area but may include some out-of-radius locations, especially in `auto` mode. The default (`auto`) performs **metro-area fuzzy matching**, not exact-city matching: searching a city will also return jobs in its surrounding metro area. Use `mode: "strict"` if you need exact location matching.
  </Note>

  <Expandable>
    <ParamField body="mode" type="string">
      Filtering mode for geographic search; '**auto**', '**weak**', '**strict**', '**box**' (defaults to: '**auto**').

      * **Weak**: uses coordinate based matching
      * **Strict**: uses exact matching
      * **Box**: uses bounding box matching
      * **Auto**: uses heuristics to pick the optimal matching mechanism **(recommended)**
    </ParamField>

    <ParamField body="radius" type="number">
      Search radius for geographic filtering (defaults to **25.0**)
    </ParamField>

    <ParamField body="unit" type="string">
      Units for radius; '**mi**', '**km**', '**degrees**' (defaults to: '**mi**')
    </ParamField>
  </Expandable>
</ParamField>

<ParamField body="experience" type="string[]">
  Array of experience levels. Accepted values: `"Entry"`, `"Junior"`, `"Mid"`, `"Senior"`, `"Executive"`.

  <Note>
    Any other value will return a `422 Unprocessable Entity` error.
  </Note>
</ParamField>

<ParamField body="yoe" type="object">
  Years of experience range object

  <Expandable>
    <ParamField body="min" type="number">
      Minimum years of experience
    </ParamField>

    <ParamField body="max" type="number">
      Maximum years of experience
    </ParamField>
  </Expandable>
</ParamField>

<ParamField body="job_types" type="string[]">
  Array of employment types. Accepted values: `"Full Time"`, `"Part Time"`, `"Contract"`, `"Internship"`.

  <Note>
    The `"Contract"` value matches roles whose returned `job_type` is `"Contract / Temporary"` — request token and response label differ.
  </Note>

  <Warning>
    The correct field name is **`job_types`** (plural). Using `job_type` (singular) is silently ignored — the request succeeds but the filter is not applied.
  </Warning>
</ParamField>

<ParamField body="job_category" type="string[]">
  Filter by one or more job category tags (e.g., `"Engineering Jobs"`, `"Marketing Jobs"`). See the [full category list](/docs/index#list-of-job-categories-on-hirebase).
</ParamField>

<ParamField body="company_types" type="string[]">
  Filter jobs by the hiring company's headcount bucket. Accepted values: `"1-10"`, `"11-50"`, `"51-200"`, `"201-500"`, `"501-1000"`, `"1001-5000"`, `"5001-10000"`, `"10000+"`. Pass multiple values to combine ranges (e.g., `["11-50", "51-200"]`).

  <Note>
    This parameter is named `company_types` for historical reasons but currently filters by company size. A separate classification filter (Public Company / Non-Profit / etc.) will be added in a future API update.
  </Note>
</ParamField>

<ParamField body="job_board" type="string[]">
  Filter by the source job board (e.g., "iCIMS", "Lever", "Greenhouse").
</ParamField>

<ParamField body="company_name" type="string">
  Filter by specific [company name](/docs/api-reference/companies/search-companies)
</ParamField>

<ParamField body="company_slug" type="string">
  Filter by the unique [company slug](/docs/api-reference/companies/search-companies) (used for deep linking or specific company targeting).
</ParamField>

<ParamField body="salary" type="object">
  Salary range object

  <Expandable>
    <ParamField body="min" type="number">
      Minimum salary
    </ParamField>

    <ParamField body="max" type="number">
      Maximum salary
    </ParamField>
  </Expandable>
</ParamField>

<ParamField body="industry" type="string[]">
  Filter by industry sector. Can be a single string or an array of strings. See [List Industries](/docs/api-reference/data/get-industries) for accepted values.
</ParamField>

<ParamField body="days_ago" type="integer">
  How many days ago to filter for. Days Ago set to `3` will return jobs posted on and after 3 days ago.
</ParamField>

<ParamField body="date_posted" type="string">
  Filter by a specific posted date (format: `YYYY-MM-DD`). Returns jobs posted on or after this date.
</ParamField>

<ParamField body="currency" type="string">
  Currency code to use when applying the `salary` filter (e.g., `"USD"`, `"EUR"`, `"GBP"`).
</ParamField>

<ParamField body="visa" type="string">
  Filter for jobs that offer visa sponsorship (`"true"` or `"false"`).
</ParamField>

<ParamField body="hide_recruiting_agencies" type="string">
  Filter out recruiter agency repostings (`"true"` or `"false"`).
</ParamField>

<ParamField body="include_no_salary" type="string">
  Include jobs that do not specify a salary (`"true"` or `"false"`) when a `salary` filter is applied.
</ParamField>

<ParamField body="include_yoe" type="string">
  Include jobs that do not specify years of experience (`"true"` or `"false"`) when a `yoe` filter is applied.
</ParamField>

<ParamField body="hide_seen_jobs" type="string">
  Omit jobs the current user has already viewed (`"true"` or `"false"`). Requires `user_id`.
</ParamField>

<ParamField body="filter_incomplete_jobs" type="string">
  Filter out jobs with incomplete listing data (`"true"` or `"false"`).
</ParamField>

<ParamField body="return_raw_description" type="string">
  Set to `"true"` to include the full original HTML description from the ATS source on each job object.

  <Tip>
    **Getting full job descriptions:** By default, job results return a cleaned/summarized `description` field (\~900 chars). To get the full original HTML description from the ATS source, set `return_raw_description` to `"true"` — each job will then include a `description_raw` field with the complete HTML (\~7,000+ chars typically).

    ```json theme={null}
    {
      "job_titles": ["Software Engineer"],
      "return_raw_description": "true",
      "limit": 5
    }
    ```

    * `description` (always present) — cleaned/summarized version.
    * `description_raw` (only when `return_raw_description: "true"`) — full original HTML from the ATS.
  </Tip>
</ParamField>

<ParamField body="sort_by" type="string">
  Field to sort results by. Accepted values: `"relevance"`, `"date_posted"`, `"salary"`, `"company"`, `"yoe"`.

  <Note>
    `"company"` orders by company prominence/size, not alphabetically by name. Invalid values are silently ignored and the default sort (`relevance`) is applied.
  </Note>
</ParamField>

<ParamField body="sort_order" type="string">
  Sort direction (`"asc"` or `"desc"`).
</ParamField>

<ParamField body="page" default="1" type="number">
  Page number for pagination
</ParamField>

<ParamField body="limit" default="10" type="number">
  Number of results per page (maximum **100**).

  <Note>
    Values above 100 return `422`. The pagination (`page` and `limit`) fields control the number of results returned and which subset of results is displayed.
  </Note>

  <Warning>
    **Each job returned costs one unit** of your jobs allowance, so `limit` is also your spend per call. The free plan includes 500 jobs a month: five calls at `limit: 100` use all of it. On hard-capped plans a request whose `limit` exceeds the remaining allowance is refused with a `429` that states how many units are left. See [Usage Headers & Metering](/docs/api-reference/billing/usage-headers).
  </Warning>
</ParamField>

## Response

<ResponseField name="jobs" type="array">
  Array of job objects

  <Expandable>
    <ResponseField name="_id" type="string">
      Unique identifier for the job
    </ResponseField>

    <ResponseField name="job_title" type="string">
      Title of the job
    </ResponseField>

    <ResponseField name="job_title_raw" type="string">
      Unparsed job title as scraped from the source.
    </ResponseField>

    <ResponseField name="description" type="string">
      Full job description in HTML or plain text format
    </ResponseField>

    <ResponseField name="application_link" type="string">
      URL where candidates can apply for the job
    </ResponseField>

    <ResponseField name="job_categories" type="array">
      Categories or tags associated with the job posting (e.g., "Engineering", "Design")
    </ResponseField>

    <ResponseField name="job_type" type="string">
      Employment type. One of: `"Full Time"`, `"Part Time"`, `"Contract / Temporary"`, `"Internship"`.
    </ResponseField>

    <ResponseField name="location_type" type="string">
      Work arrangement, such as "Remote", "Hybrid", or "In-Person"
    </ResponseField>

    <ResponseField name="location_raw" type="string">
      Raw location string from the source job board (before normalization into `locations`).
    </ResponseField>

    <ResponseField name="locations" type="array">
      Array of location objects

      <Expandable>
        <ResponseField name="city" type="string">
          Name of the city
        </ResponseField>

        <ResponseField name="region" type="string">
          Name of state or province
        </ResponseField>

        <ResponseField name="country" type="string">
          Name of the country
        </ResponseField>

        <ResponseField name="coordinates" type="object">
          Coordinates (long/lat) in GeoJSON format
        </ResponseField>

        <ResponseField name="bbox" type="number[]">
          Bounding Box (x1, y1, x2, y2) of the location region it encompasses
        </ResponseField>

        <ResponseField name="address" type="string">
          Normalized geographical address based on Nominatim API
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="salary_range" type="object|null">
      Salary range offered for the job. May be null if not specified

      <Expandable>
        <ResponseField name="min" type="number">
          Minimum salary
        </ResponseField>

        <ResponseField name="max" type="number">
          Maximum salary
        </ResponseField>

        <ResponseField name="currency" type="string">
          Currency code (e.g., USD, CAD)
        </ResponseField>

        <ResponseField name="period" type="string">
          Pay period for the salary range. Observed values: `"yearly"`, `"monthly"`, `"daily"`, `"hourly"`.

          <Note>
            This field is not fully normalized today — you may also see `"year"` (≡ `"yearly"`) and `"hour"` (≡ `"hourly"`). Treat those as equivalent until normalized.
          </Note>
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="yoe_range" type="object | null">
      Required years of experience. **May be `null`** when the listing does not specify a range.

      <Expandable>
        <ResponseField name="min" type="number">
          Minimum years of experience
        </ResponseField>

        <ResponseField name="max" type="number">
          Maximum years of experience
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="requirements_summary" type="string">
      Brief summary of key requirements or qualifications for the job
    </ResponseField>

    <ResponseField name="visa_sponsored" type="boolean">
      Indicates whether the job supports visa sponsorship
    </ResponseField>

    <ResponseField name="recruiter_agency" type="boolean">
      Indicates whether the listing was posted by a recruiting agency
    </ResponseField>

    <ResponseField name="offers_equity" type="boolean">
      Whether the listing mentions equity compensation.
    </ResponseField>

    <ResponseField name="md5_hash" type="string">
      Content hash of the listing.
    </ResponseField>

    <ResponseField name="platform_job_id" type="string">
      The source ATS's own job identifier.
    </ResponseField>

    <ResponseField name="skills" type="string[]">
      List of skills mentioned in the job description
    </ResponseField>

    <ResponseField name="team" type="string">
      Team at the company hiring for the position
    </ResponseField>

    <ResponseField name="technologies" type="string[]">
      List of technologies mentioned in the job description
    </ResponseField>

    <ResponseField name="benefits" type="string[]">
      List of benefits mentioned in the job description
    </ResponseField>

    <ResponseField name="education_level" type="string">
      Required education level. One of: `"No Education Required"`, `"High school degree"`,
      `"Associate degree"`, `"Bachelor's degree"`, `"Master's degree"`, `"Doctoral degree"`.
    </ResponseField>

    <ResponseField name="date_posted" type="string">
      The date when the job was posted. Format: YYYY-MM-DD
    </ResponseField>

    <ResponseField name="job_board" type="string">
      The name of the job board from which the listing was sourced (e.g., "iCIMS"). Source-board casing is not normalized in this endpoint's response (e.g., `"greenhouse"` may appear lowercase).
    </ResponseField>

    <ResponseField name="language" type="string">
      Language the job posting is in
    </ResponseField>

    <ResponseField name="job_board_link" type="string">
      URL of the job board hosting the listing
    </ResponseField>

    <ResponseField name="job_slug" type="string">
      URL-friendly identifier for the job (used in deep-linking)
    </ResponseField>

    <ResponseField name="experience_level" type="string | null">
      Parsed experience tier for the role. Response values: `"Entry-Level"`, `"Junior / Associate"`, `"Mid-Level"`, `"Senior"`, `"Principal / Staff / Lead"`, `"Executive"`. May be `null` when not inferred.

      <Note>
        These response labels differ from the request-side `experience` filter, which accepts the shorter enum (`"Entry"`, `"Junior"`, `"Mid"`, `"Senior"`, `"Executive"`) and maps to years-of-experience bands.
      </Note>
    </ResponseField>

    <ResponseField name="description_raw" type="string">
      Full original HTML description from the ATS source. **Only present when `return_raw_description: "true"`** is set on the request.
    </ResponseField>

    <ResponseField name="contact_email" type="string | null">
      Contact email for the listing, when available. Paid users only.
    </ResponseField>

    <ResponseField name="contact_phone" type="string | null">
      Contact phone number for the listing, when available. Paid users only.
    </ResponseField>

    <Note>
      **Dimension scores** — when present, `coolness_score`, `flexibility_score`, `compensation_value_score`, `benefits_score`, `impact_autonomy_score`, `prestige_score`, and `growth_score` each use a **0–10** scale (higher is better).
    </Note>

    <ResponseField name="coolness_score" type="number">
      Company/role "coolness" rating (0–10).
    </ResponseField>

    <ResponseField name="flexibility_score" type="number">
      Work-flexibility rating (0–10) — remote/hybrid + work-life-balance signals.
    </ResponseField>

    <ResponseField name="compensation_value_score" type="number">
      Compensation competitiveness rating (0–10) vs role and geography.
    </ResponseField>

    <ResponseField name="benefits_score" type="number">
      Benefits package rating (0–10) based on listed benefits quality/quantity.
    </ResponseField>

    <ResponseField name="impact_autonomy_score" type="number">
      Role-level impact and autonomy rating (0–10).
    </ResponseField>

    <ResponseField name="prestige_score" type="number">
      Company/role prestige rating (0–10).
    </ResponseField>

    <ResponseField name="growth_score" type="number">
      Career growth / learning opportunity rating (0–10).
    </ResponseField>

    <ResponseField name="meta_completeness" type="boolean">
      Whether the parsed listing metadata is considered complete.
    </ResponseField>

    <ResponseField name="company_name" type="string">
      Name of the hiring company
    </ResponseField>

    <ResponseField name="company_slug" type="string">
      URL-friendly identifier for the company (used in deep-linking)
    </ResponseField>

    <ResponseField name="company_link" type="string">
      Official website of the company
    </ResponseField>

    <ResponseField name="company_logo" type="string">
      URL to the company's logo image
    </ResponseField>

    <ResponseField name="company_data" type="object">
      Enriched company profile details

      <Expandable>
        <ResponseField name="description_summary" type="string">
          Short description about the company's mission or services
        </ResponseField>

        <ResponseField name="linkedin_link" type="string | null">
          Link to the company's LinkedIn profile
        </ResponseField>

        <ResponseField name="services" type="string[]">
          List of services that the company provides
        </ResponseField>

        <ResponseField name="size_range" type="object | null">
          Approximate number of employees

          <Expandable>
            <ResponseField name="min" type="number">
              Minimum number of employees
            </ResponseField>

            <ResponseField name="max" type="number">
              Maximum number of employees
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="industries" type="array">
          List of industries the company belongs to (e.g., "Design", "Healthcare")
        </ResponseField>

        <ResponseField name="subindustries" type="array">
          More specific categories under the industry (e.g., "Architecture")
        </ResponseField>

        <ResponseField name="type" type="string | null">
          Categorical company type (e.g., `"Startup"`, `"Enterprise"`).
        </ResponseField>

        <ResponseField name="is_recruiting_agency" type="boolean | null">
          Whether the company is a recruiting/talent agency.
        </ResponseField>

        <ResponseField name="is_3rd_party_agency" type="boolean | null">
          Whether the company is a third-party agency.
        </ResponseField>
      </Expandable>
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="total_count" type="number">
  Total number of matching jobs for the query
</ResponseField>

<ResponseField name="company_count" type="number">
  Number of unique companies represented in the result set
</ResponseField>

<ResponseField name="page" type="number">
  Current page number in the response
</ResponseField>

<ResponseField name="limit" type="number">
  Number of job results returned per page
</ResponseField>

<ResponseField name="total_pages" type="number">
  Total number of available pages for the query
</ResponseField>

<Info>
  **Rate limit:** 100 requests per 60 seconds per API key. Exceeding it returns `429` with a `Retry-After` header. A `429` with `X-Billing-Code: limit_exceeded` is a plan quota, not a rate limit — see [Error Handling](/docs/api-reference/errors).
</Info>

## Example Request

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST https://api.hirebase.org/v2/jobs/search \
    -H "Content-Type: application/json" \
    -H "x-api-key: YOUR_API_KEY" \
    -d '{
      "job_titles": ["Software Engineer"],
      "keywords": ["python", "backend"],
      "location_types": ["In-Person", "Hybrid"],
      "geo_locations": [
        {"city": "New York", "region": "New York", "country": "United States"}
      ],
      "geofilter_params": {"mode": "auto", "radius": 50, "unit": "mi"},
      "experience": ["Mid", "Senior"],
      "yoe": {"min": 2, "max": 8},
      "job_types": ["Full Time"],
      "salary": {"min": 100000, "max": 250000},
      "currency": "USD",
      "include_no_salary": "true",
      "days_ago": 30,
      "sort_by": "date_posted",
      "sort_order": "desc",
      "page": 1,
      "limit": 10
    }'
  ```

  ```json Example Body theme={null}
  {
    "job_titles": ["Site/Civil Engineer"],
    "keywords": ["Graphics", "Exhibits", "Civil Engineering"],
    "location_types": ["Hybrid", "In-Person"],
    "geo_locations": [{"city": "Richmond", "region": "Virginia", "country": "United States"}],
    "experience": ["Entry"],
    "yoe": {"min": 1, "max": 6},
    "company_name": "CompanyXYZ",
    "salary": {"min": 80000, "max": 120000},
    "job_types": ["Full Time"],
    "industry": ["Design, Construction"],
    "visa": "true",
    "sort_by": "relevance",
    "sort_order": "desc",
    "page": 1,
    "limit": 10
  }
  ```
</CodeGroup>

<ResponseExample>
  ```json Example Response theme={null}
  {
      "jobs": [
          {
              "_id": "6a2f14a48bea0df96e26ac7b",
              "company_name": "CompanyXYZ",
              "job_title": "Senior Python Engineer",
              "job_title_raw": "Senior Python Engineer - Remote",
              "description": "<p>… cleaned/summarized description …</p>",
              "application_link": "https://jobs.workable.com/view/nqSdYtJwQ/...",
              "job_categories": ["Software Engineer Jobs", "Engineering Jobs", "Information Technology Jobs"],
              "job_type": "Full Time",
              "location_type": "Remote",
              "location_raw": "TELECOMMUTE; British Columbia, Canada",
              "locations": [
                  {
                      "city": null,
                      "region": null,
                      "country": "Canada",
                      "coordinates": {"type": "Point", "coordinates": [-123.12, 49.28]},
                      "bbox": [-123.2, 49.0, -122.9, 49.3],
                      "address": "British Columbia, Canada"
                  }
              ],
              "salary_range": {"min": 150000, "max": 210000, "currency": "USD", "period": "yearly"},
              "yoe_range": {"min": 2, "max": 5},
              "experience_level": "Senior",
              "education_level": "Bachelor's degree",
              "skills": ["Python", "FastAPI", "Distributed systems"],
              "technologies": ["Python", "PostgreSQL", "AWS"],
              "benefits": ["401k matching", "Remote-first", "Equity"],
              "requirements_summary": "5+ years Python; distributed systems experience",
              "team": "Platform Engineering",
              "language": "en",
              "visa_sponsored": false,
              "recruiter_agency": false,
              "offers_equity": false,
              "date_posted": "2026-06-07",
              "job_board": "workable",
              "job_board_link": "https://jobs.workable.com/company/...",
              "job_slug": "senior-python-engineer-17",
              "company_slug": "companyxyz",
              "company_link": "companyxyz.com",
              "company_logo": "https://logos.hirebase.org/.../companyxyz-320x320-q95.jpg",
              "md5_hash": "d6b5d4e7b99d23b082b46e49c22c168f",
              "platform_job_id": "ad88b6ba-a905-4850-ad79-73beb0e97766",
              "coolness_score": 6.4,
              "flexibility_score": 6.1,
              "compensation_value_score": 6.0,
              "benefits_score": 5.0,
              "impact_autonomy_score": 7.1,
              "prestige_score": 5.2,
              "growth_score": 6.2,
              "meta_completeness": false,
              "company_data": {
                  "description_summary": "CompanyXYZ builds …",
                  "linkedin_link": "https://www.linkedin.com/company/companyxyz",
                  "size_range": {"min": 51, "max": 200},
                  "industries": ["Tech, Software & IT Services"],
                  "subindustries": ["AI & ML"],
                  "services": ["Platform", "APIs"],
                  "type": "Startup",
                  "is_recruiting_agency": false,
                  "is_3rd_party_agency": false
              }
          }
      ],
      "total_count": 1,
      "company_count": 1,
      "page": 1,
      "limit": 10,
      "total_pages": 1
  }
  ```
</ResponseExample>

## Error Responses

<AccordionGroup>
  <Accordion title="422 Unprocessable Entity Error">
    Returns when the request contains invalid or improperly formatted data. Some possible reasons may include the following:

    * When the `industry` field is missing, not a string, or doesn't match any value from the list of valid industries.
    * `JSON` decoding errors, such as malformed JSON or incorrect data types in the request body.
  </Accordion>

  <Accordion title="500 Internal Server Error">
    Returns when an unexpected error occurs on the server.

    * Also occurs during unhandled server-side failures or bugs that prevent the request from being processed.
  </Accordion>
</AccordionGroup>
