{
  "openapi": "3.0.1",
  "info": {
    "title": "EU Pay Transparency Job Ad Checker",
    "description": "Checks job ad URLs or raw text against the EU Pay Transparency Directive (2023/970) and a bonus US salary-disclosure ruleset: pay range disclosure, pay-history questions, gender-neutral titles, transparency statements. Returns a verdict, rule refs, salary, and a fix suggestion.",
    "version": "0.1",
    "x-build-id": "TW7gtxNGiaRo03mVD"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/gravelly_caladium~eu-pay-transparency-checker/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-gravelly_caladium-eu-pay-transparency-checker",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/gravelly_caladium~eu-pay-transparency-checker/runs": {
      "post": {
        "operationId": "runs-sync-gravelly_caladium-eu-pay-transparency-checker",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/gravelly_caladium~eu-pay-transparency-checker/run-sync": {
      "post": {
        "operationId": "run-sync-gravelly_caladium-eu-pay-transparency-checker",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "jobAdUrls": {
            "title": "Job ad URLs",
            "type": "array",
            "description": "Public job ad page URLs to check, from any site. JSON-LD JobPosting data is used when the page has it (Greenhouse, Lever, Workday, Personio, Teamtailor, SmartRecruiters, and many others); otherwise readable page text is extracted and checked.",
            "items": {
              "type": "string"
            }
          },
          "jobAdTexts": {
            "title": "Raw job ad texts",
            "type": "array",
            "description": "Raw job ad text, one full ad per array entry, as an alternative or addition to Job ad URLs. Use this for ads you already have the text of (e.g. from a PDF or an internal system).",
            "items": {
              "type": "string"
            }
          },
          "careersPageUrls": {
            "title": "Company careers page URLs to crawl",
            "type": "array",
            "description": "Public company careers/jobs listing page URLs. Each is fetched and scanned for links that look like individual job postings (up to 'Max jobs per careers page' each), which are then checked the same as Job ad URLs.",
            "items": {
              "type": "string"
            }
          },
          "maxJobsPerCareersPage": {
            "title": "Max jobs per careers page",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "Upper limit on how many job links to follow from each careers page in 'Careers page URLs to crawl'.",
            "default": 20
          },
          "country": {
            "title": "Country (ISO 3166-1 alpha-2)",
            "type": "string",
            "description": "e.g. 'DE', 'FR', 'US-NYC', 'US-CA'. Used when auto-detection is off, or as a fallback when auto-detection can't determine a job's country. See README for supported US bonus jurisdiction codes."
          },
          "autoDetectCountry": {
            "title": "Auto-detect country",
            "type": "boolean",
            "description": "Try to detect each job's country from JSON-LD data, the URL (domain/locale), and the ad text, before falling back to the 'Country' field above. Turn off to force every ad to use 'Country'.",
            "default": true
          },
          "language": {
            "title": "Language override",
            "type": "string",
            "description": "ISO 639-1 code (e.g. 'de', 'fr') to force which language's phrase list is prioritized for pay-history/gender-title checks. Leave empty to auto-detect per ad -- all supported languages are always scanned regardless, so this mainly affects which match is reported first."
          },
          "includeUsBonusRules": {
            "title": "Include US bonus ruleset",
            "type": "boolean",
            "description": "When a job's country resolves to the US (or a US jurisdiction code like 'US-NYC'), also apply the bonus US state/city salary-transparency ruleset (rules/us_state_laws.json). Turn off to only ever evaluate against the EU ruleset.",
            "default": true
          },
          "maxConcurrency": {
            "title": "Max concurrent requests",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How many URLs to fetch at the same time. Kept low by default to be polite to the sites being checked.",
            "default": 3
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional. Only needed if a target site blocks direct requests. The Actor works without a proxy for most ATS-hosted job pages.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}