{
  "openapi": "3.0.1",
  "info": {
    "title": "JobMD Medical Jobs Scraper 丁香人才网: Hospital Jobs & 医院招聘公告 Feed",
    "description": "Scrape JobMD (丁香人才网, jobmd.cn) hiring-fair jobs and hospital hiring announcements (医院招聘公告). Salary split into CNY min and max, hospital grade (三甲), department, title level, education, full job text and optional full notice text. Filter by province or keyword, schedule for new-listing feeds.",
    "version": "0.1",
    "x-build-id": "bcjzQJXc5dYibdk5x"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/getascraper~jobmd-medical-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-getascraper-jobmd-medical-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/getascraper~jobmd-medical-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-getascraper-jobmd-medical-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/getascraper~jobmd-medical-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-getascraper-jobmd-medical-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": {
          "mode": {
            "title": "What to collect",
            "enum": [
              "jobs",
              "announcements"
            ],
            "type": "string",
            "description": "Medical jobs from JobMD online hiring fairs (full descriptions, salary, hospital grade), or the hospital hiring announcements that employers publish (deadlines, applicant counts, full notice text).",
            "default": "jobs"
          },
          "keyword": {
            "title": "Keyword",
            "type": "string",
            "description": "Chinese keyword such as 护士, 心内科 or 华西医院. Jobs mode searches job titles and descriptions with JobMD's own loose word matching. Announcements mode keeps notices whose title or hospital name contains the text. Leave empty for everything.",
            "default": ""
          },
          "province": {
            "title": "Province",
            "enum": [
              "",
              "110000",
              "120000",
              "130000",
              "140000",
              "150000",
              "210000",
              "220000",
              "230000",
              "310000",
              "320000",
              "330000",
              "340000",
              "350000",
              "360000",
              "370000",
              "410000",
              "420000",
              "430000",
              "440000",
              "450000",
              "460000",
              "500000",
              "510000",
              "520000",
              "530000",
              "540000",
              "610000",
              "620000",
              "630000",
              "640000",
              "650000",
              "710000",
              "810000",
              "820000"
            ],
            "type": "string",
            "description": "Only listings located in this province, municipality or region. Leave on Anywhere for all of China.",
            "default": ""
          },
          "city": {
            "title": "City or district contains",
            "type": "string",
            "description": "Keep only listings whose location text contains this text, for example 杭州 or 浦东. Useful for cities because the site only filters by province.",
            "default": ""
          },
          "education": {
            "title": "Education level",
            "enum": [
              "",
              "none",
              "college",
              "bachelor",
              "master",
              "doctor"
            ],
            "type": "string",
            "description": "Education the job asks for. Applies to the jobs mode only.",
            "default": ""
          },
          "hospitalType": {
            "title": "Employer type",
            "enum": [
              "",
              "public_hospital",
              "private_hospital",
              "joint_stock_hospital",
              "community_health_center",
              "clinic",
              "government",
              "state_owned",
              "central_enterprise",
              "research_institute",
              "health_management",
              "pharma_biotech",
              "other"
            ],
            "type": "string",
            "description": "Kind of employer, such as public hospital, private hospital, clinic or pharma company.",
            "default": ""
          },
          "hospitalLevels": {
            "title": "Hospital grade",
            "type": "array",
            "description": "Keep hospitals of these Chinese grades. Tier 3 Grade A (三甲) is the top grade. Announcements are matched on the tier (三级, 二级, 一级) only.",
            "items": {
              "type": "string",
              "enum": [
                "三甲",
                "三乙",
                "三级",
                "二甲",
                "二乙",
                "二级",
                "一甲",
                "一乙",
                "一级"
              ],
              "enumTitles": [
                "Tier 3 Grade A (三甲)",
                "Tier 3 Grade B (三乙)",
                "Tier 3, grade not stated (三级)",
                "Tier 2 Grade A (二甲)",
                "Tier 2 Grade B (二乙)",
                "Tier 2, grade not stated (二级)",
                "Tier 1 Grade A (一甲)",
                "Tier 1 Grade B (一乙)",
                "Tier 1, grade not stated (一级)"
              ]
            },
            "default": []
          },
          "experience": {
            "title": "Experience required",
            "enum": [
              "",
              "经验不限",
              "在读学生",
              "应届生",
              "1-3年",
              "3-5年",
              "5-10年",
              "10年以上"
            ],
            "type": "string",
            "description": "Experience level the job asks for. Most fair jobs are aimed at graduates.",
            "default": ""
          },
          "jobType": {
            "title": "Job type",
            "enum": [
              "",
              "全职",
              "校招",
              "实习",
              "兼职"
            ],
            "type": "string",
            "description": "Full-time, campus recruitment, internship or part-time.",
            "default": ""
          },
          "department": {
            "title": "Department or specialty contains",
            "type": "string",
            "description": "Keep jobs whose department, major or title contains this text, for example 内科, 麻醉 or 药学.",
            "default": ""
          },
          "seniority": {
            "title": "Title level",
            "type": "array",
            "description": "Professional title level the job is aimed at.",
            "items": {
              "type": "string",
              "enum": [
                "初级",
                "中级",
                "未定级"
              ],
              "enumTitles": [
                "Junior title (初级)",
                "Intermediate title (中级)",
                "Not graded (未定级)"
              ]
            },
            "default": []
          },
          "minMonthlySalary": {
            "title": "Minimum monthly salary (CNY)",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "Keep jobs whose top monthly salary reaches at least this amount. Jobs with negotiable salary are left out when a salary limit is set."
          },
          "maxMonthlySalary": {
            "title": "Maximum monthly salary (CNY)",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "Keep jobs whose bottom monthly salary does not exceed this amount. Jobs with negotiable salary are left out when a salary limit is set."
          },
          "urgentOnly": {
            "title": "Urgent hiring only",
            "type": "boolean",
            "description": "Keep only jobs the employer marked as urgent.",
            "default": false
          },
          "postedWithinDays": {
            "title": "Posted within days",
            "minimum": 1,
            "maximum": 3650,
            "type": "integer",
            "description": "Keep only listings first published in the last N days. Applies to both jobs and announcements."
          },
          "jobFairs": {
            "title": "Which hiring fairs",
            "enum": [
              "ongoing",
              "upcoming",
              "ended",
              "all"
            ],
            "type": "string",
            "description": "Jobs are read from JobMD online hiring fairs. Ongoing fairs hold the freshest jobs, ended fairs keep their archives.",
            "default": "ongoing"
          },
          "fairIds": {
            "title": "Specific fair IDs",
            "type": "array",
            "description": "Optional numeric JobMD fair IDs (the number in a medical-job-fair address). When set, only these fairs are read.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "announcementStatus": {
            "title": "Announcement status",
            "enum": [
              "open",
              "upcoming",
              "ended",
              "all"
            ],
            "type": "string",
            "description": "Whether the application window is open, not started yet or already closed.",
            "default": "open"
          },
          "announcementType": {
            "title": "Announcement type",
            "enum": [
              "all",
              "hospital",
              "residency"
            ],
            "type": "string",
            "description": "Regular hospital recruitment notices or resident standardized training (规培) notices.",
            "default": "all"
          },
          "employerLabels": {
            "title": "Employer label",
            "type": "array",
            "description": "Keep notices from employers carrying one of these labels.",
            "items": {
              "type": "string",
              "enum": [
                "复旦百强",
                "部队医院",
                "卫健委"
              ],
              "enumTitles": [
                "Fudan top 100 (复旦百强)",
                "Military hospital (部队医院)",
                "Health commission (卫健委)"
              ]
            },
            "default": []
          },
          "includeAnnouncementDetails": {
            "title": "Include full notice text",
            "type": "boolean",
            "description": "Open every announcement to add its full text, applicant count, attachment names and contact email. Slower, one extra request per notice.",
            "default": false
          },
          "onlyNewSinceLastRun": {
            "title": "Only new or changed listings",
            "type": "boolean",
            "description": "Return only listings that are new or changed since the previous run with the same monitor name. Each record then carries a changeType of NEW or UPDATED. Schedule the Actor to build a hiring feed.",
            "default": false
          },
          "monitorScope": {
            "title": "Monitor name",
            "type": "string",
            "description": "A label for this saved search. Use a different name for each filter combination so their histories stay separate.",
            "default": "default"
          },
          "maxItems": {
            "title": "Maximum results",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Stop after this many listings. Raise it once you are happy with the filters.",
            "default": 10
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "JobMD is public and normally answers a direct connection. If it keeps refusing, the Actor switches to a China residential proxy by itself when your plan includes one.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}