{
  "openapi": "3.0.1",
  "info": {
    "title": "Hacker News Who Is Hiring: Jobs & Hiring History",
    "description": "Turn Hacker News Who is hiring threads into job rows with salary, stack, work mode and visa, plus how many months each company has been hiring.",
    "version": "0.7",
    "x-build-id": "5GHN31ZsGBL3orXxq"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/datagrit~hacker-news-hiring-history/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-datagrit-hacker-news-hiring-history",
        "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/datagrit~hacker-news-hiring-history/runs": {
      "post": {
        "operationId": "runs-sync-datagrit-hacker-news-hiring-history",
        "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/datagrit~hacker-news-hiring-history/run-sync": {
      "post": {
        "operationId": "run-sync-datagrit-hacker-news-hiring-history",
        "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": {
          "monthsBack": {
            "title": "Latest threads to read",
            "minimum": 1,
            "maximum": 24,
            "type": "integer",
            "description": "How many of the most recent monthly threads to read, newest first. 1 is the current month. Ignored when Month is set. A thread with fewer than 10 comments (the first hours of a month) is skipped.",
            "default": 1
          },
          "month": {
            "title": "Specific month",
            "type": "string",
            "description": "Read one month instead, written as YYYY-MM, for example 2026-03. The run fails when neither the whoishiring accounts nor a title search on Hacker News finds a Who is hiring thread for that month. Before 2016 most posts have no standard header, so such a month needs Months of history set to 0."
          },
          "historyMonths": {
            "title": "Months of history",
            "minimum": 0,
            "maximum": 36,
            "type": "integer",
            "description": "How many earlier monthly threads to compare every company against, for months hiring, first seen, previous seen and new company. 0 switches history off and makes the run faster; it is also the setting for months before December 2016, where company history cannot be computed and a run with history fails. More months mean more threads to download: each one adds about a second.",
            "default": 12
          },
          "keywords": {
            "title": "Post text contains",
            "type": "array",
            "description": "Keep posts whose full text contains at least one of these words or phrases (case-insensitive), for example climate or \"machine learning\".",
            "items": {
              "type": "string"
            }
          },
          "roleContains": {
            "title": "Role contains",
            "type": "array",
            "description": "Keep posts whose header line contains at least one of these words, for example designer or \"data engineer\". The header is where roles are listed.",
            "items": {
              "type": "string"
            }
          },
          "locationContains": {
            "title": "Location contains",
            "type": "array",
            "description": "Keep posts whose header line contains at least one of these words, for example berlin, europe or \"new york\".",
            "items": {
              "type": "string"
            }
          },
          "technologies": {
            "title": "Technologies (any of)",
            "type": "array",
            "description": "Keep posts that name at least one of these technologies anywhere in the text, for example python, rust or kubernetes. Names are matched against the Technologies column, case-insensitive.",
            "items": {
              "type": "string"
            }
          },
          "workMode": {
            "title": "Work mode",
            "enum": [
              "any",
              "remote",
              "hybrid",
              "onsite"
            ],
            "type": "string",
            "description": "Keep posts whose header mentions this mode. Posts that do not state a mode are dropped when you choose one.",
            "default": "any"
          },
          "employmentType": {
            "title": "Employment type",
            "enum": [
              "any",
              "full-time",
              "part-time",
              "contract",
              "freelance",
              "internship",
              "temporary"
            ],
            "type": "string",
            "description": "Keep posts whose header mentions this type. Posts that do not state one are dropped when you choose one.",
            "default": "any"
          },
          "onlyWithSalary": {
            "title": "Only posts with a salary",
            "type": "boolean",
            "description": "Keep only posts that state pay in the header or in a Salary line.",
            "default": false
          },
          "minSalary": {
            "title": "Minimum yearly salary",
            "minimum": 0,
            "type": "integer",
            "description": "Keep posts whose top stated pay, converted to a year, is at least this amount. Needs Salary currency, because pay is posted in different currencies. 0 means no minimum.",
            "default": 0
          },
          "salaryCurrency": {
            "title": "Salary currency",
            "enum": [
              "any",
              "USD",
              "EUR",
              "GBP",
              "CAD",
              "AUD",
              "CHF",
              "SEK",
              "PLN",
              "INR"
            ],
            "type": "string",
            "description": "Currency that Minimum yearly salary is measured in. Posts in other currencies are dropped when a minimum is set.",
            "default": "any"
          },
          "visaSponsorshipOnly": {
            "title": "Only with visa sponsorship",
            "type": "boolean",
            "description": "Keep only posts that offer visa or work-permit sponsorship.",
            "default": false
          },
          "onlyNewCompanies": {
            "title": "Only first-time companies",
            "type": "boolean",
            "description": "Keep only companies that did not post in any of the earlier threads covered by Months of history. Needs history.",
            "default": false
          },
          "minMonthsHiring": {
            "title": "Minimum months hiring",
            "minimum": 0,
            "maximum": 37,
            "type": "integer",
            "description": "Keep companies that posted in at least this many of the checked threads, this one included. Use it to find companies that hire all the time. Needs history. 0 means no minimum.",
            "default": 0
          },
          "onlyNewSinceLastRun": {
            "title": "Only posts not delivered before",
            "type": "boolean",
            "description": "Return only posts that no earlier run with the same filters has delivered. Schedule the Actor during the month to get each new post once. Runs with different filters keep separate memory.",
            "default": false
          },
          "maxItems": {
            "title": "Maximum posts",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Stop after this many posts in total across all threads read. A monthly thread holds 250 to 450 posts.",
            "default": 50
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional proxy. Leave disabled unless the Hacker News search API rate-limits the shared platform IP (HTTP 429); a proxy raises the platform cost of the run.",
            "default": {
              "useApifyProxy": 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}