The databurger API gives you programmatic access to the training-data pipeline: search and purchase standard datasets, publish video-evaluation tasks, drive labeling jobs, query the scenario library, and read ledger and invoice data. Everything is HTTPS + JSON.
| Item | Value |
|---|---|
| Base URL | https://aidataburger.com/api/v1 |
| Compatibility | https://aidataburger.com/api is equivalent to /api/v1 |
| Encoding | HTTPS, UTF-8 JSON for requests and responses |
| Authentication | Session token sent as Authorization: Bearer <token> |
| Full endpoint list | Machine-readable at /openapi.json (OpenAPI 3) |
buyer / judge).Call POST /login-password with phone and password.
Call GET /me to confirm the token and read account ID, role and balance.
GET /datasets and GET /scenario-tasks are read-only; POST /tasks freezes the task amount from your wallet.
Claim → submit → buyer accepts. Funds reach the judge only after acceptance.
Copy# 1) Sign in curl -X POST "https://aidataburger.com/api/v1/login-password" \ -H "Content-Type: application/json" \ -d '{"phone":"13800000000","password":"********","role":"buyer"}' # Response { "token": "3f9a1c...", "user": { "id": 1, "phone": "13800000000", "role": "buyer", "balance": 4010.0 } } # 2) Verify the token curl "https://aidataburger.com/api/v1/me" -H "Authorization: Bearer $DB_TOKEN"
| Field | Type | Required | Notes |
|---|---|---|---|
phone | string | yes | Phone number |
password | string | yes (password login) | Account password |
code | string | yes (code login) | SMS verification code |
role | string | no | buyer or judge; defaults to judge |
totp_code | string | no | Required when 2FA is enabled (TOTP or backup code) |
Authorization: Bearer <token> on every request. An expired token returns 401 {"detail":"..."}; sign in again.429.buyer; claiming and submitting require judge. Cross-role calls return 403.| Parameter | In | Required | Notes |
|---|---|---|---|
domain | query | no | embodied / compliance / ecommerce / auto / finance / medical |
rating | body | no | Feedback score, integer 1-5 |
comment / note | body | no | Feedback text / extension note |
Copy# Search datasets curl "https://aidataburger.com/api/v1/datasets?domain=medical" # Response (excerpt) [ { "id": 6, "title": "Medical image segmentation set", "domain": "medical", "formats": ["json","coco"], "price": 5990.0, "samples": 1500, "status": "on" } ]
Task lifecycle: open → assigned → submitted → done. Funds settle only on the last step.
| Status | Meaning | Funds |
|---|---|---|
open | Published, waiting to be claimed | Task amount frozen from the buyer wallet on publish |
assigned | Claimed; a rejection returns here with reject_reason | Stays frozen - neither refunded nor paid out |
submitted | Judge submitted, awaiting buyer review | Not yet paid out |
done | Accepted by the buyer | Settled to the judge at this point |
| Parameter | Type | Required | Notes |
|---|---|---|---|
title | string | yes | Task title |
video_url | string | yes | URL of the video to evaluate |
desc | string | no | Task description |
criteria | string[] | no | Scoring dimensions; defaults to the five platform dimensions |
task_id | int | no | Body field for /tasks/evaluate; omit it when using /tasks/{tid}/evaluate |
scores | object | yes | Score per dimension |
notes / flags | string / array | no | Notes and flags |
reason | string | no | Rejection reason; stored in reject_reason for the judge |
GET /config): task price = 8 + 2 × (dimensions − 1), judge payout = price × (1 − 0.25). A five-dimension task is ¥16 billed, ¥12 paid out, ¥4 platform fee. Publishing with insufficient balance returns 400.statustitle, type, payload, assignee_idcontent, scoresdecision (approve / reject), notetype values: video_judge, trajectory, pcd_6dof.
Entity-operation SOP library. Publicly readable.
| Parameter | Type | Default | Notes |
|---|---|---|---|
l1 / l2 | string | empty | Primary / secondary category |
q | string | empty | Keyword matched against title and SOP body |
limit | int | 50 | Page size; values outside 1-200 fall back to 50 |
offset | int | 0 | Offset |
amount must be > 0real_name, id_cardThe "live platform data" block on the homepage calls this endpoint. No authentication required.
Copycurl "https://aidataburger.com/api/v1/metrics/public" # Response { "online": 101, "today": 0, "review": 18.5, "pass": 92.0, "cities": 12, "batches": 4, "updated_at": "2026-10-02T14:41:16.343607" }
The ticket number is generated server-side and returned only after the record is persisted.
| Parameter | Type | Required | Notes |
|---|---|---|---|
kind / target | string | no | Report type and subject |
detail | string | yes | Description, 10-5000 characters |
evidence | string | no | Evidence link |
contact_name / contact | string | no | Contact person and contact details |
agreed | bool | yes | Must be true: consent to the stated handling |
| HTTP | Scenario | Response | What to do |
|---|---|---|---|
| 400 | Business validation failed | {"detail":"insufficient balance..."} | Fix the input or top up first |
| 401 | Missing or expired token | {"detail":"not signed in or session expired"} | Sign in again |
| 403 | Role not allowed | {"detail":"judges only"} | Check the account role |
| 404 | Resource not found | {"detail":"dataset not found"} | Re-query to confirm the ID |
| 422 | Invalid parameter type | {"detail":[{"loc":["body","scores"],...}]} | Check types and required fields |
| 429 | Temporary sign-in lock | {"detail":"too many failed attempts..."} | Wait for the lock to expire |
| 5xx | Server error | {"detail":"Internal Server Error"} | Retry with backoff and contact support |
{"detail":"..."}; validation errors are {"detail":[{"loc":[...],"msg":"..."}]}. API 404s return JSON, not an HTML error page./ledger first.GET /tasks/mine for task status, GET /notifications for in-app notices, GET /projects for project stages. Event push will ship in a later version under a new version number, leaving v1 callers unaffected.databurger or @databurger/sdk package. The samples below run as-is.Copyimport json, urllib.request BASE = "https://aidataburger.com/api/v1" def call(method, path, token=None, body=None): data = json.dumps(body).encode() if body else None req = urllib.request.Request(BASE + path, data=data, method=method) req.add_header("Content-Type", "application/json") if token: req.add_header("Authorization", "Bearer " + token) with urllib.request.urlopen(req, timeout=30) as r: return json.loads(r.read().decode()) # Sign in resp = call("POST", "/login-password", body={ "phone": "13800000000", "password": "********", "role": "buyer"}) token = resp["token"] # Search datasets for ds in call("GET", "/datasets?domain=medical"): print(ds["id"], ds["title"], ds["samples"], ds["price"])
Copyconst BASE = "https://aidataburger.com/api/v1"; async function call(path, { method = "GET", token, body } = {}) { const r = await fetch(BASE + path, { method, headers: { "Content-Type": "application/json", ...(token ? { Authorization: `Bearer ${token}` } : {}), }, body: body ? JSON.stringify(body) : undefined, }); if (!r.ok) throw new Error(`${r.status} ` + await r.text()); return r.json(); } // Public endpoint, no token needed const metrics = await call("/metrics/public"); const { token } = await call("/login-password", { method: "POST", body: { phone: "13800000000", password: "********", role: "buyer" }, }); const me = await call("/me", { token });
Established https://aidataburger.com/api/v1 as the public base URL (/api remains equivalent). Completed the task review chain: /tasks/{tid}/reject, /tasks/{tid}/accept, /tasks/{tid}/claim, with the rule "submitting does not settle; accepting does". Fixed /datasets/mine being shadowed by /datasets/{did} and returning 422. API 404s now return JSON instead of the branded HTML error page.
Opened /scenario-tasks category search; added POST /reports with server-generated ticket numbers.
Dataset search, samples, QC reports and purchase; labeling job creation, claiming, submission and QC decisions.