{
  "openapi": "3.0.1",
  "info": {
    "title": "Salary Data API: Pay Ranges by Job Title & Level",
    "description": "Get salary benchmarks (p10-p90, annualised, with n) and pay ranges from 150,000+ employer-posted jobs across 11,000+ companies, updated daily. Filter by title, seniority, country and currency. No scraping at run time.",
    "version": "0.1",
    "x-build-id": "Z5QEbORiv8OpVGMhd"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/redomic~salary-data/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-redomic-salary-data",
        "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/redomic~salary-data/runs": {
      "post": {
        "operationId": "runs-sync-redomic-salary-data",
        "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/redomic~salary-data/run-sync": {
      "post": {
        "operationId": "run-sync-redomic-salary-data",
        "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": {
          "mode": {
            "title": "Mode",
            "enum": [
              "benchmark",
              "jobs",
              "closed"
            ],
            "type": "string",
            "description": "\"benchmark\" returns percentile pay summaries (default). \"jobs\" returns individual salary-bearing job rows. \"closed\" returns pay benchmarks and rows from postings that closed (what those roles actually paid).",
            "default": "benchmark"
          },
          "jobTitles": {
            "title": "Job titles",
            "type": "array",
            "description": "Any-of match on the job title (whole words, case-insensitive). Empty = all titles; when empty, benchmarks group by role family instead of title query.",
            "items": {
              "type": "string"
            }
          },
          "roleFamilies": {
            "title": "Role families",
            "type": "array",
            "description": "Filter to these role families. Empty = all.",
            "items": {
              "type": "string",
              "enum": [
                "Engineering",
                "Engineering - Backend/Fullstack",
                "Engineering - ML/AI",
                "Engineering - Infrastructure",
                "Engineering - Data",
                "Engineering - Security",
                "Engineering - Mobile",
                "Engineering - Management",
                "Data/Analytics",
                "Product Management",
                "Design",
                "Sales",
                "Marketing",
                "Customer Success/Support",
                "Operations",
                "Finance/Legal",
                "People/Recruiting",
                "Healthcare/Clinical",
                "Consulting/Advisory",
                "Skilled Trades/Field",
                "Other"
              ]
            },
            "default": []
          },
          "seniority": {
            "title": "Seniority",
            "type": "array",
            "description": "Empty = all.",
            "items": {
              "type": "string",
              "enum": [
                "Intern",
                "Junior",
                "Mid",
                "Senior",
                "Lead/Principal",
                "Lead",
                "Manager",
                "Director",
                "Executive"
              ]
            },
            "default": []
          },
          "countries": {
            "title": "Countries",
            "type": "array",
            "description": "Keep jobs whose location or country text contains any of these (e.g. United States, Germany). Empty = all.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "locations": {
            "title": "Locations (substring)",
            "type": "array",
            "description": "Keep jobs whose location contains any of these substrings (city, region, country text). Empty = all.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "remoteOnly": {
            "title": "Remote only",
            "type": "boolean",
            "description": "Only remote jobs.",
            "default": false
          },
          "companies": {
            "title": "Companies",
            "type": "array",
            "description": "Limit to these companies (board token or company name). Empty = all.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "currency": {
            "title": "Report currency",
            "type": "string",
            "description": "Leave empty to report salaries as posted. Set a target ISO 4217 code (USD, EUR, GBP, CAD, AUD) to convert using fixed rates listed in the README.",
            "default": ""
          },
          "minSample": {
            "title": "Minimum sample size",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Benchmark cells with fewer matching jobs are not returned. The summary row reports how many were skipped.",
            "default": 5
          },
          "maxItems": {
            "title": "Max items",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Maximum benchmark or job rows returned (and billed).",
            "default": 20
          },
          "includeAggregators": {
            "title": "Include aggregator boards",
            "type": "boolean",
            "description": "Aggregator boards re-post other companies' jobs. They are excluded by default.",
            "default": false
          },
          "cells": {
            "title": "Benchmark cells (role x city x seniority)",
            "type": "boolean",
            "description": "When true, benchmark mode returns role x city x seniority cells with n, p25/p50/p75, asOf and sampleSize. Cells with n < 5 return _status insufficient_sample with no percentiles. Current posted salaries only.",
            "default": false
          },
          "benchmarkByCompany": {
            "title": "Benchmark by company",
            "type": "boolean",
            "description": "When true, benchmark mode groups rows by company as well as query/role family, seniority and country/currency, returning one row per company with company, percentiles, n and sample links. A single-employer cell is allowed only in this mode.",
            "default": false
          },
          "minSalaryAnnual": {
            "title": "Minimum annualised salary",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only jobs whose annualised posted range (in report currency) overlaps this minimum or above. 0 = no filter.",
            "default": 0
          },
          "maxSalaryAnnual": {
            "title": "Maximum annualised salary",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only jobs whose annualised posted range (in report currency) overlaps this maximum or below. 0 = no filter.",
            "default": 0
          },
          "postedWithinDays": {
            "title": "Posted within days",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only jobs posted (or first seen) within this many days of the snapshot date (dataAsOf). 0 = no filter. Job rows carry ageDays so you can see posting age.",
            "default": 0
          },
          "minDaysOpen": {
            "title": "Minimum days open",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only jobs that have been open at least this many days (dataAsOf minus firstSeen/trackedSince). 0 = no filter. Job rows carry daysOpen.",
            "default": 0
          },
          "maxDaysOpen": {
            "title": "Maximum days open",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only jobs that have been open at most this many days (dataAsOf minus firstSeen/trackedSince). 0 = no filter. Job rows carry daysOpen.",
            "default": 0
          },
          "excludeEvergreen": {
            "title": "Exclude evergreen postings",
            "type": "boolean",
            "description": "When true, exclude jobs open 180 days or more since firstSeen/trackedSince. Job rows carry evergreen so you can see posting staleness.",
            "default": false
          },
          "monitor": {
            "title": "Monitor mode (only changes since the last run)",
            "type": "boolean",
            "description": "When true, keep a named key-value state per filter set and return only rows that are new, changed or removed since the previous run, each with changeType. Removed rows are free; only new and changed rows are billed, so a quiet scheduled run ends SUCCEEDED with 0 billed rows.",
            "default": false
          },
          "stateKey": {
            "title": "Monitor state key",
            "type": "string",
            "description": "Optional stable name for the monitor history. Leave empty to derive one from the filters (each distinct filter set keeps its own history). Set it to share one history across runs with different filters.",
            "default": ""
          },
          "output": {
            "title": "Output",
            "enum": [
              "rows",
              "events"
            ],
            "type": "string",
            "description": "\"rows\" returns the full snapshot (default). \"events\" returns only material benchmark changes (p25/p50/p75 shifts beyond changeBand) with n, window, asOf and confidence; an unchanged run ends SUCCEEDED with 0 events.",
            "default": "rows"
          },
          "changeBand": {
            "title": "Material change band",
            "minimum": 0,
            "maximum": 1,
            "type": "number",
            "description": "Minimum relative shift in p25, p50 or p75 (e.g. 0.05 = 5%) required to emit a benchmark change event when output=events. Ignored for output=rows.",
            "default": 0.05
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}