{
  "openapi": "3.0.1",
  "info": {
    "title": "FreshHire — Verified ATS Job Changes API",
    "description": "Monitor Greenhouse, Lever and Ashby company career pages for new openings, material updates, reopened jobs and confirmed closures. Includes a normalized ATS job scraper snapshot mode.",
    "version": "0.1",
    "x-build-id": "h9fCiIWeBmeWVSOMJ"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/cesarjaks~freshhire-verified-ats-job-changes-api/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-cesarjaks-freshhire-verified-ats-job-changes-api",
        "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/cesarjaks~freshhire-verified-ats-job-changes-api/runs": {
      "post": {
        "operationId": "runs-sync-cesarjaks-freshhire-verified-ats-job-changes-api",
        "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/cesarjaks~freshhire-verified-ats-job-changes-api/run-sync": {
      "post": {
        "operationId": "run-sync-cesarjaks-freshhire-verified-ats-job-changes-api",
        "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",
        "required": [
          "boards"
        ],
        "properties": {
          "mode": {
            "title": "Execution mode",
            "enum": [
              "snapshot",
              "changes"
            ],
            "type": "string",
            "description": "Snapshot returns current jobs. Changes creates a first-run baseline, then returns new, updated, reopened and confirmed closed jobs.",
            "default": "snapshot"
          },
          "boards": {
            "title": "Company ATS boards",
            "minItems": 1,
            "maxItems": 100,
            "type": "array",
            "description": "Supply source plus boardId or an allowlisted hosted ATS board URL in url. company is an optional display label. Lever region is global (default) or eu. Do not supply arbitrary company career URLs. Identical boards are checked once; conflicting duplicates are rejected.",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "source": {
                  "title": "ATS provider",
                  "description": "Public ATS provider.",
                  "type": "string",
                  "editor": "select",
                  "enum": [
                    "greenhouse",
                    "lever",
                    "ashby"
                  ]
                },
                "boardId": {
                  "title": "Board identifier",
                  "description": "Public board token or Ashby board name.",
                  "type": "string",
                  "editor": "textfield",
                  "minLength": 1,
                  "maxLength": 100,
                  "pattern": "^[A-Za-z0-9][A-Za-z0-9_-]*$"
                },
                "url": {
                  "title": "ATS board URL",
                  "description": "Supported HTTPS ATS board URL, as an alternative to boardId.",
                  "type": "string",
                  "editor": "textfield",
                  "maxLength": 2048
                },
                "company": {
                  "title": "Company label",
                  "description": "Optional company display label.",
                  "type": "string",
                  "editor": "textfield",
                  "maxLength": 200
                },
                "region": {
                  "title": "Lever region",
                  "description": "Only Lever supports the eu region.",
                  "type": "string",
                  "editor": "select",
                  "enum": [
                    "global",
                    "eu"
                  ]
                }
              },
              "required": [
                "source"
              ]
            }
          },
          "monitorId": {
            "title": "Monitoring identifier",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$",
            "type": "string",
            "description": "Required in changes mode. Stable identifier for this independent monitor, for example recruiting-us-v1. Keep it unchanged across runs. Use a new identifier to intentionally start a new baseline."
          },
          "stateStoreName": {
            "title": "Named state store",
            "pattern": "^[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?$",
            "type": "string",
            "description": "Named Apify Key-Value Store shared by subsequent runs. Independent monitor IDs use separate records. Keep the store private and do not delete it while monitoring.",
            "default": "freshhire-state"
          },
          "includeDescriptions": {
            "title": "Include and monitor descriptions",
            "type": "boolean",
            "description": "Include normalized plain text descriptions and detect description changes. Increases traffic and state size. Keep this setting stable within a monitor.",
            "default": false
          },
          "includeDetails": {
            "title": "Fetch Greenhouse job details",
            "type": "boolean",
            "description": "Request each Greenhouse job detail for first_published and available structured pay ranges. Adds one request per posting. Keep this setting stable within a monitor.",
            "default": false
          },
          "titleKeywords": {
            "title": "Job title keywords",
            "type": "array",
            "description": "Case-insensitive substring matching. Any keyword may match within this list; different filter groups are combined with AND. An empty list accepts all titles.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "locationKeywords": {
            "title": "Location keywords",
            "type": "array",
            "description": "Case-insensitive location substring matching; any keyword may match. Empty accepts all locations.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "workplaceTypes": {
            "title": "Workplace types",
            "type": "array",
            "description": "Optional exact workplace types. Unknown values remain unknown; location text is not used to guess remote work.",
            "items": {
              "type": "string",
              "enum": [
                "remote",
                "hybrid",
                "onsite",
                "unknown"
              ]
            },
            "default": []
          },
          "sources": {
            "title": "ATS output filter",
            "type": "array",
            "description": "Return results from these ATS platforms. The configured boards are still fully monitored.",
            "items": {
              "type": "string",
              "enum": [
                "greenhouse",
                "lever",
                "ashby"
              ]
            },
            "default": []
          },
          "companies": {
            "title": "Company output filter",
            "type": "array",
            "description": "Optional exact company labels, matched case-insensitively. Empty accepts all companies.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "maxResults": {
            "title": "Maximum delivered results",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Limits dataset rows, not board completeness. Changes above the limit remain pending for later runs. A limit can produce a partial result; inspect RUN_SUMMARY.",
            "default": 1000
          },
          "concurrency": {
            "title": "Maximum request concurrency",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Maximum simultaneous outbound HTTP requests. Start with the conservative default.",
            "default": 3
          },
          "requestIntervalSeconds": {
            "title": "Minimum request interval (seconds)",
            "minimum": 0.2,
            "maximum": 10,
            "type": "number",
            "description": "Minimum pacing interval between requests to a provider host. Retry-After and exponential backoff can increase the delay.",
            "default": 0.5
          },
          "requestTimeoutSeconds": {
            "title": "HTTP timeout (seconds)",
            "minimum": 5,
            "maximum": 60,
            "type": "number",
            "description": "Bound for HTTP request timeouts. Timed-out boards do not generate closures.",
            "default": 30
          },
          "maxRetries": {
            "title": "Maximum transient retries",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Retries after the initial request for transient network failures, rate limits and eligible server errors. Permanent access failures are not bypassed.",
            "default": 3
          },
          "maxJobsPerBoard": {
            "title": "Maximum jobs in a complete board scan",
            "minimum": 1,
            "maximum": 50000,
            "type": "integer",
            "description": "Safety bound on one board. Exceeding it marks that scan incomplete, preserves its job snapshot and resets closure confirmation; this is not a result filter.",
            "default": 20000
          },
          "closedRetentionDays": {
            "title": "Closed-job history retention (days)",
            "minimum": 1,
            "maximum": 365,
            "type": "integer",
            "description": "Retain closed postings to recognize reopening. Reappearance after retention expires is treated as newly observed.",
            "default": 180
          },
          "maxClosedJobsPerBoard": {
            "title": "Maximum retained closed jobs per board",
            "minimum": 1,
            "maximum": 50000,
            "type": "integer",
            "description": "Oldest closed records are pruned if the bound is reached. Reopening recognition is limited to retained records.",
            "default": 10000
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}