Download OpenAPI specification:
Builder forge — mints a platform-unique, deterministically generated treasure creature bound to a user-authored workflow.
POST /forge/commit { workflow_id }.GeneVector
from the workflow_id, and persists it atomically.Treasure (gene vector + hash + id).A re-call with the same workflow_id returns the existing treasure
and does not charge again (already_bound: true).
402 Insufficient forge credits — caller is out of U. Frontend
triggers inline Paddle top-up; no redirect to /billing.404 Workflow not found — includes the case of a workflow the
caller does not own (leak-resistant).422 Invalid workflow_id — malformed id (not uw_[a-f0-9]{24}).503 Gene-space exhausted — mint could not find a unique gene
after the bounded re-roll budget. Retry later.frontend-web/src/lib/treasure/genes.ts — canonical GeneVector.backend-api/app/services/treasure_genes.py — Python mirror.backend-api/app/services/forge_billing.py — 1U billing seam
(Worktree C enriches the body).Treasure minting + per-forge billing. Covers the 1U commit debit + the pre-flight balance quote consumed by the builder.
Mints a deterministic treasure for the given workflow. Idempotent
on workflow_id — double-calls return the same treasure and are
never double-charged.
| workflowId required | string^uw_[a-f0-9]{24}$ |
{- "workflowId": "uw_0123456789abcdef01234567"
}{- "treasureId": "string",
- "workflowId": "string",
- "geneHash": "string",
- "geneVector": {
- "seed": "string",
- "bodyShape": "round",
- "eyeSize": "dot",
- "pose": "idle",
- "palette": "lavender",
- "accessory": "none"
}, - "mintedAt": "2019-08-24T14:15:22Z",
- "boundAt": "2019-08-24T14:15:22Z",
- "alreadyBound": true
}