Dataset Workbench
Complete the upload (assemble + create the campaign)
Verify every file's chunk-list root, splice the chunks into files, validate the tree as a LeRobot dataset, create an owner-scoped campaign over it (provenance `source=upload`), and start health immediately. Video files are OPTIONAL, health runs on action data alone (episode previews/clips 404 until videos exist). All required (non-video) files must be fully received, else 409, and NOTE this endpoint's 409 `detail` is an OBJECT ({ error, missing: {path: [chunk indices]} }), not a string. Idempotent: repeating returns the campaign already created. DELETE /api/workbench/uploads/{upload_id} cleans up an abandoned upload (a completed campaign's dataset lives on independently).
POST
Complete the upload (assemble + create the campaign)
Authorizations
Either a Supabase user access token (from a password login, or the passwordless magic-link flow) or a long-lived forge_sk_… API key. Both are sent as Authorization: Bearer <value> and resolve to the same owner, so every endpoint accepts either. Session tokens expire in ~1h; API keys do not expire and are the credential for MCP clients, CI, and partner integrations.
Path Parameters
Body
application/json
Optional display name for the created campaign.
Response
The campaign created over the uploaded dataset (health already computing).
Example:
"camp_1f2e3d4c5b6a"

