Save the sample (selected source episodes)
Save the set of SOURCE episodes the transforms operate on (new-trajectory mines pairs whose heads come from them). De-duplicated and order-preserving; negative indices are dropped; a whole-dataset selection is legitimate. Advances the campaign to stage transform.
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
Source episode indices (at least one after cleaning).
Response
The updated campaign
A Dataset Workbench campaign (owner view): one walk of the augmentation spine over one source dataset. stage is the FURTHEST stage reached and never rolls back. Internal bookkeeping (owner, dataset/cache locations) is never surfaced. The set of already-billed episodes is tracked server-side but not exposed here, the deliver response reports how many episodes each delivery billed.
"camp_1f2e3d4c5b6a"
Display name, the repo's last path segment, the sample's label, or the upload's campaign_name.
The source dataset: a Hugging Face repo id, or the upload's name for uploaded datasets.
The augmentation engine (embodiment + pipeline) this campaign runs on.
Furthest stage reached on the spine (monotonic).
source, sample, transform, run, deliver Episode count of the SOURCE dataset.
The dataset health report once computed (null before): episode count, detected classes ({class: count}), the active target_class + class_column, arm_split, release stats, the eligible_pool, exclusions, and a motion-envelope p99_summary.
Health lifecycle. failed carries no report; re-POST …/health to retry.
idle, computing, ready, failed The saved sample (null until POST …/sample): the selected SOURCE episodes the transforms operate on.
The saved transformation plan (null until POST …/plan).
Run job ids, oldest first. Poll each at GET /api/aug/jobs/{job_id}.
Per-episode human verdicts, keyed by episode name: { verdict: confirm|overrule, by, at, note? }. Unreviewed episodes trust the machine gate verdict.
Delivery state (null until POST …/deliver): status walks exporting → exported (→ publishing → published when a target_repo was given) or failed (with error), plus export_dir, count, the exported episodes, per-families counts, a format_note, and timestamps.
sample, upload, or remote_uri (imported from S3/GCS/Azure/https via source_uri); absent for a plain Hugging Face repo campaign.
Where the dataset came from, e.g. { source: sample, sample_id, opened_utc } or { source: upload, upload_id, manifest_sha, files, layout_notes, ingested_utc }.
Per-campaign target-class override chosen via POST …/target (absent = the engine default).
Computed render spend across the campaign's runs.
Cumulative per-head accept/reject yield across the campaign's prior runs ({head episode: {accepted, rejected}}), the learned-yield seed a top-up run carries forward.

