{
  "openapi": "3.1.0",
  "info": {
    "version": "1.0.0",
    "title": "Fantastic.jobs API (v1)"
  },
  "tags": [
    {
      "name": "New Jobs",
      "description": "Newly indexed job listings from ATS sources and job boards. Use these endpoints to ingest fresh listings."
    },
    {
      "name": "Modified Jobs",
      "description": "Job listings whose fields have changed since indexing. Use to keep cached records up to date."
    },
    {
      "name": "Expired",
      "description": "IDs of listings that have expired in the selected window. Use to invalidate stale rows in your store."
    },
    {
      "name": "ATS Organizations",
      "description": "Organizations currently tracked across ATS sources, with basic LinkedIn company details."
    },
    {
      "name": "Beta",
      "description": "Endpoints in beta."
    },
    {
      "name": "OpenAPI",
      "description": "The public OpenAPI specification document for the API."
    }
  ],
  "paths": {
    "/v1/active-ats": {
      "get": {
        "summary": "ATS jobs",
        "description": "Retrieves active ATS job listings with support for filtering, full-text search, date ranges, pagination, and field selection. Use the `time_frame` parameter to select the time window.",
        "parameters": [
          {
            "name": "time_frame",
            "in": "query",
            "required": true,
            "description": "Time window for job listings. Smaller windows return fresher jobs in smaller batches; larger windows are best for backfills.\n\n- `1h` - firehose of just-discovered jobs (best for hourly polling).\n- `24h` - most common choice for daily syncs.\n- `7d` - weekly batch jobs.\n- `6m` - full backfill (very large; description search (`description`, `description_advanced`) is allowed on `6m` but can be slow and may time out - simplify the query, lower `limit`, or use a shorter time window if so).",
            "schema": {
              "type": "string",
              "enum": [
                "1h",
                "24h",
                "7d",
                "6m"
              ],
              "default": "24h"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Number of results to return. Default: 100, min: 1, max: 1000.\n\nUse with `offset` to paginate, e.g. `limit=100&offset=0`, then `limit=100&offset=100`, then `limit=100&offset=200`. For very large feeds prefer `cursor` over `offset`.",
            "schema": {
              "type": "integer",
              "default": 100,
              "minimum": 1,
              "maximum": 1000
            }
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Number of results to skip for pagination. e.g. `limit=100&offset=200` returns the third page (results 201–300). Use `cursor` instead for very large feeds - `offset` becomes inefficient at deep pages.",
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Cursor-based pagination. Pass the last job's `id` to get the next page. **Note:** When `cursor` is set, results are ordered by `id` ascending - this overrides the default ordering (`date_posted` desc, or `date_modified` desc on [`/modified-ats`](/api/modified-jobs#modified-ats-jobs)). Cursor and offset pagination therefore traverse the feed in different orders.\n\n**Interaction with `offset`:** `cursor` overrides `offset`. If both are passed, `offset` is ignored. Pick one pagination strategy and stick with it.",
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "description_format",
            "in": "query",
            "description": "Format the job description should be returned in. Choose `text` for plain text or `html` for raw HTML. **Omit the parameter entirely to exclude the description field from the response** - descriptions are not included by default because they significantly increase payload size.\n\n**Caution:** `html` returns the description as it was scraped from the source - sanitize before rendering on a web page.",
            "schema": {
              "type": "string",
              "enum": [
                "text",
                "html"
              ],
              "default": "text"
            }
          },
          {
            "name": "include_basic_organization_details",
            "in": "query",
            "description": "Off by default to keep responses small. Set to `true` to include basic  organization fields inline with each job: `org_linkedin_name`, `org_linkedin_website`, `org_linkedin_industry`, `org_linkedin_headcount`, `org_linkedin_size`, `org_linkedin_followers`, `org_linkedin_headquarters`, `org_linkedin_locations`, `org_linkedin_type`, `org_linkedin_founded_date`, `org_linkedin_slogan`, `org_linkedin_description`, `org_linkedin_specialties`, `org_linkedin_recruitment_agency_derived`, `org_crunchbase_categories`, `org_crunchbase_total_investment`, `org_logo_permalink`. `org_linkedin_slug` is always returned (regardless of this flag) so jobs can be joined to [`/ats-organizations-advanced`](/api/ats-organizations#advanced-organization-details).\n\n**You don't need this flag if you're already calling [`/ats-organizations-advanced`](/api/ats-organizations#advanced-organization-details)** - every field above is included there (alongside additional advanced fields).",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "title",
            "in": "query",
            "description": "Text search on job title. Searches like a Google query:\n\n- `software engineer` - jobs with **both** words in the title.\n- `\"software engineer\"` - exact phrase.\n- `software OR engineer` - either word.\n- `-engineer` - exclude jobs with `engineer` in the title.\n\nFor Boolean operators, parentheses, or prefix matching, use `title_advanced` instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "description",
            "in": "query",
            "description": "Text search on job **title and description combined**. Searches a single index covering both fields, so a hit in either the title or the description matches - use `title` instead if you want to restrict matches to the job title only. Same syntax as `title`. e.g. `python OR javascript OR js` returns jobs whose title or description mentions any of those keywords. Heavy queries (long phrases, many `OR`s) on long time windows can time out when using time_frame=6m - keep it tight.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "location",
            "in": "query",
            "description": "Text search on location fields. Search using **full names**, abbreviations are not supported.\n\n- Use `United States`, not `US`.\n- Use `United Kingdom`, not `UK`.\n- US states need their full name and country: `New York, United States`, `California, United States`.\n- UK cities need the constituent country: `Birmingham, England, United Kingdom`, `Glasgow, Scotland, United Kingdom`.\n\nMulti-location with `OR`: `\"United States\" OR \"United Kingdom\"` or `\"San Francisco\" OR \"New York\"`. For Boolean operators (parentheses, AND, NOT), use `location_advanced`. \n\n See [Nuances of Location Search](/documentation/nuances-of-location-search) for more.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "organization",
            "in": "query",
            "description": "Filter by organization name(s). **Exact, case-sensitive match** - `nvidia` will not match `NVIDIA`. For fuzzy or Boolean matching, use `organization_advanced`. **Caveat:** organization names containing parentheses are not supported here - use `organization_slug` (preferred when available) or `organization_advanced` instead.\n\nFetch the full list of organizations we currently track via [`/ats-organizations`](/api/ats-organizations#organization-list).\n\nInput a comma-separated list.",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "exclude_organization",
            "in": "query",
            "description": "Exclude organization name(s). Same matching rules as `organization` (exact, case-sensitive). For fuzzy/Boolean exclusion, use `organization_advanced` with `!`.\n\nInput a comma-separated list.",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "title_advanced",
            "in": "query",
            "description": "Boolean full-text search on title. Operators: `&` (AND), `|` (OR), `!` (NOT), `<->` (followed-by), parentheses for grouping, `:*` for prefix matching.\n\nMulti-word phrases must be single-quoted (`'machine learning'`) or chained with `<->` (`machine <-> learning`). If `title` is also passed, `title_advanced` takes precedence and `title` is ignored.\n\n**Examples:**\n\n- `(AI | 'machine learning' | robotics) & !marketing` - AI/ML/robotics roles, no marketing titles.\n- `senior & (python | rust) & !staff` - senior IC roles in either stack, excluding staff-engineer.\n- `project <-> manag:*` - matches `project manager`, `project management`, `project managing`, ...\n\nSee [Advanced Searching Guide](/documentation/advanced-searching-guide) for more.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "description_advanced",
            "in": "query",
            "description": "Boolean full-text search on **title and description combined** (same index as `description`, so matches in either field count - pair with `title_advanced` if you also want to require a term in the title specifically). Same operator syntax as `title_advanced`. If `description` is also passed, `description_advanced` takes precedence and `description` is ignored. Description searches are expensive when using time_frame=6m, if a query times out, simplify it, lower `limit`, or shrink the time window.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "location_advanced",
            "in": "query",
            "description": "Boolean full-text search on location. Same operator syntax as `title_advanced`. If `location` is also passed, `location_advanced` takes precedence and `location` is ignored. The same naming rules as `location` apply (full names, no abbreviations).\n\n**Examples:**\n\n- `'United States' & !California` - US minus California.\n- `Germany & !(Berlin | Munich)` - Germany excluding two cities.\n- `'New York' | 'San Francisco' | Boston` - multi-city.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "organization_advanced",
            "in": "query",
            "description": "Boolean full-text search on organization name. Same operator syntax as `title_advanced`. If `organization` is also passed, `organization_advanced` takes precedence and `organization` is ignored.\n\n**Examples:**\n\n- `University & !Harvard` - every \"University\" employer except Harvard.\n- `(Microsoft | Google | Apple)` - match any of the three.\n- `Open <-> AI:*` - matches `OpenAI`, `Open AI`, `Open-AI`, etc.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "date_posted_gte",
            "in": "query",
            "description": "Filter jobs posted on or after this date (ISO 8601). e.g. `2026-04-20T00:00:00`. Posted-date timestamps are UTC, with a 1-2 hour ingestion delay between the source publishing the job and it appearing in this API. \n\n See [Time Fields](/documentation/time-fields) for the difference between `date_posted`, `date_created`, and `date_modified`.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "date_posted_lt",
            "in": "query",
            "description": "Filter jobs posted before this date (ISO 8601).",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "date_created_gte",
            "in": "query",
            "description": "Filter jobs indexed on or after this date (ISO 8601). `date_created` reflects when our system first indexed the job.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "date_created_lt",
            "in": "query",
            "description": "Filter jobs indexed before this date (ISO 8601).",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "domain",
            "in": "query",
            "description": "Filter by employer domain(s). The domain_derived field is mapped to jobs using an LLM agent with 99% accuracy. Please report any mistakes.\n\n This parameter is especially useful to capture employers that have multiple ATS across regions. For example, `nvidia.com,microsoft.com,google.com`. Each tracked organization's domain is exposed via [`/ats-organizations`](/api/ats-organizations#organization-list).\n\nInput a comma-separated list.",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "exclude_domain",
            "in": "query",
            "description": "Exclude employer domain(s). Same rules as `domain`. e.g. `nvidia.com,microsoft.com`.\n\nInput a comma-separated list.",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "source",
            "in": "query",
            "description": "Filter by source ATS/job board(s). Currently supported values: `adp`, `applicantpro`, `ashby`, `bamboohr`, `breezy`, `careerplug`, `comeet`, `csod`, `dayforce`, `dover`, `eightfold`, `firststage`, `freshteam`, `gem`, `gohire`, `greenhouse`, `hibob`, `hirebridge`, `hirehive`, `hireology`, `hiringthing`, `icims`, `isolved`, `jazzhr`, `jobvite`, `join.com`, `kula`, `lever.co`, `manatal`, `oraclecloud`, `pageup`, `paradox`, `paycom`, `paycor`, `paylocity`, `personio`, `phenompeople`, `pinpoint`, `polymer`, `recruitee`, `recooty`, `rippling`, `rival`, `smartrecruiters`, `successfactors`, `taleo`, `teamtailor`, `trakstar`, `trinet`, `ultipro`, `werecruit`, `workable`, `workday`, `zoho`. New ATS platforms are added regularly, recheck this list periodically.\n\nInput a comma-separated list.",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "exclude_source",
            "in": "query",
            "description": "Exclude source ATS/job board(s). See `source` for the full list of supported values.\n\nInput a comma-separated list.",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "organization_industry",
            "in": "query",
            "description": "Filter by LinkedIn industry. Use the **exact** LinkedIn industry name (case-sensitive). Common values: `Software Development`, `Information Technology and Services`, `Financial Services`, `Hospital & Health Care`, `Staffing and Recruiting`, `Marketing and Advertising`. The full taxonomy of ~400 industries lives at [LinkedIn Industries](https://fantastic.jobs/article/linkedin-industries).\n\nFor names containing `&` (e.g. `\"Hospital & Health Care\"`),   .\n\nInput a comma-separated list.",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "exclude_organization_industry",
            "in": "query",
            "description": "Exclude LinkedIn industry/industries. Same matching rules as `organization_industry` (exact, case-sensitive). See [LinkedIn Industries](https://fantastic.jobs/article/linkedin-industries) for the full taxonomy.\n\nInput a comma-separated list.",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "organization_slug",
            "in": "query",
            "description": "Filter by LinkedIn organization slug(s), the company-specific portion of a LinkedIn URL.\n\n For `https://www.linkedin.com/company/walmart/`, the slug is `walmart`.\n For `https://www.linkedin.com/company/tesla-motors/`, it's `tesla-motors`. \n\n **Exact match only.** Generally more reliable than `organization` (no spelling/casing variation) and the only way to filter on names containing parentheses.\n\nFetch the full list of organizations (with their slugs) via [`/ats-organizations`](/api/ats-organizations#organization-list).\n\nInput a comma-separated list.",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "exclude_organization_slug",
            "in": "query",
            "description": "Exclude LinkedIn organization slug(s). Same rules as `organization_slug` (exact match). Fetch slugs via [`/ats-organizations`](/api/ats-organizations#organization-list).\n\nInput a comma-separated list.",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "organization_headcount_gte",
            "in": "query",
            "description": "Filter companies with at least this many LinkedIn employees (inclusive lower bound). Source: LinkedIn company profile (`org_linkedin_headcount`). \n\n Combine with `organization_headcount_lt` for a range, e.g. `organization_headcount_gte=50&organization_headcount_lt=500` for 50–499-employee companies.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "organization_headcount_lt",
            "in": "query",
            "description": "Filter companies with fewer than this many LinkedIn employees (exclusive upper bound). Source: LinkedIn company profile (`org_linkedin_headcount`). \n\n Combine with `organization_headcount_gte` for a range.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "ai_experience_level",
            "in": "query",
            "description": "Filter by AI-derived experience level (years of experience required, inferred from the job description and other elements from the job page).\n\n- `0-2`\n- `2-5`\n- `5-10`\n- `10+`\n\nPass multiple to broaden the match (e.g. `0-2,2-5`). Input a comma-separated list.",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "0-2",
                  "2-5",
                  "5-10",
                  "10+"
                ]
              }
            }
          },
          {
            "name": "ai_work_arrangement",
            "in": "query",
            "description": "Filter by AI-derived work arrangement.\n\n- `On-site` - no remote at all.\n- `Hybrid` - split between office and remote.\n- `Remote OK` - fully remote, but an office is available.\n- `Remote Solely` - fully remote, no office.\n\nPass multiple to broaden, e.g. `Hybrid,Remote OK,Remote Solely` for any-remote-flexibility roles. Input a comma-separated list.",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "Remote Solely",
                  "Remote OK",
                  "Hybrid",
                  "On-site"
                ]
              }
            }
          },
          {
            "name": "ai_employment_type",
            "in": "query",
            "description": "Filter by AI-derived employment type(s) (overlap match, a job tagged with multiple types matches if any are in your list)\n\n- `FULL_TIME`, `PART_TIME`\n- `CONTRACTOR`, `TEMPORARY`, `PER_DIEM`\n- `INTERN`, `VOLUNTEER`, `OTHER`\n\nInput a comma-separated list.",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "FULL_TIME",
                  "PART_TIME",
                  "CONTRACTOR",
                  "TEMPORARY",
                  "INTERN",
                  "VOLUNTEER",
                  "PER_DIEM",
                  "OTHER"
                ]
              }
            }
          },
          {
            "name": "ai_education",
            "in": "query",
            "description": "Filter by AI-derived education requirements. The LLM is instructured to flag education that's <b> required, preferred, or desired </b> (overlap match, jobs are tagged with one or more requirements).\n\n- `high school`\n- `associate degree`\n- `bachelor degree`\n- `professional certificate`\n- `postgraduate degree`\n\n**Note:** Overlap match means `bachelor degree` matches jobs that explicitly require a bachelor's, it doesn't broaden to also match jobs that only require high school.\n\nInput a comma-separated list.",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "high school",
                  "associate degree",
                  "bachelor degree",
                  "professional certificate",
                  "postgraduate degree"
                ]
              }
            }
          },
          {
            "name": "ai_taxonomies_a_primary",
            "in": "query",
            "description": "Filter by AI taxonomy/taxonomies. Similar to `ai_taxonomies_a`, but only matches the **first** (most relevant) taxonomy assigned to a job. Use when you want a tight category match, e.g. jobs that are *primarily* about Technology, not just adjacent to it.\n\nInput a comma-separated list.",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "Technology",
                  "Healthcare",
                  "Management & Leadership",
                  "Finance & Accounting",
                  "Human Resources",
                  "Sales",
                  "Marketing",
                  "Customer Service & Support",
                  "Education",
                  "Legal",
                  "Engineering",
                  "Science & Research",
                  "Trades",
                  "Construction",
                  "Manufacturing",
                  "Logistics",
                  "Creative & Media",
                  "Hospitality",
                  "Environmental & Sustainability",
                  "Retail",
                  "Data & Analytics",
                  "Software",
                  "Energy",
                  "Agriculture",
                  "Social Services",
                  "Administrative",
                  "Government & Public Sector",
                  "Art & Design",
                  "Food & Beverage",
                  "Transportation",
                  "Consulting",
                  "Sports & Recreation",
                  "Security & Safety"
                ]
              }
            }
          },
          {
            "name": "ai_taxonomies_a",
            "in": "query",
            "description": "Filter by AI taxonomy/taxonomies (overlap match, jobs are tagged with one or more, ordered by relevance). The first taxonomy in the array is the **primary** taxonomy.\n\nMatches a job if **any** of its assigned taxonomies are in your list (broad). For tighter matches use `ai_taxonomies_a_primary` (matches only the primary). To exclude taxonomies use `exclude_ai_taxonomies_a`.\n\nFor names containing `&` (e.g. `\"Management & Leadership\"`), please double-quote.\n\nInput a comma-separated list.",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "Technology",
                  "Healthcare",
                  "Management & Leadership",
                  "Finance & Accounting",
                  "Human Resources",
                  "Sales",
                  "Marketing",
                  "Customer Service & Support",
                  "Education",
                  "Legal",
                  "Engineering",
                  "Science & Research",
                  "Trades",
                  "Construction",
                  "Manufacturing",
                  "Logistics",
                  "Creative & Media",
                  "Hospitality",
                  "Environmental & Sustainability",
                  "Retail",
                  "Data & Analytics",
                  "Software",
                  "Energy",
                  "Agriculture",
                  "Social Services",
                  "Administrative",
                  "Government & Public Sector",
                  "Art & Design",
                  "Food & Beverage",
                  "Transportation",
                  "Consulting",
                  "Sports & Recreation",
                  "Security & Safety"
                ]
              }
            }
          },
          {
            "name": "exclude_ai_taxonomies_a",
            "in": "query",
            "description": "Exclude AI taxonomy/taxonomies - excludes a job if **any** of its assigned taxonomies are in this list. See `ai_taxonomies_a` for the value list and overlap-match semantics.\n\nInput a comma-separated list.",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "Technology",
                  "Healthcare",
                  "Management & Leadership",
                  "Finance & Accounting",
                  "Human Resources",
                  "Sales",
                  "Marketing",
                  "Customer Service & Support",
                  "Education",
                  "Legal",
                  "Engineering",
                  "Science & Research",
                  "Trades",
                  "Construction",
                  "Manufacturing",
                  "Logistics",
                  "Creative & Media",
                  "Hospitality",
                  "Environmental & Sustainability",
                  "Retail",
                  "Data & Analytics",
                  "Software",
                  "Energy",
                  "Agriculture",
                  "Social Services",
                  "Administrative",
                  "Government & Public Sector",
                  "Art & Design",
                  "Food & Beverage",
                  "Transportation",
                  "Consulting",
                  "Sports & Recreation",
                  "Security & Safety"
                ]
              }
            }
          },
          {
            "name": "ai_visa_sponsorship",
            "in": "query",
            "description": "Filter listings by AI-derived visa-sponsorship availability. Omit to include both.\n\n- `only` - return only listings that offer visa sponsorship.\n- `exclude` - exclude listings that offer visa sponsorship (return only those that don't).\n\n**Note:** Detection is based on language in the job description, not all companies are very clear about their requirements in the job description.",
            "schema": {
              "type": "string",
              "enum": [
                "only",
                "exclude"
              ]
            }
          },
          {
            "name": "has_salary",
            "in": "query",
            "description": "Set to `true` to only return jobs that have salary information (raw or AI-enriched). Omit (or pass `false`) to include both.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "has_no_location",
            "in": "query",
            "description": "Set to `true` to return only listings with **no** normalized location set (i.e. `locations_derived` is null). Useful for surfacing jobs whose source feed didn't include structured location data, which would otherwise be missed by location-based searches. Omit (or pass `false`) to include all listings.\n\n**Note:** combining `has_no_location=true` with `location` / `location_advanced` will always return zero rows, since the listings selected by `has_no_location=true` have no location text to match against. Don't combine them.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "organization_agency",
            "in": "query",
            "description": "Filter listings by recruitment-agency status of the organization. Omit to include both.\n\n- `only` - return only listings whose organization is a recruitment/staffing agency.\n- `exclude` - exclude listings from recruitment/staffing agencies.\n\nThe agency flag itself is exposed in the response as `org_linkedin_recruitment_agency_derived`.",
            "schema": {
              "type": "string",
              "enum": [
                "only",
                "exclude"
              ]
            }
          },
          {
            "name": "id",
            "in": "query",
            "description": "Filter by one or more internal Fantastic.jobs IDs. Matches the `id` field in each response object, the same identifier surfaced by [`/expired-ats`](/api/expired-jobs#expired-ats-jobs) and [`/modified-ats`](/api/modified-jobs#modified-ats-jobs) for expiration and change tracking. e.g. `id=8123456,8123457` returns those two specific jobs (useful for refreshing rows you already store).\n\nInput a comma-separated list.",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "integer",
                "format": "int64"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A list of active ATS job listings",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ActiveAtsJob"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request. The endpoint returns an [RFC 7807](https://datatracker.ietf.org/doc/html/rfc7807) `application/problem+json` body. Common causes are listed in the examples below.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                },
                "examples": {
                  "missing_time_frame": {
                    "summary": "Missing or invalid time_frame",
                    "value": {
                      "type": "https://httpproblems.com/http-status/400",
                      "title": "Bad Request",
                      "status": 400,
                      "detail": "Missing or invalid 'time_frame' parameter. Must be one of: 1h, 24h, 7d, 6m",
                      "instance": "/v1/active-ats",
                      "trace": {
                        "timestamp": "2026-05-14T07:28:14.994Z",
                        "requestId": "d417443e-ca81-43c1-bedb-764fc0cdf4cc",
                        "buildId": "b6097d2d-7e03-405e-86a3-79c64a9b0814",
                        "rayId": "9fb82f5d2ee19353"
                      }
                    }
                  },
                  "unknown_parameter": {
                    "summary": "Unknown query parameter (with suggestion)",
                    "value": {
                      "type": "https://httpproblems.com/http-status/400",
                      "title": "Bad Request",
                      "status": 400,
                      "detail": "Unknown query parameter \"timeframe\". Did you mean 'time_frame'? See the API reference for the full list of supported parameters for this endpoint.",
                      "instance": "/v1/active-ats",
                      "trace": {
                        "timestamp": "2026-05-14T07:28:14.994Z",
                        "requestId": "d417443e-ca81-43c1-bedb-764fc0cdf4cc",
                        "buildId": "b6097d2d-7e03-405e-86a3-79c64a9b0814",
                        "rayId": "9fb82f5d2ee19353"
                      }
                    }
                  },
                  "advanced_syntax": {
                    "summary": "Malformed `_advanced` search expression",
                    "value": {
                      "type": "https://httpproblems.com/http-status/400",
                      "title": "Bad Request",
                      "status": 400,
                      "detail": "Invalid syntax in advanced search expression. The `*_advanced` parameters accept Boolean operators (`&` AND, `|` OR, `!` NOT, `<->` PHRASE, `<N>` distance, `()` grouping, `foo:*` prefix); ensure parentheses are balanced and operators have operands. Affected parameter: 'title_advanced'.",
                      "instance": "/v1/active-ats",
                      "trace": {
                        "timestamp": "2026-05-14T07:28:14.994Z",
                        "requestId": "d417443e-ca81-43c1-bedb-764fc0cdf4cc",
                        "buildId": "b6097d2d-7e03-405e-86a3-79c64a9b0814",
                        "rayId": "9fb82f5d2ee19353"
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimitWithRetryAfter"
          },
          "504": {
            "description": "Gateway timeout. The upstream query exceeded the configured server-side query timeout and was rewritten to a 504 by `response-outbound`. Returned as `application/problem+json`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                },
                "examples": {
                  "request_timeout": {
                    "summary": "Query exceeded the database statement timeout",
                    "value": {
                      "type": "https://httpproblems.com/http-status/504",
                      "title": "Gateway Timeout",
                      "status": 504,
                      "detail": "The request timed out. Try narrowing your filters or reducing the limit.",
                      "instance": "/v1/active-ats",
                      "trace": {
                        "timestamp": "2026-05-14T07:28:14.994Z",
                        "requestId": "d417443e-ca81-43c1-bedb-764fc0cdf4cc",
                        "buildId": "b6097d2d-7e03-405e-86a3-79c64a9b0814",
                        "rayId": "9fb82f5d2ee19353"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "operationId": "get-active-ats-v1",
        "tags": [
          "New Jobs"
        ]
      }
    },
    "/v1/active-jb": {
      "get": {
        "summary": "Job board jobs",
        "description": "Retrieves active job board listings with support for filtering, full-text search, date ranges, pagination, and field selection. Use the `time_frame` parameter to select the time window.\n\n**Supported sources:** `linkedin`, `wellfound`, `ycombinator` (filter via `source` / `exclude_source`). Only `linkedin` listings are checked for expiration at the moment.\n\n**Note:** Description search (`description`, `description_advanced`) is not available for `time_frame=6m`.",
        "parameters": [
          {
            "name": "time_frame",
            "in": "query",
            "required": true,
            "description": "Time window for job listings. Smaller windows return fresher jobs in smaller batches; larger windows are best for backfills.\n\n- `1h` - firehose of just-discovered jobs (best for hourly polling).\n- `24h` - most common choice for daily syncs.\n- `7d` - weekly batch jobs.\n- `6m` - full backfill (large; description search (`description`, `description_advanced`) is **not** available on `6m` for [`/active-jb`](/api/new-jobs#job-board-jobs)).",
            "schema": {
              "type": "string",
              "enum": [
                "1h",
                "24h",
                "7d",
                "6m"
              ],
              "default": "24h"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Number of results to return. Default: 100, min: 1, max: 1000.\n\nUse with `offset` to paginate, e.g. `limit=100&offset=0`, then `limit=100&offset=100`, then `limit=100&offset=200`. For very large feeds prefer `cursor` over `offset`.",
            "schema": {
              "type": "integer",
              "default": 100,
              "minimum": 1,
              "maximum": 1000
            }
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Number of results to skip for pagination. e.g. `limit=100&offset=200` returns the third page (results 201–300). Use `cursor` instead for very large feeds - `offset` becomes inefficient at deep pages.",
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Cursor-based pagination. Pass the last job's `id` to get the next page. **Note:** When `cursor` is set, results are ordered by `id` ascending - this overrides the default ordering (`date_posted` desc, or `date_modified` desc on [`/modified-ats`](/api/modified-jobs#modified-ats-jobs)). Cursor and offset pagination therefore traverse the feed in different orders.\n\n**Interaction with `offset`:** `cursor` overrides `offset`. If both are passed, `offset` is ignored. Pick one pagination strategy and stick with it.",
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "organization_agency",
            "in": "query",
            "description": "Filter listings by recruitment-agency status of the organization. Omit to include both.\n\n- `only` - return only listings whose organization is a recruitment/staffing agency.\n- `exclude` - exclude listings from recruitment/staffing agencies.\n\nThe agency flag itself is exposed in the response as `org_linkedin_recruitment_agency_derived`.",
            "schema": {
              "type": "string",
              "enum": [
                "only",
                "exclude"
              ]
            }
          },
          {
            "name": "description_format",
            "in": "query",
            "description": "Format the job description should be returned in. Choose `text` for plain text or `html` for raw HTML. **Omit the parameter entirely to exclude the description field from the response** - descriptions are not included by default because they significantly increase payload size.\n\n**Caution:** `html` returns the description as it was scraped from the source - sanitize before rendering on a web page.",
            "schema": {
              "type": "string",
              "enum": [
                "text",
                "html"
              ],
              "default": "text"
            }
          },
          {
            "name": "exclude_recruiter_fields",
            "in": "query",
            "description": "Set to `true` to exclude recruiter fields (`recruiter_name`, `recruiter_title`, `recruiter_url`) from the response. Default: included.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "title",
            "in": "query",
            "description": "Text search on job title. Searches like a Google query:\n\n- `software engineer` - jobs with **both** words in the title.\n- `\"software engineer\"` - exact phrase.\n- `software OR engineer` - either word.\n- `-engineer` - exclude jobs with `engineer` in the title.\n\nFor Boolean operators, parentheses, or prefix matching, use `title_advanced` instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "description",
            "in": "query",
            "description": "Text search on job **title and description combined**. Searches a single index covering both fields, so a hit in either the title or the description matches - use `title` instead if you want to restrict matches to the job title only. Same syntax as `title`. e.g. `python OR javascript OR js` returns jobs whose title or description mentions any of those keywords. Not available for `time_frame=6m`. Heavy queries (long phrases, many `OR`s) on long time windows can time out - keep it tight.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "location",
            "in": "query",
            "description": "Text search on location fields. Search using **full names**, abbreviations are not supported.\n\n- Use `United States`, not `US`.\n- Use `United Kingdom`, not `UK`.\n- US states need their full name and country: `New York, United States`, `California, United States`.\n- UK cities need the constituent country: `Birmingham, England, United Kingdom`, `Glasgow, Scotland, United Kingdom`.\n\nMulti-location with `OR`: `\"United States\" OR \"United Kingdom\"` or `\"San Francisco\" OR \"New York\"`. For Boolean operators (parentheses, AND, NOT), use `location_advanced`. \n\n See [Nuances of Location Search](/documentation/nuances-of-location-search) for more.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "organization",
            "in": "query",
            "description": "Filter by organization name(s). **Exact, case-sensitive match** - `nvidia` will not match `NVIDIA`. For fuzzy or Boolean matching, use `organization_advanced`. **Caveat:** organization names containing parentheses are not supported here - use `organization_slug` (preferred when available) or `organization_advanced` instead.\n\nFetch the full list of organizations we currently track via [`/ats-organizations`](/api/ats-organizations#organization-list).\n\nInput a comma-separated list.",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "exclude_organization",
            "in": "query",
            "description": "Exclude organization name(s). Same matching rules as `organization` (exact, case-sensitive). For fuzzy/Boolean exclusion, use `organization_advanced` with `!`.\n\nInput a comma-separated list.",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "title_advanced",
            "in": "query",
            "description": "Boolean full-text search on title. Operators: `&` (AND), `|` (OR), `!` (NOT), `<->` (followed-by), parentheses for grouping, `:*` for prefix matching.\n\nMulti-word phrases must be single-quoted (`'machine learning'`) or chained with `<->` (`machine <-> learning`). If `title` is also passed, `title_advanced` takes precedence and `title` is ignored.\n\n**Examples:**\n\n- `(AI | 'machine learning' | robotics) & !marketing` - AI/ML/robotics roles, no marketing titles.\n- `senior & (python | rust) & !staff` - senior IC roles in either stack, excluding staff-engineer.\n- `project <-> manag:*` - matches `project manager`, `project management`, `project managing`, ...\n\nSee [Advanced Searching Guide](/documentation/advanced-searching-guide) for more.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "description_advanced",
            "in": "query",
            "description": "Boolean full-text search on **title and description combined** (same index as `description`, so matches in either field count - pair with `title_advanced` if you also want to require a term in the title specifically). Same operator syntax as `title_advanced`. If `description` is also passed, `description_advanced` takes precedence and `description` is ignored. Not available for `time_frame=6m`. Description searches are expensive, if a query times out, simplify it, lower `limit`, or shrink the time window.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "location_advanced",
            "in": "query",
            "description": "Boolean full-text search on location. Same operator syntax as `title_advanced`. If `location` is also passed, `location_advanced` takes precedence and `location` is ignored. The same naming rules as `location` apply (full names, no abbreviations).\n\n**Examples:**\n\n- `'United States' & !California` - US minus California.\n- `Germany & !(Berlin | Munich)` - Germany excluding two cities.\n- `'New York' | 'San Francisco' | Boston` - multi-city.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "organization_advanced",
            "in": "query",
            "description": "Boolean full-text search on organization name. Same operator syntax as `title_advanced`. If `organization` is also passed, `organization_advanced` takes precedence and `organization` is ignored.\n\n**Examples:**\n\n- `University & !Harvard` - every \"University\" employer except Harvard.\n- `(Microsoft | Google | Apple)` - match any of the three.\n- `Open <-> AI:*` - matches `OpenAI`, `Open AI`, `Open-AI`, etc.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "date_posted_gte",
            "in": "query",
            "description": "Filter jobs posted on or after this date (ISO 8601). e.g. `2026-04-20T00:00:00`. Posted-date timestamps are UTC, with a 1-2 hour ingestion delay between the source publishing the job and it appearing in this API. \n\n See [Time Fields](/documentation/time-fields) for the difference between `date_posted`, `date_created`, and `date_modified`.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "date_posted_lt",
            "in": "query",
            "description": "Filter jobs posted before this date (ISO 8601).",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "date_created_gte",
            "in": "query",
            "description": "Filter jobs indexed on or after this date (ISO 8601). `date_created` reflects when our system first indexed the job.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "date_created_lt",
            "in": "query",
            "description": "Filter jobs indexed before this date (ISO 8601).",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "source",
            "in": "query",
            "description": "Filter by source job board(s). Input a comma-separated list.\n\n**Note on expiry tracking:** only `linkedin` listings are re-checked for expiration and surfaced via [`/expired-jb`](/api/expired-jobs#expired-job-board-jobs). `wellfound` and `ycombinator` listings stay in the active feed until naturally aged out, so plan your freshness logic accordingly if you ingest them.",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "linkedin",
                  "wellfound",
                  "ycombinator"
                ]
              }
            },
            "style": "form",
            "explode": false
          },
          {
            "name": "exclude_source",
            "in": "query",
            "description": "Exclude source job board(s). Input a comma-separated list.",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "linkedin",
                  "wellfound",
                  "ycombinator"
                ]
              }
            },
            "style": "form",
            "explode": false
          },
          {
            "name": "seniority",
            "in": "query",
            "description": "Filter by LinkedIn-posted seniority level. English values: `Internship`, `Entry level`, `Associate`, `Mid-Senior level`, `Director`, `Executive`, `Not Applicable`. **Case-sensitive.**\n\n**Heads-up:** many employers default to `Not Applicable`. If you filter to a specific level, you'll miss those, consider whether that's acceptable. **Non-English postings** may use localized seniority strings; if you target multiple markets, include both the English and local-language values.\n\n**Alternative:** for a normalized, market-independent signal, use `ai_experience_level` instead.\n\nInput a comma-separated list.",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "organization_industry",
            "in": "query",
            "description": "Filter by LinkedIn industry. Use the **exact** LinkedIn industry name (case-sensitive). Common values: `Software Development`, `Information Technology and Services`, `Financial Services`, `Hospital & Health Care`, `Staffing and Recruiting`, `Marketing and Advertising`. The full taxonomy of ~400 industries lives at [LinkedIn Industries](https://fantastic.jobs/article/linkedin-industries).\n\nFor names containing `&` (e.g. `\"Hospital & Health Care\"`), please double-quote.\n\nInput a comma-separated list.",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "exclude_organization_industry",
            "in": "query",
            "description": "Exclude LinkedIn industry/industries. Same matching rules as `organization_industry` (exact, case-sensitive). See [LinkedIn Industries](https://fantastic.jobs/article/linkedin-industries) for the full taxonomy.\n\nInput a comma-separated list.",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "organization_slug",
            "in": "query",
            "description": "Filter by LinkedIn organization slug(s), the company-specific portion of a LinkedIn URL.\n\n For `https://www.linkedin.com/company/walmart/`, the slug is `walmart`.\n For `https://www.linkedin.com/company/tesla-motors/`, it's `tesla-motors`. \n\n **Exact match only.** Generally more reliable than `organization` (no spelling/casing variation) and the only way to filter on names containing parentheses.\n\nFetch the full list of organizations (with their slugs) via [`/ats-organizations`](/api/ats-organizations#organization-list).\n\nInput a comma-separated list.",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "exclude_organization_slug",
            "in": "query",
            "description": "Exclude LinkedIn organization slug(s). Same rules as `organization_slug` (exact match). Fetch slugs via [`/ats-organizations`](/api/ats-organizations#organization-list).\n\nInput a comma-separated list.",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "organization_headcount_gte",
            "in": "query",
            "description": "Filter companies with at least this many LinkedIn employees (inclusive lower bound). Source: LinkedIn company profile (`org_linkedin_headcount`). \n\n Combine with `organization_headcount_lt` for a range, e.g. `organization_headcount_gte=50&organization_headcount_lt=500` for 50–499-employee companies.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "organization_headcount_lt",
            "in": "query",
            "description": "Filter companies with fewer than this many LinkedIn employees (exclusive upper bound). Source: LinkedIn company profile (`org_linkedin_headcount`). \n\n Combine with `organization_headcount_gte` for a range.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "employment_type",
            "in": "query",
            "deprecated": true,
            "description": "**Deprecated** — will be removed in a future version. Use `ai_employment_type` instead, which provides normalized, market-independent values now that every job is AI-analysed.\n\nFilter by raw employment type(s) (overlap match, a job tagged with multiple types matches if any are in your list). Values are country-specific and vary by job board.\n\nInput a comma-separated list.",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "ai_employment_type",
            "in": "query",
            "description": "Filter by AI-derived employment type(s) (overlap match, a job tagged with multiple types matches if any are in your list).\n\n- `FULL_TIME`, `PART_TIME`\n- `CONTRACTOR`, `TEMPORARY`, `PER_DIEM`\n- `INTERN`, `VOLUNTEER`, `OTHER`\n\nFor raw, country-specific values use `employment_type`.\n\nInput a comma-separated list.",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "FULL_TIME",
                  "PART_TIME",
                  "CONTRACTOR",
                  "TEMPORARY",
                  "INTERN",
                  "VOLUNTEER",
                  "PER_DIEM",
                  "OTHER"
                ]
              }
            }
          },
          {
            "name": "ai_experience_level",
            "in": "query",
            "description": "Filter by AI-derived experience level (years of experience required, inferred from the job description and other elements from the job page).\n\n- `0-2`\n- `2-5`\n- `5-10`\n- `10+`\n\nPass multiple to broaden the match (e.g. `0-2,2-5`). Input a comma-separated list.",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "0-2",
                  "2-5",
                  "5-10",
                  "10+"
                ]
              }
            }
          },
          {
            "name": "ai_work_arrangement",
            "in": "query",
            "description": "Filter by AI-derived work arrangement.\n\n- `On-site` - no remote at all.\n- `Hybrid` - split between office and remote.\n- `Remote OK` - fully remote, but an office is available.\n- `Remote Solely` - fully remote, no office.\n\nPass multiple to broaden, e.g. `Hybrid,Remote OK,Remote Solely` for any-remote-flexibility roles. Input a comma-separated list.",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "Remote Solely",
                  "Remote OK",
                  "Hybrid",
                  "On-site"
                ]
              }
            }
          },
          {
            "name": "ai_education",
            "in": "query",
            "description": "Filter by AI-derived education requirements. The LLM is instructured to flag education that's <b> required, preferred, or desired </b> (overlap match, jobs are tagged with one or more requirements).\n\n- `high school`\n- `associate degree`\n- `bachelor degree`\n- `professional certificate`\n- `postgraduate degree`\n\n**Note:** Overlap match means `bachelor degree` matches jobs that explicitly require a bachelor's, it doesn't broaden to also match jobs that only require high school.\n\nInput a comma-separated list.",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "high school",
                  "associate degree",
                  "bachelor degree",
                  "professional certificate",
                  "postgraduate degree"
                ]
              }
            }
          },
          {
            "name": "ai_taxonomies_a_primary",
            "in": "query",
            "description": "Filter by AI taxonomy/taxonomies. Similar to `ai_taxonomies_a`, but only matches the **first** (most relevant) taxonomy assigned to a job. Use when you want a tight category match, e.g. jobs that are *primarily* about Technology, not just adjacent to it.\n\nInput a comma-separated list.",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "Technology",
                  "Healthcare",
                  "Management & Leadership",
                  "Finance & Accounting",
                  "Human Resources",
                  "Sales",
                  "Marketing",
                  "Customer Service & Support",
                  "Education",
                  "Legal",
                  "Engineering",
                  "Science & Research",
                  "Trades",
                  "Construction",
                  "Manufacturing",
                  "Logistics",
                  "Creative & Media",
                  "Hospitality",
                  "Environmental & Sustainability",
                  "Retail",
                  "Data & Analytics",
                  "Software",
                  "Energy",
                  "Agriculture",
                  "Social Services",
                  "Administrative",
                  "Government & Public Sector",
                  "Art & Design",
                  "Food & Beverage",
                  "Transportation",
                  "Consulting",
                  "Sports & Recreation",
                  "Security & Safety"
                ]
              }
            }
          },
          {
            "name": "ai_taxonomies_a",
            "in": "query",
            "description": "Filter by AI taxonomy/taxonomies (overlap match, jobs are tagged with one or more, ordered by relevance). The first taxonomy in the array is the **primary** taxonomy.\n\nMatches a job if **any** of its assigned taxonomies are in your list (broad). For tighter matches use `ai_taxonomies_a_primary` (matches only the primary). To exclude taxonomies use `exclude_ai_taxonomies_a`.\n\nFor names containing `&` (e.g. `\"Management & Leadership\"`), please double-quote.\n\nInput a comma-separated list.",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "Technology",
                  "Healthcare",
                  "Management & Leadership",
                  "Finance & Accounting",
                  "Human Resources",
                  "Sales",
                  "Marketing",
                  "Customer Service & Support",
                  "Education",
                  "Legal",
                  "Engineering",
                  "Science & Research",
                  "Trades",
                  "Construction",
                  "Manufacturing",
                  "Logistics",
                  "Creative & Media",
                  "Hospitality",
                  "Environmental & Sustainability",
                  "Retail",
                  "Data & Analytics",
                  "Software",
                  "Energy",
                  "Agriculture",
                  "Social Services",
                  "Administrative",
                  "Government & Public Sector",
                  "Art & Design",
                  "Food & Beverage",
                  "Transportation",
                  "Consulting",
                  "Sports & Recreation",
                  "Security & Safety"
                ]
              }
            }
          },
          {
            "name": "exclude_ai_taxonomies_a",
            "in": "query",
            "description": "Exclude AI taxonomy/taxonomies - excludes a job if **any** of its assigned taxonomies are in this list. See `ai_taxonomies_a` for the value list and overlap-match semantics.\n\nInput a comma-separated list.",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "Technology",
                  "Healthcare",
                  "Management & Leadership",
                  "Finance & Accounting",
                  "Human Resources",
                  "Sales",
                  "Marketing",
                  "Customer Service & Support",
                  "Education",
                  "Legal",
                  "Engineering",
                  "Science & Research",
                  "Trades",
                  "Construction",
                  "Manufacturing",
                  "Logistics",
                  "Creative & Media",
                  "Hospitality",
                  "Environmental & Sustainability",
                  "Retail",
                  "Data & Analytics",
                  "Software",
                  "Energy",
                  "Agriculture",
                  "Social Services",
                  "Administrative",
                  "Government & Public Sector",
                  "Art & Design",
                  "Food & Beverage",
                  "Transportation",
                  "Consulting",
                  "Sports & Recreation",
                  "Security & Safety"
                ]
              }
            }
          },
          {
            "name": "ai_visa_sponsorship",
            "in": "query",
            "description": "Filter listings by AI-derived visa-sponsorship availability. Omit to include both.\n\n- `only` - return only listings that offer visa sponsorship.\n- `exclude` - exclude listings that offer visa sponsorship (return only those that don't).\n\n**Note:** Detection is based on language in the job description, not all companies are very clear about their requirements in the job description.",
            "schema": {
              "type": "string",
              "enum": [
                "only",
                "exclude"
              ]
            }
          },
          {
            "name": "has_salary",
            "in": "query",
            "description": "Set to `true` to only return jobs that have salary information (raw or AI-enriched). Omit (or pass `false`) to include both.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "has_no_location",
            "in": "query",
            "description": "Set to `true` to return only listings with **no** normalized location set (i.e. `locations_derived` is null). Useful for surfacing jobs whose source feed didn't include structured location data, which would otherwise be missed by location-based searches. Omit (or pass `false`) to include all listings.\n\n**Note:** combining `has_no_location=true` with `location` / `location_advanced` will always return zero rows, since the listings selected by `has_no_location=true` have no location text to match against. Don't combine them.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "direct_apply",
            "in": "query",
            "description": "Filter listings by direct-apply availability. \"Direct apply\" means the candidate can apply within the source job board itself (e.g. LinkedIn's Easy Apply / one-click in-platform application) rather than being redirected to an external site. Omit to include both.\n\n- `only` - return only listings that support direct apply on the source job board.\n- `exclude` - exclude direct-apply listings (return only those that redirect to an external apply flow).\n\nDirect-apply listings have **almost no overlap** with the ATS feed ([`/active-ats`](/api/new-jobs#ats-jobs)), making them complementary rather than duplicates.",
            "schema": {
              "type": "string",
              "enum": [
                "only",
                "exclude"
              ]
            }
          },
          {
            "name": "exclude_ats_duplicate",
            "in": "query",
            "description": "Use this only if you also consume [`/active-ats`](/api/new-jobs#ats-jobs) - when `true` it removes the majority of LinkedIn jobs we've matched against an existing ATS posting. Omit (or pass `false`) to include both.\n\n**How matching works.** For each LinkedIn job we run two checks against the ATS dataset:\n\n1. Job title + organization name + country match.\n2. Job title + LinkedIn company profile + country match.\n\nIf either check hits, the job is flagged `ats_duplicate=true`. If neither hits, it's `ats_duplicate=false`. Direct-apply listings (`direct_apply=true`) are not checked and are flagged `ats_duplicate=null` (these are also kept when this filter is `true`, since they're unlikely to be ATS duplicates by construction).\n\nWe aim for high precision over recall, so a small number of duplicates can still slip through. For full deduplication, add a fuzzy-match layer client-side.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "linkedin_id",
            "in": "query",
            "description": "Filter by one or more LinkedIn job posting IDs (comma-separated when passed as a raw URL). This is LinkedIn's public job ID - the digits at the end of a `linkedin.com/jobs/view/{linkedin_id}` URL - surfaced as `linkedin_id` in each response object. Distinct from `id`, which is the internal Fantastic.jobs ID.",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "integer",
                "format": "int64"
              }
            }
          },
          {
            "name": "id",
            "in": "query",
            "description": "Filter by one or more internal Fantastic.jobs IDs. Matches the `id` field in each response object, the same identifier surfaced by [`/expired-jb`](/api/expired-jobs#expired-job-board-jobs) for expiration tracking. e.g. `id=8123456,8123457` returns those two specific jobs (useful for refreshing rows you already store). Distinct from `linkedin_id`, which is LinkedIn's public posting ID.\n\nInput a comma-separated list.",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "integer",
                "format": "int64"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A list of active job board listings",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ActiveJbJob"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request. The endpoint returns an [RFC 7807](https://datatracker.ietf.org/doc/html/rfc7807) `application/problem+json` body. Common causes are listed in the examples below.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                },
                "examples": {
                  "missing_time_frame": {
                    "summary": "Missing or invalid time_frame",
                    "value": {
                      "type": "https://httpproblems.com/http-status/400",
                      "title": "Bad Request",
                      "status": 400,
                      "detail": "Missing or invalid 'time_frame' parameter. Must be one of: 1h, 24h, 7d, 6m",
                      "instance": "/v1/active-jb",
                      "trace": {
                        "timestamp": "2026-05-14T07:28:14.994Z",
                        "requestId": "d417443e-ca81-43c1-bedb-764fc0cdf4cc",
                        "buildId": "b6097d2d-7e03-405e-86a3-79c64a9b0814",
                        "rayId": "9fb82f5d2ee19353"
                      }
                    }
                  },
                  "unknown_parameter": {
                    "summary": "Unknown query parameter (with suggestion)",
                    "value": {
                      "type": "https://httpproblems.com/http-status/400",
                      "title": "Bad Request",
                      "status": 400,
                      "detail": "Unknown query parameter \"timeframe\". Did you mean 'time_frame'? See the API reference for the full list of supported parameters for this endpoint.",
                      "instance": "/v1/active-jb",
                      "trace": {
                        "timestamp": "2026-05-14T07:28:14.994Z",
                        "requestId": "d417443e-ca81-43c1-bedb-764fc0cdf4cc",
                        "buildId": "b6097d2d-7e03-405e-86a3-79c64a9b0814",
                        "rayId": "9fb82f5d2ee19353"
                      }
                    }
                  },
                  "description_with_6m": {
                    "summary": "Description search not allowed with time_frame=6m",
                    "value": {
                      "type": "https://httpproblems.com/http-status/400",
                      "title": "Bad Request",
                      "status": 400,
                      "detail": "Description search is not available for time_frame=6m. Use a shorter time window (e.g. 1h, 24h, or 7d) when filtering by description.",
                      "instance": "/v1/active-jb",
                      "trace": {
                        "timestamp": "2026-05-14T07:28:14.994Z",
                        "requestId": "d417443e-ca81-43c1-bedb-764fc0cdf4cc",
                        "buildId": "b6097d2d-7e03-405e-86a3-79c64a9b0814",
                        "rayId": "9fb82f5d2ee19353"
                      }
                    }
                  },
                  "advanced_syntax": {
                    "summary": "Malformed `_advanced` search expression",
                    "value": {
                      "type": "https://httpproblems.com/http-status/400",
                      "title": "Bad Request",
                      "status": 400,
                      "detail": "Invalid syntax in advanced search expression. The `*_advanced` parameters accept Boolean operators (`&` AND, `|` OR, `!` NOT, `<->` PHRASE, `<N>` distance, `()` grouping, `foo:*` prefix); ensure parentheses are balanced and operators have operands. Affected parameter: 'description_advanced'.",
                      "instance": "/v1/active-jb",
                      "trace": {
                        "timestamp": "2026-05-14T07:28:14.994Z",
                        "requestId": "d417443e-ca81-43c1-bedb-764fc0cdf4cc",
                        "buildId": "b6097d2d-7e03-405e-86a3-79c64a9b0814",
                        "rayId": "9fb82f5d2ee19353"
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimitWithRetryAfter"
          },
          "504": {
            "description": "Gateway timeout. The upstream query exceeded the configured server-side query timeout and was rewritten to a 504 by `response-outbound`. Returned as `application/problem+json`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                },
                "examples": {
                  "request_timeout": {
                    "summary": "Query exceeded the database statement timeout",
                    "value": {
                      "type": "https://httpproblems.com/http-status/504",
                      "title": "Gateway Timeout",
                      "status": 504,
                      "detail": "The request timed out. Try narrowing your filters or reducing the limit.",
                      "instance": "/v1/active-jb",
                      "trace": {
                        "timestamp": "2026-05-14T07:28:14.994Z",
                        "requestId": "d417443e-ca81-43c1-bedb-764fc0cdf4cc",
                        "buildId": "b6097d2d-7e03-405e-86a3-79c64a9b0814",
                        "rayId": "9fb82f5d2ee19353"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "operationId": "get-active-jb-v1",
        "tags": [
          "New Jobs"
        ]
      }
    },
    "/v1/active-ats-count": {
      "get": {
        "summary": "ATS jobs count",
        "description": "Returns the total count of ATS listings matching your filters in the selected time window. No job rows are returned in the body.\n\n**Use this endpoint to select the subscription tier that matches your job volume.** Call the endpoint with `time_frame=1m` (jobs indexed during the last 31 days) to see how many jobs match your filters per month. This is the most direct way to figure out which plan you need before subscribing.\n\n**You don't need this endpoint for pagination.** You do **not** need this endpoint to know how many times to increase `offset` on [`/active-ats`](/api/new-jobs#ats-jobs). Just keep increasing `offset` on the data endpoint until it returns fewer rows than your `limit`, that's cheaper than a separate count call.\n\n**Cost & timeouts.** This endpoint scans the entire filtered set on every call and is intentionally not designed for frequent use. This endpoint will timeout if it runs longer than 60 seconds, and you are likely to hit it on `time_frame=6m` - use `6m` sparingly.\n\nYou may use this endpoint to calculate the number of jobs you need to backfill using the `6m` time_frame. However, please reach out to us if your API requests are complex and are timing out.\n\n**Each call consumes 1 API Request.**\n\n**Parameters.** This endpoint accepts the same parameters as [`/active-ats`](/api/new-jobs#ats-jobs) with the exception of parameters that are not relevant for count (`description_format`, `include_basic_organization_details`, `id`, `limit`, `offset`, `cursor`).\n\n**`description` / `description_advanced` are not available for `time_frame=6m`.**",
        "parameters": [
          {
            "name": "time_frame",
            "in": "query",
            "description": "Time window to count over. Defaults to `1m` (trailing 31 days), which is the recommended value for plan-sizing.\n\n- `1h` - count just-discovered jobs (last hour).\n- `24h` - count jobs from the last 24 hours.\n- `1m` - **default**, trailing 31 days. Best for monthly plan estimates.\n- `6m` - last 6 months. Slow, likely to hit the 60s timeout on broad queries. Use sparingly. `description` / `description_advanced` are not allowed here.",
            "schema": {
              "type": "string",
              "enum": [
                "1h",
                "24h",
                "1m",
                "6m"
              ],
              "default": "1m"
            }
          },
          {
            "name": "title",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "title_advanced",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "description",
            "in": "query",
            "description": "Text search on job **title and description combined** (a hit in either field matches - use `title` instead to restrict matches to the job title only). Same syntax as `title`. **Not available for `time_frame=6m`** - the 6m window is too expensive to search by description here. Heavy queries can still time out on broad windows.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "description_advanced",
            "in": "query",
            "description": "Boolean full-text search on **title and description combined** (same index as `description`; pair with `title_advanced` if you want a term required in the title specifically). Same operator syntax as `title_advanced`. **Not available for `time_frame=6m`**.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "location",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "location_advanced",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "organization",
            "in": "query",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "exclude_organization",
            "in": "query",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "organization_advanced",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "domain",
            "in": "query",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "exclude_domain",
            "in": "query",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "source",
            "in": "query",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "exclude_source",
            "in": "query",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "organization_industry",
            "in": "query",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "exclude_organization_industry",
            "in": "query",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "organization_slug",
            "in": "query",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "exclude_organization_slug",
            "in": "query",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "organization_headcount_gte",
            "in": "query",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "organization_headcount_lt",
            "in": "query",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "ai_experience_level",
            "in": "query",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "0-2",
                  "2-5",
                  "5-10",
                  "10+"
                ]
              }
            }
          },
          {
            "name": "ai_work_arrangement",
            "in": "query",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "Remote Solely",
                  "Remote OK",
                  "Hybrid",
                  "On-site"
                ]
              }
            }
          },
          {
            "name": "ai_employment_type",
            "in": "query",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "FULL_TIME",
                  "PART_TIME",
                  "CONTRACTOR",
                  "TEMPORARY",
                  "INTERN",
                  "VOLUNTEER",
                  "PER_DIEM",
                  "OTHER"
                ]
              }
            }
          },
          {
            "name": "ai_education",
            "in": "query",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "high school",
                  "associate degree",
                  "bachelor degree",
                  "professional certificate",
                  "postgraduate degree"
                ]
              }
            }
          },
          {
            "name": "ai_taxonomies_a_primary",
            "in": "query",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "Technology",
                  "Healthcare",
                  "Management & Leadership",
                  "Finance & Accounting",
                  "Human Resources",
                  "Sales",
                  "Marketing",
                  "Customer Service & Support",
                  "Education",
                  "Legal",
                  "Engineering",
                  "Science & Research",
                  "Trades",
                  "Construction",
                  "Manufacturing",
                  "Logistics",
                  "Creative & Media",
                  "Hospitality",
                  "Environmental & Sustainability",
                  "Retail",
                  "Data & Analytics",
                  "Software",
                  "Energy",
                  "Agriculture",
                  "Social Services",
                  "Administrative",
                  "Government & Public Sector",
                  "Art & Design",
                  "Food & Beverage",
                  "Transportation",
                  "Consulting",
                  "Sports & Recreation",
                  "Security & Safety"
                ]
              }
            }
          },
          {
            "name": "ai_taxonomies_a",
            "in": "query",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "Technology",
                  "Healthcare",
                  "Management & Leadership",
                  "Finance & Accounting",
                  "Human Resources",
                  "Sales",
                  "Marketing",
                  "Customer Service & Support",
                  "Education",
                  "Legal",
                  "Engineering",
                  "Science & Research",
                  "Trades",
                  "Construction",
                  "Manufacturing",
                  "Logistics",
                  "Creative & Media",
                  "Hospitality",
                  "Environmental & Sustainability",
                  "Retail",
                  "Data & Analytics",
                  "Software",
                  "Energy",
                  "Agriculture",
                  "Social Services",
                  "Administrative",
                  "Government & Public Sector",
                  "Art & Design",
                  "Food & Beverage",
                  "Transportation",
                  "Consulting",
                  "Sports & Recreation",
                  "Security & Safety"
                ]
              }
            }
          },
          {
            "name": "exclude_ai_taxonomies_a",
            "in": "query",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "Technology",
                  "Healthcare",
                  "Management & Leadership",
                  "Finance & Accounting",
                  "Human Resources",
                  "Sales",
                  "Marketing",
                  "Customer Service & Support",
                  "Education",
                  "Legal",
                  "Engineering",
                  "Science & Research",
                  "Trades",
                  "Construction",
                  "Manufacturing",
                  "Logistics",
                  "Creative & Media",
                  "Hospitality",
                  "Environmental & Sustainability",
                  "Retail",
                  "Data & Analytics",
                  "Software",
                  "Energy",
                  "Agriculture",
                  "Social Services",
                  "Administrative",
                  "Government & Public Sector",
                  "Art & Design",
                  "Food & Beverage",
                  "Transportation",
                  "Consulting",
                  "Sports & Recreation",
                  "Security & Safety"
                ]
              }
            }
          },
          {
            "name": "ai_visa_sponsorship",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "only",
                "exclude"
              ]
            }
          },
          {
            "name": "has_salary",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "has_no_location",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "organization_agency",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "only",
                "exclude"
              ]
            }
          },
          {
            "name": "date_posted_gte",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "date_posted_lt",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "date_created_gte",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "date_created_lt",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Total count of matching ATS listings",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CountResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request. The endpoint returns an [RFC 7807](https://datatracker.ietf.org/doc/html/rfc7807) `application/problem+json` body. Common causes are listed in the examples below.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                },
                "examples": {
                  "invalid_time_frame": {
                    "summary": "Invalid time_frame value",
                    "value": {
                      "type": "https://httpproblems.com/http-status/400",
                      "title": "Bad Request",
                      "status": 400,
                      "detail": "Invalid 'time_frame' parameter. Must be one of: 1h, 24h, 1m, 6m",
                      "instance": "/v1/active-ats-count",
                      "trace": {
                        "timestamp": "2026-05-14T07:28:14.994Z",
                        "requestId": "d417443e-ca81-43c1-bedb-764fc0cdf4cc",
                        "buildId": "b6097d2d-7e03-405e-86a3-79c64a9b0814",
                        "rayId": "9fb82f5d2ee19353"
                      }
                    }
                  },
                  "unknown_parameter": {
                    "summary": "Unknown query parameter (with suggestion)",
                    "value": {
                      "type": "https://httpproblems.com/http-status/400",
                      "title": "Bad Request",
                      "status": 400,
                      "detail": "Unknown query parameter \"timeframe\". Did you mean 'time_frame'? See the API reference for the full list of supported parameters for this endpoint.",
                      "instance": "/v1/active-ats-count",
                      "trace": {
                        "timestamp": "2026-05-14T07:28:14.994Z",
                        "requestId": "d417443e-ca81-43c1-bedb-764fc0cdf4cc",
                        "buildId": "b6097d2d-7e03-405e-86a3-79c64a9b0814",
                        "rayId": "9fb82f5d2ee19353"
                      }
                    }
                  },
                  "description_with_6m": {
                    "summary": "Description search not allowed with time_frame=6m",
                    "value": {
                      "type": "https://httpproblems.com/http-status/400",
                      "title": "Bad Request",
                      "status": 400,
                      "detail": "Description search is not available for time_frame=6m. Use a shorter time window (e.g. 1h, 24h, or 1m) when filtering by description.",
                      "instance": "/v1/active-ats-count",
                      "trace": {
                        "timestamp": "2026-05-14T07:28:14.994Z",
                        "requestId": "d417443e-ca81-43c1-bedb-764fc0cdf4cc",
                        "buildId": "b6097d2d-7e03-405e-86a3-79c64a9b0814",
                        "rayId": "9fb82f5d2ee19353"
                      }
                    }
                  },
                  "advanced_syntax": {
                    "summary": "Malformed `_advanced` search expression",
                    "value": {
                      "type": "https://httpproblems.com/http-status/400",
                      "title": "Bad Request",
                      "status": 400,
                      "detail": "Invalid syntax in advanced search expression. The `*_advanced` parameters accept Boolean operators (`&` AND, `|` OR, `!` NOT, `<->` PHRASE, `<N>` distance, `()` grouping, `foo:*` prefix); ensure parentheses are balanced and operators have operands. Affected parameter: 'title_advanced'.",
                      "instance": "/v1/active-ats-count",
                      "trace": {
                        "timestamp": "2026-05-14T07:28:14.994Z",
                        "requestId": "d417443e-ca81-43c1-bedb-764fc0cdf4cc",
                        "buildId": "b6097d2d-7e03-405e-86a3-79c64a9b0814",
                        "rayId": "9fb82f5d2ee19353"
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimitWithRetryAfter"
          },
          "504": {
            "description": "Count timed out. Narrow your filters or use a shorter time window. Returned as `application/problem+json`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                },
                "examples": {
                  "count_timeout": {
                    "summary": "Count exceeded the gateway timeout",
                    "value": {
                      "type": "https://httpproblems.com/http-status/504",
                      "title": "Gateway Timeout",
                      "status": 504,
                      "detail": "The count timed out. Narrow your filters, or use a shorter time window (e.g. 1m or 24h instead of 6m).",
                      "instance": "/v1/active-ats-count",
                      "trace": {
                        "timestamp": "2026-05-14T07:28:14.994Z",
                        "requestId": "d417443e-ca81-43c1-bedb-764fc0cdf4cc",
                        "buildId": "b6097d2d-7e03-405e-86a3-79c64a9b0814",
                        "rayId": "9fb82f5d2ee19353"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "operationId": "get-active-ats-count-v1",
        "tags": [
          "Beta"
        ]
      }
    },
    "/v1/active-jb-count": {
      "get": {
        "summary": "Job board jobs count",
        "description": "Returns the total count of job board listings matching your filters in the selected time window. No job rows are returned in the body.\n\n**Use this endpoint to select the subscription tier that matches your job volume.** Call the endpoint with `time_frame=1m` (jobs indexed during the last 31 days) to see how many jobs match your filters per month. This is the most direct way to figure out which plan you need before subscribing.\n\n**You don't need this endpoint for pagination.** You do **not** need this endpoint to know how many times to increase `offset` on [`/active-jb`](/api/new-jobs#job-board-jobs). Just keep increasing `offset` on the data endpoint until it returns fewer rows than your `limit`, that's cheaper than a separate count call.\n\n**Cost & timeouts.** This endpoint scans the entire filtered set on every call and is intentionally not designed for frequent use. This endpoint will timeout if it runs longer than 60 seconds, and you are likely to hit it on `time_frame=6m` - use `6m` sparingly.\n\nYou may use this endpoint to calculate the number of jobs you need to backfill using the `6m` time_frame. However, please reach out to us if your API requests are complex and are timing out.\n\n**Each call consumes 1 API Request.**\n\n**Parameters.** This endpoint accepts the same parameters as [`/active-jb`](/api/new-jobs#job-board-jobs) with the exception of parameters that are not relevant for count (`description_format`, `exclude_recruiter_fields`, `employment_type` (raw), `id`, `limit`, `offset`, `cursor`).\n\n**`description` / `description_advanced` are not available for `time_frame=6m`.**",
        "parameters": [
          {
            "name": "time_frame",
            "in": "query",
            "description": "Time window to count over. Defaults to `1m` (trailing 31 days), which is the recommended value for plan-sizing.\n\n- `1h` - count just-discovered jobs (last hour).\n- `24h` - count jobs from the last 24 hours.\n- `1m` - **default**, trailing 31 days. Best for monthly plan estimates.\n- `6m` - last 6 months. Slow, likely to hit the 60s timeout on broad queries. Use sparingly. `description` / `description_advanced` are not allowed here.",
            "schema": {
              "type": "string",
              "enum": [
                "1h",
                "24h",
                "1m",
                "6m"
              ],
              "default": "1m"
            }
          },
          {
            "name": "title",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "title_advanced",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "description",
            "in": "query",
            "description": "Text search on job **title and description combined** (a hit in either field matches - use `title` instead to restrict matches to the job title only). Same syntax as `title`. **Not available for `time_frame=6m`**.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "description_advanced",
            "in": "query",
            "description": "Boolean full-text search on **title and description combined** (same index as `description`; pair with `title_advanced` if you want a term required in the title specifically). Same operator syntax as `title_advanced`. **Not available for `time_frame=6m`**.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "location",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "location_advanced",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "organization",
            "in": "query",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "exclude_organization",
            "in": "query",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "organization_advanced",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "source",
            "in": "query",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "linkedin",
                  "wellfound",
                  "ycombinator"
                ]
              }
            }
          },
          {
            "name": "exclude_source",
            "in": "query",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "linkedin",
                  "wellfound",
                  "ycombinator"
                ]
              }
            }
          },
          {
            "name": "seniority",
            "in": "query",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "organization_industry",
            "in": "query",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "exclude_organization_industry",
            "in": "query",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "organization_slug",
            "in": "query",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "exclude_organization_slug",
            "in": "query",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "organization_headcount_gte",
            "in": "query",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "organization_headcount_lt",
            "in": "query",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "ai_employment_type",
            "in": "query",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "FULL_TIME",
                  "PART_TIME",
                  "CONTRACTOR",
                  "TEMPORARY",
                  "INTERN",
                  "VOLUNTEER",
                  "PER_DIEM",
                  "OTHER"
                ]
              }
            }
          },
          {
            "name": "ai_experience_level",
            "in": "query",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "0-2",
                  "2-5",
                  "5-10",
                  "10+"
                ]
              }
            }
          },
          {
            "name": "ai_work_arrangement",
            "in": "query",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "Remote Solely",
                  "Remote OK",
                  "Hybrid",
                  "On-site"
                ]
              }
            }
          },
          {
            "name": "ai_education",
            "in": "query",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "high school",
                  "associate degree",
                  "bachelor degree",
                  "professional certificate",
                  "postgraduate degree"
                ]
              }
            }
          },
          {
            "name": "ai_taxonomies_a_primary",
            "in": "query",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "Technology",
                  "Healthcare",
                  "Management & Leadership",
                  "Finance & Accounting",
                  "Human Resources",
                  "Sales",
                  "Marketing",
                  "Customer Service & Support",
                  "Education",
                  "Legal",
                  "Engineering",
                  "Science & Research",
                  "Trades",
                  "Construction",
                  "Manufacturing",
                  "Logistics",
                  "Creative & Media",
                  "Hospitality",
                  "Environmental & Sustainability",
                  "Retail",
                  "Data & Analytics",
                  "Software",
                  "Energy",
                  "Agriculture",
                  "Social Services",
                  "Administrative",
                  "Government & Public Sector",
                  "Art & Design",
                  "Food & Beverage",
                  "Transportation",
                  "Consulting",
                  "Sports & Recreation",
                  "Security & Safety"
                ]
              }
            }
          },
          {
            "name": "ai_taxonomies_a",
            "in": "query",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "Technology",
                  "Healthcare",
                  "Management & Leadership",
                  "Finance & Accounting",
                  "Human Resources",
                  "Sales",
                  "Marketing",
                  "Customer Service & Support",
                  "Education",
                  "Legal",
                  "Engineering",
                  "Science & Research",
                  "Trades",
                  "Construction",
                  "Manufacturing",
                  "Logistics",
                  "Creative & Media",
                  "Hospitality",
                  "Environmental & Sustainability",
                  "Retail",
                  "Data & Analytics",
                  "Software",
                  "Energy",
                  "Agriculture",
                  "Social Services",
                  "Administrative",
                  "Government & Public Sector",
                  "Art & Design",
                  "Food & Beverage",
                  "Transportation",
                  "Consulting",
                  "Sports & Recreation",
                  "Security & Safety"
                ]
              }
            }
          },
          {
            "name": "exclude_ai_taxonomies_a",
            "in": "query",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "Technology",
                  "Healthcare",
                  "Management & Leadership",
                  "Finance & Accounting",
                  "Human Resources",
                  "Sales",
                  "Marketing",
                  "Customer Service & Support",
                  "Education",
                  "Legal",
                  "Engineering",
                  "Science & Research",
                  "Trades",
                  "Construction",
                  "Manufacturing",
                  "Logistics",
                  "Creative & Media",
                  "Hospitality",
                  "Environmental & Sustainability",
                  "Retail",
                  "Data & Analytics",
                  "Software",
                  "Energy",
                  "Agriculture",
                  "Social Services",
                  "Administrative",
                  "Government & Public Sector",
                  "Art & Design",
                  "Food & Beverage",
                  "Transportation",
                  "Consulting",
                  "Sports & Recreation",
                  "Security & Safety"
                ]
              }
            }
          },
          {
            "name": "ai_visa_sponsorship",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "only",
                "exclude"
              ]
            }
          },
          {
            "name": "has_salary",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "has_no_location",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "organization_agency",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "only",
                "exclude"
              ]
            }
          },
          {
            "name": "direct_apply",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "only",
                "exclude"
              ]
            }
          },
          {
            "name": "exclude_ats_duplicate",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "linkedin_id",
            "in": "query",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "integer",
                "format": "int64"
              }
            }
          },
          {
            "name": "date_posted_gte",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "date_posted_lt",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "date_created_gte",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "date_created_lt",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Total count of matching job board listings",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CountResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request. The endpoint returns an [RFC 7807](https://datatracker.ietf.org/doc/html/rfc7807) `application/problem+json` body. Common causes are listed in the examples below.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                },
                "examples": {
                  "invalid_time_frame": {
                    "summary": "Invalid time_frame value",
                    "value": {
                      "type": "https://httpproblems.com/http-status/400",
                      "title": "Bad Request",
                      "status": 400,
                      "detail": "Invalid 'time_frame' parameter. Must be one of: 1h, 24h, 1m, 6m",
                      "instance": "/v1/active-jb-count",
                      "trace": {
                        "timestamp": "2026-05-14T07:28:14.994Z",
                        "requestId": "d417443e-ca81-43c1-bedb-764fc0cdf4cc",
                        "buildId": "b6097d2d-7e03-405e-86a3-79c64a9b0814",
                        "rayId": "9fb82f5d2ee19353"
                      }
                    }
                  },
                  "unknown_parameter": {
                    "summary": "Unknown query parameter (with suggestion)",
                    "value": {
                      "type": "https://httpproblems.com/http-status/400",
                      "title": "Bad Request",
                      "status": 400,
                      "detail": "Unknown query parameter \"timeframe\". Did you mean 'time_frame'? See the API reference for the full list of supported parameters for this endpoint.",
                      "instance": "/v1/active-jb-count",
                      "trace": {
                        "timestamp": "2026-05-14T07:28:14.994Z",
                        "requestId": "d417443e-ca81-43c1-bedb-764fc0cdf4cc",
                        "buildId": "b6097d2d-7e03-405e-86a3-79c64a9b0814",
                        "rayId": "9fb82f5d2ee19353"
                      }
                    }
                  },
                  "description_with_6m": {
                    "summary": "Description search not allowed with time_frame=6m",
                    "value": {
                      "type": "https://httpproblems.com/http-status/400",
                      "title": "Bad Request",
                      "status": 400,
                      "detail": "Description search is not available for time_frame=6m. Use a shorter time window (e.g. 1h, 24h, or 1m) when filtering by description.",
                      "instance": "/v1/active-jb-count",
                      "trace": {
                        "timestamp": "2026-05-14T07:28:14.994Z",
                        "requestId": "d417443e-ca81-43c1-bedb-764fc0cdf4cc",
                        "buildId": "b6097d2d-7e03-405e-86a3-79c64a9b0814",
                        "rayId": "9fb82f5d2ee19353"
                      }
                    }
                  },
                  "advanced_syntax": {
                    "summary": "Malformed `_advanced` search expression",
                    "value": {
                      "type": "https://httpproblems.com/http-status/400",
                      "title": "Bad Request",
                      "status": 400,
                      "detail": "Invalid syntax in advanced search expression. The `*_advanced` parameters accept Boolean operators (`&` AND, `|` OR, `!` NOT, `<->` PHRASE, `<N>` distance, `()` grouping, `foo:*` prefix); ensure parentheses are balanced and operators have operands. Affected parameter: 'title_advanced'.",
                      "instance": "/v1/active-jb-count",
                      "trace": {
                        "timestamp": "2026-05-14T07:28:14.994Z",
                        "requestId": "d417443e-ca81-43c1-bedb-764fc0cdf4cc",
                        "buildId": "b6097d2d-7e03-405e-86a3-79c64a9b0814",
                        "rayId": "9fb82f5d2ee19353"
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimitWithRetryAfter"
          },
          "504": {
            "description": "Count timed out. Narrow your filters or use a shorter time window. Returned as `application/problem+json`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                },
                "examples": {
                  "count_timeout": {
                    "summary": "Count exceeded the gateway timeout",
                    "value": {
                      "type": "https://httpproblems.com/http-status/504",
                      "title": "Gateway Timeout",
                      "status": 504,
                      "detail": "The count timed out. Narrow your filters, or use a shorter time window (e.g. 1m or 24h instead of 6m).",
                      "instance": "/v1/active-jb-count",
                      "trace": {
                        "timestamp": "2026-05-14T07:28:14.994Z",
                        "requestId": "d417443e-ca81-43c1-bedb-764fc0cdf4cc",
                        "buildId": "b6097d2d-7e03-405e-86a3-79c64a9b0814",
                        "rayId": "9fb82f5d2ee19353"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "operationId": "get-active-jb-count-v1",
        "tags": [
          "Beta"
        ]
      }
    },
    "/v1/modified-ats": {
      "get": {
        "summary": "Modified ATS jobs",
        "description": "Retrieves ATS job listings modified within the last 24 hours with support for filtering, full-text search, date ranges, pagination, and field selection. Results are sorted by `date_modified` descending by default.",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "description": "Number of results to return. Default: 100, min: 1, max: 1000.\n\nUse with `offset` to paginate, e.g. `limit=100&offset=0`, then `limit=100&offset=100`, then `limit=100&offset=200`. For very large feeds prefer `cursor` over `offset`.",
            "schema": {
              "type": "integer",
              "default": 100,
              "minimum": 1,
              "maximum": 1000
            }
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Number of results to skip for pagination. e.g. `limit=100&offset=200` returns the third page (results 201–300). Use `cursor` instead for very large feeds - `offset` becomes inefficient at deep pages.",
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Cursor-based pagination. Pass the last job's `id` to get the next page. **Note:** When `cursor` is set, results are ordered by `id` ascending - this overrides the default ordering (`date_posted` desc, or `date_modified` desc on [`/modified-ats`](/api/modified-jobs#modified-ats-jobs)). Cursor and offset pagination therefore traverse the feed in different orders.\n\n**Interaction with `offset`:** `cursor` overrides `offset`. If both are passed, `offset` is ignored. Pick one pagination strategy and stick with it.",
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "description_format",
            "in": "query",
            "description": "Format the job description should be returned in. Choose `text` for plain text or `html` for raw HTML. **Omit the parameter entirely to exclude the description field from the response** - descriptions are not included by default because they significantly increase payload size.\n\n**Caution:** `html` returns the description as it was scraped from the source - sanitize before rendering on a web page.",
            "schema": {
              "type": "string",
              "enum": [
                "text",
                "html"
              ],
              "default": "text"
            }
          },
          {
            "name": "include_basic_organization_details",
            "in": "query",
            "description": "Off by default to keep responses small. Set to `true` to include basic organization fields inline with each job: `org_linkedin_name`, `org_linkedin_website`, `org_linkedin_industry`, `org_linkedin_headcount`, `org_linkedin_size`, `org_linkedin_followers`, `org_linkedin_headquarters`, `org_linkedin_locations`, `org_linkedin_type`, `org_linkedin_founded_date`, `org_linkedin_slogan`, `org_linkedin_description`, `org_linkedin_specialties`, `org_linkedin_recruitment_agency_derived`, `org_crunchbase_categories`, `org_crunchbase_total_investment`, `org_logo_permalink`. `org_linkedin_slug` is always returned (regardless of this flag) so jobs can be joined to [`/ats-organizations-advanced`](/api/ats-organizations#advanced-organization-details).\n\n**You don't need this flag if you're already calling [`/ats-organizations-advanced`](/api/ats-organizations#advanced-organization-details)** - every field above is included there (alongside additional advanced fields).",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "title",
            "in": "query",
            "description": "Text search on job title. Searches like a Google query:\n\n- `software engineer` - jobs with **both** words in the title.\n- `\"software engineer\"` - exact phrase.\n- `software OR engineer` - either word.\n- `-engineer` - exclude jobs with `engineer` in the title.\n\nFor Boolean operators, parentheses, or prefix matching, use `title_advanced` instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "description",
            "in": "query",
            "description": "Text search on job **title and description combined**. Searches a single index covering both fields, so a hit in either the title or the description matches - use `title` instead if you want to restrict matches to the job title only. Same syntax as `title`. e.g. `python OR javascript OR js` returns jobs whose title or description mentions any of those keywords. Heavy queries (long phrases, many `OR`s) on long time windows can time out when using time_frame=6m - keep it tight.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "location",
            "in": "query",
            "description": "Text search on location fields. Search using **full names**, abbreviations are not supported.\n\n- Use `United States`, not `US`.\n- Use `United Kingdom`, not `UK`.\n- US states need their full name and country: `New York, United States`, `California, United States`.\n- UK cities need the constituent country: `Birmingham, England, United Kingdom`, `Glasgow, Scotland, United Kingdom`.\n\nMulti-location with `OR`: `\"United States\" OR \"United Kingdom\"` or `\"San Francisco\" OR \"New York\"`. For Boolean operators (parentheses, AND, NOT), use `location_advanced`. \n\n See [Nuances of Location Search](/documentation/nuances-of-location-search) for more.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "organization",
            "in": "query",
            "description": "Filter by organization name(s). **Exact, case-sensitive match** - `nvidia` will not match `NVIDIA`. For fuzzy or Boolean matching, use `organization_advanced`. **Caveat:** organization names containing parentheses are not supported here - use `organization_slug` (preferred when available) or `organization_advanced` instead.\n\nFetch the full list of organizations we currently track via [`/ats-organizations`](/api/ats-organizations#organization-list).\n\nInput a comma-separated list.",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "exclude_organization",
            "in": "query",
            "description": "Exclude organization name(s). Same matching rules as `organization` (exact, case-sensitive). For fuzzy/Boolean exclusion, use `organization_advanced` with `!`.\n\nInput a comma-separated list.",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "title_advanced",
            "in": "query",
            "description": "Boolean full-text search on title. Operators: `&` (AND), `|` (OR), `!` (NOT), `<->` (followed-by), parentheses for grouping, `:*` for prefix matching.\n\nMulti-word phrases must be single-quoted (`'machine learning'`) or chained with `<->` (`machine <-> learning`). If `title` is also passed, `title_advanced` takes precedence and `title` is ignored.\n\n**Examples:**\n\n- `(AI | 'machine learning' | robotics) & !marketing` - AI/ML/robotics roles, no marketing titles.\n- `senior & (python | rust) & !staff` - senior IC roles in either stack, excluding staff-engineer.\n- `project <-> manag:*` - matches `project manager`, `project management`, `project managing`, ...\n\nSee [Advanced Searching Guide](/documentation/advanced-searching-guide) for more.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "description_advanced",
            "in": "query",
            "description": "Boolean full-text search on **title and description combined** (same index as `description`, so matches in either field count - pair with `title_advanced` if you also want to require a term in the title specifically). Same operator syntax as `title_advanced`. If `description` is also passed, `description_advanced` takes precedence and `description` is ignored. Description searches are expensive when using time_frame=6m, if a query times out, simplify it, lower `limit`, or shrink the time window.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "location_advanced",
            "in": "query",
            "description": "Boolean full-text search on location. Same operator syntax as `title_advanced`. If `location` is also passed, `location_advanced` takes precedence and `location` is ignored. The same naming rules as `location` apply (full names, no abbreviations).\n\n**Examples:**\n\n- `'United States' & !California` - US minus California.\n- `Germany & !(Berlin | Munich)` - Germany excluding two cities.\n- `'New York' | 'San Francisco' | Boston` - multi-city.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "organization_advanced",
            "in": "query",
            "description": "Boolean full-text search on organization name. Same operator syntax as `title_advanced`. If `organization` is also passed, `organization_advanced` takes precedence and `organization` is ignored.\n\n**Examples:**\n\n- `University & !Harvard` - every \"University\" employer except Harvard.\n- `(Microsoft | Google | Apple)` - match any of the three.\n- `Open <-> AI:*` - matches `OpenAI`, `Open AI`, `Open-AI`, etc.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "date_posted_gte",
            "in": "query",
            "description": "Filter jobs posted on or after this date (ISO 8601). e.g. `2026-04-20T00:00:00`. Posted-date timestamps are UTC, with a 1-2 hour ingestion delay between the source publishing the job and it appearing in this API. \n\n See [Time Fields](/documentation/time-fields) for the difference between `date_posted`, `date_created`, and `date_modified`.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "date_posted_lt",
            "in": "query",
            "description": "Filter jobs posted before this date (ISO 8601).",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "date_created_gte",
            "in": "query",
            "description": "Filter jobs indexed on or after this date (ISO 8601). `date_created` reflects when our system first indexed the job.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "date_created_lt",
            "in": "query",
            "description": "Filter jobs indexed before this date (ISO 8601).",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "date_modified_gte",
            "in": "query",
            "description": "Filter jobs modified on or after this date (ISO 8601). `date_modified` updates whenever a tracked field on the listing (title, description, location, salary, apply URL, …) changes upstream - useful to keep an existing copy in sync without re-fetching the full feed. See [Time Fields](/documentation/time-fields).",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "date_modified_lt",
            "in": "query",
            "description": "Filter jobs modified before this date (ISO 8601). See [Time Fields](/documentation/time-fields).",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "domain",
            "in": "query",
            "description": "Filter by employer domain(s). The domain_derived field is mapped to jobs using an LLM agent with 99% accuracy. Please report any mistakes.\n\n This parameter is especially useful to capture employers that have multiple ATS across regions. For example, `nvidia.com,microsoft.com,google.com`. Each tracked organization's domain is exposed via [`/ats-organizations`](/api/ats-organizations#organization-list).\n\nInput a comma-separated list.",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "exclude_domain",
            "in": "query",
            "description": "Exclude employer domain(s). Same rules as `domain`. e.g. `nvidia.com,microsoft.com`.\n\nInput a comma-separated list.",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "source",
            "in": "query",
            "description": "Filter by source ATS/job board(s). Currently supported values: `adp`, `applicantpro`, `ashby`, `bamboohr`, `breezy`, `careerplug`, `comeet`, `csod`, `dayforce`, `dover`, `eightfold`, `firststage`, `freshteam`, `gem`, `gohire`, `greenhouse`, `hibob`, `hirebridge`, `hirehive`, `hireology`, `hiringthing`, `icims`, `isolved`, `jazzhr`, `jobvite`, `join.com`, `kula`, `lever.co`, `manatal`, `oraclecloud`, `pageup`, `paradox`, `paycom`, `paycor`, `paylocity`, `personio`, `phenompeople`, `pinpoint`, `polymer`, `recruitee`, `recooty`, `rippling`, `rival`, `smartrecruiters`, `successfactors`, `taleo`, `teamtailor`, `trakstar`, `trinet`, `ultipro`, `werecruit`, `workable`, `workday`, `zoho`. New ATS platforms are added regularly, recheck this list periodically.\n\nInput a comma-separated list.",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "exclude_source",
            "in": "query",
            "description": "Exclude source ATS/job board(s). See `source` for the full list of supported values.\n\nInput a comma-separated list.",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "organization_industry",
            "in": "query",
            "description": "Filter by LinkedIn industry. Use the **exact** LinkedIn industry name (case-sensitive). Common values: `Software Development`, `Information Technology and Services`, `Financial Services`, `Hospital & Health Care`, `Staffing and Recruiting`, `Marketing and Advertising`. The full taxonomy of ~400 industries lives at [LinkedIn Industries](https://fantastic.jobs/article/linkedin-industries).\n\nFor names containing `&` (e.g. `\"Hospital & Health Care\"`), please double-quote.\n\nInput a comma-separated list.",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "exclude_organization_industry",
            "in": "query",
            "description": "Exclude LinkedIn industry/industries. Same matching rules as `organization_industry` (exact, case-sensitive). See [LinkedIn Industries](https://fantastic.jobs/article/linkedin-industries) for the full taxonomy.\n\nInput a comma-separated list.",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "organization_slug",
            "in": "query",
            "description": "Filter by LinkedIn organization slug(s), the company-specific portion of a LinkedIn URL.\n\n For `https://www.linkedin.com/company/walmart/`, the slug is `walmart`.\n For `https://www.linkedin.com/company/tesla-motors/`, it's `tesla-motors`. \n\n **Exact match only.** Generally more reliable than `organization` (no spelling/casing variation) and the only way to filter on names containing parentheses.\n\nFetch the full list of organizations (with their slugs) via [`/ats-organizations`](/api/ats-organizations#organization-list).\n\nInput a comma-separated list.",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "exclude_organization_slug",
            "in": "query",
            "description": "Exclude LinkedIn organization slug(s). Same rules as `organization_slug` (exact match). Fetch slugs via [`/ats-organizations`](/api/ats-organizations#organization-list).\n\nInput a comma-separated list.",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "organization_headcount_gte",
            "in": "query",
            "description": "Filter companies with at least this many LinkedIn employees (inclusive lower bound). Source: LinkedIn company profile (`org_linkedin_headcount`). \n\n Combine with `organization_headcount_lt` for a range, e.g. `organization_headcount_gte=50&organization_headcount_lt=500` for 50–499-employee companies.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "organization_headcount_lt",
            "in": "query",
            "description": "Filter companies with fewer than this many LinkedIn employees (exclusive upper bound). Source: LinkedIn company profile (`org_linkedin_headcount`). \n\n Combine with `organization_headcount_gte` for a range.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "ai_experience_level",
            "in": "query",
            "description": "Filter by AI-derived experience level (years of experience required, inferred from the job description and other elements from the job page).\n\n- `0-2`\n- `2-5`\n- `5-10`\n- `10+`\n\nPass multiple to broaden the match (e.g. `0-2,2-5`). Input a comma-separated list.",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "0-2",
                  "2-5",
                  "5-10",
                  "10+"
                ]
              }
            }
          },
          {
            "name": "ai_work_arrangement",
            "in": "query",
            "description": "Filter by AI-derived work arrangement.\n\n- `On-site` - no remote at all.\n- `Hybrid` - split between office and remote.\n- `Remote OK` - fully remote, but an office is available.\n- `Remote Solely` - fully remote, no office.\n\nPass multiple to broaden, e.g. `Hybrid,Remote OK,Remote Solely` for any-remote-flexibility roles. Input a comma-separated list.",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "Remote Solely",
                  "Remote OK",
                  "Hybrid",
                  "On-site"
                ]
              }
            }
          },
          {
            "name": "ai_employment_type",
            "in": "query",
            "description": "Filter by AI-derived employment type(s) (overlap match, a job tagged with multiple types matches if any are in your list).\n\n- `FULL_TIME`, `PART_TIME`\n- `CONTRACTOR`, `TEMPORARY`, `PER_DIEM`\n- `INTERN`, `VOLUNTEER`, `OTHER`\n\nInput a comma-separated list.",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "FULL_TIME",
                  "PART_TIME",
                  "CONTRACTOR",
                  "TEMPORARY",
                  "INTERN",
                  "VOLUNTEER",
                  "PER_DIEM",
                  "OTHER"
                ]
              }
            }
          },
          {
            "name": "ai_education",
            "in": "query",
            "description": "Filter by AI-derived education requirements. The LLM is instructured to flag education that's <b> required, preferred, or desired </b> (overlap match, jobs are tagged with one or more requirements).\n\n- `high school`\n- `associate degree`\n- `bachelor degree`\n- `professional certificate`\n- `postgraduate degree`\n\n**Note:** Overlap match means `bachelor degree` matches jobs that explicitly require a bachelor's, it doesn't broaden to also match jobs that only require high school.\n\nInput a comma-separated list.",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "high school",
                  "associate degree",
                  "bachelor degree",
                  "professional certificate",
                  "postgraduate degree"
                ]
              }
            }
          },
          {
            "name": "ai_taxonomies_a_primary",
            "in": "query",
            "description": "Filter by AI taxonomy/taxonomies. Similar to `ai_taxonomies_a`, but only matches the **first** (most relevant) taxonomy assigned to a job. Use when you want a tight category match, e.g. jobs that are *primarily* about Technology, not just adjacent to it.\n\nInput a comma-separated list.",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "Technology",
                  "Healthcare",
                  "Management & Leadership",
                  "Finance & Accounting",
                  "Human Resources",
                  "Sales",
                  "Marketing",
                  "Customer Service & Support",
                  "Education",
                  "Legal",
                  "Engineering",
                  "Science & Research",
                  "Trades",
                  "Construction",
                  "Manufacturing",
                  "Logistics",
                  "Creative & Media",
                  "Hospitality",
                  "Environmental & Sustainability",
                  "Retail",
                  "Data & Analytics",
                  "Software",
                  "Energy",
                  "Agriculture",
                  "Social Services",
                  "Administrative",
                  "Government & Public Sector",
                  "Art & Design",
                  "Food & Beverage",
                  "Transportation",
                  "Consulting",
                  "Sports & Recreation",
                  "Security & Safety"
                ]
              }
            }
          },
          {
            "name": "ai_taxonomies_a",
            "in": "query",
            "description": "Filter by AI taxonomy/taxonomies (overlap match, jobs are tagged with one or more, ordered by relevance). The first taxonomy in the array is the **primary** taxonomy.\n\nMatches a job if **any** of its assigned taxonomies are in your list (broad). For tighter matches use `ai_taxonomies_a_primary` (matches only the primary). To exclude taxonomies use `exclude_ai_taxonomies_a`.\n\nFor names containing `&` (e.g. `\"Management & Leadership\"`), please double-quote.\n\nInput a comma-separated list.",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "Technology",
                  "Healthcare",
                  "Management & Leadership",
                  "Finance & Accounting",
                  "Human Resources",
                  "Sales",
                  "Marketing",
                  "Customer Service & Support",
                  "Education",
                  "Legal",
                  "Engineering",
                  "Science & Research",
                  "Trades",
                  "Construction",
                  "Manufacturing",
                  "Logistics",
                  "Creative & Media",
                  "Hospitality",
                  "Environmental & Sustainability",
                  "Retail",
                  "Data & Analytics",
                  "Software",
                  "Energy",
                  "Agriculture",
                  "Social Services",
                  "Administrative",
                  "Government & Public Sector",
                  "Art & Design",
                  "Food & Beverage",
                  "Transportation",
                  "Consulting",
                  "Sports & Recreation",
                  "Security & Safety"
                ]
              }
            }
          },
          {
            "name": "exclude_ai_taxonomies_a",
            "in": "query",
            "description": "Exclude AI taxonomy/taxonomies - excludes a job if **any** of its assigned taxonomies are in this list. See `ai_taxonomies_a` for the value list and overlap-match semantics.\n\nInput a comma-separated list.",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "Technology",
                  "Healthcare",
                  "Management & Leadership",
                  "Finance & Accounting",
                  "Human Resources",
                  "Sales",
                  "Marketing",
                  "Customer Service & Support",
                  "Education",
                  "Legal",
                  "Engineering",
                  "Science & Research",
                  "Trades",
                  "Construction",
                  "Manufacturing",
                  "Logistics",
                  "Creative & Media",
                  "Hospitality",
                  "Environmental & Sustainability",
                  "Retail",
                  "Data & Analytics",
                  "Software",
                  "Energy",
                  "Agriculture",
                  "Social Services",
                  "Administrative",
                  "Government & Public Sector",
                  "Art & Design",
                  "Food & Beverage",
                  "Transportation",
                  "Consulting",
                  "Sports & Recreation",
                  "Security & Safety"
                ]
              }
            }
          },
          {
            "name": "ai_visa_sponsorship",
            "in": "query",
            "description": "Filter listings by AI-derived visa-sponsorship availability. Omit to include both.\n\n- `only` - return only listings that offer visa sponsorship.\n- `exclude` - exclude listings that offer visa sponsorship (return only those that don't).\n\n**Note:** Detection is based on language in the job description, not all companies are very clear about their requirements in the job description.",
            "schema": {
              "type": "string",
              "enum": [
                "only",
                "exclude"
              ]
            }
          },
          {
            "name": "has_salary",
            "in": "query",
            "description": "Set to `true` to only return jobs that have salary information (raw or AI-enriched). Omit (or pass `false`) to include both.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "has_no_location",
            "in": "query",
            "description": "Set to `true` to return only listings with **no** normalized location set (i.e. `locations_derived` is null). Useful for surfacing jobs whose source feed didn't include structured location data, which would otherwise be missed by location-based searches. Omit (or pass `false`) to include all listings.\n\n**Note:** combining `has_no_location=true` with `location` / `location_advanced` will always return zero rows, since the listings selected by `has_no_location=true` have no location text to match against. Don't combine them.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "organization_agency",
            "in": "query",
            "description": "Filter listings by recruitment-agency status of the organization. Omit to include both.\n\n- `only` - return only listings whose organization is a recruitment/staffing agency.\n- `exclude` - exclude listings from recruitment/staffing agencies.\n\nThe agency flag itself is exposed in the response as `org_linkedin_recruitment_agency_derived`.",
            "schema": {
              "type": "string",
              "enum": [
                "only",
                "exclude"
              ]
            }
          },
          {
            "name": "id",
            "in": "query",
            "description": "Filter by one or more internal Fantastic.jobs IDs. Matches the `id` field in each response object, the same identifier surfaced by [`/expired-ats`](/api/expired-jobs#expired-ats-jobs) and [`/modified-ats`](/api/modified-jobs#modified-ats-jobs) for expiration and change tracking. e.g. `id=8123456,8123457` returns those two specific jobs (useful for refreshing rows you already store).\n\nInput a comma-separated list.",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "integer",
                "format": "int64"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A list of modified ATS job listings",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ModifiedAtsJob"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request. The endpoint returns an [RFC 7807](https://datatracker.ietf.org/doc/html/rfc7807) `application/problem+json` body. Common causes are listed in the examples below.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                },
                "examples": {
                  "unknown_parameter": {
                    "summary": "Unknown query parameter (with suggestion)",
                    "value": {
                      "type": "https://httpproblems.com/http-status/400",
                      "title": "Bad Request",
                      "status": 400,
                      "detail": "Unknown query parameter \"date_modified\". Did you mean 'date_modified_gte'? See the API reference for the full list of supported parameters for this endpoint.",
                      "instance": "/v1/modified-ats",
                      "trace": {
                        "timestamp": "2026-05-14T07:28:14.994Z",
                        "requestId": "d417443e-ca81-43c1-bedb-764fc0cdf4cc",
                        "buildId": "b6097d2d-7e03-405e-86a3-79c64a9b0814",
                        "rayId": "9fb82f5d2ee19353"
                      }
                    }
                  },
                  "advanced_syntax": {
                    "summary": "Malformed `_advanced` search expression",
                    "value": {
                      "type": "https://httpproblems.com/http-status/400",
                      "title": "Bad Request",
                      "status": 400,
                      "detail": "Invalid syntax in advanced search expression. The `*_advanced` parameters accept Boolean operators (`&` AND, `|` OR, `!` NOT, `<->` PHRASE, `<N>` distance, `()` grouping, `foo:*` prefix); ensure parentheses are balanced and operators have operands. Affected parameter: 'title_advanced'.",
                      "instance": "/v1/modified-ats",
                      "trace": {
                        "timestamp": "2026-05-14T07:28:14.994Z",
                        "requestId": "d417443e-ca81-43c1-bedb-764fc0cdf4cc",
                        "buildId": "b6097d2d-7e03-405e-86a3-79c64a9b0814",
                        "rayId": "9fb82f5d2ee19353"
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimitWithRetryAfter"
          },
          "504": {
            "description": "Gateway timeout. The upstream query exceeded the configured server-side query timeout and was rewritten to a 504 by `response-outbound`. Returned as `application/problem+json`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                },
                "examples": {
                  "request_timeout": {
                    "summary": "Query exceeded the database statement timeout",
                    "value": {
                      "type": "https://httpproblems.com/http-status/504",
                      "title": "Gateway Timeout",
                      "status": 504,
                      "detail": "The request timed out. Try narrowing your filters or reducing the limit.",
                      "instance": "/v1/modified-ats",
                      "trace": {
                        "timestamp": "2026-05-14T07:28:14.994Z",
                        "requestId": "d417443e-ca81-43c1-bedb-764fc0cdf4cc",
                        "buildId": "b6097d2d-7e03-405e-86a3-79c64a9b0814",
                        "rayId": "9fb82f5d2ee19353"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "operationId": "get-modified-ats-v1",
        "tags": [
          "Modified Jobs"
        ]
      }
    },
    "/v1/expired-ats": {
      "get": {
        "summary": "Expired ATS jobs",
        "description": "Returns a feed of ATS job listings that have expired within the selected time window. Use the `time_frame` parameter to select `1h`, `1d`, `1m`, or `6m`.\n\n**Warning: The '1m' and '6m' feeds are very large in size and might not display properly in the playground.**",
        "parameters": [
          {
            "name": "time_frame",
            "in": "query",
            "required": true,
            "description": "Time window for expired ATS listings.\n\n- `1h` - rolling window of listings that expired in the last hour. Refreshed continuously.\n- `1d` - daily snapshot of expirations from the previous UTC day. Refreshed once per day at 01:00 UTC; this is the most common choice for daily syncs. Despite the name this is **not** a rolling 24-hour window.\n- `1m` - monthly window of listings that expired during the last 31 days.\n- `6m` - full 6-month backfill of expirations (very large feed).",
            "schema": {
              "type": "string",
              "enum": [
                "1h",
                "1d",
                "1m",
                "6m"
              ],
              "default": "1d"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A JSON array of internal IDs for ATS jobs that expired in the selected window. Match each ID against `ActiveAtsJob.id` to expire stale rows in your store.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ExpiredAtsJobId"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request. The endpoint returns an [RFC 7807](https://datatracker.ietf.org/doc/html/rfc7807) `application/problem+json` body. Common causes are listed in the examples below.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                },
                "examples": {
                  "missing_time_frame": {
                    "summary": "Missing or invalid time_frame",
                    "value": {
                      "type": "https://httpproblems.com/http-status/400",
                      "title": "Bad Request",
                      "status": 400,
                      "detail": "Missing or invalid 'time_frame' parameter. Must be one of: 1h, 1d, 1m, 6m",
                      "instance": "/v1/expired-ats",
                      "trace": {
                        "timestamp": "2026-05-14T07:28:14.994Z",
                        "requestId": "d417443e-ca81-43c1-bedb-764fc0cdf4cc",
                        "buildId": "b6097d2d-7e03-405e-86a3-79c64a9b0814",
                        "rayId": "9fb82f5d2ee19353"
                      }
                    }
                  },
                  "unknown_parameter": {
                    "summary": "Unknown query parameter (with suggestion)",
                    "value": {
                      "type": "https://httpproblems.com/http-status/400",
                      "title": "Bad Request",
                      "status": 400,
                      "detail": "Unknown query parameter \"timeframe\". Did you mean 'time_frame'? See the API reference for the full list of supported parameters for this endpoint.",
                      "instance": "/v1/expired-ats",
                      "trace": {
                        "timestamp": "2026-05-14T07:28:14.994Z",
                        "requestId": "d417443e-ca81-43c1-bedb-764fc0cdf4cc",
                        "buildId": "b6097d2d-7e03-405e-86a3-79c64a9b0814",
                        "rayId": "9fb82f5d2ee19353"
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimitWithRetryAfter"
          }
        },
        "operationId": "get-expired-ats-v1",
        "tags": [
          "Expired"
        ]
      }
    },
    "/v1/expired-jb": {
      "get": {
        "summary": "Expired job board jobs",
        "description": "Returns a feed of job board listings that have expired within the selected time window. Use the `time_frame` parameter to select `1h`, `1d`, `1m`, or `6m`.\n\n**Coverage:** Expiration is only tracked for **LinkedIn** listings (`source=linkedin`). Other job board sources (`wellfound`, `ycombinator`) are **not** re-checked for expiration, so this feed will never return their IDs.\n\n**Warning: The '1m' and '6m' feeds are very large in size and might not display properly in the playground.**",
        "parameters": [
          {
            "name": "time_frame",
            "in": "query",
            "required": true,
            "description": "Time window for expired job board listings.\n\n- `1h` - rolling window of listings that expired in the last hour. Refreshed continuously.\n- `1d` - daily snapshot of expirations from the previous UTC day. Refreshed once per day at 01:00 UTC; this is the most common choice for daily syncs. Despite the name this is **not** a rolling 24-hour window.\n- `1m` - monthly window of listings that expired during the last 31 days.\n- `6m` - full 6-month backfill of expirations (very large feed).",
            "schema": {
              "type": "string",
              "enum": [
                "1h",
                "1d",
                "1m",
                "6m"
              ],
              "default": "1d"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A JSON array of internal IDs for job board listings that expired in the selected window. Match each ID against `ActiveJbJob.id` to expire stale rows in your store.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ExpiredJbJobId"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request. The endpoint returns an [RFC 7807](https://datatracker.ietf.org/doc/html/rfc7807) `application/problem+json` body. Common causes are listed in the examples below.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                },
                "examples": {
                  "missing_time_frame": {
                    "summary": "Missing or invalid time_frame",
                    "value": {
                      "type": "https://httpproblems.com/http-status/400",
                      "title": "Bad Request",
                      "status": 400,
                      "detail": "Missing or invalid 'time_frame' parameter. Must be one of: 1h, 1d, 1m, 6m",
                      "instance": "/v1/expired-jb",
                      "trace": {
                        "timestamp": "2026-05-14T07:28:14.994Z",
                        "requestId": "d417443e-ca81-43c1-bedb-764fc0cdf4cc",
                        "buildId": "b6097d2d-7e03-405e-86a3-79c64a9b0814",
                        "rayId": "9fb82f5d2ee19353"
                      }
                    }
                  },
                  "unknown_parameter": {
                    "summary": "Unknown query parameter (with suggestion)",
                    "value": {
                      "type": "https://httpproblems.com/http-status/400",
                      "title": "Bad Request",
                      "status": 400,
                      "detail": "Unknown query parameter \"timeframe\". Did you mean 'time_frame'? See the API reference for the full list of supported parameters for this endpoint.",
                      "instance": "/v1/expired-jb",
                      "trace": {
                        "timestamp": "2026-05-14T07:28:14.994Z",
                        "requestId": "d417443e-ca81-43c1-bedb-764fc0cdf4cc",
                        "buildId": "b6097d2d-7e03-405e-86a3-79c64a9b0814",
                        "rayId": "9fb82f5d2ee19353"
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimitWithRetryAfter"
          }
        },
        "operationId": "get-expired-jb-v1",
        "tags": [
          "Expired"
        ]
      }
    },
    "/v1/ats-organizations": {
      "get": {
        "summary": "Organization list",
        "description": "Returns the full list of organizations currently tracked across ATS sources. Each row carries a small set of identifier fields (`organization`, `domain_derived`, `org_linkedin_slug`, `org_linkedin_name`, `org_linkedin_industry`, `org_linkedin_headcount`, `org_linkedin_headquarters`) - just enough to discover and filter on tracked organizations. Refreshed once per day at **02:00 UTC**.\n\n**This endpoint is not an enrichment feed** - it does **not** return the same fields as `include_basic_organization_details=true`. For the full set of basic LinkedIn fields per organization, use `include_basic_organization_details=true` on [`/active-ats`](/api/new-jobs#ats-jobs) / [`/modified-ats`](/api/modified-jobs#modified-ats-jobs), or fetch them per-org from [`/ats-organizations-advanced`](/api/ats-organizations#advanced-organization-details) and join by `org_linkedin_slug`.\n\nIf you wish to **download a CSV file instead of calling the API**, copy paste the link below in your browser with your API key to download the file instead:\n\n```text\nhttps://data.fantastic.jobs/v1/ats-organizations?format=csv&apiKey=*apikey*\n```\n\n**Intended for ATS workflows.** Use this to browse the catalog and discover valid `organization`, `organization_domain`, and `organization_slug` values for filtering jobs on [`/active-ats`](/api/new-jobs#ats-jobs) and [`/modified-ats`](/api/modified-jobs#modified-ats-jobs). Job board listings ([`/active-jb`](/api/new-jobs#job-board-jobs)) already include LinkedIn organization fields inline on every job, so JB-only consumers typically don't need this endpoint.\n\nSet `format=csv` to download the same feed as CSV. For browser downloads, pass the API key as `apiKey` in the query string; the gateway converts it to the standard `Authorization: Bearer ...` header before authentication and removes it from the internal request URL.\n\n**Warning: This feed is about 50MB in size and might not display properly in the playground.**",
        "parameters": [
          {
            "name": "format",
            "in": "query",
            "required": false,
            "description": "Response format. Defaults to JSON. Use `csv` for spreadsheet downloads.",
            "schema": {
              "type": "string",
              "enum": [
                "json",
                "csv"
              ],
              "default": "json"
            }
          },
          {
            "name": "apiKey",
            "in": "query",
            "required": false,
            "description": "Optional browser-download API key. Equivalent to sending `Authorization: Bearer <API key>` and intended for copy/paste download URLs.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A list of organizations, returned as JSON by default or CSV when `format=csv`.",
            "headers": {
              "Content-Disposition": {
                "description": "Attachment filename for CSV downloads. Only present when `format=csv`.",
                "schema": {
                  "type": "string",
                  "example": "attachment; filename=\"fantastic-jobs-ats-organizations.csv\""
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Organization"
                  }
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Bad request. The endpoint returns an [RFC 7807](https://datatracker.ietf.org/doc/html/rfc7807) `application/problem+json` body. Common causes are listed in the examples below.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                },
                "examples": {
                  "unknown_parameter": {
                    "summary": "Unknown query parameter (with suggestion)",
                    "value": {
                      "type": "https://httpproblems.com/http-status/400",
                      "title": "Bad Request",
                      "status": 400,
                      "detail": "Unknown query parameter \"forrmat\". Did you mean 'format'? See the API reference for the full list of supported parameters for this endpoint.",
                      "instance": "/v1/ats-organizations",
                      "trace": {
                        "timestamp": "2026-05-14T07:28:14.994Z",
                        "requestId": "d417443e-ca81-43c1-bedb-764fc0cdf4cc",
                        "buildId": "b6097d2d-7e03-405e-86a3-79c64a9b0814",
                        "rayId": "9fb82f5d2ee19353"
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimitWithRetryAfter"
          }
        },
        "operationId": "get-ats-organizations-v1",
        "tags": [
          "ATS Organizations"
        ]
      }
    },
    "/v1/ats-organizations-advanced": {
      "get": {
        "summary": "Advanced organization details",
        "description": "**Beta:** This endpoint is in beta. Field names, response shape, and parameter behavior may change without prior notice. Pin to specific fields you need rather than the entire response.\n\nReturns advanced organization data including LinkedIn profile, Crunchbase funding, Glassdoor ratings & reviews, headcount/follower/revenue timeseries, and news articles. Fixed at 100 results per page - use `offset` to paginate. Refreshed once per month on the 1st at **02:00 UTC**.\n\n**Intended for ATS workflows.** Job board listings are not enriched with the data in this endpoint, but include the basic LinkedIn organization fields by default.\n\n**ATS tip:** if you're already calling [`/ats-organizations-advanced`](/api/ats-organizations#advanced-organization-details) and joining by `org_linkedin_slug`, you don't need to set `include_basic_organization_details=true` on [`/active-ats`](/api/new-jobs#ats-jobs) or [`/modified-ats`](/api/modified-jobs#modified-ats-jobs) - every basic field is already in the advanced response.\n\nBy default, only scalar/lightweight fields are returned. The six heavy nested fields - `org_crunchbase_funding_and_investment`, `org_linkedin_headcount_timeseries`, `org_linkedin_followers_timeseries`, `org_linkedin_estimated_revenue_timeseries`, `org_news_articles`, and `org_glassdoor_reviews` - are excluded unless explicitly requested via the matching `include_*` flag. Each `include_*` flag adds significant payload size; only enable the ones you actually consume.\n\n**Warning:** Responses can be large when heavy fields are included and might not display properly in the playground.",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "description": "Number of results to return. Default: 100, min: 1, max: 100.",
            "schema": {
              "type": "integer",
              "default": 100,
              "minimum": 1,
              "maximum": 100
            }
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Number of results to skip for pagination. e.g. `limit=100&offset=200` returns the third page (results 201–300).",
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          },
          {
            "name": "linkedin_name",
            "in": "query",
            "description": "Filter to specific companies by LinkedIn organization name (`org_linkedin_name`). **Exact, case-sensitive match** - `nvidia` will not match `NVIDIA`. Input a comma-separated list to fetch several companies at once, e.g. `linkedin_name=NVIDIA,OpenAI`.\n\nFor a stable, case-insensitive identifier prefer `linkedin_slug` (filters on `org_linkedin_slug`, which is always returned by [`/active-ats`](/api/new-jobs#ats-jobs) / [`/modified-ats`](/api/modified-jobs#modified-ats-jobs) and listed in [`/ats-organizations`](/api/ats-organizations#organization-list)).",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "linkedin_slug",
            "in": "query",
            "description": "Filter to specific companies by LinkedIn slug (`org_linkedin_slug`) - the company-specific part of the LinkedIn URL (e.g. `tesla-motors`). Unique and stable per company, so this is the recommended way to fetch known organizations. Input a comma-separated list, e.g. `linkedin_slug=nvidia,openai`.\n\nDiscover slugs from [`/ats-organizations`](/api/ats-organizations#organization-list) or from any ATS job (`org_linkedin_slug` is always returned).",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "include_crunchbase_funding_and_investment",
            "in": "query",
            "description": "Set to `true` to include `org_crunchbase_funding_and_investment` (Crunchbase funding rounds, investors, totals). Excluded by default.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "include_linkedin_headcount_timeseries",
            "in": "query",
            "description": "Set to `true` to include `org_linkedin_headcount_timeseries` (weekly headcount plus role/skill/region breakdowns). Excluded by default.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "include_linkedin_followers_timeseries",
            "in": "query",
            "description": "Set to `true` to include `org_linkedin_followers_timeseries` (weekly follower counts and growth rates). Excluded by default.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "include_linkedin_estimated_revenue_timeseries",
            "in": "query",
            "description": "Set to `true` to include `org_linkedin_estimated_revenue_timeseries` (monthly estimated revenue ranges). Excluded by default.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "include_news_articles",
            "in": "query",
            "description": "Set to `true` to include `org_news_articles` (recent news articles mentioning the company). Excluded by default.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "include_glassdoor_reviews",
            "in": "query",
            "description": "Set to `true` to include `org_glassdoor_reviews` (recent employee reviews). Excluded by default.",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A list of organizations with advanced details",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/OrganizationAdvanced"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request. The endpoint returns an [RFC 7807](https://datatracker.ietf.org/doc/html/rfc7807) `application/problem+json` body. Common causes are listed in the examples below.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                },
                "examples": {
                  "unknown_parameter": {
                    "summary": "Unknown query parameter (with suggestion)",
                    "value": {
                      "type": "https://httpproblems.com/http-status/400",
                      "title": "Bad Request",
                      "status": 400,
                      "detail": "Unknown query parameter \"limti\". Did you mean 'limit'? See the API reference for the full list of supported parameters for this endpoint.",
                      "instance": "/v1/ats-organizations-advanced",
                      "trace": {
                        "timestamp": "2026-05-14T07:28:14.994Z",
                        "requestId": "d417443e-ca81-43c1-bedb-764fc0cdf4cc",
                        "buildId": "b6097d2d-7e03-405e-86a3-79c64a9b0814",
                        "rayId": "9fb82f5d2ee19353"
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimitWithRetryAfter"
          },
          "504": {
            "description": "Gateway timeout. The upstream query exceeded the configured server-side query timeout and was rewritten to a 504 by `response-outbound`. Returned as `application/problem+json`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                },
                "examples": {
                  "request_timeout": {
                    "summary": "Query exceeded the database statement timeout",
                    "value": {
                      "type": "https://httpproblems.com/http-status/504",
                      "title": "Gateway Timeout",
                      "status": 504,
                      "detail": "The request timed out. Try narrowing your filters or reducing the limit.",
                      "instance": "/v1/ats-organizations-advanced",
                      "trace": {
                        "timestamp": "2026-05-14T07:28:14.994Z",
                        "requestId": "d417443e-ca81-43c1-bedb-764fc0cdf4cc",
                        "buildId": "b6097d2d-7e03-405e-86a3-79c64a9b0814",
                        "rayId": "9fb82f5d2ee19353"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "operationId": "get-ats-organizations-advanced-v1",
        "tags": [
          "Beta"
        ]
      }
    },
    "/openapi": {
      "get": {
        "summary": "OpenAPI Specification",
        "description": "Returns the public OpenAPI specification for the Fantastic.jobs API (v1) as JSON. Use this endpoint to generate client SDKs, power documentation tools, or discover available endpoints. \n\n This endpoint is publicly accessible and does not require an API key, you can simply copy: https://data.fantastic.jobs/openapi",
        "operationId": "get-openapi-spec-v1",
        "tags": [
          "OpenAPI"
        ],
        "responses": {
          "200": {
            "description": "The OpenAPI specification document.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimitWithRetryAfter"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "ActiveAtsJob": {
        "type": "object",
        "description": "ATS job listing returned by [`/active-ats`](/api/new-jobs#ats-jobs). Includes base, location, salary, AI-enriched, and ATS-specific fields. Organization details (`org_linkedin_*`) are returned when `include_basic_organization_details=true`; `org_linkedin_slug` is always returned.\n\nOn ATS endpoints the LinkedIn organization match is performed via a domain/name-based lookup, so it is opt-in to keep payloads lean and to make the cost of the join explicit. For job board endpoints ([`/active-jb`](/api/new-jobs#job-board-jobs)) the LinkedIn organization is read directly from the job board and is therefore always-on.",
        "required": [
          "id",
          "title",
          "url",
          "source",
          "source_type",
          "date_created"
        ],
        "properties": {
          "id": {
            "type": "integer",
            "format": "int64",
            "description": "The job's internal ID. Used for expiration."
          },
          "title": {
            "type": "string",
            "description": "Job title."
          },
          "organization": {
            "type": "string",
            "description": "Name of the hiring organization."
          },
          "organization_url": {
            "type": "string",
            "format": "uri",
            "description": "URL to the organization's page."
          },
          "organization_logo": {
            "type": "string",
            "format": "uri",
            "deprecated": true,
            "description": "**Deprecated.** ATS-supplied logo URL. Not present for all ATS and the underlying URL can break or expire. Use `org_logo_permalink` instead - a hosted permanent URL returned when `include_basic_organization_details=true` (or always present on [`/ats-organizations-advanced`](/api/ats-organizations#advanced-organization-details))."
          },
          "date_posted": {
            "type": "string",
            "format": "date-time",
            "description": "Date & time of posting."
          },
          "date_created": {
            "type": "string",
            "format": "date-time",
            "description": "Date & time of indexing in our database."
          },
          "date_valid_through": {
            "type": "string",
            "format": "date-time",
            "description": "Date & time of the future expiry date."
          },
          "locations": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Source-supplied location objects per the Google JobPosting schema (e.g. `{address: {addressLocality, addressRegion, addressCountry, postalCode}, ...}`). Use `locations_derived`, `cities_derived`, `regions_derived`, `countries_derived`, `lats_derived` / `lngs_derived` for normalized, geocoded values."
          },
          "locations_alt": {
            "type": "string",
            "description": "Fallback location string used when the source ATS doesn't supply structured location data in its Job Posting schema. Populated primarily from HTML scraping; for a small subset of ATS (currently ~4 of 54) it is AI-structured from the listing's free-text content. Null when the schema-supplied `locations` is sufficient."
          },
          "locations_derived": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Normalized location strings. Geocoded. This is the field used for location search."
          },
          "location_type": {
            "type": "string",
            "description": "To identify remote jobs: 'TELECOMMUTE' per the Google JobPosting schema."
          },
          "location_requirements": {
            "type": "string",
            "description": "Location requirement to accompany remote (TELECOMMUTE) jobs per the Google JobPosting schema."
          },
          "salary": {
            "type": "object",
            "description": "Source-supplied salary object per the Google JobPosting schema. Often partial or missing. For a normalized numeric breakdown use `ai_salary_value`, `ai_salary_min_value`, `ai_salary_max_value`, `ai_salary_currency`, and `ai_salary_unit_text`."
          },
          "employment_type": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Types like 'Full Time', 'Contract', 'Internship'. Usually a single value. For better accuracy, use ai_employment_type."
          },
          "url": {
            "type": "string",
            "format": "uri",
            "description": "The URL of the job."
          },
          "source": {
            "type": "string",
            "description": "Source ATS or job board."
          },
          "source_type": {
            "type": "string",
            "enum": [
              "ats",
              "jobboard"
            ],
            "description": "For `ActiveAtsJob`, this is always 'ats'."
          },
          "source_domain": {
            "type": "string",
            "description": "Domain of the career site or job board. Not present for all ATS; use `domain_derived` instead."
          },
          "domain_derived": {
            "type": "string",
            "description": "AI-discovered domain of the employer's main website."
          },
          "description_text": {
            "type": "string",
            "description": "Plain text job description. Returned when `description_format=text`."
          },
          "description_html": {
            "type": "string",
            "description": "Raw HTML job description. Returned when `description_format=html`."
          },
          "cities_derived": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "All cities from `locations_derived`."
          },
          "counties_derived": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "All counties from `locations_derived`. Only present when `cities_derived` is not."
          },
          "regions_derived": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "All regions/states/provinces from `locations_derived`."
          },
          "countries_derived": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "All countries from `locations_derived`."
          },
          "timezones_derived": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "All timezones from `locations_derived`."
          },
          "lats_derived": {
            "type": "array",
            "items": {
              "type": "number"
            },
            "description": "Latitudes derived from `locations_derived`."
          },
          "lngs_derived": {
            "type": "array",
            "items": {
              "type": "number"
            },
            "description": "Longitudes derived from `locations_derived`."
          },
          "date_modified": {
            "type": "string",
            "format": "date-time",
            "description": "Date and time of the most recent modification of the listing. Only returned when `time_frame=6m`."
          },
          "modified_fields": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Array of field names that have changed in the most recent modification of the listing. Only returned when `time_frame=6m`."
          },
          "ai_salary_currency": {
            "type": "string",
            "description": "Salary currency in ISO 4217 format."
          },
          "ai_salary_value": {
            "type": "string",
            "description": "Salary value when there is a single salary with no range."
          },
          "ai_salary_min_value": {
            "type": "number",
            "description": "Minimum salary in a range."
          },
          "ai_salary_max_value": {
            "type": "number",
            "description": "Maximum salary in a range."
          },
          "ai_salary_unit_text": {
            "type": "string",
            "enum": [
              "HOUR",
              "DAY",
              "WEEK",
              "MONTH",
              "YEAR"
            ],
            "description": "Salary period: HOUR, DAY, WEEK, MONTH, or YEAR."
          },
          "ai_benefits": {
            "type": "string",
            "description": "Non-salary benefits mentioned in the job listing."
          },
          "ai_experience_level": {
            "type": "string",
            "enum": [
              "0-2",
              "2-5",
              "5-10",
              "10+"
            ],
            "description": "Years of experience required."
          },
          "ai_work_arrangement": {
            "type": "string",
            "enum": [
              "Remote Solely",
              "Remote OK",
              "Hybrid",
              "On-site"
            ],
            "description": "Remote Solely (no office), Remote OK (optional office), Hybrid, or On-site."
          },
          "ai_work_arrangement_office_days": {
            "type": "string",
            "description": "When Hybrid, the number of days per week in office."
          },
          "ai_remote_location": {
            "type": "string",
            "description": "When remote but restricted to a certain location, returns that location."
          },
          "ai_remote_location_derived": {
            "type": "string",
            "description": "Derived remote location data matched with a location database (same as `locations_derived`)."
          },
          "ai_key_skills": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Key skills mentioned in the job listing."
          },
          "ai_hiring_manager_name": {
            "type": "string",
            "description": "Hiring manager name, if present."
          },
          "ai_hiring_manager_email_address": {
            "type": "string",
            "format": "email",
            "description": "Hiring manager's email address, if present."
          },
          "ai_core_responsibilities": {
            "type": "string",
            "description": "A 2-sentence summary of the job's core responsibilities."
          },
          "ai_requirements_summary": {
            "type": "string",
            "description": "A 2-sentence summary of the job's requirements."
          },
          "ai_working_hours": {
            "type": "integer",
            "description": "Required working hours. Defaults to 40 if not mentioned."
          },
          "ai_employment_type": {
            "type": "string",
            "enum": [
              "FULL_TIME",
              "PART_TIME",
              "CONTRACTOR",
              "TEMPORARY",
              "INTERN",
              "VOLUNTEER",
              "PER_DIEM",
              "OTHER"
            ],
            "description": "Employment type as derived from the job description."
          },
          "ai_job_language": {
            "type": "string",
            "description": "Language of the job description."
          },
          "ai_visa_sponsorship": {
            "type": "boolean",
            "description": "True if the job description mentions visa sponsorship opportunities."
          },
          "ai_taxonomies_a": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Up to 5 taxonomies per job ordered by relevancy (e.g., Technology, Healthcare, Finance & Accounting). The first item in the array is the primary taxonomy and is what the `ai_taxonomies_a_primary` filter matches against."
          },
          "ai_keywords": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Important keywords: technologies, tools, skills, certifications, industry terms, methodologies, programming languages."
          },
          "ai_education": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "high school",
                "associate degree",
                "bachelor degree",
                "professional certificate",
                "postgraduate degree"
              ]
            },
            "description": "Explicitly mentioned educational requirements from the job description."
          },
          "org_linkedin_slug": {
            "type": "string",
            "description": "Company-specific part of the LinkedIn URL (e.g., 'tesla-motors'). Unique per company. Always returned (regardless of `include_basic_organization_details`) so jobs can be joined to [`/ats-organizations-advanced`](/api/ats-organizations#advanced-organization-details) results."
          },
          "org_linkedin_headcount": {
            "type": "integer",
            "description": "Number of employees according to LinkedIn. Returned when `include_basic_organization_details=true`."
          },
          "org_linkedin_website": {
            "type": "string",
            "format": "uri",
            "description": "Company's main website URL (sourced from LinkedIn). Returned when `include_basic_organization_details=true`."
          },
          "org_linkedin_size": {
            "type": "string",
            "description": "Employee count range according to the company. Returned when `include_basic_organization_details=true`."
          },
          "org_linkedin_slogan": {
            "type": "string",
            "description": "Company's slogan. Returned when `include_basic_organization_details=true`."
          },
          "org_linkedin_industry": {
            "type": "string",
            "description": "Company's industry from LinkedIn's fixed list. Returned when `include_basic_organization_details=true`."
          },
          "org_linkedin_followers": {
            "type": "integer",
            "description": "Number of LinkedIn followers. Not populated for all companies. Returned when `include_basic_organization_details=true`."
          },
          "org_linkedin_headquarters": {
            "type": "string",
            "description": "Company's HQ location. Returned when `include_basic_organization_details=true`."
          },
          "org_linkedin_type": {
            "type": "string",
            "description": "Company type (e.g., 'Privately Held', 'Public'). Returned when `include_basic_organization_details=true`."
          },
          "org_linkedin_founded_date": {
            "type": "string",
            "description": "Company's founded date. Returned when `include_basic_organization_details=true`."
          },
          "org_linkedin_specialties": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Company's specialties. Returned when `include_basic_organization_details=true`."
          },
          "org_linkedin_locations": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Full addresses of the company's locations. Returned when `include_basic_organization_details=true`."
          },
          "org_linkedin_description": {
            "type": "string",
            "description": "Description from the company's LinkedIn page. Returned when `include_basic_organization_details=true`."
          },
          "org_linkedin_recruitment_agency_derived": {
            "type": "boolean",
            "description": "True if the company is a recruitment agency or job board (AI-identified). Returned when `include_basic_organization_details=true`."
          },
          "org_linkedin_name": {
            "type": "string",
            "description": "Company's full name from LinkedIn. Returned when `include_basic_organization_details=true`."
          },
          "org_crunchbase_categories": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "List of Crunchbase categories the company is tagged with. Returned when `include_basic_organization_details=true`."
          },
          "org_crunchbase_total_investment": {
            "type": "integer",
            "format": "int64",
            "description": "Total investment in USD raised by the company according to Crunchbase. Returned when `include_basic_organization_details=true`."
          },
          "org_logo_permalink": {
            "type": "string",
            "format": "uri",
            "description": "Stable hosted URL for the company's logo. Returned when `include_basic_organization_details=true`."
          }
        }
      },
      "ModifiedAtsJob": {
        "type": "object",
        "description": "ATS job listing returned by [`/modified-ats`](/api/modified-jobs#modified-ats-jobs). Same shape as `ActiveAtsJob`, except `date_modified` and `modified_fields` are always present (and required) so consumers can apply the modification to their cached copy.\n\nLike `ActiveAtsJob`, the LinkedIn organization fields are opt-in via `include_basic_organization_details=true` because they are matched (not native) - see `ActiveAtsJob` for details.",
        "required": [
          "id",
          "title",
          "url",
          "source",
          "source_type",
          "date_created",
          "date_modified",
          "modified_fields"
        ],
        "properties": {
          "id": {
            "type": "integer",
            "format": "int64",
            "description": "The job's internal ID. Used for expiration."
          },
          "title": {
            "type": "string",
            "description": "Job title."
          },
          "organization": {
            "type": "string",
            "description": "Name of the hiring organization."
          },
          "organization_url": {
            "type": "string",
            "format": "uri",
            "description": "URL to the organization's page."
          },
          "organization_logo": {
            "type": "string",
            "format": "uri",
            "deprecated": true,
            "description": "**Deprecated.** ATS-supplied logo URL. Not present for all ATS and the underlying URL can break or expire. Use `org_logo_permalink` instead - a hosted permanent URL returned when `include_basic_organization_details=true` (or always present on [`/ats-organizations-advanced`](/api/ats-organizations#advanced-organization-details))."
          },
          "date_posted": {
            "type": "string",
            "format": "date-time",
            "description": "Date & time of posting."
          },
          "date_created": {
            "type": "string",
            "format": "date-time",
            "description": "Date & time of indexing in our database."
          },
          "date_valid_through": {
            "type": "string",
            "format": "date-time",
            "description": "Date & time of the future expiry date."
          },
          "locations": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Source-supplied location objects per the Google JobPosting schema (e.g. `{address: {addressLocality, addressRegion, addressCountry, postalCode}, ...}`). Use `locations_derived`, `cities_derived`, `regions_derived`, `countries_derived`, `lats_derived` / `lngs_derived` for normalized, geocoded values."
          },
          "locations_alt": {
            "type": "string",
            "description": "Fallback location string used when the source ATS doesn't supply structured location data in its Job Posting schema. Populated primarily from HTML scraping; for a small subset of ATS (currently ~4 of 54) it is AI-structured from the listing's free-text content. Null when the schema-supplied `locations` is sufficient."
          },
          "locations_derived": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Normalized location strings. Geocoded. This is the field used for location search."
          },
          "location_type": {
            "type": "string",
            "description": "To identify remote jobs: 'TELECOMMUTE' per the Google JobPosting schema."
          },
          "location_requirements": {
            "type": "string",
            "description": "Location requirement to accompany remote (TELECOMMUTE) jobs per the Google JobPosting schema."
          },
          "salary": {
            "type": "object",
            "description": "Source-supplied salary object per the Google JobPosting schema. Often partial or missing. For a normalized numeric breakdown use `ai_salary_value`, `ai_salary_min_value`, `ai_salary_max_value`, `ai_salary_currency`, and `ai_salary_unit_text`."
          },
          "employment_type": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Types like 'Full Time', 'Contract', 'Internship'. Usually a single value. For better accuracy, use ai_employment_type."
          },
          "url": {
            "type": "string",
            "format": "uri",
            "description": "The URL of the job."
          },
          "source": {
            "type": "string",
            "description": "Source ATS or job board."
          },
          "source_type": {
            "type": "string",
            "enum": [
              "ats",
              "jobboard"
            ],
            "description": "For `ModifiedAtsJob`, this is always 'ats'."
          },
          "source_domain": {
            "type": "string",
            "description": "Domain of the career site or job board. Not present for all ATS; use `domain_derived` instead."
          },
          "domain_derived": {
            "type": "string",
            "description": "AI-discovered domain of the employer's main website."
          },
          "description_text": {
            "type": "string",
            "description": "Plain text job description. Returned when `description_format=text`."
          },
          "description_html": {
            "type": "string",
            "description": "Raw HTML job description. Returned when `description_format=html`."
          },
          "cities_derived": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "All cities from `locations_derived`."
          },
          "counties_derived": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "All counties from `locations_derived`. Only present when `cities_derived` is not."
          },
          "regions_derived": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "All regions/states/provinces from `locations_derived`."
          },
          "countries_derived": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "All countries from `locations_derived`."
          },
          "timezones_derived": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "All timezones from `locations_derived`."
          },
          "lats_derived": {
            "type": "array",
            "items": {
              "type": "number"
            },
            "description": "Latitudes derived from `locations_derived`."
          },
          "lngs_derived": {
            "type": "array",
            "items": {
              "type": "number"
            },
            "description": "Longitudes derived from `locations_derived`."
          },
          "date_modified": {
            "type": "string",
            "format": "date-time",
            "description": "Date and time of the most recent modification of the listing. Always present."
          },
          "modified_fields": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Array of field names that have changed in the most recent modification of the listing. Always present."
          },
          "ai_salary_currency": {
            "type": "string",
            "description": "Salary currency in ISO 4217 format."
          },
          "ai_salary_value": {
            "type": "string",
            "description": "Salary value when there is a single salary with no range."
          },
          "ai_salary_min_value": {
            "type": "number",
            "description": "Minimum salary in a range."
          },
          "ai_salary_max_value": {
            "type": "number",
            "description": "Maximum salary in a range."
          },
          "ai_salary_unit_text": {
            "type": "string",
            "enum": [
              "HOUR",
              "DAY",
              "WEEK",
              "MONTH",
              "YEAR"
            ],
            "description": "Salary period: HOUR, DAY, WEEK, MONTH, or YEAR."
          },
          "ai_benefits": {
            "type": "string",
            "description": "Non-salary benefits mentioned in the job listing."
          },
          "ai_experience_level": {
            "type": "string",
            "enum": [
              "0-2",
              "2-5",
              "5-10",
              "10+"
            ],
            "description": "Years of experience required."
          },
          "ai_work_arrangement": {
            "type": "string",
            "enum": [
              "Remote Solely",
              "Remote OK",
              "Hybrid",
              "On-site"
            ],
            "description": "Remote Solely (no office), Remote OK (optional office), Hybrid, or On-site."
          },
          "ai_work_arrangement_office_days": {
            "type": "string",
            "description": "When Hybrid, the number of days per week in office."
          },
          "ai_remote_location": {
            "type": "string",
            "description": "When remote but restricted to a certain location, returns that location."
          },
          "ai_remote_location_derived": {
            "type": "string",
            "description": "Derived remote location data matched with a location database (same as `locations_derived`)."
          },
          "ai_key_skills": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Key skills mentioned in the job listing."
          },
          "ai_hiring_manager_name": {
            "type": "string",
            "description": "Hiring manager name, if present."
          },
          "ai_hiring_manager_email_address": {
            "type": "string",
            "format": "email",
            "description": "Hiring manager's email address, if present."
          },
          "ai_core_responsibilities": {
            "type": "string",
            "description": "A 2-sentence summary of the job's core responsibilities."
          },
          "ai_requirements_summary": {
            "type": "string",
            "description": "A 2-sentence summary of the job's requirements."
          },
          "ai_working_hours": {
            "type": "integer",
            "description": "Required working hours. Defaults to 40 if not mentioned."
          },
          "ai_employment_type": {
            "type": "string",
            "enum": [
              "FULL_TIME",
              "PART_TIME",
              "CONTRACTOR",
              "TEMPORARY",
              "INTERN",
              "VOLUNTEER",
              "PER_DIEM",
              "OTHER"
            ],
            "description": "Employment type as derived from the job description."
          },
          "ai_job_language": {
            "type": "string",
            "description": "Language of the job description."
          },
          "ai_visa_sponsorship": {
            "type": "boolean",
            "description": "True if the job description mentions visa sponsorship opportunities."
          },
          "ai_taxonomies_a": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Up to 5 taxonomies per job ordered by relevancy (e.g., Technology, Healthcare, Finance & Accounting). The first item in the array is the primary taxonomy and is what the `ai_taxonomies_a_primary` filter matches against."
          },
          "ai_keywords": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Important keywords: technologies, tools, skills, certifications, industry terms, methodologies, programming languages."
          },
          "ai_education": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "high school",
                "associate degree",
                "bachelor degree",
                "professional certificate",
                "postgraduate degree"
              ]
            },
            "description": "Explicitly mentioned educational requirements from the job description."
          },
          "org_linkedin_slug": {
            "type": "string",
            "description": "Company-specific part of the LinkedIn URL (e.g., 'tesla-motors'). Unique per company. Always returned (regardless of `include_basic_organization_details`) so jobs can be joined to [`/ats-organizations-advanced`](/api/ats-organizations#advanced-organization-details) results."
          },
          "org_linkedin_headcount": {
            "type": "integer",
            "description": "Number of employees according to LinkedIn. Returned when `include_basic_organization_details=true`."
          },
          "org_linkedin_website": {
            "type": "string",
            "format": "uri",
            "description": "Company's main website URL (sourced from LinkedIn). Returned when `include_basic_organization_details=true`."
          },
          "org_linkedin_size": {
            "type": "string",
            "description": "Employee count range according to the company. Returned when `include_basic_organization_details=true`."
          },
          "org_linkedin_slogan": {
            "type": "string",
            "description": "Company's slogan. Returned when `include_basic_organization_details=true`."
          },
          "org_linkedin_industry": {
            "type": "string",
            "description": "Company's industry from LinkedIn's fixed list. Returned when `include_basic_organization_details=true`."
          },
          "org_linkedin_followers": {
            "type": "integer",
            "description": "Number of LinkedIn followers. Not populated for all companies. Returned when `include_basic_organization_details=true`."
          },
          "org_linkedin_headquarters": {
            "type": "string",
            "description": "Company's HQ location. Returned when `include_basic_organization_details=true`."
          },
          "org_linkedin_type": {
            "type": "string",
            "description": "Company type (e.g., 'Privately Held', 'Public'). Returned when `include_basic_organization_details=true`."
          },
          "org_linkedin_founded_date": {
            "type": "string",
            "description": "Company's founded date. Returned when `include_basic_organization_details=true`."
          },
          "org_linkedin_specialties": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Company's specialties. Returned when `include_basic_organization_details=true`."
          },
          "org_linkedin_locations": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Full addresses of the company's locations. Returned when `include_basic_organization_details=true`."
          },
          "org_linkedin_description": {
            "type": "string",
            "description": "Description from the company's LinkedIn page. Returned when `include_basic_organization_details=true`."
          },
          "org_linkedin_recruitment_agency_derived": {
            "type": "boolean",
            "description": "True if the company is a recruitment agency or job board (AI-identified). Returned when `include_basic_organization_details=true`."
          },
          "org_linkedin_name": {
            "type": "string",
            "description": "Company's full name from LinkedIn. Returned when `include_basic_organization_details=true`."
          },
          "org_crunchbase_categories": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "List of Crunchbase categories the company is tagged with. Returned when `include_basic_organization_details=true`."
          },
          "org_crunchbase_total_investment": {
            "type": "integer",
            "format": "int64",
            "description": "Total investment in USD raised by the company according to Crunchbase. Returned when `include_basic_organization_details=true`."
          },
          "org_logo_permalink": {
            "type": "string",
            "format": "uri",
            "description": "Stable hosted URL for the company's logo. Returned when `include_basic_organization_details=true`."
          }
        }
      },
      "ActiveJbJob": {
        "type": "object",
        "description": "Job board listing returned by [`/active-jb`](/api/new-jobs#job-board-jobs). Includes base, location, salary, AI-enriched, organization, and job-board-specific fields. Organization details (`org_linkedin_*`) and AI-enriched fields are always included on this endpoint - the LinkedIn organization is read directly from the job board, so the match is exact and there is no toggle. Compare with `ActiveAtsJob`, where the same fields are opt-in via `include_basic_organization_details` because they're matched on ATS sources.",
        "required": [
          "id",
          "title",
          "url",
          "source",
          "source_type",
          "date_created"
        ],
        "properties": {
          "id": {
            "type": "integer",
            "format": "int64",
            "description": "The job's internal ID. Used for expiration."
          },
          "title": {
            "type": "string",
            "description": "Job title."
          },
          "organization": {
            "type": "string",
            "description": "Name of the hiring organization."
          },
          "organization_url": {
            "type": "string",
            "format": "uri",
            "description": "URL to the organization's page."
          },
          "organization_logo": {
            "type": "string",
            "format": "uri",
            "description": "URL to the organization's logo."
          },
          "date_posted": {
            "type": "string",
            "format": "date-time",
            "description": "Date & time of posting."
          },
          "date_created": {
            "type": "string",
            "format": "date-time",
            "description": "Date & time of indexing in our database."
          },
          "date_valid_through": {
            "type": "string",
            "format": "date-time",
            "description": "Date & time of the future expiry date."
          },
          "locations": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Source-supplied location objects per the Google JobPosting schema (e.g. `{address: {addressLocality, addressRegion, addressCountry, postalCode}, ...}`). Use `locations_derived`, `cities_derived`, `regions_derived`, `countries_derived`, `lats_derived` / `lngs_derived` for normalized, geocoded values."
          },
          "locations_derived": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Normalized location strings. Geocoded. This is the field used for location search."
          },
          "location_type": {
            "type": "string",
            "description": "To identify remote jobs: 'TELECOMMUTE' per the Google JobPosting schema."
          },
          "location_requirements": {
            "type": "string",
            "description": "Location requirement to accompany remote (TELECOMMUTE) jobs per the Google JobPosting schema."
          },
          "salary": {
            "type": "object",
            "description": "Source-supplied salary object per the Google JobPosting schema. Often partial or missing. For a normalized numeric breakdown use `ai_salary_value`, `ai_salary_min_value`, `ai_salary_max_value`, `ai_salary_currency`, and `ai_salary_unit_text`."
          },
          "employment_type": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Types like 'Full Time', 'Contract', 'Internship'. Usually a single value. For better accuracy, use `ai_employment_type`."
          },
          "url": {
            "type": "string",
            "format": "uri",
            "description": "The URL of the job."
          },
          "source": {
            "type": "string",
            "description": "Source job board."
          },
          "source_type": {
            "type": "string",
            "enum": [
              "ats",
              "jobboard"
            ],
            "description": "For `ActiveJbJob`, this is always 'jobboard'."
          },
          "source_domain": {
            "type": "string",
            "description": "Domain of the job board."
          },
          "description_text": {
            "type": "string",
            "description": "Plain text job description. Returned when `description_format=text`. Description search returns a 400 error when used with `time_frame=6m`."
          },
          "description_html": {
            "type": "string",
            "description": "Raw HTML job description. Returned when `description_format=html`. Description search returns a 400 error when used with `time_frame=6m`."
          },
          "cities_derived": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "All cities from `locations_derived`."
          },
          "counties_derived": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "All counties from `locations_derived`. Only present when `cities_derived` is not."
          },
          "regions_derived": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "All regions/states/provinces from `locations_derived`."
          },
          "countries_derived": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "All countries from `locations_derived`."
          },
          "timezones_derived": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "All timezones from `locations_derived`."
          },
          "lats_derived": {
            "type": "array",
            "items": {
              "type": "number"
            },
            "description": "Latitudes derived from `locations_derived`."
          },
          "lngs_derived": {
            "type": "array",
            "items": {
              "type": "number"
            },
            "description": "Longitudes derived from `locations_derived`."
          },
          "ai_salary_currency": {
            "type": "string",
            "description": "Salary currency in ISO 4217 format."
          },
          "ai_salary_value": {
            "type": "string",
            "description": "Salary value when there is a single salary with no range."
          },
          "ai_salary_min_value": {
            "type": "number",
            "description": "Minimum salary in a range."
          },
          "ai_salary_max_value": {
            "type": "number",
            "description": "Maximum salary in a range."
          },
          "ai_salary_unit_text": {
            "type": "string",
            "enum": [
              "HOUR",
              "DAY",
              "WEEK",
              "MONTH",
              "YEAR"
            ],
            "description": "Salary period: HOUR, DAY, WEEK, MONTH, or YEAR."
          },
          "ai_benefits": {
            "type": "string",
            "description": "Non-salary benefits mentioned in the job listing."
          },
          "ai_experience_level": {
            "type": "string",
            "enum": [
              "0-2",
              "2-5",
              "5-10",
              "10+"
            ],
            "description": "Years of experience required."
          },
          "ai_work_arrangement": {
            "type": "string",
            "enum": [
              "Remote Solely",
              "Remote OK",
              "Hybrid",
              "On-site"
            ],
            "description": "Remote Solely (no office), Remote OK (optional office), Hybrid, or On-site."
          },
          "ai_work_arrangement_office_days": {
            "type": "string",
            "description": "When Hybrid, the number of days per week in office."
          },
          "ai_remote_location": {
            "type": "string",
            "description": "When remote but restricted to a certain location, returns that location."
          },
          "ai_remote_location_derived": {
            "type": "string",
            "description": "Derived remote location data matched with a location database (same as `locations_derived`)."
          },
          "ai_key_skills": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Key skills mentioned in the job listing."
          },
          "ai_hiring_manager_name": {
            "type": "string",
            "description": "Hiring manager name, if present."
          },
          "ai_hiring_manager_email_address": {
            "type": "string",
            "format": "email",
            "description": "Hiring manager's email address, if present."
          },
          "ai_core_responsibilities": {
            "type": "string",
            "description": "A 2-sentence summary of the job's core responsibilities."
          },
          "ai_requirements_summary": {
            "type": "string",
            "description": "A 2-sentence summary of the job's requirements."
          },
          "ai_working_hours": {
            "type": "integer",
            "description": "Required working hours. Defaults to 40 if not mentioned."
          },
          "ai_employment_type": {
            "type": "string",
            "enum": [
              "FULL_TIME",
              "PART_TIME",
              "CONTRACTOR",
              "TEMPORARY",
              "INTERN",
              "VOLUNTEER",
              "PER_DIEM",
              "OTHER"
            ],
            "description": "Employment type as derived from the job description."
          },
          "ai_job_language": {
            "type": "string",
            "description": "Language of the job description."
          },
          "ai_visa_sponsorship": {
            "type": "boolean",
            "description": "True if the job description mentions visa sponsorship opportunities."
          },
          "ai_taxonomies_a": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Up to 5 taxonomies per job ordered by relevancy (e.g., Technology, Healthcare, Finance & Accounting). The first item in the array is the primary taxonomy and is what the `ai_taxonomies_a_primary` filter matches against."
          },
          "ai_keywords": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Important keywords: technologies, tools, skills, certifications, industry terms, methodologies, programming languages."
          },
          "ai_education": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "high school",
                "associate degree",
                "bachelor degree",
                "professional certificate",
                "postgraduate degree"
              ]
            },
            "description": "Explicitly mentioned educational requirements from the job description."
          },
          "org_linkedin_slug": {
            "type": "string",
            "description": "Company-specific part of the LinkedIn URL (e.g., 'tesla-motors'). Unique per company. Always returned so jobs can be joined to [`/ats-organizations-advanced`](/api/ats-organizations#advanced-organization-details) results."
          },
          "org_linkedin_headcount": {
            "type": "integer",
            "description": "Number of employees according to LinkedIn."
          },
          "org_linkedin_website": {
            "type": "string",
            "format": "uri",
            "description": "Company's main website URL (sourced from LinkedIn)."
          },
          "org_linkedin_size": {
            "type": "string",
            "description": "Employee count range according to the company."
          },
          "org_linkedin_slogan": {
            "type": "string",
            "description": "Company's slogan."
          },
          "org_linkedin_industry": {
            "type": "string",
            "description": "Company's industry from LinkedIn's fixed list."
          },
          "org_linkedin_followers": {
            "type": "integer",
            "description": "Number of LinkedIn followers. Not populated for all companies."
          },
          "org_linkedin_headquarters": {
            "type": "string",
            "description": "Company's HQ location."
          },
          "org_linkedin_type": {
            "type": "string",
            "description": "Company type (e.g., 'Privately Held', 'Public')."
          },
          "org_linkedin_founded_date": {
            "type": "string",
            "description": "Company's founded date."
          },
          "org_linkedin_specialties": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Company's specialties."
          },
          "org_linkedin_locations": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Full addresses of the company's locations."
          },
          "org_linkedin_description": {
            "type": "string",
            "description": "Description from the company's LinkedIn page."
          },
          "org_linkedin_recruitment_agency_derived": {
            "type": "boolean",
            "description": "True if the company is a recruitment agency or job board (AI-identified)."
          },
          "recruiter_name": {
            "type": "string",
            "description": "Name of the recruiter who posted the job. Excluded when `exclude_recruiter_fields=true`."
          },
          "recruiter_title": {
            "type": "string",
            "description": "Title of the recruiter. Excluded when `exclude_recruiter_fields=true`."
          },
          "recruiter_url": {
            "type": "string",
            "format": "uri",
            "description": "URL to the recruiter's profile. Excluded when `exclude_recruiter_fields=true`."
          },
          "seniority": {
            "type": "string",
            "description": "Seniority level as listed by the job board."
          },
          "direct_apply": {
            "type": "boolean",
            "description": "True if the job supports direct application on the job board (e.g. LinkedIn Easy Apply)."
          },
          "no_jb_schema": {
            "type": "boolean",
            "description": "True if the job board listing has no structured schema data."
          },
          "ats_duplicate": {
            "type": "boolean",
            "description": "True if this job is a duplicate of an ATS listing."
          },
          "linkedin_id": {
            "type": "integer",
            "format": "int64",
            "description": "LinkedIn's public job posting ID - the digits at the end of a `linkedin.com/jobs/view/{linkedin_id}` URL. Distinct from the internal Fantastic.jobs `id`."
          }
        }
      },
      "CountResponse": {
        "type": "object",
        "description": "Total count of listings matching the filter set in the selected time window. Returned by [`/active-ats-count`](/api/new-jobs#ats-jobs-count) and [`/active-jb-count`](/api/new-jobs#job-board-jobs-count).",
        "required": [
          "count"
        ],
        "properties": {
          "count": {
            "type": "integer",
            "format": "int64",
            "minimum": 0,
            "description": "Number of listings matching the supplied filters in the selected `time_frame`."
          }
        }
      },
      "ExpiredAtsJobId": {
        "type": "integer",
        "format": "int64",
        "description": "Internal ID of an expired ATS job, returned as an item by [`/expired-ats`](/api/expired-jobs#expired-ats-jobs). Match against `ActiveAtsJob.id` to expire stale rows in your store."
      },
      "ExpiredJbJobId": {
        "type": "integer",
        "format": "int64",
        "description": "Internal ID of an expired job board listing, returned as an item by [`/expired-jb`](/api/expired-jobs#expired-job-board-jobs). Match against `ActiveJbJob.id` to expire stale rows in your store. Only LinkedIn (`source=linkedin`) listings are re-checked for expiration; IDs from other JB sources (`wellfound`, `ycombinator`) will never appear in this feed."
      },
      "Organization": {
        "type": "object",
        "description": "A row in the [`/ats-organizations`](/api/ats-organizations#organization-list) catalog. Carries a small set of identifier fields - org name, derived domain, LinkedIn slug, name, industry, headcount, HQ - enough to discover and filter on tracked organizations. **Not** the same as `include_basic_organization_details=true` on the job endpoints, which returns a much wider set of LinkedIn and Crunchbase fields.",
        "properties": {
          "organization": {
            "type": "string",
            "description": "Name of the organization as listed in the ATS."
          },
          "domain_derived": {
            "type": "string",
            "description": "Derived company domain."
          },
          "org_linkedin_slug": {
            "type": "string",
            "description": "Company-specific part of the LinkedIn URL (e.g., 'tesla-motors'). Unique per company. Used to join organizations against jobs returned by [`/active-ats`](/api/new-jobs#ats-jobs), [`/active-jb`](/api/new-jobs#job-board-jobs), and [`/modified-ats`](/api/modified-jobs#modified-ats-jobs)."
          },
          "org_linkedin_name": {
            "type": "string",
            "description": "Canonical company name from LinkedIn."
          },
          "org_linkedin_industry": {
            "type": "string",
            "description": "Company's industry from LinkedIn's fixed list."
          },
          "org_linkedin_headcount": {
            "type": "integer",
            "description": "Number of employees according to LinkedIn."
          },
          "org_linkedin_headquarters": {
            "type": "string",
            "description": "Company's HQ location."
          }
        }
      },
      "OrganizationAdvanced": {
        "type": "object",
        "description": "Advanced organization data returned by [`/ats-organizations-advanced`](/api/ats-organizations#advanced-organization-details). Includes LinkedIn profile, Crunchbase funding, Glassdoor ratings, headcount/follower/revenue timeseries, and news. Heavy nested fields (funding, timeseries, news, reviews) are excluded by default and must be opted into via the corresponding `include_*` query parameters.",
        "required": [
          "id",
          "org_linkedin_slug",
          "org_linkedin_url",
          "org_linkedin_name"
        ],
        "properties": {
          "id": {
            "type": "integer",
            "format": "int64",
            "description": "Internal organization ID."
          },
          "org_linkedin_name": {
            "type": "string",
            "description": "Canonical company name from LinkedIn."
          },
          "org_linkedin_url": {
            "type": "string",
            "format": "uri",
            "description": "URL of the company's LinkedIn page."
          },
          "org_linkedin_slug": {
            "type": "string",
            "description": "Company-specific part of the LinkedIn URL (e.g., 'tesla-motors'). Unique per company. Used to join organizations against jobs returned by [`/active-ats`](/api/new-jobs#ats-jobs), [`/active-jb`](/api/new-jobs#job-board-jobs), and [`/modified-ats`](/api/modified-jobs#modified-ats-jobs)."
          },
          "org_linkedin_description": {
            "type": "string",
            "description": "Description from the company's LinkedIn page."
          },
          "org_linkedin_short_description": {
            "type": "string",
            "description": "Short tagline or description."
          },
          "org_linkedin_headcount": {
            "type": "integer",
            "description": "Current number of employees according to LinkedIn."
          },
          "org_linkedin_followers": {
            "type": "integer",
            "description": "Number of LinkedIn followers."
          },
          "org_linkedin_size": {
            "type": "string",
            "description": "Employee count range according to the company (e.g., '1001-5000')."
          },
          "org_linkedin_industry": {
            "type": "string",
            "description": "Company's primary industry from LinkedIn's fixed list."
          },
          "org_linkedin_headquarters": {
            "type": "string",
            "description": "Company's HQ location."
          },
          "org_linkedin_type": {
            "type": "string",
            "description": "Company type (e.g., 'Privately Held', 'Public Company')."
          },
          "org_linkedin_founded_date": {
            "type": "string",
            "description": "Company's founded date."
          },
          "org_linkedin_specialties": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Company's specialties."
          },
          "org_linkedin_locations": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Full addresses of the company's locations."
          },
          "org_linkedin_slogan": {
            "type": "string",
            "description": "Company's slogan."
          },
          "org_linkedin_logo": {
            "type": "string",
            "format": "uri",
            "description": "URL to the company's LinkedIn logo."
          },
          "org_linkedin_website": {
            "type": "string",
            "format": "uri",
            "description": "Company's main website URL."
          },
          "org_linkedin_recruitment_agency_derived": {
            "type": "boolean",
            "description": "True if the company is a recruitment agency or job board (AI-identified)."
          },
          "org_linkedin_industries": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "All LinkedIn industry tags for the company."
          },
          "org_linkedin_id": {
            "type": "integer",
            "format": "int64",
            "description": "LinkedIn's internal company ID. Same numeric type as `linkedin_id` on [`/active-jb`](/api/new-jobs#job-board-jobs) (which is LinkedIn's job ID), but a different identifier - this one identifies the company, the job-side `linkedin_id` identifies the posting."
          },
          "org_linkedin_estimated_revenue_lower_bound_usd": {
            "type": "integer",
            "description": "Lower bound of estimated annual revenue in USD."
          },
          "org_linkedin_estimated_revenue_higher_bound_usd": {
            "type": "integer",
            "description": "Upper bound of estimated annual revenue in USD."
          },
          "org_linkedin_largest_headcount_country": {
            "type": "string",
            "description": "Country with the most employees."
          },
          "org_naics": {
            "type": "string",
            "description": "Primary NAICS industry classification."
          },
          "org_sic": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "SIC industry classification codes."
          },
          "org_markets": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Market segments the company operates in."
          },
          "org_twitter_url": {
            "type": "string",
            "format": "uri",
            "description": "Company's Twitter/X profile URL."
          },
          "org_logo_permalink": {
            "type": "string",
            "format": "uri",
            "description": "Permanent URL to the company logo."
          },
          "org_crunchbase_profile_url": {
            "type": "string",
            "format": "uri",
            "description": "URL to the company's Crunchbase profile."
          },
          "org_crunchbase_profile_uuid": {
            "type": "string",
            "description": "Crunchbase profile UUID."
          },
          "org_crunchbase_fiscal_year_end": {
            "type": "string",
            "description": "Month the company's fiscal year ends."
          },
          "org_crunchbase_acquisition_status": {
            "type": "string",
            "description": "Acquisition status (e.g., 'acquired', 'pending')."
          },
          "org_crunchbase_ipo_date": {
            "type": "string",
            "description": "IPO date if applicable."
          },
          "org_crunchbase_categories": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Crunchbase industry categories."
          },
          "org_glassdoor_review_count": {
            "type": "integer",
            "description": "Total number of Glassdoor reviews."
          },
          "org_glassdoor_salary_count": {
            "type": "integer",
            "description": "Total number of Glassdoor salary reports."
          },
          "org_glassdoor_interview_count": {
            "type": "integer",
            "description": "Total number of Glassdoor interview reports."
          },
          "org_glassdoor_benefit_count": {
            "type": "integer",
            "description": "Total number of Glassdoor benefit reports."
          },
          "org_glassdoor_primary_industry_name": {
            "type": "string",
            "description": "Primary industry name on Glassdoor."
          },
          "org_glassdoor_primary_industry_sector_name": {
            "type": "string",
            "description": "Primary industry sector on Glassdoor."
          },
          "org_glassdoor_culture_and_values_rating": {
            "type": "number",
            "description": "Culture & values rating (0-5)."
          },
          "org_glassdoor_diversity_and_inclusion_rating": {
            "type": "number",
            "description": "Diversity & inclusion rating (0-5)."
          },
          "org_glassdoor_work_life_balance_rating": {
            "type": "number",
            "description": "Work-life balance rating (0-5)."
          },
          "org_glassdoor_senior_management_rating": {
            "type": "number",
            "description": "Senior management rating (0-5)."
          },
          "org_glassdoor_compensation_and_benefits_rating": {
            "type": "number",
            "description": "Compensation & benefits rating (0-5)."
          },
          "org_glassdoor_career_opportunities_rating": {
            "type": "number",
            "description": "Career opportunities rating (0-5)."
          },
          "org_glassdoor_recommend_to_friend_rating": {
            "type": "number",
            "description": "Recommend to friend rating (0-5)."
          },
          "org_glassdoor_business_outlook_rating": {
            "type": "number",
            "description": "Business outlook rating (0-5)."
          },
          "org_glassdoor_profile_url": {
            "type": "string",
            "format": "uri",
            "description": "URL to the company's Glassdoor profile."
          },
          "org_crunchbase_funding_and_investment": {
            "type": "object",
            "description": "Crunchbase funding and investment data. Returned when `include_crunchbase_funding_and_investment=true`.",
            "properties": {
              "acquired_by": {
                "type": "array",
                "items": {
                  "type": "object"
                },
                "description": "Companies that acquired this company."
              },
              "acquisitions": {
                "type": "array",
                "items": {
                  "type": "object"
                },
                "description": "Companies acquired by this company."
              },
              "crunchbase_investors": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "List of investor names."
              },
              "last_funding_round_type": {
                "type": "string",
                "description": "Type of the most recent funding round (e.g., 'series_a', 'seed')."
              },
              "days_since_last_fundraise": {
                "type": "integer",
                "description": "Days since the last funding round."
              },
              "funding_milestones_timeseries": {
                "type": "array",
                "description": "Chronological list of funding rounds.",
                "items": {
                  "type": "object",
                  "properties": {
                    "date": {
                      "type": "string",
                      "format": "date-time"
                    },
                    "funding_date": {
                      "type": "string",
                      "format": "date-time"
                    },
                    "funding_round": {
                      "type": "string",
                      "description": "Round name (e.g., 'Series A - CompanyName')."
                    },
                    "funding_rounds_type": {
                      "type": "string",
                      "description": "Round type (e.g., 'series_a', 'seed', 'pre_seed')."
                    },
                    "funding_lead_investors": {
                      "type": "string",
                      "description": "Lead investor(s) for this round."
                    },
                    "funding_milestone_investors": {
                      "type": "string",
                      "description": "All investors in this round (comma-separated)."
                    },
                    "funding_milestone_amount_usd": {
                      "type": [
                        "integer",
                        "null"
                      ],
                      "description": "Amount raised in USD."
                    }
                  }
                }
              },
              "crunchbase_investors_info_list": {
                "type": "array",
                "description": "Detailed investor profiles.",
                "items": {
                  "type": "object",
                  "properties": {
                    "name": {
                      "type": "string"
                    },
                    "type": {
                      "type": "string",
                      "description": "'organization' or 'person'."
                    },
                    "uuid": {
                      "type": "string"
                    },
                    "permalink": {
                      "type": "string"
                    },
                    "categories": {
                      "type": "string",
                      "description": "Investor type (e.g., 'venture_capital', 'angel')."
                    },
                    "crunchbase_profile_url": {
                      "type": "string",
                      "format": "uri"
                    }
                  }
                }
              },
              "crunchbase_total_investment_usd": {
                "type": "integer",
                "description": "Total investment received in USD."
              },
              "last_funding_round_investment_usd": {
                "type": "integer",
                "description": "Amount raised in the most recent round in USD."
              }
            }
          },
          "org_linkedin_headcount_timeseries": {
            "type": "object",
            "description": "LinkedIn headcount data with role, skill, and region breakdowns. Returned when `include_linkedin_headcount_timeseries=true`. Each `*_metrics` object is a distribution map: keys are bucket labels (`all_roles`, `0_to_10_percent`, `11_to_30_percent`, `31_to_50_percent`, `51_to_70_percent`, `71_to_100_percent`); values are nullable strings listing the roles/skills/regions that fall into that share-of-headcount bucket.",
            "properties": {
              "linkedin_headcount": {
                "type": "integer",
                "description": "Current headcount."
              },
              "linkedin_role_metrics": {
                "type": "object",
                "description": "Employee distribution by role.",
                "properties": {
                  "all_roles": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "All distinct role names found in the company."
                  },
                  "0_to_10_percent": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "11_to_30_percent": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "31_to_50_percent": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "51_to_70_percent": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "71_to_100_percent": {
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                }
              },
              "linkedin_skill_metrics": {
                "type": "object",
                "description": "Employee distribution by skill.",
                "properties": {
                  "0_to_10_percent": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "11_to_30_percent": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "31_to_50_percent": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "51_to_70_percent": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "71_to_100_percent": {
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                }
              },
              "linkedin_region_metrics": {
                "type": "object",
                "description": "Employee distribution by region.",
                "properties": {
                  "0_to_10_percent": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "11_to_30_percent": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "31_to_50_percent": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "51_to_70_percent": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "71_to_100_percent": {
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                }
              },
              "linkedin_headcount_timeseries": {
                "type": "array",
                "description": "Weekly headcount over time.",
                "items": {
                  "type": "object",
                  "properties": {
                    "date": {
                      "type": "string",
                      "format": "date"
                    },
                    "employee_count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "org_linkedin_followers_timeseries": {
            "type": "object",
            "description": "LinkedIn follower data with growth rates. Returned when `include_linkedin_followers_timeseries=true`.",
            "properties": {
              "linkedin_followers": {
                "type": "integer",
                "description": "Current follower count."
              },
              "linkedin_followers_mom_percent": {
                "type": "number",
                "description": "Month-over-month growth percentage."
              },
              "linkedin_followers_qoq_percent": {
                "type": "number",
                "description": "Quarter-over-quarter growth percentage."
              },
              "linkedin_followers_yoy_percent": {
                "type": "number",
                "description": "Year-over-year growth percentage."
              },
              "linkedin_follower_count_timeseries": {
                "type": "array",
                "description": "Weekly follower count over time.",
                "items": {
                  "type": "object",
                  "properties": {
                    "date": {
                      "type": "string",
                      "format": "date"
                    },
                    "follower_count": {
                      "type": "integer"
                    }
                  }
                }
              },
              "linkedin_followers_six_months_growth_percent": {
                "type": "number",
                "description": "6-month growth percentage."
              }
            }
          },
          "org_linkedin_estimated_revenue_timeseries": {
            "type": "array",
            "description": "Monthly estimated revenue over time. Returned when `include_linkedin_estimated_revenue_timeseries=true`.",
            "items": {
              "type": "object",
              "properties": {
                "date": {
                  "type": "string",
                  "format": "date-time"
                },
                "revenue_lower_bound_usd": {
                  "type": "integer",
                  "description": "Lower bound of estimated revenue in USD."
                },
                "revenue_upper_bound_usd": {
                  "type": "integer",
                  "description": "Upper bound of estimated revenue in USD."
                }
              }
            }
          },
          "org_news_articles": {
            "type": "array",
            "description": "Recent news articles mentioning the company. Returned when `include_news_articles=true`.",
            "items": {
              "type": "object",
              "properties": {
                "article_url": {
                  "type": "string",
                  "format": "uri"
                },
                "article_title": {
                  "type": "string"
                },
                "article_publish_date": {
                  "type": "string",
                  "format": "date-time"
                },
                "article_publisher_name": {
                  "type": "string"
                }
              }
            }
          },
          "org_glassdoor_reviews": {
            "type": "array",
            "description": "Recent Glassdoor employee reviews. Returned when `include_glassdoor_reviews=true`.",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "integer"
                },
                "cons": {
                  "type": "string"
                },
                "pros": {
                  "type": "string"
                },
                "advice": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "summary": {
                  "type": "string"
                },
                "ceo_rating": {
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "review_date": {
                  "type": "string",
                  "format": "date"
                },
                "is_current_job": {
                  "type": "integer",
                  "description": "1 if the reviewer is currently employed, 0 otherwise."
                },
                "overall_rating": {
                  "type": "integer",
                  "description": "Overall rating (1-5)."
                },
                "reviewer_job_title": {
                  "type": "string"
                },
                "length_of_employment": {
                  "type": "integer",
                  "description": "Length of employment in years."
                },
                "reviewer_location_city": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "business_outlook_rating": {
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "senior_management_rating": {
                  "type": "integer"
                },
                "work_life_balance_rating": {
                  "type": "integer"
                },
                "culture_and_values_rating": {
                  "type": "integer"
                },
                "recommend_to_friend_rating": {
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "reviewer_employment_status": {
                  "type": "string",
                  "description": "e.g., 'REGULAR', 'PART_TIME'."
                },
                "career_opportunities_rating": {
                  "type": "integer"
                },
                "diversity_and_inclusion_rating": {
                  "type": "integer"
                },
                "compensation_and_benefits_rating": {
                  "type": "integer"
                }
              }
            }
          }
        }
      },
      "ProblemDetails": {
        "type": "object",
        "description": "RFC 7807 `application/problem+json` error response. Returned for client errors (4xx) and unexpected gateway errors (5xx). The `trace` block is injected by the gateway and is useful when filing a support ticket.",
        "required": [
          "type",
          "title",
          "status",
          "detail"
        ],
        "properties": {
          "type": {
            "type": "string",
            "format": "uri",
            "description": "URI reference identifying the error type. For HTTP-status-only errors this points at https://httpproblems.com/.",
            "example": "https://httpproblems.com/http-status/400"
          },
          "title": {
            "type": "string",
            "description": "Short, human-readable summary of the problem type (e.g. `Bad Request`, `Gateway Timeout`).",
            "example": "Bad Request"
          },
          "status": {
            "type": "integer",
            "description": "HTTP status code, mirrored in the response status line.",
            "example": 400
          },
          "detail": {
            "type": "string",
            "description": "Human-readable explanation specific to this occurrence. Safe to surface to end users.",
            "example": "Missing or invalid 'time_frame' parameter. Must be one of: 1h, 24h, 7d, 6m"
          },
          "instance": {
            "type": "string",
            "description": "Path of the request that produced the error.",
            "example": "/v1/active-ats"
          },
          "trace": {
            "type": "object",
            "description": "Diagnostic trace fields injected by the gateway. Include these when filing a support ticket.",
            "properties": {
              "timestamp": {
                "type": "string",
                "format": "date-time",
                "example": "2026-05-14T07:28:14.994Z"
              },
              "requestId": {
                "type": "string",
                "format": "uuid",
                "example": "d417443e-ca81-43c1-bedb-764fc0cdf4cc"
              },
              "buildId": {
                "type": "string",
                "format": "uuid",
                "example": "b6097d2d-7e03-405e-86a3-79c64a9b0814"
              },
              "rayId": {
                "type": "string",
                "example": "9fb82f5d2ee19353"
              }
            }
          }
        }
      }
    },
    "responses": {
      "RateLimitNoRetryAfter": {
        "description": "Rate Limiting Response",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "required": [
                "type",
                "title",
                "status"
              ],
              "examples": [
                {
                  "type": "https://httpproblems.com/http-status/429",
                  "title": "Too Many Requests",
                  "status": 429,
                  "instance": "/foo/bar"
                }
              ],
              "properties": {
                "type": {
                  "type": "string",
                  "example": "https://httpproblems.com/http-status/429",
                  "description": "A URI reference that identifies the problem."
                },
                "title": {
                  "type": "string",
                  "example": "Too Many Requests",
                  "description": "A short, human-readable summary of the problem."
                },
                "status": {
                  "type": "number",
                  "example": 429,
                  "description": "The HTTP status code."
                },
                "instance": {
                  "type": "string",
                  "example": "/foo/bar"
                }
              }
            }
          }
        }
      },
      "RateLimitWithRetryAfter": {
        "description": "Rate Limiting Response",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "required": [
                "type",
                "title",
                "status"
              ],
              "examples": [
                {
                  "type": "https://httpproblems.com/http-status/429",
                  "title": "Too Many Requests",
                  "status": 429,
                  "instance": "/foo/bar"
                }
              ],
              "properties": {
                "type": {
                  "type": "string",
                  "example": "https://httpproblems.com/http-status/429",
                  "description": "A URI reference that identifies the problem."
                },
                "title": {
                  "type": "string",
                  "example": "Too Many Requests",
                  "description": "A short, human-readable summary of the problem."
                },
                "status": {
                  "type": "number",
                  "example": 429,
                  "description": "The HTTP status code."
                },
                "instance": {
                  "type": "string",
                  "example": "/foo/bar"
                }
              }
            }
          }
        },
        "headers": {
          "retry-after": {
            "description": "The number of seconds to wait before making a new request.",
            "schema": {
              "type": "integer",
              "example": 60
            }
          }
        }
      }
    }
  },
  "servers": [
    {
      "url": "https://data.fantastic.jobs"
    }
  ]
}