{
  "openapi": "3.0.1",
  "info": {
    "title": "Ximalaya Scraper — Audiobooks, Podcasts, Episodes & Anchors",
    "description": "Ximalaya (喜马拉雅) scraper: export albums (audiobooks, podcasts, courses, radio dramas), episodes and anchors by keyword, category or URL — plays, subscribers, rating, comments, tags, price and VIP flags, dates, episode likes and shares, anchor followers. All 28 categories. No login.",
    "version": "1.0",
    "x-build-id": "M81umaRhWCw8Bcfld"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/logiover~ximalaya-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-logiover-ximalaya-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/logiover~ximalaya-scraper/runs": {
      "post": {
        "operationId": "runs-sync-logiover-ximalaya-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/logiover~ximalaya-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-logiover-ximalaya-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": {
          "searchKeywords": {
            "title": "Search keywords",
            "type": "array",
            "description": "Words to search on Ximalaya, in Chinese or English, e.g. \"三国演义\", \"郭德纲\", \"盗墓笔记\", \"英语听力\", \"睡前故事\", \"商业思维\". Each keyword is one Ximalaya search (what it returns is set by \"Search for\" below). Leave keywords, categories and URLs all empty to export the whole catalogue category by category.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "searchType": {
            "title": "Search for",
            "enum": [
              "album",
              "track",
              "anchor"
            ],
            "type": "string",
            "description": "What the keyword search returns: albums (专辑 — audiobooks, podcasts, courses, radio dramas), single episodes (声音) or anchors (主播 — creators and hosts).",
            "default": "album"
          },
          "searchSort": {
            "title": "Search order",
            "enum": [
              "relevance",
              "plays",
              "newest"
            ],
            "type": "string",
            "description": "Ximalaya's order for search results. One search order holds at most 3,000 results; when you ask for more, the scraper continues with the other two orders and then the same search per category, skipping repeats.",
            "default": "relevance"
          },
          "categories": {
            "title": "Categories",
            "uniqueItems": true,
            "type": "array",
            "description": "Ximalaya categories to browse (albums). Each category is read in the order chosen below, then subcategory by subcategory and in the other orders until \"Max results\" is reached — one Ximalaya list stops at 2,500 albums, so big categories are split automatically.",
            "items": {
              "type": "string",
              "enum": [
                "youshengshu",
                "yinyue",
                "xiangsheng",
                "duanzi",
                "qinggan",
                "yule",
                "yingshi",
                "ertong",
                "lishi",
                "shangye",
                "renwen",
                "gerenchengzhang",
                "keji",
                "waiyu",
                "ertongjiaoyu",
                "toutiao",
                "erciyuan",
                "xiqu",
                "lvyou",
                "jiankang",
                "shishang",
                "guangbojv",
                "yueyu",
                "falvketang",
                "jiaoyupeixun",
                "pinpai",
                "qiche",
                "minnanyu"
              ],
              "enumTitles": [
                "有声书 · Audiobooks",
                "音乐 · Music",
                "相声评书 · Crosstalk & storytelling",
                "段子 · Jokes & sketches",
                "情感生活 · Emotions & life stories",
                "娱乐 · Entertainment",
                "影视 · Film & TV",
                "儿童 · Kids",
                "历史 · History",
                "商业财经 · Business & finance",
                "人文 · Humanities",
                "个人成长 · Personal growth",
                "IT科技 · IT & technology",
                "外语 · Foreign languages",
                "少儿素养 · Kids education",
                "头条 · News",
                "二次元 · Anime & ACG",
                "戏曲 · Chinese opera",
                "旅游 · Travel",
                "健康养生 · Health",
                "时尚生活 · Lifestyle & fashion",
                "广播剧 · Radio drama",
                "粤语 · Cantonese",
                "法律课堂 · Law",
                "教育培训 · Education & exams",
                "品牌之声 · Brand channels",
                "汽车 · Cars",
                "闽南语 · Hokkien (Minnan)"
              ]
            },
            "default": []
          },
          "subcategories": {
            "title": "Subcategories",
            "type": "array",
            "description": "Optional: only these subcategories of the categories above, by their Chinese name or the code in Ximalaya's URL, e.g. \"文学\" or \"wenxue\" (www.ximalaya.com/youshengshu/wenxue/), \"悬疑\", \"相声\", \"英语\". Empty = the whole category.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "categorySort": {
            "title": "Category order",
            "enum": [
              "popular",
              "recommended",
              "updated"
            ],
            "type": "string",
            "description": "Order of the category lists: most played (播放最多), Ximalaya's recommended mix (综合排序) or recently updated (最近更新).",
            "default": "popular"
          },
          "startUrls": {
            "title": "Ximalaya URLs or ids",
            "type": "array",
            "description": "Album pages (https://www.ximalaya.com/album/3475911), episode pages (/sound/118368677), anchor pages (/zhubo/35878101), category pages (/youshengshu/wenxue/), search pages (/so/三国) — www or m.ximalaya.com. A bare number is read as an album id; use \"track:118368677\" or \"anchor:35878101\" for the others.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "includeDetails": {
            "title": "Complete every row from its own page",
            "type": "boolean",
            "description": "On: every album is completed from its album page (full description, tags, subscribers, rating, comment count, price, VIP flags, creation and update dates, the anchor's followers, albums and episodes), every anchor from the profile (location, gender, signature, counts) and every episode found by search from the episode's own info (free or paid, preview length, video flag). Off: only what the list itself shows — about five times faster for category lists, but category-list rows then carry only title, cover, anchor, plays, episodes, paid, finished and badge.",
            "default": true
          },
          "includeTracks": {
            "title": "Also export every album's episodes",
            "type": "boolean",
            "description": "Adds one row per episode (声音) of every album the run saves: title, duration, plays, likes, comments, shares, publication time, position in the album, free or paid. Episode rows count towards \"Max results\".",
            "default": false
          },
          "maxTracksPerAlbum": {
            "title": "Max episodes per album",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "With episodes on: at most this many episodes per album (0 = all of them).",
            "default": 0
          },
          "trackOrder": {
            "title": "Episode order",
            "enum": [
              "default",
              "reverse"
            ],
            "type": "string",
            "description": "With episodes on: the album's own order (as the album page lists them) or the reverse — e.g. to get the latest episodes first from an album that lists the oldest first.",
            "default": "default"
          },
          "includeAnchorAlbums": {
            "title": "Export the albums of pasted anchors",
            "type": "boolean",
            "description": "For anchor pages in \"Ximalaya URLs or ids\": also save every album of the anchor (completed like any other album). Off = only the anchor's profile row.",
            "default": true
          },
          "maxItems": {
            "title": "Max results",
            "minimum": 0,
            "maximum": 10000000,
            "type": "integer",
            "description": "Maximum number of rows (albums + episodes + anchors) to save in total. 0 = no limit. Each row is one result on the bill.",
            "default": 1000
          },
          "maxConcurrency": {
            "title": "Parallel requests",
            "minimum": 1,
            "maximum": 40,
            "type": "integer",
            "description": "How many requests to Ximalaya run at the same time. The default suits Ximalaya well; lower it if you see many retries in the log.",
            "default": 20
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Not needed: Ximalaya answers the Apify platform directly, and if it ever stops answering, the scraper switches to Apify datacenter and then a capped residential route on its own. Set a proxy here only if you want every request to go through it.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}