{
  "openapi": "3.0.1",
  "info": {
    "title": "Remote Jobs Aggregator - 8 Job Boards, One Clean Feed",
    "description": "Aggregates remote job listings from RemoteOK, Remotive, Himalayas, Jobicy, Arbeitnow, We Work Remotely, Working Nomads and The Muse into one normalized, deduplicated JSON feed with keyword, location, date and salary filters.",
    "version": "1.0",
    "x-build-id": "Ha1crirRLr5MFAaeq"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/feedsmith~remote-jobs-aggregator/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-feedsmith-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/feedsmith~remote-jobs-aggregator/runs": {
      "post": {
        "operationId": "runs-sync-feedsmith-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/feedsmith~remote-jobs-aggregator/run-sync": {
      "post": {
        "operationId": "run-sync-feedsmith-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": {
          "sources": {
            "title": "Sources",
            "type": "array",
            "description": "Which job boards to pull from. Leave empty to use all of them. Remotive is opt-in (off by default): its API terms ask users not to redistribute listings to third-party sites and to poll at most 4 times a day, and it returns only ~15 jobs per call.",
            "items": {
              "type": "string",
              "enum": [
                "remoteok",
                "remotive",
                "himalayas",
                "jobicy",
                "arbeitnow",
                "weworkremotely",
                "workingnomads",
                "themuse"
              ],
              "enumTitles": [
                "RemoteOK",
                "Remotive",
                "Himalayas",
                "Jobicy",
                "Arbeitnow",
                "We Work Remotely",
                "Working Nomads",
                "The Muse"
              ]
            },
            "default": [
              "remoteok",
              "himalayas",
              "jobicy",
              "arbeitnow",
              "weworkremotely",
              "workingnomads",
              "themuse"
            ]
          },
          "keywords": {
            "title": "Keywords (match ANY)",
            "type": "array",
            "description": "Keep a job if ANY of these words appears in its title, company or tags (case-insensitive). Leave empty to keep everything.",
            "items": {
              "type": "string"
            }
          },
          "excludeKeywords": {
            "title": "Exclude keywords",
            "type": "array",
            "description": "Drop a job if ANY of these words appears in its title, company or tags (case-insensitive).",
            "items": {
              "type": "string"
            }
          },
          "titleOnly": {
            "title": "Match keywords against title only",
            "type": "boolean",
            "description": "When on, keywords/excludeKeywords only look at the job title (not company or tags).",
            "default": false
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Keep a job if any of these terms matches its location text, e.g. \"Europe\", \"USA\", \"Worldwide\". \"Worldwide\" also matches jobs open to anyone with no region restriction.",
            "items": {
              "type": "string"
            }
          },
          "postedWithinDays": {
            "title": "Posted within (days)",
            "minimum": 1,
            "maximum": 3650,
            "type": "integer",
            "description": "Only jobs posted in the last N days. Jobs with an unknown post date are always kept."
          },
          "minSalaryUsd": {
            "title": "Minimum salary (USD/year)",
            "minimum": 0,
            "type": "integer",
            "description": "Only applied to jobs that actually publish USD salary data; jobs without salary info, or with a non-USD salary, are never dropped by this filter. Hourly/monthly/weekly figures are annualized for comparison."
          },
          "includeDescription": {
            "title": "Include job description",
            "type": "boolean",
            "description": "Attach the full job description. Turn off for a lighter, faster feed.",
            "default": true
          },
          "descriptionFormat": {
            "title": "Description format",
            "enum": [
              "text",
              "html"
            ],
            "type": "string",
            "description": "text = HTML stripped to clean, readable text (entities decoded, whitespace collapsed, paragraphs kept). html = the source's raw HTML.",
            "default": "text"
          },
          "dedupe": {
            "title": "Deduplicate across sources",
            "type": "boolean",
            "description": "Merge the same job when it appears on more than one board (matched by normalized company + title). The richest copy is kept and alsoSeenOn lists the other sources.",
            "default": true
          },
          "maxItemsPerSource": {
            "title": "Max jobs scanned per source",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Cap on how many raw jobs are pulled from each source before filtering. Higher = more complete, more requests.",
            "default": 500
          },
          "maxItems": {
            "title": "Max jobs saved",
            "minimum": 1,
            "type": "integer",
            "description": "Stop after this many jobs are saved to the dataset. You are only charged for jobs actually saved. Default 200 keeps a first test run around $0.36; raise it for full exports.",
            "default": 200
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}