{
  "openapi": "3.0.1",
  "info": {
    "title": "Workday, Personio, Breezy, Rippling - ATS Jobs API",
    "description": "Scrape every open job from a company's Workday, Personio, Breezy or Rippling career site into one normalised schema. Paste a mixed list of career-site URLs, get one job-listings dataset back. No API key, no proxy, no browser.",
    "version": "0.1",
    "x-build-id": "Ga49Q3U3wAt5M2muY"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/thedeadpoet~workday-personio-breezy-rippling-ats-jobs-api/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-thedeadpoet-workday-personio-breezy-rippling-ats-jobs-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/thedeadpoet~workday-personio-breezy-rippling-ats-jobs-api/runs": {
      "post": {
        "operationId": "runs-sync-thedeadpoet-workday-personio-breezy-rippling-ats-jobs-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/thedeadpoet~workday-personio-breezy-rippling-ats-jobs-api/run-sync": {
      "post": {
        "operationId": "run-sync-thedeadpoet-workday-personio-breezy-rippling-ats-jobs-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",
        "properties": {
          "companies": {
            "title": "Career sites",
            "minItems": 1,
            "maxItems": 500,
            "uniqueItems": true,
            "type": "array",
            "description": "One entry per company. Accepted formats:\n• A career-site URL - https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite, https://personio.jobs.personio.de, https://breezy.breezy.hr, https://ats.rippling.com/rippling/jobs\n• An explicit pair - personio:acme, breezy:acme, rippling:acme\n• Workday needs the tenant, the data centre and the site name - workday:nvidia:wd5:NVIDIAExternalCareerSite\n\nThe Workday data centre (wd1, wd3, wd5 …) and the site name are both visible in the career-site URL.",
            "items": {
              "type": "string"
            }
          },
          "defaultProvider": {
            "title": "Default ATS provider",
            "enum": [
              "personio",
              "breezy",
              "rippling"
            ],
            "type": "string",
            "description": "Used only for entries that are a bare token with no URL and no provider prefix. Workday cannot be a default because it also needs a data centre and a site name.",
            "default": "personio"
          },
          "includeDescription": {
            "title": "Include full job description",
            "type": "boolean",
            "description": "Adds descriptionText and descriptionHtml to every job. On Workday the description is only available from a per-job request, so this makes a Workday run roughly one request per job slower - and much more useful.",
            "default": true
          },
          "titleKeywords": {
            "title": "Title must contain any of",
            "type": "array",
            "description": "Case-insensitive. A job is kept if its title contains at least one of these strings. Leave empty to keep every title.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "excludeTitleKeywords": {
            "title": "Title must NOT contain any of",
            "type": "array",
            "description": "Case-insensitive. Jobs whose title contains any of these are dropped.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "locationKeywords": {
            "title": "Location must contain any of",
            "type": "array",
            "description": "Case-insensitive match against the job location string, e.g. \"Berlin\", \"United Kingdom\", \"Remote\".",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "remoteOnly": {
            "title": "Remote jobs only",
            "type": "boolean",
            "description": "Keep only jobs the ATS flags as remote, or whose location text contains \"remote\".",
            "default": false
          },
          "postedWithinDays": {
            "title": "Posted within the last N days",
            "minimum": 0,
            "maximum": 3650,
            "type": "integer",
            "description": "0 = no date filter. Uses the posting date the ATS reports; jobs with no date are always kept. Workday publishes a relative date (\"Posted 5 Days Ago\"), which is converted to a date.",
            "default": 0
          },
          "maxJobsPerCompany": {
            "title": "Max jobs per company",
            "minimum": 0,
            "type": "integer",
            "description": "0 = no limit. Worth setting for Workday: a single enterprise tenant can publish several thousand roles.",
            "default": 0
          },
          "maxJobsTotal": {
            "title": "Max jobs in total",
            "minimum": 0,
            "type": "integer",
            "description": "0 = no limit. A hard stop so a large company list cannot run away with your budget.",
            "default": 0
          },
          "maxRunSeconds": {
            "title": "Max run time",
            "minimum": 0,
            "maximum": 3600,
            "type": "integer",
            "description": "0 = no limit. A hard wall-clock stop. When the budget runs out the Actor pushes everything it has collected so far and finishes SUCCEEDED, instead of being killed by the platform timeout with nothing saved. Useful when you point it at a large career site and care more about getting some rows back than all of them.",
            "default": 0
          },
          "requestDelaySeconds": {
            "title": "Delay between requests",
            "minimum": 0,
            "maximum": 30,
            "type": "number",
            "description": "Politeness delay between requests to the same career site. Raised automatically when a host's robots.txt asks for a longer crawl delay.",
            "default": 1
          },
          "respectRobotsTxt": {
            "title": "Respect robots.txt",
            "type": "boolean",
            "description": "On by default. Each career-site host's own robots.txt is fetched once per run; a host that disallows its job feed is skipped rather than scraped.",
            "default": true
          },
          "emitErrorItems": {
            "title": "Emit an item for failed boards",
            "type": "boolean",
            "description": "If a career site returns 404 or an error, push a row with the error instead of silently skipping it. Useful when you are validating a large list of company tokens.",
            "default": false
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}