运行列表
curl --request GET \
--url https://api-datahub.bazhuayu.com/v1/runsimport requests
url = "https://api-datahub.bazhuayu.com/v1/runs"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api-datahub.bazhuayu.com/v1/runs', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));const options = {method: 'GET'};
fetch('https://api-datahub.bazhuayu.com/v1/runs', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api-datahub.bazhuayu.com/v1/runs"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api-datahub.bazhuayu.com/v1/runs")
.asString();<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api-datahub.bazhuayu.com/v1/runs",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}require 'uri'
require 'net/http'
url = URI("https://api-datahub.bazhuayu.com/v1/runs")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_bodyusing RestSharp;
var options = new RestClientOptions("https://api-datahub.bazhuayu.com/v1/runs");
var client = new RestClient(options);
var request = new RestRequest("");
var response = await client.GetAsync(request);
Console.WriteLine("{0}", response.Content);
val client = OkHttpClient()
val request = Request.Builder()
.url("https://api-datahub.bazhuayu.com/v1/runs")
.get()
.build()
val response = client.newCall(request).execute()false{
"items": [
{
"run_id": "<string>",
"namespace": "<string>",
"app_name": "<string>",
"app_version": "<string>",
"build_id": "<string>",
"run_kind": "<string>",
"state": {},
"input": {},
"progress": {
"done": 123,
"total": 123,
"status_text": "<string>"
},
"dataset_id": "<string>",
"partial": true,
"cancel_requested": true,
"triggered_by": "<string>",
"upstream_ref": "<string>",
"created_at": "<string>",
"started_at": "<string>",
"first_started_at": "<string>",
"finished_at": "<string>",
"usage": {
"metrics": {},
"duration_ms": 123
},
"billing": {
"events": [
{}
],
"total": 123,
"currency": "<string>",
"charged": true
},
"error": {
"code": "<string>",
"category": "<string>",
"message": "<string>",
"retryable": true,
"retry_after": 123,
"item_index": 123,
"details": [
{}
]
}
}
],
"pagination": {
"offset": 123,
"limit": 123,
"count": 123,
"total": 123,
"has_more": true
}
}运行与结果
运行列表
列出我发起的全部运行,支持按状态、App、凭证、渠道、种类与时间范围筛选。
GET
/
v1
/
runs
运行列表
curl --request GET \
--url https://api-datahub.bazhuayu.com/v1/runsimport requests
url = "https://api-datahub.bazhuayu.com/v1/runs"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api-datahub.bazhuayu.com/v1/runs', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));const options = {method: 'GET'};
fetch('https://api-datahub.bazhuayu.com/v1/runs', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api-datahub.bazhuayu.com/v1/runs"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api-datahub.bazhuayu.com/v1/runs")
.asString();<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api-datahub.bazhuayu.com/v1/runs",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}require 'uri'
require 'net/http'
url = URI("https://api-datahub.bazhuayu.com/v1/runs")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_bodyusing RestSharp;
var options = new RestClientOptions("https://api-datahub.bazhuayu.com/v1/runs");
var client = new RestClient(options);
var request = new RestRequest("");
var response = await client.GetAsync(request);
Console.WriteLine("{0}", response.Content);
val client = OkHttpClient()
val request = Request.Builder()
.url("https://api-datahub.bazhuayu.com/v1/runs")
.get()
.build()
val response = client.newCall(request).execute()false{
"items": [
{
"run_id": "<string>",
"namespace": "<string>",
"app_name": "<string>",
"app_version": "<string>",
"build_id": "<string>",
"run_kind": "<string>",
"state": {},
"input": {},
"progress": {
"done": 123,
"total": 123,
"status_text": "<string>"
},
"dataset_id": "<string>",
"partial": true,
"cancel_requested": true,
"triggered_by": "<string>",
"upstream_ref": "<string>",
"created_at": "<string>",
"started_at": "<string>",
"first_started_at": "<string>",
"finished_at": "<string>",
"usage": {
"metrics": {},
"duration_ms": 123
},
"billing": {
"events": [
{}
],
"total": 123,
"currency": "<string>",
"charged": true
},
"error": {
"code": "<string>",
"category": "<string>",
"message": "<string>",
"retryable": true,
"retry_after": 123,
"item_index": 123,
"details": [
{}
]
}
}
],
"pagination": {
"offset": 123,
"limit": 123,
"count": 123,
"total": 123,
"has_more": true
}
}端点
GET https://api-datahub.bazhuayu.com/v1/runs
Authorization: Bearer <API Key>)。
我发起的所有运行。归属按账号:用 API Key、SDK、MCP 和网页登录态发起的运行都在同一份列表里。始终按发起时间倒序,pagination.total 是筛选后的总数。
筛选条件可以组合。status 支持逗号分隔多值(OR);credential 是发起凭证的非敏感稳定标识,用来追踪是哪把 Key 在消耗额度;created_from / created_to 按发起时间,起点包含、终点不包含。这套词汇与账单聚合相同,把账单分组的键原样传进来就能钻取到对应的运行。
每一项都带 billing 与 usage,逐条对账不需要再单独查详情。输入回显打码规则与运行详情相同。
请求
查询参数
string
运行状态,逗号分隔多值。词汇表之外的值返回
400。string
发起凭证的稳定标识,取值来自账单聚合
group_by=credential 的 credential。string
App 引用,
<namespace>/<app_name> 或 app_<hex>。string
发起渠道,如
api / sdk / mcp / cli / web。string
发起时间起点,包含,ISO-8601 绝对时间。
string
发起时间终点,不包含。
string
production 生产运行,test 作者调试运行。取值:test / production。integer
默认值:"0"
分页起点。范围 ≥ 0。
integer
默认值:"50"
每页条数,最大 200。范围 1 到 200。
示例请求
curl \
-H "Authorization: Bearer $BAZHUAYU_API_KEY" \
"https://api-datahub.bazhuayu.com/v1/runs?data_app=carol/probe-b&status=SUCCEEDED,PARTIALLY_SUCCEEDED&limit=50"
响应
200 成功
{
"data": {
"items": [
{
"run_id": "run_3b750088f51c",
"namespace": "carol",
"app_name": "probe-b",
"app_version": "0.1.0",
"build_id": null,
"run_kind": "production",
"state": "RUNNING",
"input": {
"product": "p-doc"
},
"progress": {
"done": 0,
"total": null,
"status_text": null
},
"dataset_id": "ds_ec3ba97b8534",
"partial": false,
"cancel_requested": false,
"triggered_by": "api",
"upstream_ref": null,
"created_at": "2026-09-15T07:45:41.876601+00:00",
"started_at": "2026-09-15T07:45:41.883082+00:00",
"first_started_at": "2026-09-15T07:45:41.883082+00:00",
"finished_at": null,
"usage": {
"metrics": {
"records_collected": 0
},
"duration_ms": null
},
"billing": {
"events": [],
"total": 0.0,
"currency": "CNY",
"charged": false
},
"error": null
},
"…"
],
"pagination": {
"offset": 0,
"limit": 2,
"count": 2,
"total": 2,
"has_more": false
}
}
}
data 字段中,其内容如下。
object[]
必填
运行列表,每项字段与运行详情相同(不含
sample_records)。显示 字段
显示 字段
string
必填
—
string
—
string
—
string
—
string
—
string
—
enum
必填
取值:
PENDING / QUEUED / RUNNING / SUCCEEDED / PARTIALLY_SUCCEEDED / FAILED / CANCELLED / EXPIRED。object
—
string
—
boolean
—
boolean
true while cancellation has been requested and the run is still winding down (cooperative stop / partial-result recovery); always false in terminal states (normalized server-side), so consumers need not derive it from state
string
—
string
—
string
—
string
—
string
when the run was first claimed by a worker. Unlike started_at, which is re-stamped on every retry, this one is never rewritten, so it is the anchor for queue time: queued = first_started_at - created_at, and total wall time = finished_at - first_started_at. Deriving queue time from started_at counts the earlier attempts’ execution as queueing. Null only for runs never claimed.
string
—
object
object
错误
| HTTP | code | category | 说明 |
|---|---|---|---|
| 401 | unauthorized | forbidden | 缺少或无效的 API Key。 |
| 400 | invalid-status | invalid_input | status 含有词汇表之外的状态值。 |
{"error": {code, category, message, retryable}},见错误。
客户端库
# 自动翻页遍历
for r in client.iterate_runs(data_app="carol/probe-b", created_from="2026-09-01T00:00:00+08:00"):
print(r["run_id"], r["state"], r["billing"]["total"])
# 需要总数时用分页版本
page = client.list_runs_page(status="QUEUED,RUNNING", limit=50)
print(page["pagination"]["total"])
// 自动翻页遍历
for await (const r of client.iterateRuns({ dataApp: "carol/probe-b", createdFrom: "2026-09-01T00:00:00+08:00" })) {
console.log(r.run_id, r.state, r.billing.total);
}
// 需要总数时用分页版本
const page = await client.listRunsPage({ status: "QUEUED,RUNNING", limit: 50 });
console.log(page.pagination.total);
