{
  "openapi": "3.0.1",
  "info": {
    "title": "Remote Jobs Aggregator - RemoteOK, WWR & Himalayas, No login",
    "description": "Remote job listings from Remote OK, We Work Remotely and Himalayas in one deduplicated dataset. Filter by keyword, category, region and date, get salary only when the board publishes it, and fetch only new jobs on scheduled runs. No login or API key for the boards.",
    "version": "0.1",
    "x-build-id": "jGt0J8CMpfvjdCVCp"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/cliqtomedia~remote-jobs-aggregator/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-cliqtomedia-remote-jobs-aggregator",
        "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/cliqtomedia~remote-jobs-aggregator/runs": {
      "post": {
        "operationId": "runs-sync-cliqtomedia-remote-jobs-aggregator",
        "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/cliqtomedia~remote-jobs-aggregator/run-sync": {
      "post": {
        "operationId": "run-sync-cliqtomedia-remote-jobs-aggregator",
        "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": {
          "keywords": {
            "title": "Keywords",
            "maxItems": 20,
            "type": "array",
            "description": "Keep jobs that mention ANY of these words in the title, tags, company or description (whole words; python also matches pythonista, developer matches developers). Up to 20, each up to 60 characters. Leave empty for all jobs. Also used as the search query where a board supports search.",
            "items": {
              "type": "string"
            }
          },
          "postedWithinDays": {
            "title": "Posted within (days)",
            "minimum": 1,
            "maximum": 90,
            "type": "integer",
            "description": "Keep jobs posted in the last N days (1–90). Jobs without a posting date are dropped. Default 30.",
            "default": 30
          },
          "maxItems": {
            "title": "Max jobs",
            "minimum": 1,
            "maximum": 2000,
            "type": "integer",
            "description": "Upper limit of jobs written and charged in this run, after filters and deduplication (1–2000). Newest first. Default 100.",
            "default": 100
          },
          "sources": {
            "title": "Job boards",
            "uniqueItems": true,
            "type": "array",
            "description": "Which boards to read. Default: all three. Each board is public and needs no login or API key.",
            "items": {
              "type": "string",
              "enum": [
                "remoteok",
                "weworkremotely",
                "himalayas"
              ],
              "enumTitles": [
                "Remote OK",
                "We Work Remotely",
                "Himalayas"
              ]
            },
            "default": [
              "remoteok",
              "weworkremotely",
              "himalayas"
            ]
          },
          "excludeKeywords": {
            "title": "Exclude keywords",
            "maxItems": 20,
            "type": "array",
            "description": "Drop jobs whose title, tags or company contain any of these words, e.g. senior or crypto. Up to 20.",
            "items": {
              "type": "string"
            }
          },
          "searchInDescription": {
            "title": "Match keywords in description too",
            "type": "boolean",
            "description": "Also match keywords against the job description text, like the boards' own search. Turn off to match only title, tags and company (fewer, stricter results). Exclude keywords always check only title, tags and company. Default on.",
            "default": true
          },
          "categories": {
            "title": "Categories",
            "uniqueItems": true,
            "type": "array",
            "description": "Keep only these job categories. Categories come from the board where it has one, otherwise from the job title. Leave empty for all categories.",
            "items": {
              "type": "string",
              "enum": [
                "programming",
                "design",
                "devops",
                "product",
                "sales-marketing",
                "customer-support",
                "management-finance",
                "data",
                "other"
              ],
              "enumTitles": [
                "Programming",
                "Design",
                "DevOps & sysadmin",
                "Product",
                "Sales & marketing",
                "Customer support",
                "Management & finance",
                "Data & AI",
                "Other"
              ]
            }
          },
          "locationsAllowed": {
            "title": "Allowed locations",
            "maxItems": 20,
            "type": "array",
            "description": "Keep jobs open to any of these countries or regions, e.g. USA, UK, Europe, LATAM, APAC, Germany. Worldwide jobs always pass. Jobs with an unknown location are dropped when this is set. Default: any location.",
            "items": {
              "type": "string"
            }
          },
          "salaryOnly": {
            "title": "Only jobs with a salary",
            "type": "boolean",
            "description": "Keep only jobs where the board publishes a salary range. Salaries are never estimated. We Work Remotely never publishes a salary, so it is skipped when this is on. Default off.",
            "default": false
          },
          "includeDescription": {
            "title": "Description format",
            "enum": [
              "text",
              "html",
              "both",
              "none"
            ],
            "type": "string",
            "description": "How to include the job description. Plain text is up to 20,000 characters, HTML up to 50,000. Default plain text.",
            "default": "text"
          },
          "onlyNew": {
            "title": "Only new jobs (since previous runs)",
            "type": "boolean",
            "description": "Skip jobs this Actor already returned in earlier runs with the same state key. Seen jobs are stored in your named key-value store remote-jobs-aggregator-state for 120 days. Only written jobs are remembered.",
            "default": false
          },
          "stateKey": {
            "title": "State key",
            "pattern": "^[a-zA-Z0-9-]{1,40}$",
            "type": "string",
            "description": "Separate memory for onlyNew, e.g. one key per saved search. 1–40 letters, digits or dashes. Default: default.",
            "default": "default"
          },
          "maxPagesPerSource": {
            "title": "Max pages per board",
            "minimum": 1,
            "maximum": 25,
            "type": "integer",
            "description": "Safety limit for paginated boards (Himalayas, about 20 jobs per page). The Actor stops earlier once it has enough jobs for maxItems. Higher values find older or lower-ranked jobs but take longer. Default 10.",
            "default": 10
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}