{
  "openapi": "3.0.1",
  "info": {
    "title": "Welcome to the Jungle Jobs Scraper | WTTJ API & New Job Feed",
    "description": "$0.80 per 1,000 jobs, full descriptions included | France-focused public Welcome to the Jungle board, including postings abroad. Filter by country, contract or remote mode. Persistent only-new feed and skip IDs. JSON, CSV, Excel, REST and MCP.",
    "version": "0.1",
    "x-build-id": "vbht6UZl1aEefhx3l"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/data_daemon~welcome-to-the-jungle-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-data_daemon-welcome-to-the-jungle-jobs-scraper",
        "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/data_daemon~welcome-to-the-jungle-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-data_daemon-welcome-to-the-jungle-jobs-scraper",
        "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/data_daemon~welcome-to-the-jungle-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-data_daemon-welcome-to-the-jungle-jobs-scraper",
        "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": {
          "queries": {
            "title": "Keywords or job titles",
            "type": "array",
            "description": "One public WTTJ search per keyword; jobs shared by several searches are delivered once. Default: python. An empty array runs no searches. Maximum 50 searches.",
            "default": [
              "python"
            ],
            "items": {
              "type": "string"
            }
          },
          "countryCodes": {
            "title": "Countries",
            "type": "array",
            "description": "Optional two-letter office country codes, for example FR, ES or DE. Several values match any of them. Covers the France-focused public WTTJ board, including its jobs abroad; not the separate Otta/US/UK matching inventory.",
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Cities or regions",
            "type": "array",
            "description": "Optional case-insensitive substring match on public office city, region or country. Accents are ignored. Several values match any of them. Applied locally within the source search window; use countryCodes to narrow the source search first.",
            "items": {
              "type": "string"
            }
          },
          "contractTypes": {
            "title": "Contract types",
            "type": "array",
            "description": "Optional: FULL_TIME, TEMPORARY, INTERNSHIP, APPRENTICESHIP, FREELANCE, VIE, PART_TIME or OTHER. Several values match any of them; other filter groups are combined with AND.",
            "items": {
              "type": "string"
            }
          },
          "remoteModes": {
            "title": "Remote working",
            "type": "array",
            "description": "Optional: fulltime (fully remote), partial (hybrid), punctual (occasional), no or unknown. Several values match any of them. This is the source designation, not a promise that applicants can work from any country.",
            "items": {
              "type": "string"
            }
          },
          "languages": {
            "title": "Posting languages",
            "type": "array",
            "description": "Optional two-letter posting language codes such as fr or en. Several values match any of them.",
            "items": {
              "type": "string"
            }
          },
          "companySlugs": {
            "title": "Company slugs",
            "type": "array",
            "description": "Optional company URL slugs, for example webnet or elis-france. Several values match any of them. These must be slugs, not display names.",
            "items": {
              "type": "string"
            }
          },
          "salaryCurrency": {
            "title": "Salary currency",
            "type": "string",
            "description": "Optional three-letter currency such as EUR. Filters on disclosed currency, not salary size. Salary numbers are preserved as provided; employers use inconsistent units."
          },
          "postedWithinDays": {
            "title": "Posted within days",
            "minimum": 0,
            "maximum": 365,
            "type": "integer",
            "description": "Optional 1-365 day posting window; 0 means no date filter. Jobs with unknown dates are excluded when enabled. Applied locally before fetching descriptions."
          },
          "includeDescription": {
            "title": "Include full descriptions",
            "type": "boolean",
            "description": "Read each public job detail endpoint for description HTML, plain text, candidate profile, recruitment process and public company metadata. Off returns search listing data only. Same price per delivered job.",
            "default": true
          },
          "maxJobsPerQuery": {
            "title": "Maximum jobs per keyword",
            "minimum": 0,
            "maximum": 1000,
            "type": "integer",
            "description": "Maximum delivered jobs per keyword, after filters and exclusions. Default 20. 0 means up to the source maximum of 1,000 accessible hits per search. Narrow broad searches with country/company/contract filters.",
            "default": 20
          },
          "maxJobs": {
            "title": "Maximum jobs in this run",
            "minimum": 0,
            "maximum": 10000,
            "type": "integer",
            "description": "Global delivery cap across keywords. Default 20; 0 removes this cap but the per-keyword and 1,000-hit source windows still apply. Set a maximum charge in Apify for a spending cap.",
            "default": 20
          },
          "skipJobIds": {
            "title": "Job IDs to exclude",
            "type": "array",
            "description": "Optional output id, sourceId or dedupKey values. Excluded jobs are skipped before detail requests and are not charged. Suitable for a database or spreadsheet containing jobs you already have.",
            "items": {
              "type": "string"
            }
          },
          "onlyNewSinceLastRun": {
            "title": "Only jobs not delivered before",
            "type": "boolean",
            "description": "Remember delivered job IDs in a persistent named key-value store. Later runs with the same state name return unseen jobs. Skipped jobs are not charged. First run is a baseline capped by maxJobs; later runs may fill older unseen backlog. Memory expires after 120 days and retains at most 50,000 IDs per feed.",
            "default": false
          },
          "stateName": {
            "title": "Feed state name",
            "maxLength": 120,
            "type": "string",
            "description": "Optional stable name for an only-new feed (maximum 120 characters). Same name shares memory across tasks in your account; avoid overlapping runs. Leave empty to derive a name from the search filters. Change the name for a fresh baseline."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}