🧪 在线测试工具

选择 Token
选择已有的 Token 或手动输入
从您的 Token 列表中选择,或 | 管理 Token
API Token
如果您的 Token 不在上面的列表中,或需要输入完整 Token,请在此输入
接口地址
选择要测试的接口

📖 简介

Dumpipa API 提供了一套完整的 RESTful API,允许开发者通过程序化方式访问平台的所有功能。

✨ 主要特性

  • 🔐 安全的 Token 认证机制
  • 📱 完整的应用信息查询
  • 🚀 自动化任务创建和管理
  • 📊 实时任务进度跟踪
  • ⚡ 高性能的 API 响应
  • 🔄 稳定的版本管理

⚠️ 重要提示

  • 请妥善保管您的 API Token,不要泄露给他人
  • 所有 API 请求都需要携带有效的 Token
  • API 有请求频率限制,请合理使用
  • 建议在生产环境使用 HTTPS

🔐 认证方式

所有 API 请求都需要在请求头中携带 API Token 进行认证。

获取 API Token

API Token 管理 页面创建一个新的 Token。

⚠️ 重要:创建 Token 时,域名必须填写。该 Token 只能在指定域名下使用,提高安全性。

域名绑定

⚠️ 域名必须填写:创建 Token 时,必须绑定域名。绑定域名后,该 Token 只能在指定域名下使用,提高安全性。

⚠️ 域名验证说明

  • 域名必须填写:创建 Token 时,域名是必填项,不能为空
  • 浏览器请求:Token 绑定了域名,请求时必须从该域名发起,否则会返回 403 错误
  • 服务器端调用:服务器端调用(如分站后端调用主站 API)没有 Origin/Referer 头,系统会根据 Token 绑定的域名进行验证
  • 系统自动验证:系统会自动从请求头(Origin 或 Referer)中提取域名进行验证
  • 分站系统配置:分站使用的是系统配置的 Token(`main_site_token`),需要绑定分站域名

认证方式

在每个 API 请求的 Header 中添加以下字段:

HTTP Header
Authorization: Bearer YOUR_API_TOKEN

认证示例

curl
curl -H "Authorization: Bearer YOUR_API_TOKEN" \
  https://www.dumpipa.com/api/auth/me

🚀 快速开始

1. 创建 API Token

访问 API Token 管理 页面,创建一个新的 Token。

2. 测试连接

使用以下命令测试 API 连接:

测试 API 连接
curl -H "Authorization: Bearer YOUR_API_TOKEN" \
  https://www.dumpipa.com/api/auth/me

3. 查询应用信息

查询微信应用信息
curl -H "Authorization: Bearer YOUR_API_TOKEN" \
  "https://www.dumpipa.com/api/apps/com.tencent.xin?country=cn&limit=5"

4. 创建脱壳任务

创建任务示例
curl -X POST \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "bundle_id": "com.tencent.xin",
    "version": "12345678",
    "country": "cn"
  }' \
  https://www.dumpipa.com/api/tasks

📡 API 接口

以下是所有可用的 API 接口列表。

📱 应用接口

GET/api/apps/

通过 Bundle ID 精确匹配获取应用详情

请求参数

参数名类型必填说明
bundle_idString应用的 Bundle ID,例如:com.tencent.xin
countryString地区代码,默认:cn(支持:cn, us, tw, hk, jp 等)
limitNumber返回版本数量,默认:5

响应示例

{
  "ok": 1,
  "msg": "操作成功",
  "app": {
    "trackId": 414478124,
    "trackName": "微信",
    "bundleId": "com.tencent.xin",
    "artistName": "Tencent Technology (Shenzhen) Company Limited",
    "artworkUrl100": "https://...",
    "version": "8.0.46",
    "price": "0.00",
    "formattedPrice": "Free",
    "fileSizeBytes": 369098752,
    "minimumOsVersion": "12.0"
  },
  "versions": [
    {
      "version": "12345678",
      "display_version": "8.0.46",
      "isDumped": true,
      "size": "350.23 MB",
      "alist_url": "https://..."
    }
  ]
}
GET/api/apps/:bundleId

获取指定应用的详细信息和历史版本列表

请求参数

参数名类型必填说明
bundleIdString应用的 Bundle ID,例如:com.tencent.xin
countryString地区代码,默认:cn(支持:cn, us, tw, hk, jp 等)
limitNumber返回版本数量,默认:5

响应示例

{
  "ok": 1,
  "msg": "操作成功",
  "app": {
    "trackId": 414478124,
    "trackName": "微信",
    "bundleId": "com.tencent.xin",
    "artistName": "Tencent Technology (Shenzhen) Company Limited",
    "artworkUrl100": "https://...",
    "version": "8.0.46",
    "price": "0.00",
    "formattedPrice": "Free",
    "fileSizeBytes": 369098752,
    "minimumOsVersion": "12.0"
  },
  "versions": [
    {
      "version": "12345678",
      "display_version": "8.0.46",
      "isDumped": true,
      "size": "350.23 MB",
      "alist_url": "https://..."
    }
  ]
}
GET/api/apps/search

搜索应用

请求参数

参数名类型必填说明
keywordString搜索关键词
countryString地区代码,默认:cn
limitNumber返回数量,默认:10,最大:50

响应示例

{
  "ok": 1,
  "msg": "操作成功",
  "apps": [
    {
      "trackId": 414478124,
      "trackName": "微信",
      "bundleId": "com.tencent.xin",
      "artistName": "Tencent Technology...",
      "artworkUrl100": "https://...",
      "version": "8.0.46"
    }
  ],
  "total": 1
}
GET/api/apps/recommended

获取推荐应用列表(所有已脱壳版本,按最新完成时间排序)

请求参数

参数名类型必填说明
pageNumber页码,默认:1
page_sizeNumber每页数量,默认:20,最大:100
limitNumber每页数量(兼容参数,等同于 page_size),默认:20

响应示例

{
  "ok": 1,
  "msg": "操作成功",
  "apps": [
    {
      "id": 12345,
      "app_name": "微信",
      "bundle_id": "com.tencent.xin",
      "version": "12345678",
      "real_version": "8.0.46",
      "display_version": "8.0.46",
      "size": 369098752,
      "size_formatted": "352.00 MB",
      "file_size": "352.00 MB",
      "country": "cn",
      "icon_url": "https://is1-ssl.mzstatic.com/image/thumb/...",
      "last_dump": "2025-11-07 10:30:00"
    }
  ],
  "pagination": {
    "page": 1,
    "page_size": 20,
    "total": 1000,
    "total_pages": 50
  }
}

ℹ️ 说明:

  • 返回所有已成功脱壳的应用版本
  • 按最新完成时间倒序排列
  • 每个版本都会显示,不进行去重
  • 不包含下载链接字段(需要通过 /api/apps/download-url 接口获取)
GET/api/apps/download-url需要域名验证

获取已脱壳应用的下载链接(自动扣费)

⚠️ 域名验证:此接口需要 Token 绑定域名。分站调用此接口时,Token 必须绑定分站域名,否则会返回 403 错误。

请求参数

参数名类型必填说明
bundle_idString应用的 Bundle ID
versionString版本号(App Store 发行号)
countryString地区代码,默认:cn

响应示例

{
  "ok": 1,
  "msg": "操作成功",
  "download_url": "https://pan.example.com/ipa/xxx.ipa",
  "size": "350.23 MB"
}

错误响应示例

{
  "ok": 0,
  "msg": "IPA文件不存在,请先砸壳"
}
{
  "ok": 0,
  "msg": "金币余额不足"
}

✅ 自动扣费:

该接口已集成自动扣费功能。登录用户调用此接口时会自动扣除相应的金币,无需单独调用扣费接口。

如果金币不足或达到每日免费次数上限,接口会返回相应的错误信息。

💰 扣费接口(可选)

POST/api/vip-coin/perform-action需要域名验证

执行下载或脱壳操作的扣费(可选,现在创建任务和获取下载链接接口已集成自动扣费)

⚠️ 域名验证:此接口需要 Token 绑定域名。分站调用此接口时,Token 必须绑定分站域名,否则会返回 403 错误。

请求体

{
  "action": "dump",
  "bundle_id": "com.tencent.xin",
  "version": "12345678",
  "app_name": "微信",
  "size_mb": 350.5
}

参数说明

参数名类型必填说明
actionString操作类型:download(下载)或 dump(脱壳)
bundle_idString应用的 Bundle ID
versionString版本号(App Store 发行号)
app_nameString应用名称(用于记录)
size_mbNumber应用大小(MB),用于计算金币消耗

响应示例(成功)

{
  "ok": 1,
  "msg": "操作成功",
  "cost": 10.5,
  "is_free": false,
  "message": "砸壳成功,扣除 10.5 金币"
}

错误响应示例(金币不足)

{
  "ok": 0,
  "msg": "金币余额不足"
}

ℹ️ 说明:

  • 现在推荐直接调用创建任务和获取下载链接接口,这些接口已集成自动扣费功能
  • 此接口仍可单独使用,适用于需要先扣费后操作的场景
  • 全站免费模式开启时,扣费接口仍可调用,但不会扣除金币
  • VIP 用户可能有每日免费次数,超出后才需要扣除金币

🚀 任务接口

POST/api/tasks需要域名验证

创建一个新的脱壳任务(自动扣费)

⚠️ 域名验证:此接口需要 Token 绑定域名。分站调用此接口时,Token 必须绑定分站域名,否则会返回 403 错误。

请求体

{
  "bundle_id": "com.tencent.xin",
  "app_name": "微信",
  "version": "878165911",
  "real_version": "8.0.46",
  "country": "cn",
  "icon_url": "https://is1-ssl.mzstatic.com/image/thumb/Purple112/v4/xxx/xxx.png"
  // ⚠️ 注意:size_mb 不能由用户填写传递,系统会自动从缓存或 Apple API 获取
  // ⭐ 注意:device_id 为可选参数,不传递时系统会自动分配可用设备
  // ⭐ app_name 和 icon_url 为可选参数,如果不传递,系统会尝试从缓存自动获取
}

⚠️ 重要提示:

  • size_mb 参数是必填的,但不能由用户填写传递
  • 系统会自动从以下来源获取应用大小(按优先级):
    1. 从应用信息缓存中获取(如果之前查询过该应用)
    2. 从 Apple API 实时获取(如果缓存中没有)
  • 如果缓存和 Apple API 都无法获取应用大小,接口将返回错误
  • 请求体中不应包含 size_mb 字段,系统会自动处理

参数说明

参数名类型必填说明
bundle_idString应用的 Bundle ID
versionString版本号(App Store 发行号)
countryString地区代码,默认:cn
app_nameString应用名称(用于记录)。如果不传递,系统会尝试从缓存自动获取
icon_urlString应用图标URL。如果不传递,系统会尝试从缓存自动获取
real_versionString真实版本号(如 8.0.46),如果已知可以传递
size_mbNumber应用大小(MB),用于计算金币消耗。⚠️ 注意:此参数不能由用户填写传递,系统会自动从缓存或 Apple API 获取。如果缓存和 Apple API 都无法获取,接口将返回错误。
device_idNumber指定设备 ID(可选)。建议不传递此参数,系统会自动分配可用的在线设备。只有在需要指定特定设备时才传递此参数。

响应示例

{
  "ok": 1,
  "msg": "任务创建成功",
  "task_id": 12345,
  "status": "queued"
}

错误响应示例

{
  "ok": 0,
  "msg": "金币余额不足"
}

✅ 自动扣费:

该接口已集成自动扣费功能。登录用户调用此接口时会自动扣除相应的金币,无需单独调用扣费接口。

如果金币不足或达到每日免费次数上限,接口会返回相应的错误信息。

🔧 自动分配设备:

该接口已集成设备自动分配功能。如果未传递 device_id 参数,系统会自动从可用的在线设备中选择一个设备来执行任务。

只有在需要指定特定设备时才需要传递 device_id 参数,一般情况下建议不传递此参数。

GET/api/tasks需要域名验证

获取全站任务列表(需要认证:管理员可查看所有任务,普通用户只能查看自己的任务)

⚠️ 域名验证:此接口需要 Token 绑定域名。分站调用此接口时,Token 必须绑定分站域名,否则会返回 403 错误。

请求参数

参数名类型必填说明
pageNumber页码,默认:1
page_sizeNumber每页数量,默认:50,最大:100
limitNumber每页数量(兼容参数,等同于 page_size),默认:50
include_doneBoolean是否包含已完成的任务,默认:false(只返回 queued 和 running 状态的任务)
only_mineBoolean是否只返回当前用户的任务(管理员也适用),默认:false

响应示例

{
  "ok": 1,
  "msg": "操作成功",
  "tasks": [
    {
      "id": 12345,
      "bundle_id": "com.tencent.xin",
      "app_name": "微信",
      "version": "12345678",
      "real_version": "8.0.46",
      "display_version": "8.0.46",
      "status": "done",
      "progress": 100,
      "country": "cn",
      "icon_url": "https://...",
      "size": 369098752,
      "size_formatted": "352.00 MB",
      "file_size": "352.00 MB",
      "created_at": "2025-11-07 10:30:00",
      "updated_at": "2025-11-07 10:45:00"
    }
  ],
  "total": 1,
  "page": 1,
  "page_size": 50
}

ℹ️ 说明:

  • 管理员可以查看所有任务,普通用户只能查看自己的任务
  • include_done=false 时,只返回 queuedrunning 状态的任务
  • include_done=true 时,返回所有状态的任务
  • 任务按状态优先级排序:running → done → queued → 其他
  • ⚠️ 安全提示:为了安全考虑,全站任务列表接口不会返回下载链接alist_url 字段)。如需获取下载链接,请使用任务详情接口 GET /api/tasks/:id(仅限查看自己的任务)或下载链接接口 GET /api/apps/download-url
GET/api/tasks/my

获取当前用户的所有任务列表(需要认证)

请求参数

参数名类型必填说明
pageNumber页码,默认:1
page_sizeNumber每页数量,默认:10,最大:100

响应示例

{
  "ok": 1,
  "msg": "操作成功",
  "tasks": [
    {
      "id": 12345,
      "bundle_id": "com.tencent.xin",
      "app_name": "微信",
      "version": "12345678",
      "real_version": "8.0.46",
      "display_version": "8.0.46",
      "status": "done",
      "progress": 100,
      "country": "cn",
      "icon_url": "https://...",
      "size": 369098752,
      "size_formatted": "352.00 MB",
      "file_size": "352.00 MB",
      "alist_url": "https://...",
      "created_at": "2025-11-07 10:30:00",
      "updated_at": "2025-11-07 10:45:00"
    }
  ],
  "total": 1,
  "page": 1,
  "page_size": 10
}

ℹ️ 说明:

  • 此接口只返回当前登录用户创建的任务
  • 包含所有状态的任务(queued、running、done、error)
  • 任务按创建时间倒序排列(最新的在前)
  • 注意:此接口会返回下载链接(alist_url 字段),因为用户有权查看自己任务的下载链接
GET/api/tasks/:id

获取指定任务的详细信息

请求参数

参数名类型必填说明
idNumber任务 ID

响应示例

{
  "ok": 1,
  "msg": "操作成功",
  "task": {
    "id": 12345,
    "bundle_id": "com.tencent.xin",
    "app_name": "微信",
    "version": "12345678",
    "real_version": "8.0.46",
    "country": "cn",
    "status": "done",
    "progress": 100,
    "status_message": "任务完成",
    "alist_url": "https://...",
    "size": 369098752,
    "device_id": 1,
    "created_at": "2025-11-07 10:30:00",
    "updated_at": "2025-11-07 10:45:00"
  }
}

👤 用户接口

GET/api/auth/me

获取当前用户信息

响应示例

{
  "ok": 1,
  "msg": "操作成功",
  "user": {
    "id": 1,
    "username": "user123",
    "email": "user@example.com",
    "coins": 100.00,
    "is_vip": true,
    "vip_level": 1,
    "vip_expires_at": "2025-12-31 23:59:59",
    "is_admin": false,
    "created_at": "2025-01-01 10:00:00"
  }
}

❌ 错误码

当 API 请求失败时,响应中会包含错误信息。

错误响应格式

{
  "ok": 0,
  "msg": "Token 无效或已过期"
}

常见错误码

HTTP 状态码说明解决方案
400请求参数错误检查请求参数是否正确
401未认证或 Token 无效检查 Token 是否正确,是否已过期
403权限不足或未扣费检查账户权限或先调用扣费接口
400金币余额不足充值金币后再试,或等待免费次数恢复
404资源不存在检查请求的资源 ID 是否正确,或先创建脱壳任务
429请求过于频繁降低请求频率,等待后重试
500服务器内部错误稍后重试,如持续出现请联系客服

⏱️ 限流说明

为保证服务稳定,API 实施了请求频率限制。

限流规则

  • 普通用户:每分钟最多 60 次请求
  • VIP 用户:每分钟最多 120 次请求
  • 创建任务:每小时最多 50 次

响应头

每个 API 响应都会包含以下头部信息:

X-RateLimit-Limit: 60        # 每分钟请求限制
X-RateLimit-Remaining: 45    # 剩余请求次数
X-RateLimit-Reset: 1699999999 # 限制重置时间(Unix 时间戳)

超过限流

当超过请求限制时,API 会返回 HTTP 429 状态码,并在响应头中包含 Retry-After 字段,表示多少秒后可以重试。

💻 示例代码

Python 示例

Python
import requests

API_TOKEN = "YOUR_API_TOKEN"
BASE_URL = "https://www.dumpipa.com/api"

headers = {
    "Authorization": f"Bearer {API_TOKEN}",
    "Content-Type": "application/json"
}

# 获取应用信息
def get_app_info(bundle_id, country="cn"):
    url = f"{BASE_URL}/apps/{bundle_id}"
    params = {"country": country, "limit": 5}
    response = requests.get(url, headers=headers, params=params)
    return response.json()

# 创建脱壳任务
def create_task(bundle_id, version, country="cn"):
    url = f"{BASE_URL}/tasks"
    data = {
        "bundle_id": bundle_id,
        "version": version,
        "country": country
    }
    response = requests.post(url, headers=headers, json=data)
    return response.json()

# 获取任务列表
def get_tasks(page=1, limit=10):
    url = f"{BASE_URL}/tasks"
    params = {"page": page, "limit": limit}
    response = requests.get(url, headers=headers, params=params)
    return response.json()

# 示例使用
if __name__ == "__main__":
    # 获取微信信息
    app_info = get_app_info("com.tencent.xin", "cn")
    print(f"应用名称: {app_info['app']['trackName']}")
    
    # 创建任务
    task = create_task("com.tencent.xin", "12345678", "cn")
    print(f"任务ID: {task['task_id']}")
    
    # 获取任务列表
    tasks = get_tasks()
    print(f"任务数量: {tasks['total']}")

JavaScript (Node.js) 示例

JavaScript
const axios = require('axios');

const API_TOKEN = 'YOUR_API_TOKEN';
const BASE_URL = 'https://www.dumpipa.com/api';

const apiClient = axios.create({
  baseURL: BASE_URL,
  headers: {
    'Authorization': `Bearer ${API_TOKEN}`,
    'Content-Type': 'application/json'
  }
});

// 获取应用信息
async function getAppInfo(bundleId, country = 'cn') {
  try {
    const response = await apiClient.get(`/apps/${bundleId}`, {
      params: { country, limit: 5 }
    });
    return response.data;
  } catch (error) {
    console.error('获取应用信息失败:', error.response?.data || error.message);
    throw error;
  }
}

// 创建脱壳任务
async function createTask(bundleId, version, country = 'cn') {
  try {
    const response = await apiClient.post('/tasks', {
      bundle_id: bundleId,
      version: version,
      country: country
    });
    return response.data;
  } catch (error) {
    console.error('创建任务失败:', error.response?.data || error.message);
    throw error;
  }
}

// 获取任务列表
async function getTasks(page = 1, limit = 10) {
  try {
    const response = await apiClient.get('/tasks', {
      params: { page, limit }
    });
    return response.data;
  } catch (error) {
    console.error('获取任务列表失败:', error.response?.data || error.message);
    throw error;
  }
}

// 示例使用
(async () => {
  try {
    // 获取微信信息
    const appInfo = await getAppInfo('com.tencent.xin', 'cn');
    console.log('应用名称:', appInfo.app.trackName);
    
    // 创建任务
    const task = await createTask('com.tencent.xin', '12345678', 'cn');
    console.log('任务ID:', task.task_id);
    
    // 获取任务列表
    const tasks = await getTasks();
    console.log('任务数量:', tasks.total);
  } catch (error) {
    console.error('操作失败:', error);
  }
})();

cURL 示例

cURL
# 获取应用信息
curl -H "Authorization: Bearer YOUR_API_TOKEN" \
  "https://www.dumpipa.com/api/apps/com.tencent.xin?country=cn&limit=5"

# 创建脱壳任务
curl -X POST \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "bundle_id": "com.tencent.xin",
    "version": "12345678",
    "country": "cn"
  }' \
  https://www.dumpipa.com/api/tasks

# 获取任务列表
curl -H "Authorization: Bearer YOUR_API_TOKEN" \
  "https://www.dumpipa.com/api/tasks?page=1&limit=10"

# 获取任务详情
curl -H "Authorization: Bearer YOUR_API_TOKEN" \
  https://www.dumpipa.com/api/tasks/12345