{
  "openapi": "3.0.1",
  "info": {
    "title": "SAP SuccessFactors Jobs API | Live Postings & Descriptions",
    "description": "SAP SuccessFactors Jobs API access without keys: live postings from public SuccessFactors career sites with full descriptions, requisition IDs, locations, and job functions, plus tenant discovery. Markdown, HTML, or text output. Pay only for delivered rows, no start fee, no minimum.",
    "version": "0.0",
    "x-build-id": "jGFH5NpMMRGOTVd9F"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/johnvc~sap-successfactors-jobs-api/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-johnvc-sap-successfactors-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/johnvc~sap-successfactors-jobs-api/runs": {
      "post": {
        "operationId": "runs-sync-johnvc-sap-successfactors-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/johnvc~sap-successfactors-jobs-api/run-sync": {
      "post": {
        "operationId": "run-sync-johnvc-sap-successfactors-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 (URLs, hosts, or company names)",
            "type": "array",
            "description": "SuccessFactors career-site inputs, mixed freely: a career-site host (jobs.sap.com), a full career-site URL (https://jobs.sap.com), a single job URL (https://jobs.sap.com/job/<slug>/<id>/), or a company name matched against the bundled directory. Leave empty together with startUrls to sweep tenants from the bundled directory instead.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "Alternative to the companies field for URL-shaped input; both lists are merged. Accepts the same career-site and single-job URL forms.",
            "items": {
              "type": "object"
            }
          },
          "outputMode": {
            "title": "What to return",
            "enum": [
              "jobs",
              "urlsOnly",
              "tenantsOnly"
            ],
            "type": "string",
            "description": "jobs returns full job records. urlsOnly returns the job index without descriptions, the cheapest way to list everything. tenantsOnly returns one row per career site from the discovery directory with a live job count.",
            "default": "jobs"
          },
          "discoveryQuery": {
            "title": "Discovery query",
            "type": "string",
            "description": "Case-insensitive text matched against company names and tenant keys in the bundled directory. Scopes tenantsOnly runs and empty-input sweeps. Leave empty to take the largest tenants first.",
            "default": ""
          },
          "verifyTenants": {
            "title": "Verify tenants live",
            "type": "boolean",
            "description": "tenantsOnly mode: probe each candidate career site's live feed before returning it, adding a current job count. Dead tenants are skipped and never billed. Turn off to list the directory snapshot without network checks.",
            "default": true
          },
          "titleKeywords": {
            "title": "Job title keywords",
            "type": "array",
            "description": "Keep only jobs whose title contains any of these words, for example engineer, sales, designer. Filters run before billing, so filtered jobs cost nothing.",
            "items": {
              "type": "string"
            }
          },
          "jobFunctions": {
            "title": "Job function contains",
            "type": "array",
            "description": "Keep only jobs whose job function contains any of these values, for example Development, Sales, Administration.",
            "items": {
              "type": "string"
            }
          },
          "locationKeywords": {
            "title": "Location contains",
            "type": "array",
            "description": "Keep only jobs whose location contains any of these values, for example Remote, Berlin, Bangalore, United States.",
            "items": {
              "type": "string"
            }
          },
          "activeOnly": {
            "title": "Active postings only",
            "type": "boolean",
            "description": "Keep only jobs whose expiration date is today or later, dropping postings that have already closed. On by default.",
            "default": true
          },
          "remoteOnly": {
            "title": "Remote jobs only",
            "type": "boolean",
            "description": "Keep only jobs whose title or location indicates a remote role.",
            "default": false
          },
          "includeDescriptionMarkdown": {
            "title": "Description as Markdown (paid add-on)",
            "type": "boolean",
            "description": "Add descriptionMarkdown to each job row: the posting converted to clean Markdown, compact and ready for AI agents and LLM pipelines. Billed per job row that carries it. Uncheck for cheaper metadata-only rows.",
            "default": true
          },
          "includeDescriptionHtml": {
            "title": "Description as HTML (paid add-on)",
            "type": "boolean",
            "description": "Add descriptionHtml to each job row: the original posting markup as the career site publishes it. Billed per job row that carries it.",
            "default": false
          },
          "includeDescriptionText": {
            "title": "Description as plain text (paid add-on)",
            "type": "boolean",
            "description": "Add descriptionText to each job row: a clean plain-text rendering of the posting. Billed per job row that carries it.",
            "default": false
          },
          "includeDetailFields": {
            "title": "Per-job detail fields (paid add-on)",
            "type": "boolean",
            "description": "Enrich each job row from its public detail page with the posted date, department, facility, shift type, travel requirement, and custom fields. One extra page request per job, so large runs are slower. Billed per job row that carries the data.",
            "default": false
          },
          "report": {
            "title": "Whole-run report (paid add-on)",
            "enum": [
              "none",
              "markdown",
              "html"
            ],
            "type": "string",
            "description": "Also write a human-readable digest of every scraped job, grouped by company, to the key-value store under the REPORT key. One flat charge per report. Capped at 5000 rows.",
            "default": "none"
          },
          "maxTenants": {
            "title": "Max tenants",
            "minimum": 1,
            "maximum": 50000,
            "type": "integer",
            "description": "Cap on career sites processed in a discovery sweep or tenantsOnly run. Keeps empty-input runs small and predictable.",
            "default": 25
          },
          "maxJobsPerTenant": {
            "title": "Max jobs per tenant",
            "minimum": 0,
            "type": "integer",
            "description": "Cap on job rows per career site after filtering. 0 means no per-tenant cap.",
            "default": 0
          },
          "maxJobs": {
            "title": "Max jobs for the whole run",
            "minimum": 0,
            "type": "integer",
            "description": "Hard ceiling on rows across the entire run, all tenants combined. The main cost control. 0 means unlimited.",
            "default": 100
          },
          "maxConcurrency": {
            "title": "Parallel requests",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Parallel detail-page fetches when the detail add-on is on, and parallel tenant probes in discovery mode. Feed scraping itself is one request per tenant.",
            "default": 5
          }
        }
      },
      "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}