{
  "openapi": "3.1.0",
  "info": {
    "title": "Layer REST API",
    "description": "REST API for AI-powered game asset creation on the Layer platform.\n\n## Authentication\n\nEvery endpoint requires a Bearer token in the `Authorization` header, except the ones a\nclient reads while deciding whether to integrate at all: `openapi.json`, `versioning`, and\nthe interactive docs.\n\n```\nAuthorization: Bearer <token>\n```\n\n### Personal Access Tokens (recommended)\n\nThe simplest way to authenticate is with a Personal Access Token (PAT):\n\n1. Log in to [layer.ai](https://layer.ai/login)\n2. Go to **Settings > Personal Access Tokens**\n3. Click **Create Token**, give it a name, and copy the token value\n4. Pass it as `Authorization: Bearer <your-pat-token>`\n\nPATs are long-lived and ideal for scripts, CI pipelines, and partner integrations.\n\n### OAuth2 (browser-based)\n\nFor browser-based applications, use the Auth0 OAuth2 flow. Redirect users to\nthe Layer login page, exchange the authorization code for a JWT access token,\nand use it as `Authorization: Bearer <jwt>`.\n\n## Creative Units\n\nGenerations consume Creative Units (CUs). Use the estimate endpoints to check\ncost before executing. Check workspace balance via `GET /v1/workspaces/{id}`.\n\n## Pagination\n\nList endpoints support cursor-based pagination via `limit` and `cursor` query\nparameters. Responses include a `pagination` object with `next_cursor`,\n`has_more_results`, and `total_count`. Cursors are opaque — do not parse or\nconstruct them.\n\n## Errors\n\nAll errors return [RFC 9457 Problem Details](https://www.rfc-editor.org/rfc/rfc9457) with\ncontent type `application/problem+json`:\n\n```json\n{\n  \"type\": \"https://api.layer.ai/errors/ERROR_CODE\",\n  \"title\": \"Human-readable title\",\n  \"status\": 404,\n  \"detail\": \"Detailed description of what went wrong.\",\n  \"error_code\": \"ERROR_CODE\"\n}\n```\n\nBranch on `error_code` (or `type`), not on `title` or `detail`: those are prose and may be\nreworded. `type` is a stable opaque identifier whose last path segment is `error_code`; it\nis not a live URL and does not resolve to a page. Documentation lives at\n[layer.ai/docs](https://layer.ai/docs).\n\nCommon status codes: `401` (unauthenticated), `403` (forbidden), `404` (not found),\n`422` (invalid input), `429` (rate limited).\n\nCreative Units are not checked when a run is submitted, so an underfunded workspace\ndoes not fail at submission time. Call the estimate endpoint and read\n`has_sufficient_creative_units` to check up front; otherwise the run is accepted and\nthen reaches a terminal `FAILED` state with `error_code` `INSUFFICIENT_BALANCE`.\n\nGuardrails and provider content policies are also judged after submission, so a refused\ngeneration is never a `4xx`: the run reaches `FAILED` with a refusal `error_code`, and its\n`refusal` object (`refusals` on a workflow run) names the guardrail that blocked it and its category.\n\n## Idempotency\n\nA lost response is indistinguishable from a request that never arrived, and retrying a\ngeneration spends Creative Units again. Send an idempotency key on any unsafe request so a\nretry returns the first result instead of executing again, within the limits below:\n\n```\nIdempotency-Key: 7c9e6679-7425-40de-944b-e07fc1f90ae7\n```\n\nThe first request with a given key executes. A later request with the same key returns\nthat first response, with `Idempotent-Replayed: true` added, without executing anything,\nfor as long as the rules below keep it.\nAny opaque string up to 255 characters works; a UUID per logical operation is the usual\nchoice. Keys are scoped to your credential's owner.\n\nA retry is the same request: same method, same path, same query parameters (in any order),\nand a byte-identical body. The body is compared as raw bytes, not as parsed JSON, so keep\nthe bytes you sent and resend them; re-serializing the same object can change whitespace or\nkey order and turn a retry into a different request.\n\nWhat a retry with the same key gets depends on what the server did with the first request,\nwhich a lost response does not tell you. Retry with the same key and the server answers\nfrom whichever case applies:\n\n- **It succeeded (`2xx`).** The response is stored and a retry replays it for 24 hours,\n  even if the original response never reached you. Storing is best effort: a response too\n  large to store, or one the store could not accept, is covered only by the 120-second\n  claim below.\n- **It was rejected (`4xx`).** Nothing was spent and the key is released, so a corrected\n  retry executes.\n- **It is still running, or it failed (`5xx`).** When the first request is received, its key\n  is claimed for 120 seconds, and the claim is not extended while the request runs. A retry\n  inside that window returns `409` `IDEMPOTENT_REQUEST_IN_PROGRESS` with `Retry-After`;\n  wait that long and try again. A `5xx` may already have spent Creative Units, so its key\n  is neither stored nor released and stays claimed until the 120 seconds run out.\n\nA `409` therefore means the outcome is not known yet: the original may still be running, or\nit may have failed after spending. Keep retrying through `409` with the same key to get the\nstored response once the original succeeds. Once the 120 seconds run out without a stored\nresponse, the next retry with the same key executes as a new request: it spends again, and\nit may run alongside an original that is still in flight. Decide before that point whether\na second run is acceptable.\n\nIdempotency is best effort throughout, not only for stored responses. If the key store\ncannot be reached when a request arrives, the request runs without protection, and a\nclaim or stored response can disappear before its time is up. An earlier `409` or replay\ntherefore does not guarantee that a later retry cannot execute again.\n\nA different request under a key that is still claimed or stored returns `422`\n`IDEMPOTENCY_KEY_REUSED`. The key covers the request it was first used with, so this is a\nclient bug rather than a retry, and returning some other request's result would be worse\nthan an error.\n\nKeys on safe methods are ignored: `GET` is already repeatable.\n\n## Rate limits\n\nQuotas are per user and apply to the compute operations that spend Creative Units:\nstarting a generation and starting a training run.\n\nEvery response describes the quotas in force, including one that rejected you for having\nno credential — a client that has not authenticated yet is the one that most needs to know\nwhat budget it will be planning against:\n\n```\nRateLimit-Policy: \"generation\";q=60;w=60, \"generation-video\";q=30;w=60, \"training\";q=10;w=3600\n```\n\nA quota named after a modality narrows the one it extends: a video generation spends from\nboth `generation` and `generation-video`, so the tighter of the two decides.\n\nOnce you are authenticated, responses from the operations a quota governs also report what\nis left of it:\n\n```\nRateLimit: \"generation\";r=57;t=3\nRateLimit-Limit: 60\nRateLimit-Remaining: 57\nRateLimit-Reset: 3\n```\n\n`RateLimit-Policy` and `RateLimit` are the standard structured fields — `q` is the quota,\n`w` the window in seconds, `r` the units left, `t` the seconds until the quota is fully\nrestored. The `RateLimit-Limit`/`-Remaining`/`-Reset` triple repeats the tightest quota for\nclients that parse the older convention.\n\nExceeding a quota returns `429` with a `Retry-After` header; wait that many seconds before\nretrying.\n## Versioning and deprecation\n\nThe API version is the first path segment. `/v1` and `/v2` are both stable and served\ntogether; v1 routes are unaffected by v2.\n\n`/v2` is a complete surface — every resource is reachable under it, so a client can pin\n`/v2` and never fall back. It differs from v1 in the generation surface: inference runs\ntake reference sets — trained subjects, styles, and characters — alongside a base model,\nand the v1 `/models` catalog is split into `/base-models` and `/reference-sets`.\n\nEvery other resource is the same endpoint under both prefixes: identical handler, request\nbody, and response shape. Their v2 operation ids carry a `V2` suffix so generated clients\nget one symbol per published path.\n\nBackward-compatible additions — a new endpoint, a new optional request field, a new\nresponse field — ship into an existing version without notice. Anything that could break a\nclient gets a new version instead.\n\nNothing is withdrawn without notice. When an operation or a version is deprecated:\n\n1. It is marked `deprecated: true` in `openapi.json`.\n2. Every response from it carries `Deprecation`\n   ([RFC 9745](https://www.rfc-editor.org/rfc/rfc9745)) with the date it was deprecated,\n   `Sunset` ([RFC 8594](https://www.rfc-editor.org/rfc/rfc8594)) with the earliest date it\n   may stop working, and a `Link` header with `rel=\"deprecation\"` to this policy and\n   `rel=\"successor-version\"` to its replacement.\n3. It keeps working until the sunset date, which is at least 90 days after the\n   deprecation date.\n\nPoll `openapi.json` or watch for `Deprecation` on your own traffic — both carry the same\ntimeline.\n## Webhooks\n\nLong-running requests can push their result to you instead of being polled for it. Pass a\n`webhook` object on `POST /v2/.../inferences`, `POST /v1/.../training-runs`,\n`POST /v1/.../scores`, or `POST /v1/.../workflows/{workflow_id}/runs`\n(`POST /v1/.../inferences` is poll-only — move to `/v2` to be pushed results):\n\n```json\n{\n  \"webhook\": {\n    \"url\": \"https://example.com/hooks/layer\",\n    \"metadata\": {\"job\": \"hero-splash-42\"}\n  }\n}\n```\n\nEvery response to those endpoints carries `expected_events` — the deliveries that request will\nproduce. Wait for those and no others: a generation in a workspace with automatic scoring rules\nproduces a second, separate event for its scores, and one without produces nothing further.\n\n### The payload\n\nEvery delivery has the same envelope, and `data` is exactly what the matching `GET` endpoint\nreturns for that job — no follow-up request is needed.\n\n```json\n{\n  \"id\": \"evt_7c9e6679…\",\n  \"type\": \"inference.completed\",\n  \"created_at\": \"2026-08-25T09:41:02Z\",\n  \"data\": { \"inference_id\": \"…\", \"status\": \"complete\", \"outputs\": [ … ] },\n  \"metadata\": {\"job\": \"hero-splash-42\"}\n}\n```\n\n`data` only ever gains fields. Ignore ones you do not recognise rather than rejecting the body.\n\n### Verifying a delivery\n\nDeliveries carry [Standard Webhooks](https://www.standardwebhooks.com) headers, so any\nStandard Webhooks library verifies them with no code of your own:\n\n- `webhook-id` — the event id, stable across retries\n- `webhook-timestamp` — unix seconds when the attempt was signed\n- `webhook-signature` — one or more space-delimited `v1,<base64>` signatures\n\nVerifying by hand: HMAC-SHA256 over `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed by the\nbase64-decoded secret (without its `whsec_` prefix), compared in constant time. Sign the **raw\nrequest body** — parsing and re-serializing produces different bytes and will not verify.\n\nMore than one signature means a rotation is in its grace window; a delivery is authentic if\n**any** signature matches. Read the secret from `GET /v1/workspaces/{workspace_id}/webhook-secret`\nand rotate it with `POST /v1/workspaces/{workspace_id}/webhook-secret/rotate`.\n\nReject deliveries whose `webhook-timestamp` is far from now — a few minutes' tolerance — so a\ncaptured delivery cannot be replayed at you later.\n\n### Responding\n\nAnswer with any 2xx within **10 seconds**. The body is ignored. Acknowledge first and do your\nwork afterwards; a receiver that finishes its processing before answering will time out.\n\n- **Any non-2xx, or no response** — retried.\n- **`429`** — retried, honouring `Retry-After` (in seconds) where it asks for longer.\n- **`410 Gone`** — delivery stops permanently. This is how you retire an endpoint.\n- **Redirects are not followed.** A `3xx` counts as a failure.\n\n### Retries and duplicates\n\nFive attempts over roughly an hour: immediately, then after ~10s, ~1m, ~10m and ~45m. If they\nare all exhausted, nothing is lost — the job's `GET` endpoint returns the same body for as long\nas the job exists, which is what makes a short retry window safe.\n\nDelivery is **at-least-once and unordered**. Deduplicate on `webhook-id`, which does not change\nbetween attempts of the same event, and use `created_at` to order events for one job. In\nparticular `inference.completed` and its `scoring_run.completed` can arrive in either order.\n\nEvery attempt is recorded on the job itself: `GET` the run and read its `webhook` block for the\nattempt count, the receiver's last status code, and the last error.\n\n### Before you go live\n\n`POST /v1/workspaces/{workspace_id}/webhook-tests` sends a signed sample to any URL and tells\nyou synchronously what came back — reachability, latency, status code. It costs nothing and\ncreates no run, so it is the cheapest way to check a tunnel or a signature check.\n\nCallback URLs must be public HTTPS endpoints. `http://`, private addresses and `localhost` are\nrejected when the request is submitted, so use a tunnel while developing.\n",
    "version": "1.0.0"
  },
  "servers": [
    {
      "url": "https://api.app.layer.ai/api",
      "description": "Layer API"
    }
  ],
  "paths": {
    "/v1/workspaces": {
      "get": {
        "tags": [
          "Workspaces"
        ],
        "summary": "List workspaces",
        "description": "List all workspaces the authenticated user belongs to, with Creative Units balance details.",
        "operationId": "listWorkspaces",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 100,
              "minimum": 1,
              "description": "Maximum number of results to return.",
              "default": 20,
              "title": "Limit"
            },
            "description": "Maximum number of results to return."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Cursor from a previous response to get the next page.",
              "title": "Cursor"
            },
            "description": "Cursor from a previous response to get the next page."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListWorkspacesOutput"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "workspace:read"
            ]
          }
        ]
      }
    },
    "/v1/workspaces/{workspace_id}": {
      "get": {
        "tags": [
          "Workspaces"
        ],
        "summary": "Get workspace",
        "description": "Get details for a single workspace including Creative Units balance.",
        "operationId": "getWorkspace",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkspaceInfo"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "workspace:read"
            ]
          }
        ]
      }
    },
    "/v1/workspaces/{workspace_id}/usage": {
      "get": {
        "tags": [
          "Workspaces"
        ],
        "summary": "Get workspace usage",
        "description": "Creative Units balance plus total and per-day consumption over the last `days` days.",
        "operationId": "getWorkspaceUsage",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "days",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 365,
              "minimum": 1,
              "description": "How many days back to report.",
              "default": 30,
              "title": "Days"
            },
            "description": "How many days back to report."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkspaceUsageOutput"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "billing:read"
            ]
          }
        ]
      }
    },
    "/v2/workspaces": {
      "get": {
        "tags": [
          "Workspaces"
        ],
        "summary": "List workspaces",
        "description": "List all workspaces the authenticated user belongs to, with Creative Units balance details.",
        "operationId": "listWorkspacesV2",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 100,
              "minimum": 1,
              "description": "Maximum number of results to return.",
              "default": 20,
              "title": "Limit"
            },
            "description": "Maximum number of results to return."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Cursor from a previous response to get the next page.",
              "title": "Cursor"
            },
            "description": "Cursor from a previous response to get the next page."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListWorkspacesOutput"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "workspace:read"
            ]
          }
        ]
      }
    },
    "/v2/workspaces/{workspace_id}": {
      "get": {
        "tags": [
          "Workspaces"
        ],
        "summary": "Get workspace",
        "description": "Get details for a single workspace including Creative Units balance.",
        "operationId": "getWorkspaceV2",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkspaceInfo"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "workspace:read"
            ]
          }
        ]
      }
    },
    "/v2/workspaces/{workspace_id}/usage": {
      "get": {
        "tags": [
          "Workspaces"
        ],
        "summary": "Get workspace usage",
        "description": "Creative Units balance plus total and per-day consumption over the last `days` days.",
        "operationId": "getWorkspaceUsageV2",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "days",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 365,
              "minimum": 1,
              "description": "How many days back to report.",
              "default": 30,
              "title": "Days"
            },
            "description": "How many days back to report."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkspaceUsageOutput"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "billing:read"
            ]
          }
        ]
      }
    },
    "/v1/workspaces/{workspace_id}/projects": {
      "get": {
        "tags": [
          "Projects"
        ],
        "summary": "List projects",
        "operationId": "listProjects",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "include_archived",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "description": "Include archived projects in the results.",
              "default": false,
              "title": "Include Archived"
            },
            "description": "Include archived projects in the results."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 100,
              "minimum": 1,
              "description": "Maximum number of results to return.",
              "default": 20,
              "title": "Limit"
            },
            "description": "Maximum number of results to return."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Cursor from a previous response to fetch the next page.",
              "title": "Cursor"
            },
            "description": "Cursor from a previous response to fetch the next page."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListProjectsOutput"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "projects:read"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "Projects"
        ],
        "summary": "Create project",
        "operationId": "createProject",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Opaque key making a retry of this request return the first result. A 2xx response is replayed for 24 hours with `Idempotent-Replayed: true`. A 4xx releases the key. A 5xx, or a request still running, holds the key for 120 seconds, during which a retry gets 409; after that a retry executes again. The key covers the method, path, query, and byte-identical body it was first used with; reusing it for a different request is rejected with 422. Protection is best effort: if the key store is unavailable, or a record is lost early, a retry can execute again even after an earlier 409. See the Idempotency section of the API description.",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateProjectBody"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectDetail"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "projects:write"
            ]
          }
        ]
      }
    },
    "/v1/workspaces/{workspace_id}/projects/{project_id}": {
      "get": {
        "tags": [
          "Projects"
        ],
        "summary": "Get project",
        "operationId": "getProject",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the project.",
              "title": "Project Id"
            },
            "description": "Id of the project."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectDetail"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "projects:read"
            ]
          }
        ]
      },
      "patch": {
        "tags": [
          "Projects"
        ],
        "summary": "Update project",
        "operationId": "updateProject",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the project.",
              "title": "Project Id"
            },
            "description": "Id of the project."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Opaque key making a retry of this request return the first result. A 2xx response is replayed for 24 hours with `Idempotent-Replayed: true`. A 4xx releases the key. A 5xx, or a request still running, holds the key for 120 seconds, during which a retry gets 409; after that a retry executes again. The key covers the method, path, query, and byte-identical body it was first used with; reusing it for a different request is rejected with 422. Protection is best effort: if the key store is unavailable, or a record is lost early, a retry can execute again even after an earlier 409. See the Idempotency section of the API description.",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateProjectBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectDetail"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "projects:write"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "Projects"
        ],
        "summary": "Delete project",
        "operationId": "deleteProject",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the project.",
              "title": "Project Id"
            },
            "description": "Id of the project."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Opaque key making a retry of this request return the first result. A 2xx response is replayed for 24 hours with `Idempotent-Replayed: true`. A 4xx releases the key. A 5xx, or a request still running, holds the key for 120 seconds, during which a retry gets 409; after that a retry executes again. The key covers the method, path, query, and byte-identical body it was first used with; reusing it for a different request is rejected with 422. Protection is best effort: if the key store is unavailable, or a record is lost early, a retry can execute again even after an earlier 409. See the Idempotency section of the API description.",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "projects:write"
            ]
          }
        ]
      }
    },
    "/v1/workspaces/{workspace_id}/projects/{project_id}/members": {
      "post": {
        "tags": [
          "Projects"
        ],
        "summary": "Add project members",
        "operationId": "addProjectMembers",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the project.",
              "title": "Project Id"
            },
            "description": "Id of the project."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Opaque key making a retry of this request return the first result. A 2xx response is replayed for 24 hours with `Idempotent-Replayed: true`. A 4xx releases the key. A 5xx, or a request still running, holds the key for 120 seconds, during which a retry gets 409; after that a retry executes again. The key covers the method, path, query, and byte-identical body it was first used with; reusing it for a different request is rejected with 422. Protection is best effort: if the key store is unavailable, or a record is lost early, a retry can execute again even after an earlier 409. See the Idempotency section of the API description.",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AddProjectMembersBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectMembersOutput"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "projects:write"
            ]
          }
        ]
      }
    },
    "/v1/workspaces/{workspace_id}/projects/{project_id}/members/{user_id}": {
      "delete": {
        "tags": [
          "Projects"
        ],
        "summary": "Remove project member",
        "operationId": "removeProjectMember",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the project.",
              "title": "Project Id"
            },
            "description": "Id of the project."
          },
          {
            "name": "user_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the user.",
              "title": "User Id"
            },
            "description": "Id of the user."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Opaque key making a retry of this request return the first result. A 2xx response is replayed for 24 hours with `Idempotent-Replayed: true`. A 4xx releases the key. A 5xx, or a request still running, holds the key for 120 seconds, during which a retry gets 409; after that a retry executes again. The key covers the method, path, query, and byte-identical body it was first used with; reusing it for a different request is rejected with 422. Protection is best effort: if the key store is unavailable, or a record is lost early, a retry can execute again even after an earlier 409. See the Idempotency section of the API description.",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "projects:write"
            ]
          }
        ]
      }
    },
    "/v2/workspaces/{workspace_id}/projects": {
      "get": {
        "tags": [
          "Projects"
        ],
        "summary": "List projects",
        "operationId": "listProjectsV2",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "include_archived",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "description": "Include archived projects in the results.",
              "default": false,
              "title": "Include Archived"
            },
            "description": "Include archived projects in the results."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 100,
              "minimum": 1,
              "description": "Maximum number of results to return.",
              "default": 20,
              "title": "Limit"
            },
            "description": "Maximum number of results to return."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Cursor from a previous response to fetch the next page.",
              "title": "Cursor"
            },
            "description": "Cursor from a previous response to fetch the next page."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListProjectsOutput"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "projects:read"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "Projects"
        ],
        "summary": "Create project",
        "operationId": "createProjectV2",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Opaque key making a retry of this request return the first result. A 2xx response is replayed for 24 hours with `Idempotent-Replayed: true`. A 4xx releases the key. A 5xx, or a request still running, holds the key for 120 seconds, during which a retry gets 409; after that a retry executes again. The key covers the method, path, query, and byte-identical body it was first used with; reusing it for a different request is rejected with 422. Protection is best effort: if the key store is unavailable, or a record is lost early, a retry can execute again even after an earlier 409. See the Idempotency section of the API description.",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateProjectBody"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectDetail"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "projects:write"
            ]
          }
        ]
      }
    },
    "/v2/workspaces/{workspace_id}/projects/{project_id}": {
      "get": {
        "tags": [
          "Projects"
        ],
        "summary": "Get project",
        "operationId": "getProjectV2",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the project.",
              "title": "Project Id"
            },
            "description": "Id of the project."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectDetail"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "projects:read"
            ]
          }
        ]
      },
      "patch": {
        "tags": [
          "Projects"
        ],
        "summary": "Update project",
        "operationId": "updateProjectV2",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the project.",
              "title": "Project Id"
            },
            "description": "Id of the project."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Opaque key making a retry of this request return the first result. A 2xx response is replayed for 24 hours with `Idempotent-Replayed: true`. A 4xx releases the key. A 5xx, or a request still running, holds the key for 120 seconds, during which a retry gets 409; after that a retry executes again. The key covers the method, path, query, and byte-identical body it was first used with; reusing it for a different request is rejected with 422. Protection is best effort: if the key store is unavailable, or a record is lost early, a retry can execute again even after an earlier 409. See the Idempotency section of the API description.",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateProjectBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectDetail"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "projects:write"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "Projects"
        ],
        "summary": "Delete project",
        "operationId": "deleteProjectV2",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the project.",
              "title": "Project Id"
            },
            "description": "Id of the project."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Opaque key making a retry of this request return the first result. A 2xx response is replayed for 24 hours with `Idempotent-Replayed: true`. A 4xx releases the key. A 5xx, or a request still running, holds the key for 120 seconds, during which a retry gets 409; after that a retry executes again. The key covers the method, path, query, and byte-identical body it was first used with; reusing it for a different request is rejected with 422. Protection is best effort: if the key store is unavailable, or a record is lost early, a retry can execute again even after an earlier 409. See the Idempotency section of the API description.",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "projects:write"
            ]
          }
        ]
      }
    },
    "/v2/workspaces/{workspace_id}/projects/{project_id}/members": {
      "post": {
        "tags": [
          "Projects"
        ],
        "summary": "Add project members",
        "operationId": "addProjectMembersV2",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the project.",
              "title": "Project Id"
            },
            "description": "Id of the project."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Opaque key making a retry of this request return the first result. A 2xx response is replayed for 24 hours with `Idempotent-Replayed: true`. A 4xx releases the key. A 5xx, or a request still running, holds the key for 120 seconds, during which a retry gets 409; after that a retry executes again. The key covers the method, path, query, and byte-identical body it was first used with; reusing it for a different request is rejected with 422. Protection is best effort: if the key store is unavailable, or a record is lost early, a retry can execute again even after an earlier 409. See the Idempotency section of the API description.",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AddProjectMembersBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectMembersOutput"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "projects:write"
            ]
          }
        ]
      }
    },
    "/v2/workspaces/{workspace_id}/projects/{project_id}/members/{user_id}": {
      "delete": {
        "tags": [
          "Projects"
        ],
        "summary": "Remove project member",
        "operationId": "removeProjectMemberV2",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the project.",
              "title": "Project Id"
            },
            "description": "Id of the project."
          },
          {
            "name": "user_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the user.",
              "title": "User Id"
            },
            "description": "Id of the user."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Opaque key making a retry of this request return the first result. A 2xx response is replayed for 24 hours with `Idempotent-Replayed: true`. A 4xx releases the key. A 5xx, or a request still running, holds the key for 120 seconds, during which a retry gets 409; after that a retry executes again. The key covers the method, path, query, and byte-identical body it was first used with; reusing it for a different request is rejected with 422. Protection is best effort: if the key store is unavailable, or a record is lost early, a retry can execute again even after an earlier 409. See the Idempotency section of the API description.",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "projects:write"
            ]
          }
        ]
      }
    },
    "/v1/workspaces/{workspace_id}/members": {
      "get": {
        "tags": [
          "Members"
        ],
        "summary": "List workspace members",
        "operationId": "listWorkspaceMembers",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 100,
              "minimum": 1,
              "description": "Maximum number of results to return.",
              "default": 20,
              "title": "Limit"
            },
            "description": "Maximum number of results to return."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Cursor from a previous response to fetch the next page.",
              "title": "Cursor"
            },
            "description": "Cursor from a previous response to fetch the next page."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListMembersOutput"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "members:read"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "Members"
        ],
        "summary": "Invite workspace member",
        "operationId": "inviteWorkspaceMember",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Opaque key making a retry of this request return the first result. A 2xx response is replayed for 24 hours with `Idempotent-Replayed: true`. A 4xx releases the key. A 5xx, or a request still running, holds the key for 120 seconds, during which a retry gets 409; after that a retry executes again. The key covers the method, path, query, and byte-identical body it was first used with; reusing it for a different request is rejected with 422. Protection is best effort: if the key store is unavailable, or a record is lost early, a retry can execute again even after an earlier 409. See the Idempotency section of the API description.",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InviteMemberBody"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MemberOutput"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "x-layer-human-only": true
      }
    },
    "/v1/workspaces/{workspace_id}/members/{user_id}": {
      "patch": {
        "tags": [
          "Members"
        ],
        "summary": "Update workspace member",
        "operationId": "updateWorkspaceMember",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "user_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the user.",
              "title": "User Id"
            },
            "description": "Id of the user."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Opaque key making a retry of this request return the first result. A 2xx response is replayed for 24 hours with `Idempotent-Replayed: true`. A 4xx releases the key. A 5xx, or a request still running, holds the key for 120 seconds, during which a retry gets 409; after that a retry executes again. The key covers the method, path, query, and byte-identical body it was first used with; reusing it for a different request is rejected with 422. Protection is best effort: if the key store is unavailable, or a record is lost early, a retry can execute again even after an earlier 409. See the Idempotency section of the API description.",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateMemberBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MemberOutput"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "x-layer-human-only": true
      }
    },
    "/v2/workspaces/{workspace_id}/members": {
      "get": {
        "tags": [
          "Members"
        ],
        "summary": "List workspace members",
        "operationId": "listWorkspaceMembersV2",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 100,
              "minimum": 1,
              "description": "Maximum number of results to return.",
              "default": 20,
              "title": "Limit"
            },
            "description": "Maximum number of results to return."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Cursor from a previous response to fetch the next page.",
              "title": "Cursor"
            },
            "description": "Cursor from a previous response to fetch the next page."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListMembersOutput"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "members:read"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "Members"
        ],
        "summary": "Invite workspace member",
        "operationId": "inviteWorkspaceMemberV2",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Opaque key making a retry of this request return the first result. A 2xx response is replayed for 24 hours with `Idempotent-Replayed: true`. A 4xx releases the key. A 5xx, or a request still running, holds the key for 120 seconds, during which a retry gets 409; after that a retry executes again. The key covers the method, path, query, and byte-identical body it was first used with; reusing it for a different request is rejected with 422. Protection is best effort: if the key store is unavailable, or a record is lost early, a retry can execute again even after an earlier 409. See the Idempotency section of the API description.",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InviteMemberBody"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MemberOutput"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "x-layer-human-only": true
      }
    },
    "/v2/workspaces/{workspace_id}/members/{user_id}": {
      "patch": {
        "tags": [
          "Members"
        ],
        "summary": "Update workspace member",
        "operationId": "updateWorkspaceMemberV2",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "user_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the user.",
              "title": "User Id"
            },
            "description": "Id of the user."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Opaque key making a retry of this request return the first result. A 2xx response is replayed for 24 hours with `Idempotent-Replayed: true`. A 4xx releases the key. A 5xx, or a request still running, holds the key for 120 seconds, during which a retry gets 409; after that a retry executes again. The key covers the method, path, query, and byte-identical body it was first used with; reusing it for a different request is rejected with 422. Protection is best effort: if the key store is unavailable, or a record is lost early, a retry can execute again even after an earlier 409. See the Idempotency section of the API description.",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateMemberBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MemberOutput"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "x-layer-human-only": true
      }
    },
    "/v1/workspaces/{workspace_id}/groups": {
      "get": {
        "tags": [
          "Groups"
        ],
        "summary": "List groups",
        "operationId": "listGroups",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 100,
              "minimum": 1,
              "description": "Maximum number of results to return.",
              "default": 20,
              "title": "Limit"
            },
            "description": "Maximum number of results to return."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Cursor from a previous response to fetch the next page.",
              "title": "Cursor"
            },
            "description": "Cursor from a previous response to fetch the next page."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListGroupsOutput"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "members:read"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "Groups"
        ],
        "summary": "Create group",
        "operationId": "createGroup",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Opaque key making a retry of this request return the first result. A 2xx response is replayed for 24 hours with `Idempotent-Replayed: true`. A 4xx releases the key. A 5xx, or a request still running, holds the key for 120 seconds, during which a retry gets 409; after that a retry executes again. The key covers the method, path, query, and byte-identical body it was first used with; reusing it for a different request is rejected with 422. Protection is best effort: if the key store is unavailable, or a record is lost early, a retry can execute again even after an earlier 409. See the Idempotency section of the API description.",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateGroupBody"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GroupOut"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "x-layer-human-only": true
      }
    },
    "/v1/workspaces/{workspace_id}/groups/{group_id}": {
      "patch": {
        "tags": [
          "Groups"
        ],
        "summary": "Update group role",
        "operationId": "updateGroupRole",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "group_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the group.",
              "title": "Group Id"
            },
            "description": "Id of the group."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Opaque key making a retry of this request return the first result. A 2xx response is replayed for 24 hours with `Idempotent-Replayed: true`. A 4xx releases the key. A 5xx, or a request still running, holds the key for 120 seconds, during which a retry gets 409; after that a retry executes again. The key covers the method, path, query, and byte-identical body it was first used with; reusing it for a different request is rejected with 422. Protection is best effort: if the key store is unavailable, or a record is lost early, a retry can execute again even after an earlier 409. See the Idempotency section of the API description.",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateGroupBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GroupOut"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "x-layer-human-only": true
      },
      "delete": {
        "tags": [
          "Groups"
        ],
        "summary": "Delete group",
        "operationId": "deleteGroup",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "group_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the group.",
              "title": "Group Id"
            },
            "description": "Id of the group."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Opaque key making a retry of this request return the first result. A 2xx response is replayed for 24 hours with `Idempotent-Replayed: true`. A 4xx releases the key. A 5xx, or a request still running, holds the key for 120 seconds, during which a retry gets 409; after that a retry executes again. The key covers the method, path, query, and byte-identical body it was first used with; reusing it for a different request is rejected with 422. Protection is best effort: if the key store is unavailable, or a record is lost early, a retry can execute again even after an earlier 409. See the Idempotency section of the API description.",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "members:write"
            ]
          }
        ]
      }
    },
    "/v1/workspaces/{workspace_id}/groups/{group_id}/members": {
      "get": {
        "tags": [
          "Groups"
        ],
        "summary": "List group members",
        "operationId": "listGroupMembers",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "group_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the group.",
              "title": "Group Id"
            },
            "description": "Id of the group."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 100,
              "minimum": 1,
              "description": "Maximum number of results to return.",
              "default": 20,
              "title": "Limit"
            },
            "description": "Maximum number of results to return."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Cursor from a previous response to fetch the next page.",
              "title": "Cursor"
            },
            "description": "Cursor from a previous response to fetch the next page."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListGroupMembersOutput"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "members:read"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "Groups"
        ],
        "summary": "Add group member",
        "operationId": "addGroupMember",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "group_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the group.",
              "title": "Group Id"
            },
            "description": "Id of the group."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Opaque key making a retry of this request return the first result. A 2xx response is replayed for 24 hours with `Idempotent-Replayed: true`. A 4xx releases the key. A 5xx, or a request still running, holds the key for 120 seconds, during which a retry gets 409; after that a retry executes again. The key covers the method, path, query, and byte-identical body it was first used with; reusing it for a different request is rejected with 422. Protection is best effort: if the key store is unavailable, or a record is lost early, a retry can execute again even after an earlier 409. See the Idempotency section of the API description.",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AddGroupMemberBody"
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "x-layer-human-only": true
      }
    },
    "/v1/workspaces/{workspace_id}/groups/{group_id}/members/{user_id}": {
      "delete": {
        "tags": [
          "Groups"
        ],
        "summary": "Remove group member",
        "operationId": "removeGroupMember",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "group_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the group.",
              "title": "Group Id"
            },
            "description": "Id of the group."
          },
          {
            "name": "user_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the user.",
              "title": "User Id"
            },
            "description": "Id of the user."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Opaque key making a retry of this request return the first result. A 2xx response is replayed for 24 hours with `Idempotent-Replayed: true`. A 4xx releases the key. A 5xx, or a request still running, holds the key for 120 seconds, during which a retry gets 409; after that a retry executes again. The key covers the method, path, query, and byte-identical body it was first used with; reusing it for a different request is rejected with 422. Protection is best effort: if the key store is unavailable, or a record is lost early, a retry can execute again even after an earlier 409. See the Idempotency section of the API description.",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "members:write"
            ]
          }
        ]
      }
    },
    "/v1/workspaces/{workspace_id}/groups/{group_id}/usage-limit": {
      "put": {
        "tags": [
          "Groups"
        ],
        "summary": "Set group usage limit",
        "operationId": "setGroupUsageLimit",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "group_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the group.",
              "title": "Group Id"
            },
            "description": "Id of the group."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Opaque key making a retry of this request return the first result. A 2xx response is replayed for 24 hours with `Idempotent-Replayed: true`. A 4xx releases the key. A 5xx, or a request still running, holds the key for 120 seconds, during which a retry gets 409; after that a retry executes again. The key covers the method, path, query, and byte-identical body it was first used with; reusing it for a different request is rejected with 422. Protection is best effort: if the key store is unavailable, or a record is lost early, a retry can execute again even after an earlier 409. See the Idempotency section of the API description.",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetUsageLimitBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GroupOut"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "billing:write"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "Groups"
        ],
        "summary": "Remove group usage limit",
        "operationId": "removeGroupUsageLimit",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "group_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the group.",
              "title": "Group Id"
            },
            "description": "Id of the group."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Opaque key making a retry of this request return the first result. A 2xx response is replayed for 24 hours with `Idempotent-Replayed: true`. A 4xx releases the key. A 5xx, or a request still running, holds the key for 120 seconds, during which a retry gets 409; after that a retry executes again. The key covers the method, path, query, and byte-identical body it was first used with; reusing it for a different request is rejected with 422. Protection is best effort: if the key store is unavailable, or a record is lost early, a retry can execute again even after an earlier 409. See the Idempotency section of the API description.",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "billing:write"
            ]
          }
        ]
      }
    },
    "/v2/workspaces/{workspace_id}/groups": {
      "get": {
        "tags": [
          "Groups"
        ],
        "summary": "List groups",
        "operationId": "listGroupsV2",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 100,
              "minimum": 1,
              "description": "Maximum number of results to return.",
              "default": 20,
              "title": "Limit"
            },
            "description": "Maximum number of results to return."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Cursor from a previous response to fetch the next page.",
              "title": "Cursor"
            },
            "description": "Cursor from a previous response to fetch the next page."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListGroupsOutput"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "members:read"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "Groups"
        ],
        "summary": "Create group",
        "operationId": "createGroupV2",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Opaque key making a retry of this request return the first result. A 2xx response is replayed for 24 hours with `Idempotent-Replayed: true`. A 4xx releases the key. A 5xx, or a request still running, holds the key for 120 seconds, during which a retry gets 409; after that a retry executes again. The key covers the method, path, query, and byte-identical body it was first used with; reusing it for a different request is rejected with 422. Protection is best effort: if the key store is unavailable, or a record is lost early, a retry can execute again even after an earlier 409. See the Idempotency section of the API description.",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateGroupBody"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GroupOut"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "x-layer-human-only": true
      }
    },
    "/v2/workspaces/{workspace_id}/groups/{group_id}": {
      "patch": {
        "tags": [
          "Groups"
        ],
        "summary": "Update group role",
        "operationId": "updateGroupRoleV2",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "group_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the group.",
              "title": "Group Id"
            },
            "description": "Id of the group."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Opaque key making a retry of this request return the first result. A 2xx response is replayed for 24 hours with `Idempotent-Replayed: true`. A 4xx releases the key. A 5xx, or a request still running, holds the key for 120 seconds, during which a retry gets 409; after that a retry executes again. The key covers the method, path, query, and byte-identical body it was first used with; reusing it for a different request is rejected with 422. Protection is best effort: if the key store is unavailable, or a record is lost early, a retry can execute again even after an earlier 409. See the Idempotency section of the API description.",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateGroupBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GroupOut"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "x-layer-human-only": true
      },
      "delete": {
        "tags": [
          "Groups"
        ],
        "summary": "Delete group",
        "operationId": "deleteGroupV2",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "group_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the group.",
              "title": "Group Id"
            },
            "description": "Id of the group."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Opaque key making a retry of this request return the first result. A 2xx response is replayed for 24 hours with `Idempotent-Replayed: true`. A 4xx releases the key. A 5xx, or a request still running, holds the key for 120 seconds, during which a retry gets 409; after that a retry executes again. The key covers the method, path, query, and byte-identical body it was first used with; reusing it for a different request is rejected with 422. Protection is best effort: if the key store is unavailable, or a record is lost early, a retry can execute again even after an earlier 409. See the Idempotency section of the API description.",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "members:write"
            ]
          }
        ]
      }
    },
    "/v2/workspaces/{workspace_id}/groups/{group_id}/members": {
      "get": {
        "tags": [
          "Groups"
        ],
        "summary": "List group members",
        "operationId": "listGroupMembersV2",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "group_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the group.",
              "title": "Group Id"
            },
            "description": "Id of the group."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 100,
              "minimum": 1,
              "description": "Maximum number of results to return.",
              "default": 20,
              "title": "Limit"
            },
            "description": "Maximum number of results to return."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Cursor from a previous response to fetch the next page.",
              "title": "Cursor"
            },
            "description": "Cursor from a previous response to fetch the next page."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListGroupMembersOutput"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "members:read"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "Groups"
        ],
        "summary": "Add group member",
        "operationId": "addGroupMemberV2",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "group_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the group.",
              "title": "Group Id"
            },
            "description": "Id of the group."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Opaque key making a retry of this request return the first result. A 2xx response is replayed for 24 hours with `Idempotent-Replayed: true`. A 4xx releases the key. A 5xx, or a request still running, holds the key for 120 seconds, during which a retry gets 409; after that a retry executes again. The key covers the method, path, query, and byte-identical body it was first used with; reusing it for a different request is rejected with 422. Protection is best effort: if the key store is unavailable, or a record is lost early, a retry can execute again even after an earlier 409. See the Idempotency section of the API description.",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AddGroupMemberBody"
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "x-layer-human-only": true
      }
    },
    "/v2/workspaces/{workspace_id}/groups/{group_id}/members/{user_id}": {
      "delete": {
        "tags": [
          "Groups"
        ],
        "summary": "Remove group member",
        "operationId": "removeGroupMemberV2",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "group_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the group.",
              "title": "Group Id"
            },
            "description": "Id of the group."
          },
          {
            "name": "user_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the user.",
              "title": "User Id"
            },
            "description": "Id of the user."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Opaque key making a retry of this request return the first result. A 2xx response is replayed for 24 hours with `Idempotent-Replayed: true`. A 4xx releases the key. A 5xx, or a request still running, holds the key for 120 seconds, during which a retry gets 409; after that a retry executes again. The key covers the method, path, query, and byte-identical body it was first used with; reusing it for a different request is rejected with 422. Protection is best effort: if the key store is unavailable, or a record is lost early, a retry can execute again even after an earlier 409. See the Idempotency section of the API description.",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "members:write"
            ]
          }
        ]
      }
    },
    "/v2/workspaces/{workspace_id}/groups/{group_id}/usage-limit": {
      "put": {
        "tags": [
          "Groups"
        ],
        "summary": "Set group usage limit",
        "operationId": "setGroupUsageLimitV2",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "group_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the group.",
              "title": "Group Id"
            },
            "description": "Id of the group."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Opaque key making a retry of this request return the first result. A 2xx response is replayed for 24 hours with `Idempotent-Replayed: true`. A 4xx releases the key. A 5xx, or a request still running, holds the key for 120 seconds, during which a retry gets 409; after that a retry executes again. The key covers the method, path, query, and byte-identical body it was first used with; reusing it for a different request is rejected with 422. Protection is best effort: if the key store is unavailable, or a record is lost early, a retry can execute again even after an earlier 409. See the Idempotency section of the API description.",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetUsageLimitBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GroupOut"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "billing:write"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "Groups"
        ],
        "summary": "Remove group usage limit",
        "operationId": "removeGroupUsageLimitV2",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "group_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the group.",
              "title": "Group Id"
            },
            "description": "Id of the group."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Opaque key making a retry of this request return the first result. A 2xx response is replayed for 24 hours with `Idempotent-Replayed: true`. A 4xx releases the key. A 5xx, or a request still running, holds the key for 120 seconds, during which a retry gets 409; after that a retry executes again. The key covers the method, path, query, and byte-identical body it was first used with; reusing it for a different request is rejected with 422. Protection is best effort: if the key store is unavailable, or a record is lost early, a retry can execute again even after an earlier 409. See the Idempotency section of the API description.",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "billing:write"
            ]
          }
        ]
      }
    },
    "/v1/workspaces/{workspace_id}/models": {
      "get": {
        "tags": [
          "Models"
        ],
        "summary": "List models",
        "description": "List available AI models in a workspace with optional filtering by modality, capabilities, and text search.",
        "operationId": "listModels",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "modality",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "enum": [
                    "image",
                    "video",
                    "three_d",
                    "audio",
                    "world",
                    "text"
                  ],
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Filter by modality",
              "title": "Modality"
            },
            "description": "Filter by modality"
          },
          {
            "name": "search",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Full-text search on model name/description",
              "title": "Search"
            },
            "description": "Full-text search on model name/description"
          },
          {
            "name": "supports_reference_images",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "boolean"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Require reference image support",
              "title": "Supports Reference Images"
            },
            "description": "Require reference image support"
          },
          {
            "name": "inpainting",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "boolean"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Require inpainting support",
              "title": "Inpainting"
            },
            "description": "Require inpainting support"
          },
          {
            "name": "outpainting",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "boolean"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Require outpainting support",
              "title": "Outpainting"
            },
            "description": "Require outpainting support"
          },
          {
            "name": "generate_audio",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "boolean"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Require audio generation with video",
              "title": "Generate Audio"
            },
            "description": "Require audio generation with video"
          },
          {
            "name": "text_to_3d",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "boolean"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Require text-to-3D",
              "title": "Text To 3D"
            },
            "description": "Require text-to-3D"
          },
          {
            "name": "image_to_3d",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "boolean"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Require image-to-3D",
              "title": "Image To 3D"
            },
            "description": "Require image-to-3D"
          },
          {
            "name": "text_to_speech",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "boolean"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Require text-to-speech",
              "title": "Text To Speech"
            },
            "description": "Require text-to-speech"
          },
          {
            "name": "sound_effect",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "boolean"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Require sound effect generation",
              "title": "Sound Effect"
            },
            "description": "Require sound effect generation"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 100,
              "minimum": 1,
              "description": "Maximum number of results to return.",
              "default": 20,
              "title": "Limit"
            },
            "description": "Maximum number of results to return."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Cursor from a previous response to fetch the next page.",
              "title": "Cursor"
            },
            "description": "Cursor from a previous response to fetch the next page."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListModelsOutput"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "generation:read"
            ]
          }
        ]
      }
    },
    "/v1/workspaces/{workspace_id}/models/{model_id}": {
      "get": {
        "tags": [
          "Models"
        ],
        "summary": "Get model",
        "description": "Get full details for a specific model including capabilities, timing, and prompt format.",
        "operationId": "getModel",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "model_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the model, as returned by the list models endpoint.",
              "title": "Model Id"
            },
            "description": "Id of the model, as returned by the list models endpoint."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetModelRESTOutput"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "generation:read"
            ]
          }
        ]
      }
    },
    "/v2/workspaces/{workspace_id}/base-models": {
      "get": {
        "tags": [
          "Base Models"
        ],
        "summary": "List base models",
        "description": "List the base models enabled for this workspace, sourced from the model registry. Results come back in Layer's recommended order, which reflects synced quality and popularity signals and can therefore shift between requests. Reference sets are listed separately under /reference-sets.",
        "operationId": "listBaseModels",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "modality",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/Modality"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Filter by output modality",
              "title": "Modality"
            },
            "description": "Filter by output modality"
          },
          {
            "name": "search",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Full-text search on name, aliases, and description",
              "title": "Search"
            },
            "description": "Full-text search on name, aliases, and description"
          },
          {
            "name": "use_case",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/InferenceUseCase"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Filter to the models that declare this use case, in Layer's recommended order for it. The finer-grained choice when the caller's intent is known, e.g. `retexture` or `rig`.",
              "title": "Use Case"
            },
            "description": "Filter to the models that declare this use case, in Layer's recommended order for it. The finer-grained choice when the caller's intent is known, e.g. `retexture` or `rig`."
          },
          {
            "name": "tileable",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "description": "Set true to list only models that can generate seamless tileable textures.",
              "default": false,
              "title": "Tileable"
            },
            "description": "Set true to list only models that can generate seamless tileable textures."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 100,
              "minimum": 1,
              "description": "Maximum number of results to return.",
              "default": 20,
              "title": "Limit"
            },
            "description": "Maximum number of results to return."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Cursor from a previous response to fetch the next page.",
              "title": "Cursor"
            },
            "description": "Cursor from a previous response to fetch the next page."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListBaseModelsOutput"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "generation:read"
            ]
          }
        ]
      }
    },
    "/v2/workspaces/{workspace_id}/base-models/defaults": {
      "get": {
        "tags": [
          "Base Models"
        ],
        "summary": "Get recommended base models",
        "description": "Layer's curated recommendations, filtered to the models this workspace may run. Use this to pick a model when the caller named a modality or an intent but not a specific `base_model_id`: take entry `[0]` of the matching bucket, falling through to later entries if it is unavailable. Prefer `preferred_by_use_case` over `featured_by_modality` when the intent is known, since it is finer-grained.\n\nThe curation changes as models ship and are retired, so clients should re-read this periodically rather than hard-coding a model id.",
        "operationId": "getBaseModelDefaults",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BaseModelDefaultsOutput"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "generation:read"
            ]
          }
        ]
      }
    },
    "/v2/workspaces/{workspace_id}/base-models/{base_model_id}": {
      "get": {
        "tags": [
          "Base Models"
        ],
        "summary": "Get base model",
        "description": "Get a base model's capabilities, pricing, and typical generation time.",
        "operationId": "getBaseModel",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "base_model_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "description": "The base model, named by the id the list endpoint returns, or by its slug, display name, or alias.",
              "title": "Base Model Id"
            },
            "description": "The base model, named by the id the list endpoint returns, or by its slug, display name, or alias."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BaseModelDetail"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "generation:read"
            ]
          }
        ]
      }
    },
    "/v2/workspaces/{workspace_id}/base-models/{slug}/inference-schema": {
      "get": {
        "tags": [
          "Base Models",
          "Inferences"
        ],
        "summary": "Get a model's inference input schema",
        "description": "Return the JSON Schema for a base model's inference form — the shape of the `input` accepted by POST /base-models/{slug}/inferences. Property render hints live under `x-layer`.",
        "operationId": "getInferenceSchema",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "description": "The base model, named by the id the list endpoint returns, or by its slug, display name, or alias.",
              "title": "Slug"
            },
            "description": "The base model, named by the id the list endpoint returns, or by its slug, display name, or alias."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response Getinferenceschema"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "generation:read"
            ]
          }
        ]
      }
    },
    "/v2/workspaces/{workspace_id}/base-models/{slug}/inferences": {
      "post": {
        "tags": [
          "Base Models",
          "Inferences"
        ],
        "summary": "Run an inference with a base model",
        "description": "Start a generation with the given base model. The request body is the model's inference form (see GET /base-models/{slug}/inference-schema for its shape). Returns immediately with an inference id; poll GET /workspaces/{workspace_id}/inferences/{inference_id} for results.",
        "operationId": "runInference",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "description": "The base model, named by the id the list endpoint returns, or by its slug, display name, or alias.",
              "title": "Slug"
            },
            "description": "The base model, named by the id the list endpoint returns, or by its slug, display name, or alias."
          },
          {
            "name": "session_name",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Organize this run under a named session. A new session is created if none matches.",
              "title": "Session Name"
            },
            "description": "Organize this run under a named session. A new session is created if none matches."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Opaque key making a retry of this request return the first result. A 2xx response is replayed for 24 hours with `Idempotent-Replayed: true`. A 4xx releases the key. A 5xx, or a request still running, holds the key for 120 seconds, during which a retry gets 409; after that a retry executes again. The key covers the method, path, query, and byte-identical body it was first used with; reusing it for a different request is rejected with 422. Protection is best effort: if the key store is unavailable, or a record is lost early, a retry can execute again even after an earlier 409. See the Idempotency section of the API description.",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": true,
                "title": "Input"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExecuteForgeOutput"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "generation:write"
            ]
          }
        ]
      }
    },
    "/v2/workspaces/{workspace_id}/sessions": {
      "get": {
        "tags": [
          "Sessions"
        ],
        "summary": "List sessions",
        "description": "List the workspace's active sessions, most recently used first. A client resuming work can take the first row; one letting a person choose can page through the rest.",
        "operationId": "listSessions",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 100,
              "minimum": 1,
              "description": "Maximum number of results to return.",
              "default": 20,
              "title": "Limit"
            },
            "description": "Maximum number of results to return."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Cursor from a previous response to fetch the next page.",
              "title": "Cursor"
            },
            "description": "Cursor from a previous response to fetch the next page."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListSessionsOutput"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "sessions:read"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "Sessions"
        ],
        "summary": "Create session",
        "description": "Create an empty session. Names need not be unique: a client that means to resume a session should keep its `session_id` rather than look it up by name.",
        "operationId": "createSession",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Opaque key making a retry of this request return the first result. A 2xx response is replayed for 24 hours with `Idempotent-Replayed: true`. A 4xx releases the key. A 5xx, or a request still running, holds the key for 120 seconds, during which a retry gets 409; after that a retry executes again. The key covers the method, path, query, and byte-identical body it was first used with; reusing it for a different request is rejected with 422. Protection is best effort: if the key store is unavailable, or a record is lost early, a retry can execute again even after an earlier 409. See the Idempotency section of the API description.",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateSessionBody"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SessionSummary"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "sessions:write"
            ]
          }
        ]
      }
    },
    "/v2/workspaces/{workspace_id}/sessions/{session_id}": {
      "get": {
        "tags": [
          "Sessions"
        ],
        "summary": "Get session",
        "description": "Get one session. A 404 means the session is gone, or belongs to another workspace; either way a client holding its id should stop using it.",
        "operationId": "getSession",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "session_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the session.",
              "title": "Session Id"
            },
            "description": "Id of the session."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SessionSummary"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "sessions:read"
            ]
          }
        ]
      },
      "patch": {
        "tags": [
          "Sessions"
        ],
        "summary": "Rename session",
        "description": "Rename a session. A document-bound client does this when an unsaved document it created a session for is first saved, so the session takes the document's name.",
        "operationId": "updateSession",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "session_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the session.",
              "title": "Session Id"
            },
            "description": "Id of the session."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Opaque key making a retry of this request return the first result. A 2xx response is replayed for 24 hours with `Idempotent-Replayed: true`. A 4xx releases the key. A 5xx, or a request still running, holds the key for 120 seconds, during which a retry gets 409; after that a retry executes again. The key covers the method, path, query, and byte-identical body it was first used with; reusing it for a different request is rejected with 422. Protection is best effort: if the key store is unavailable, or a record is lost early, a retry can execute again even after an earlier 409. See the Idempotency section of the API description.",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateSessionBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SessionSummary"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "sessions:write"
            ]
          }
        ]
      }
    },
    "/v2/workspaces/{workspace_id}/sessions/{session_id}/objects": {
      "get": {
        "tags": [
          "Sessions"
        ],
        "summary": "List session objects",
        "description": "The files and assets in the session, newest first, each as a `SessionEvent` describes it. To keep a view of the session current, open the event stream first and read this once it has connected: nothing is missed between the two, and a change may appear in both.",
        "operationId": "listSessionObjects",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "session_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the session.",
              "title": "Session Id"
            },
            "description": "Id of the session."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 100,
              "minimum": 1,
              "description": "Maximum number of results to return.",
              "default": 20,
              "title": "Limit"
            },
            "description": "Maximum number of results to return."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Cursor from a previous response to fetch the next page.",
              "title": "Cursor"
            },
            "description": "Cursor from a previous response to fetch the next page."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListSessionObjectsOutput"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "sessions:read"
            ]
          }
        ]
      }
    },
    "/v2/workspaces/{workspace_id}/sessions/{session_id}/events": {
      "get": {
        "tags": [
          "Sessions"
        ],
        "summary": "Stream session events",
        "description": "A Server-Sent Events stream of every object added to, changed in, or removed from the session, starting from when the stream opens. Each message is an `object` event whose data is a JSON `SessionEvent`. A generation's outputs arrive here as `created` and then `updated` events as each file finishes processing, whoever started it: this client, the web app, a teammate, or the agent.\n\nThe stream sends an SSE comment every 15 seconds while it is otherwise idle, so a proxy does not close it. Nothing is replayed on reconnect: a client that was away should re-read whatever it shows, then reopen the stream.",
        "operationId": "streamSessionEvents",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "session_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the session.",
              "title": "Session Id"
            },
            "description": "Id of the session."
          }
        ],
        "responses": {
          "200": {
            "description": "The event stream: one `object` event per change.",
            "content": {
              "text/event-stream": {
                "schema": {
                  "type": "string"
                },
                "itemSchema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "event": {
                      "type": "string"
                    },
                    "data": {
                      "type": "string",
                      "contentMediaType": "application/json",
                      "contentSchema": {
                        "$ref": "#/components/schemas/SessionEvent"
                      }
                    },
                    "id": {
                      "type": "string"
                    },
                    "retry": {
                      "type": "integer",
                      "minimum": 0
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "sessions:read"
            ]
          }
        ]
      }
    },
    "/v2/workspaces/{workspace_id}/reference-sets": {
      "get": {
        "tags": [
          "Reference Sets"
        ],
        "summary": "List reference sets",
        "description": "List the workspace's reference sets. Pass a returned `reference_set_id` in the `reference_sets` array of an inference request. Only sets that are ready to generate with are listed: archived sets, and empty ones with no files, no trained model and no prompt fragments, are omitted.",
        "operationId": "listReferenceSets",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "search",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 200
                },
                {
                  "type": "null"
                }
              ],
              "description": "Full-text search on name/description",
              "title": "Search"
            },
            "description": "Full-text search on name/description"
          },
          {
            "name": "category",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/StyleCategory"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Only sets of this category, e.g. `animation` for the motions a rigged mesh can play.",
              "title": "Category"
            },
            "description": "Only sets of this category, e.g. `animation` for the motions a rigged mesh can play."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 100,
              "minimum": 1,
              "description": "Maximum number of results to return.",
              "default": 20,
              "title": "Limit"
            },
            "description": "Maximum number of results to return."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Cursor from a previous response to fetch the next page.",
              "title": "Cursor"
            },
            "description": "Cursor from a previous response to fetch the next page."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListReferenceSetsOutput"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "reference_sets:read"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "Training"
        ],
        "summary": "Create a reference set",
        "description": "Create a reference set (a curated collection of already-uploaded files) that can then be trained into a custom style/LoRA. Upload files first via the Files API, then pass their IDs here.",
        "operationId": "createReferenceSetV2",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Opaque key making a retry of this request return the first result. A 2xx response is replayed for 24 hours with `Idempotent-Replayed: true`. A 4xx releases the key. A 5xx, or a request still running, holds the key for 120 seconds, during which a retry gets 409; after that a retry executes again. The key covers the method, path, query, and byte-identical body it was first used with; reusing it for a different request is rejected with 422. Protection is best effort: if the key store is unavailable, or a record is lost early, a retry can execute again even after an earlier 409. See the Idempotency section of the API description.",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateReferenceSetRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateReferenceSetResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "reference_sets:write"
            ]
          }
        ]
      }
    },
    "/v2/workspaces/{workspace_id}/reference-sets/{reference_set_id}": {
      "get": {
        "tags": [
          "Reference Sets"
        ],
        "summary": "Get reference set",
        "description": "Get a reference set's metadata and every attached file with a download URL.",
        "operationId": "getReferenceSet",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "reference_set_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the reference set.",
              "title": "Reference Set Id"
            },
            "description": "Id of the reference set."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetReferenceSetOutput"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "reference_sets:read"
            ]
          }
        ]
      }
    },
    "/v1/workspaces/{workspace_id}/workflows": {
      "get": {
        "tags": [
          "Workflows"
        ],
        "summary": "List workflows",
        "description": "List available generation workflows (published blueprints) in a workspace.",
        "operationId": "listWorkflows",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "search",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Full-text search on workflow name/description",
              "title": "Search"
            },
            "description": "Full-text search on workflow name/description"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 100,
              "minimum": 1,
              "description": "Maximum number of results to return.",
              "default": 20,
              "title": "Limit"
            },
            "description": "Maximum number of results to return."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Cursor from a previous response to fetch the next page.",
              "title": "Cursor"
            },
            "description": "Cursor from a previous response to fetch the next page."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListWorkflowsOutput"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "workflows:read"
            ]
          }
        ]
      }
    },
    "/v1/workspaces/{workspace_id}/workflows/{workflow_id}/estimate": {
      "post": {
        "tags": [
          "Workflows"
        ],
        "summary": "Estimate workflow price",
        "description": "Estimate the Creative Units cost of running a workflow with given inputs.",
        "operationId": "estimateWorkflowPrice",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "workflow_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workflow.",
              "title": "Workflow Id"
            },
            "description": "Id of the workflow."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Opaque key making a retry of this request return the first result. A 2xx response is replayed for 24 hours with `Idempotent-Replayed: true`. A 4xx releases the key. A 5xx, or a request still running, holds the key for 120 seconds, during which a retry gets 409; after that a retry executes again. The key covers the method, path, query, and byte-identical body it was first used with; reusing it for a different request is rejected with 422. Protection is best effort: if the key store is unavailable, or a record is lost early, a retry can execute again even after an earlier 409. See the Idempotency section of the API description.",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EstimateWorkflowPriceRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EstimateWorkflowPriceOutput"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "workflows:read"
            ]
          }
        ]
      }
    },
    "/v1/workspaces/{workspace_id}/workflows/{workflow_id}/runs": {
      "post": {
        "tags": [
          "Workflows"
        ],
        "summary": "Execute workflow",
        "description": "Start a workflow execution. Returns immediately with a run ID. Poll with GET /workspaces/{workspace_id}/workflows/{workflow_id}/runs/{run_id} for results. Creative Units are not checked here: an underfunded workspace is still accepted and the run then reports FAILURE with error_code BlueprintInsufficientBalanceError. Use the estimate endpoint's has_sufficient_creative_units to check before submitting.",
        "operationId": "executeWorkflow",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "workflow_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workflow.",
              "title": "Workflow Id"
            },
            "description": "Id of the workflow."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Opaque key making a retry of this request return the first result. A 2xx response is replayed for 24 hours with `Idempotent-Replayed: true`. A 4xx releases the key. A 5xx, or a request still running, holds the key for 120 seconds, during which a retry gets 409; after that a retry executes again. The key covers the method, path, query, and byte-identical body it was first used with; reusing it for a different request is rejected with 422. Protection is best effort: if the key store is unavailable, or a record is lost early, a retry can execute again even after an earlier 409. See the Idempotency section of the API description.",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ExecuteWorkflowRequest"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExecuteWorkflowOutput"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "workflows:write"
            ]
          }
        ]
      }
    },
    "/v1/workspaces/{workspace_id}/workflows/{workflow_id}/runs/{run_id}": {
      "get": {
        "tags": [
          "Workflows"
        ],
        "summary": "Get workflow run",
        "description": "Get the status and results of a workflow run.",
        "operationId": "getWorkflowRun",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "workflow_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workflow.",
              "title": "Workflow Id"
            },
            "description": "Id of the workflow."
          },
          {
            "name": "run_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workflow run.",
              "title": "Run Id"
            },
            "description": "Id of the workflow run."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetWorkflowRunOutput"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "workflows:read"
            ]
          }
        ]
      }
    },
    "/v2/workspaces/{workspace_id}/workflows": {
      "get": {
        "tags": [
          "Workflows"
        ],
        "summary": "List workflows",
        "description": "List available generation workflows (published blueprints) in a workspace.",
        "operationId": "listWorkflowsV2",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "search",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Full-text search on workflow name/description",
              "title": "Search"
            },
            "description": "Full-text search on workflow name/description"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 100,
              "minimum": 1,
              "description": "Maximum number of results to return.",
              "default": 20,
              "title": "Limit"
            },
            "description": "Maximum number of results to return."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Cursor from a previous response to fetch the next page.",
              "title": "Cursor"
            },
            "description": "Cursor from a previous response to fetch the next page."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListWorkflowsOutput"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "workflows:read"
            ]
          }
        ]
      }
    },
    "/v2/workspaces/{workspace_id}/workflows/{workflow_id}/estimate": {
      "post": {
        "tags": [
          "Workflows"
        ],
        "summary": "Estimate workflow price",
        "description": "Estimate the Creative Units cost of running a workflow with given inputs.",
        "operationId": "estimateWorkflowPriceV2",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "workflow_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workflow.",
              "title": "Workflow Id"
            },
            "description": "Id of the workflow."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Opaque key making a retry of this request return the first result. A 2xx response is replayed for 24 hours with `Idempotent-Replayed: true`. A 4xx releases the key. A 5xx, or a request still running, holds the key for 120 seconds, during which a retry gets 409; after that a retry executes again. The key covers the method, path, query, and byte-identical body it was first used with; reusing it for a different request is rejected with 422. Protection is best effort: if the key store is unavailable, or a record is lost early, a retry can execute again even after an earlier 409. See the Idempotency section of the API description.",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EstimateWorkflowPriceRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EstimateWorkflowPriceOutput"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "workflows:read"
            ]
          }
        ]
      }
    },
    "/v2/workspaces/{workspace_id}/workflows/{workflow_id}/runs": {
      "post": {
        "tags": [
          "Workflows"
        ],
        "summary": "Execute workflow",
        "description": "Start a workflow execution. Returns immediately with a run ID. Poll with GET /workspaces/{workspace_id}/workflows/{workflow_id}/runs/{run_id} for results. Creative Units are not checked here: an underfunded workspace is still accepted and the run then reports FAILURE with error_code BlueprintInsufficientBalanceError. Use the estimate endpoint's has_sufficient_creative_units to check before submitting.",
        "operationId": "executeWorkflowV2",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "workflow_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workflow.",
              "title": "Workflow Id"
            },
            "description": "Id of the workflow."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Opaque key making a retry of this request return the first result. A 2xx response is replayed for 24 hours with `Idempotent-Replayed: true`. A 4xx releases the key. A 5xx, or a request still running, holds the key for 120 seconds, during which a retry gets 409; after that a retry executes again. The key covers the method, path, query, and byte-identical body it was first used with; reusing it for a different request is rejected with 422. Protection is best effort: if the key store is unavailable, or a record is lost early, a retry can execute again even after an earlier 409. See the Idempotency section of the API description.",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ExecuteWorkflowRequest"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExecuteWorkflowOutput"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "workflows:write"
            ]
          }
        ]
      }
    },
    "/v2/workspaces/{workspace_id}/workflows/{workflow_id}/runs/{run_id}": {
      "get": {
        "tags": [
          "Workflows"
        ],
        "summary": "Get workflow run",
        "description": "Get the status and results of a workflow run.",
        "operationId": "getWorkflowRunV2",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "workflow_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workflow.",
              "title": "Workflow Id"
            },
            "description": "Id of the workflow."
          },
          {
            "name": "run_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workflow run.",
              "title": "Run Id"
            },
            "description": "Id of the workflow run."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetWorkflowRunOutput"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "workflows:read"
            ]
          }
        ]
      }
    },
    "/v1/workspaces/{workspace_id}/inferences/estimate": {
      "post": {
        "tags": [
          "Inferences"
        ],
        "summary": "Estimate inference price",
        "description": "Estimate the Creative Units cost of an inference with given parameters.",
        "operationId": "estimateInferencePrice",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Opaque key making a retry of this request return the first result. A 2xx response is replayed for 24 hours with `Idempotent-Replayed: true`. A 4xx releases the key. A 5xx, or a request still running, holds the key for 120 seconds, during which a retry gets 409; after that a retry executes again. The key covers the method, path, query, and byte-identical body it was first used with; reusing it for a different request is rejected with 422. Protection is best effort: if the key store is unavailable, or a record is lost early, a retry can execute again even after an earlier 409. See the Idempotency section of the API description.",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EstimateInferencePriceRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EstimateForgePriceOutput"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "generation:read"
            ]
          }
        ]
      }
    },
    "/v1/workspaces/{workspace_id}/inferences": {
      "post": {
        "tags": [
          "Inferences"
        ],
        "summary": "Execute inference",
        "description": "Start an AI inference (image, video, 3D, or audio). Returns immediately with an ID. Poll with GET /workspaces/{workspace_id}/inferences/{inference_id} for results. Creative Units are not checked here: an underfunded workspace is still accepted and the run then reports FAILED with error_code INSUFFICIENT_BALANCE. Use the estimate endpoint's has_sufficient_creative_units to check before submitting.",
        "operationId": "executeInference",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Opaque key making a retry of this request return the first result. A 2xx response is replayed for 24 hours with `Idempotent-Replayed: true`. A 4xx releases the key. A 5xx, or a request still running, holds the key for 120 seconds, during which a retry gets 409; after that a retry executes again. The key covers the method, path, query, and byte-identical body it was first used with; reusing it for a different request is rejected with 422. Protection is best effort: if the key store is unavailable, or a record is lost early, a retry can execute again even after an earlier 409. See the Idempotency section of the API description.",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ExecuteInferenceRequest"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExecuteForgeOutput"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "generation:write"
            ]
          }
        ]
      }
    },
    "/v1/workspaces/{workspace_id}/inferences/{inference_id}": {
      "get": {
        "tags": [
          "Inferences"
        ],
        "summary": "Get inference run",
        "description": "Get the status and results of an inference run.",
        "operationId": "getInferenceRun",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "inference_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the generation.",
              "title": "Inference Id"
            },
            "description": "Id of the generation."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetForgeRunOutput"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "generation:read"
            ]
          }
        ]
      }
    },
    "/v1/workspaces/{workspace_id}/inferences/{inference_id}/cancel": {
      "post": {
        "tags": [
          "Inferences"
        ],
        "summary": "Cancel inference run",
        "description": "Request cancellation of an in-flight inference. Fire-and-forget: returns immediately after signalling the run to stop. Poll GET /workspaces/{workspace_id}/inferences/{inference_id} for the eventual CANCELLED status. A run that already COMPLETED can no longer be cancelled and returns INFERENCE_ALREADY_COMPLETE; the other terminal states are idempotent no-ops.",
        "operationId": "cancelInference",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "inference_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the generation.",
              "title": "Inference Id"
            },
            "description": "Id of the generation."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Opaque key making a retry of this request return the first result. A 2xx response is replayed for 24 hours with `Idempotent-Replayed: true`. A 4xx releases the key. A 5xx, or a request still running, holds the key for 120 seconds, during which a retry gets 409; after that a retry executes again. The key covers the method, path, query, and byte-identical body it was first used with; reusing it for a different request is rejected with 422. Protection is best effort: if the key store is unavailable, or a record is lost early, a retry can execute again even after an earlier 409. See the Idempotency section of the API description.",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          }
        ],
        "responses": {
          "202": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetForgeRunOutput"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "generation:write"
            ]
          }
        ]
      }
    },
    "/v2/workspaces/{workspace_id}/inferences/{inference_id}/cancel": {
      "post": {
        "tags": [
          "Inferences"
        ],
        "summary": "Cancel inference run",
        "description": "Request cancellation of an in-flight inference. Fire-and-forget: returns immediately after signalling the run to stop. Poll GET /workspaces/{workspace_id}/inferences/{inference_id} for the eventual CANCELLED status. A run that already COMPLETED can no longer be cancelled and returns INFERENCE_ALREADY_COMPLETE; the other terminal states are idempotent no-ops.",
        "operationId": "cancelInferenceV2",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "inference_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the generation.",
              "title": "Inference Id"
            },
            "description": "Id of the generation."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Opaque key making a retry of this request return the first result. A 2xx response is replayed for 24 hours with `Idempotent-Replayed: true`. A 4xx releases the key. A 5xx, or a request still running, holds the key for 120 seconds, during which a retry gets 409; after that a retry executes again. The key covers the method, path, query, and byte-identical body it was first used with; reusing it for a different request is rejected with 422. Protection is best effort: if the key store is unavailable, or a record is lost early, a retry can execute again even after an earlier 409. See the Idempotency section of the API description.",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          }
        ],
        "responses": {
          "202": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetForgeRunOutput"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "generation:write"
            ]
          }
        ]
      }
    },
    "/v2/workspaces/{workspace_id}/inferences/estimate": {
      "post": {
        "tags": [
          "Inferences"
        ],
        "summary": "Estimate inference price",
        "description": "Estimate the Creative Units cost of an inference with given parameters. Prices through the same reference-set translation and model selection as the execute endpoint, so the price matches what execution charges for identical inputs.\n\nReference-set errors: `REFERENCE_SET_NOT_FOUND` (404 — unknown, deleted, or outside this workspace's reach), `NO_COMPATIBLE_MODEL` (422 — no enabled base model can apply these sets), `REFERENCE_SET_REQUIRED` (422 — the chosen model needs an applicable set), `REFERENCE_SET_CONFLICT` (422 — two sets supply the same singular adapter), `REFERENCE_SET_LIMIT_EXCEEDED` (422: more sets of one kind than the model takes, e.g. a second ANIMATION set on a 3D animating model), and `INPUT_FILE_REQUIRED` (422 — the sets select an edit-only model with no asset to edit).",
        "operationId": "estimateInferencePriceV2",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Opaque key making a retry of this request return the first result. A 2xx response is replayed for 24 hours with `Idempotent-Replayed: true`. A 4xx releases the key. A 5xx, or a request still running, holds the key for 120 seconds, during which a retry gets 409; after that a retry executes again. The key covers the method, path, query, and byte-identical body it was first used with; reusing it for a different request is rejected with 422. Protection is best effort: if the key store is unavailable, or a record is lost early, a retry can execute again even after an earlier 409. See the Idempotency section of the API description.",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EstimateInferencePriceV2Request"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EstimateInferencePriceV2Output"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "generation:read"
            ]
          }
        ]
      }
    },
    "/v2/workspaces/{workspace_id}/inferences": {
      "post": {
        "tags": [
          "Inferences"
        ],
        "summary": "Execute inference",
        "description": "Start an AI inference (image, video, 3D, or audio). Pass a `base_model_id`, at least one entry in `reference_sets`, or both — with reference sets alone a compatible base model is picked from them. Returns immediately with an ID. Poll with GET /v2/workspaces/{workspace_id}/inferences/{inference_id} for results. Creative Units are not checked here: an underfunded workspace is still accepted and the run then reports FAILED with error_code INSUFFICIENT_BALANCE. Use the estimate endpoint's has_sufficient_creative_units to check before submitting.\n\nReference-set errors: `REFERENCE_SET_NOT_FOUND` (404 — unknown, deleted, or outside this workspace's reach), `NO_COMPATIBLE_MODEL` (422 — no enabled base model can apply these sets), `REFERENCE_SET_REQUIRED` (422 — the chosen model needs an applicable set), `REFERENCE_SET_CONFLICT` (422 — two sets supply the same singular adapter), `REFERENCE_SET_LIMIT_EXCEEDED` (422: more sets of one kind than the model takes, e.g. a second ANIMATION set on a 3D animating model), and `INPUT_FILE_REQUIRED` (422 — the sets select an edit-only model with no asset to edit).",
        "operationId": "executeInferenceV2",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Opaque key making a retry of this request return the first result. A 2xx response is replayed for 24 hours with `Idempotent-Replayed: true`. A 4xx releases the key. A 5xx, or a request still running, holds the key for 120 seconds, during which a retry gets 409; after that a retry executes again. The key covers the method, path, query, and byte-identical body it was first used with; reusing it for a different request is rejected with 422. Protection is best effort: if the key store is unavailable, or a record is lost early, a retry can execute again even after an earlier 409. See the Idempotency section of the API description.",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ExecuteInferenceV2Request"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExecuteInferenceV2Output"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "generation:write"
            ]
          }
        ]
      }
    },
    "/v2/workspaces/{workspace_id}/inferences/{inference_id}": {
      "get": {
        "tags": [
          "Inferences"
        ],
        "summary": "Get inference run",
        "description": "Get the status and results of an inference run, plus what each attached reference set contributed to it.",
        "operationId": "getInferenceRunV2",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "inference_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the generation.",
              "title": "Inference Id"
            },
            "description": "Id of the generation."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetInferenceRunV2Output"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "generation:read"
            ]
          }
        ]
      }
    },
    "/v1/workspaces/{workspace_id}/reference-sets": {
      "post": {
        "tags": [
          "Training"
        ],
        "summary": "Create a reference set",
        "description": "Create a reference set (a curated collection of already-uploaded files) that can then be trained into a custom style/LoRA. Upload files first via the Files API, then pass their IDs here.",
        "operationId": "createReferenceSet",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Opaque key making a retry of this request return the first result. A 2xx response is replayed for 24 hours with `Idempotent-Replayed: true`. A 4xx releases the key. A 5xx, or a request still running, holds the key for 120 seconds, during which a retry gets 409; after that a retry executes again. The key covers the method, path, query, and byte-identical body it was first used with; reusing it for a different request is rejected with 422. Protection is best effort: if the key store is unavailable, or a record is lost early, a retry can execute again even after an earlier 409. See the Idempotency section of the API description.",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateReferenceSetRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateReferenceSetResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "reference_sets:write"
            ]
          }
        ]
      }
    },
    "/v1/workspaces/{workspace_id}/training-runs/estimate": {
      "post": {
        "tags": [
          "Training"
        ],
        "summary": "Estimate training price",
        "description": "Estimate the Creative Units cost of training a LoRA for a reference set.",
        "operationId": "estimateTrainingPrice",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Opaque key making a retry of this request return the first result. A 2xx response is replayed for 24 hours with `Idempotent-Replayed: true`. A 4xx releases the key. A 5xx, or a request still running, holds the key for 120 seconds, during which a retry gets 409; after that a retry executes again. The key covers the method, path, query, and byte-identical body it was first used with; reusing it for a different request is rejected with 422. Protection is best effort: if the key store is unavailable, or a record is lost early, a retry can execute again even after an earlier 409. See the Idempotency section of the API description.",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EstimateTrainingPriceRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EstimateTrainingPriceResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "reference_sets:read"
            ]
          }
        ]
      }
    },
    "/v1/workspaces/{workspace_id}/training-runs": {
      "post": {
        "tags": [
          "Training"
        ],
        "summary": "Start a training run",
        "description": "Start training a custom style/LoRA from a reference set. Returns immediately with a run ID. Poll GET /workspaces/{workspace_id}/training-runs/{training_run_id} for progress. Creative Units are reserved at submission; call the estimate endpoint first to check cost.",
        "operationId": "startTrainingRun",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Opaque key making a retry of this request return the first result. A 2xx response is replayed for 24 hours with `Idempotent-Replayed: true`. A 4xx releases the key. A 5xx, or a request still running, holds the key for 120 seconds, during which a retry gets 409; after that a retry executes again. The key covers the method, path, query, and byte-identical body it was first used with; reusing it for a different request is rejected with 422. Protection is best effort: if the key store is unavailable, or a record is lost early, a retry can execute again even after an earlier 409. See the Idempotency section of the API description.",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StartTrainingRequest"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StartTrainingResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "reference_sets:write"
            ]
          }
        ]
      },
      "get": {
        "tags": [
          "Training"
        ],
        "summary": "List training runs",
        "description": "List a workspace's training runs, newest first, filterable by reference set and state.",
        "operationId": "listTrainingRuns",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "reference_set_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "uuid"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Filter to one reference set.",
              "title": "Reference Set Id"
            },
            "description": "Filter to one reference set."
          },
          {
            "name": "status_filter",
            "in": "query",
            "required": false,
            "schema": {
              "enum": [
                "any",
                "in_progress",
                "terminal_success",
                "terminal_failure"
              ],
              "type": "string",
              "description": "Filter by coarse run state.",
              "default": "any",
              "title": "Status Filter"
            },
            "description": "Filter by coarse run state."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 100,
              "minimum": 1,
              "description": "Maximum number of results to return.",
              "default": 20,
              "title": "Limit"
            },
            "description": "Maximum number of results to return."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Cursor from a previous response to fetch the next page.",
              "title": "Cursor"
            },
            "description": "Cursor from a previous response to fetch the next page."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListTrainingRunsResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "reference_sets:read"
            ]
          }
        ]
      }
    },
    "/v1/workspaces/{workspace_id}/training-runs/{training_run_id}": {
      "get": {
        "tags": [
          "Training"
        ],
        "summary": "Get a training run",
        "description": "Get the status and progress of a training run.",
        "operationId": "getTrainingRun",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "training_run_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the training run.",
              "title": "Training Run Id"
            },
            "description": "Id of the training run."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetTrainingRunResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "reference_sets:read"
            ]
          }
        ]
      }
    },
    "/v1/workspaces/{workspace_id}/training-runs/{training_run_id}/cancel": {
      "post": {
        "tags": [
          "Training"
        ],
        "summary": "Cancel a training run",
        "description": "Cancel an in-flight training run and release any reserved Creative Units.",
        "operationId": "cancelTrainingRun",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "training_run_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the training run.",
              "title": "Training Run Id"
            },
            "description": "Id of the training run."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Opaque key making a retry of this request return the first result. A 2xx response is replayed for 24 hours with `Idempotent-Replayed: true`. A 4xx releases the key. A 5xx, or a request still running, holds the key for 120 seconds, during which a retry gets 409; after that a retry executes again. The key covers the method, path, query, and byte-identical body it was first used with; reusing it for a different request is rejected with 422. Protection is best effort: if the key store is unavailable, or a record is lost early, a retry can execute again even after an earlier 409. See the Idempotency section of the API description.",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CancelTrainingRunResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "reference_sets:write"
            ]
          }
        ]
      }
    },
    "/v1/workspaces/{workspace_id}/training-runs/{training_run_id}/model": {
      "get": {
        "tags": [
          "Training"
        ],
        "summary": "Get a run's trained model",
        "description": "Get the trained finetune (LoRA) produced by a completed training run.",
        "operationId": "getTrainedModel",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "training_run_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the training run.",
              "title": "Training Run Id"
            },
            "description": "Id of the training run."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TrainedModelResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "reference_sets:read"
            ]
          }
        ]
      }
    },
    "/v2/workspaces/{workspace_id}/training-runs/estimate": {
      "post": {
        "tags": [
          "Training"
        ],
        "summary": "Estimate training price",
        "description": "Estimate the Creative Units cost of training a LoRA for a reference set.",
        "operationId": "estimateTrainingPriceV2",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Opaque key making a retry of this request return the first result. A 2xx response is replayed for 24 hours with `Idempotent-Replayed: true`. A 4xx releases the key. A 5xx, or a request still running, holds the key for 120 seconds, during which a retry gets 409; after that a retry executes again. The key covers the method, path, query, and byte-identical body it was first used with; reusing it for a different request is rejected with 422. Protection is best effort: if the key store is unavailable, or a record is lost early, a retry can execute again even after an earlier 409. See the Idempotency section of the API description.",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EstimateTrainingPriceRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EstimateTrainingPriceResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "reference_sets:read"
            ]
          }
        ]
      }
    },
    "/v2/workspaces/{workspace_id}/training-runs": {
      "post": {
        "tags": [
          "Training"
        ],
        "summary": "Start a training run",
        "description": "Start training a custom style/LoRA from a reference set. Returns immediately with a run ID. Poll GET /workspaces/{workspace_id}/training-runs/{training_run_id} for progress. Creative Units are reserved at submission; call the estimate endpoint first to check cost.",
        "operationId": "startTrainingRunV2",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Opaque key making a retry of this request return the first result. A 2xx response is replayed for 24 hours with `Idempotent-Replayed: true`. A 4xx releases the key. A 5xx, or a request still running, holds the key for 120 seconds, during which a retry gets 409; after that a retry executes again. The key covers the method, path, query, and byte-identical body it was first used with; reusing it for a different request is rejected with 422. Protection is best effort: if the key store is unavailable, or a record is lost early, a retry can execute again even after an earlier 409. See the Idempotency section of the API description.",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StartTrainingRequest"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StartTrainingResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "reference_sets:write"
            ]
          }
        ]
      },
      "get": {
        "tags": [
          "Training"
        ],
        "summary": "List training runs",
        "description": "List a workspace's training runs, newest first, filterable by reference set and state.",
        "operationId": "listTrainingRunsV2",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "reference_set_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "uuid"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Filter to one reference set.",
              "title": "Reference Set Id"
            },
            "description": "Filter to one reference set."
          },
          {
            "name": "status_filter",
            "in": "query",
            "required": false,
            "schema": {
              "enum": [
                "any",
                "in_progress",
                "terminal_success",
                "terminal_failure"
              ],
              "type": "string",
              "description": "Filter by coarse run state.",
              "default": "any",
              "title": "Status Filter"
            },
            "description": "Filter by coarse run state."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 100,
              "minimum": 1,
              "description": "Maximum number of results to return.",
              "default": 20,
              "title": "Limit"
            },
            "description": "Maximum number of results to return."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Cursor from a previous response to fetch the next page.",
              "title": "Cursor"
            },
            "description": "Cursor from a previous response to fetch the next page."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListTrainingRunsResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "reference_sets:read"
            ]
          }
        ]
      }
    },
    "/v2/workspaces/{workspace_id}/training-runs/{training_run_id}": {
      "get": {
        "tags": [
          "Training"
        ],
        "summary": "Get a training run",
        "description": "Get the status and progress of a training run.",
        "operationId": "getTrainingRunV2",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "training_run_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the training run.",
              "title": "Training Run Id"
            },
            "description": "Id of the training run."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetTrainingRunResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "reference_sets:read"
            ]
          }
        ]
      }
    },
    "/v2/workspaces/{workspace_id}/training-runs/{training_run_id}/cancel": {
      "post": {
        "tags": [
          "Training"
        ],
        "summary": "Cancel a training run",
        "description": "Cancel an in-flight training run and release any reserved Creative Units.",
        "operationId": "cancelTrainingRunV2",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "training_run_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the training run.",
              "title": "Training Run Id"
            },
            "description": "Id of the training run."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Opaque key making a retry of this request return the first result. A 2xx response is replayed for 24 hours with `Idempotent-Replayed: true`. A 4xx releases the key. A 5xx, or a request still running, holds the key for 120 seconds, during which a retry gets 409; after that a retry executes again. The key covers the method, path, query, and byte-identical body it was first used with; reusing it for a different request is rejected with 422. Protection is best effort: if the key store is unavailable, or a record is lost early, a retry can execute again even after an earlier 409. See the Idempotency section of the API description.",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CancelTrainingRunResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "reference_sets:write"
            ]
          }
        ]
      }
    },
    "/v2/workspaces/{workspace_id}/training-runs/{training_run_id}/model": {
      "get": {
        "tags": [
          "Training"
        ],
        "summary": "Get a run's trained model",
        "description": "Get the trained finetune (LoRA) produced by a completed training run.",
        "operationId": "getTrainedModelV2",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "training_run_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the training run.",
              "title": "Training Run Id"
            },
            "description": "Id of the training run."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TrainedModelResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "reference_sets:read"
            ]
          }
        ]
      }
    },
    "/v1/workspaces/{workspace_id}/files/upload-url": {
      "post": {
        "tags": [
          "Files"
        ],
        "summary": "Request signed upload URL (recommended)",
        "description": "Get a signed URL to upload a file directly to storage, bypassing the server. This is the recommended upload method for large files.\n\n**Flow:**\n1. Call this endpoint with content_type and file_size_bytes\n2. POST to the returned upload_url with header `x-goog-resumable: start` to get a session URI\n3. PUT your file content to the session URI (supports chunked/resumable uploads)\n4. Use the returned file_id as input to generation endpoints\n\nAllowed types: application/x-zip-compressed, application/zip, audio/mpeg, audio/wav, font/otf, font/ttf, image/heic, image/heic-sequence, image/heif, image/heif-sequence, image/jpeg, image/png, image/webp, model/gltf-binary, video/mp4. Max size: 100 MB for video, meshes and zip bundles, 64 MB for images and audio, 16 MB for fonts. Upload URL expires in 15 minutes.",
        "operationId": "requestFileUploadUrl",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Opaque key making a retry of this request return the first result. A 2xx response is replayed for 24 hours with `Idempotent-Replayed: true`. A 4xx releases the key. A 5xx, or a request still running, holds the key for 120 seconds, during which a retry gets 409; after that a retry executes again. The key covers the method, path, query, and byte-identical body it was first used with; reusing it for a different request is rejected with 422. Protection is best effort: if the key store is unavailable, or a record is lost early, a retry can execute again even after an earlier 409. See the Idempotency section of the API description.",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RequestUploadUrlRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RequestUploadUrlResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "library:write"
            ]
          }
        ]
      }
    },
    "/v2/workspaces/{workspace_id}/files/upload-url": {
      "post": {
        "tags": [
          "Files"
        ],
        "summary": "Request signed upload URL (recommended)",
        "description": "Get a signed URL to upload a file directly to storage, bypassing the server. This is the recommended upload method for large files.\n\n**Flow:**\n1. Call this endpoint with content_type and file_size_bytes\n2. POST to the returned upload_url with header `x-goog-resumable: start` to get a session URI\n3. PUT your file content to the session URI (supports chunked/resumable uploads)\n4. Use the returned file_id as input to generation endpoints\n\nAllowed types: application/x-zip-compressed, application/zip, audio/mpeg, audio/wav, font/otf, font/ttf, image/heic, image/heic-sequence, image/heif, image/heif-sequence, image/jpeg, image/png, image/webp, model/gltf-binary, video/mp4. Max size: 100 MB for video, meshes and zip bundles, 64 MB for images and audio, 16 MB for fonts. Upload URL expires in 15 minutes.",
        "operationId": "requestFileUploadUrlV2",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Opaque key making a retry of this request return the first result. A 2xx response is replayed for 24 hours with `Idempotent-Replayed: true`. A 4xx releases the key. A 5xx, or a request still running, holds the key for 120 seconds, during which a retry gets 409; after that a retry executes again. The key covers the method, path, query, and byte-identical body it was first used with; reusing it for a different request is rejected with 422. Protection is best effort: if the key store is unavailable, or a record is lost early, a retry can execute again even after an earlier 409. See the Idempotency section of the API description.",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RequestUploadUrlRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RequestUploadUrlResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "library:write"
            ]
          }
        ]
      }
    },
    "/v1/workspaces/{workspace_id}/scoring-rules": {
      "get": {
        "tags": [
          "Scoring"
        ],
        "summary": "List output scoring rules",
        "description": "The scoring rules in force for a workspace, or for a project inside it. Each rule is a studio's own standard that generated assets are judged against, scored 0-100.\n\nRules are authored in the app under workspace or project settings; this API reads them so a caller can pick which to score against and interpret the scores that come back — the same number means different things under different rules.",
        "operationId": "listScoringRules",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "project_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "uuid"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Limit the results to rules scoped to this project.",
              "title": "Project Id"
            },
            "description": "Limit the results to rules scoped to this project."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListScoringRulesOutput"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "projects:read"
            ]
          }
        ]
      }
    },
    "/v1/workspaces/{workspace_id}/scores": {
      "post": {
        "tags": [
          "Scoring"
        ],
        "summary": "Score files against the scope's rules",
        "description": "Queue scoring of up to 100 files against the output scoring rules in force.\n\nAccepted and asynchronous: every (file, rule) pair is a vision-model call that spends Creative Units, and the verdicts land over the following seconds to minutes. Poll `GET /v1/workspaces/{workspace_id}/files/{file_id}/scores` for the results.\n\nScoring a file again is allowed and appends a fresh verdict rather than replacing the previous one. A scope with no rules in force queues nothing and reports zero pairs.",
        "operationId": "scoreFiles",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Opaque key making a retry of this request return the first result. A 2xx response is replayed for 24 hours with `Idempotent-Replayed: true`. A 4xx releases the key. A 5xx, or a request still running, holds the key for 120 seconds, during which a retry gets 409; after that a retry executes again. The key covers the method, path, query, and byte-identical body it was first used with; reusing it for a different request is rejected with 422. Protection is best effort: if the key store is unavailable, or a record is lost early, a retry can execute again even after an earlier 409. See the Idempotency section of the API description.",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ScoreFilesBody"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ScoreFilesOutput"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "projects:write"
            ]
          }
        ]
      }
    },
    "/v1/workspaces/{workspace_id}/scoring-runs/{scoring_run_id}": {
      "get": {
        "tags": [
          "Scoring"
        ],
        "summary": "Get a scoring run",
        "description": "The status of one batch of scoring work, and its verdicts once it is complete.\n\n`completed_pair_count` below `requested_pair_count` on a complete run means some pairs went unjudged — an asset a judge could not read, say. That is a gap, not a failure: a failed run is one that never got to judge anything.",
        "operationId": "getScoringRun",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "scoring_run_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "The scoring run id returned when the batch was queued.",
              "title": "Scoring Run Id"
            },
            "description": "The scoring run id returned when the batch was queued."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetScoringRunOutput"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "projects:read"
            ]
          }
        ]
      }
    },
    "/v1/workspaces/{workspace_id}/files/{file_id}/scores": {
      "get": {
        "tags": [
          "Scoring"
        ],
        "summary": "Read a file's scores",
        "description": "The output scoring verdicts recorded against one file: the current score per rule, plus the headline score stamped on the file by whichever rule its scope nominated.\n\nAn empty `scores` list means the file has not been judged, not that it scored zero.",
        "operationId": "getFileScores",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "file_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the file.",
              "title": "File Id"
            },
            "description": "Id of the file."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FileScoresOutput"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "projects:read"
            ]
          }
        ]
      }
    },
    "/v2/workspaces/{workspace_id}/scoring-rules": {
      "get": {
        "tags": [
          "Scoring"
        ],
        "summary": "List output scoring rules",
        "description": "The scoring rules in force for a workspace, or for a project inside it. Each rule is a studio's own standard that generated assets are judged against, scored 0-100.\n\nRules are authored in the app under workspace or project settings; this API reads them so a caller can pick which to score against and interpret the scores that come back — the same number means different things under different rules.",
        "operationId": "listScoringRulesV2",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "project_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "uuid"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Limit the results to rules scoped to this project.",
              "title": "Project Id"
            },
            "description": "Limit the results to rules scoped to this project."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListScoringRulesOutput"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "projects:read"
            ]
          }
        ]
      }
    },
    "/v2/workspaces/{workspace_id}/scores": {
      "post": {
        "tags": [
          "Scoring"
        ],
        "summary": "Score files against the scope's rules",
        "description": "Queue scoring of up to 100 files against the output scoring rules in force.\n\nAccepted and asynchronous: every (file, rule) pair is a vision-model call that spends Creative Units, and the verdicts land over the following seconds to minutes. Poll `GET /v1/workspaces/{workspace_id}/files/{file_id}/scores` for the results.\n\nScoring a file again is allowed and appends a fresh verdict rather than replacing the previous one. A scope with no rules in force queues nothing and reports zero pairs.",
        "operationId": "scoreFilesV2",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Opaque key making a retry of this request return the first result. A 2xx response is replayed for 24 hours with `Idempotent-Replayed: true`. A 4xx releases the key. A 5xx, or a request still running, holds the key for 120 seconds, during which a retry gets 409; after that a retry executes again. The key covers the method, path, query, and byte-identical body it was first used with; reusing it for a different request is rejected with 422. Protection is best effort: if the key store is unavailable, or a record is lost early, a retry can execute again even after an earlier 409. See the Idempotency section of the API description.",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ScoreFilesBody"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ScoreFilesOutput"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "projects:write"
            ]
          }
        ]
      }
    },
    "/v2/workspaces/{workspace_id}/scoring-runs/{scoring_run_id}": {
      "get": {
        "tags": [
          "Scoring"
        ],
        "summary": "Get a scoring run",
        "description": "The status of one batch of scoring work, and its verdicts once it is complete.\n\n`completed_pair_count` below `requested_pair_count` on a complete run means some pairs went unjudged — an asset a judge could not read, say. That is a gap, not a failure: a failed run is one that never got to judge anything.",
        "operationId": "getScoringRunV2",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "scoring_run_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "The scoring run id returned when the batch was queued.",
              "title": "Scoring Run Id"
            },
            "description": "The scoring run id returned when the batch was queued."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetScoringRunOutput"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "projects:read"
            ]
          }
        ]
      }
    },
    "/v2/workspaces/{workspace_id}/files/{file_id}/scores": {
      "get": {
        "tags": [
          "Scoring"
        ],
        "summary": "Read a file's scores",
        "description": "The output scoring verdicts recorded against one file: the current score per rule, plus the headline score stamped on the file by whichever rule its scope nominated.\n\nAn empty `scores` list means the file has not been judged, not that it scored zero.",
        "operationId": "getFileScoresV2",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "file_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the file.",
              "title": "File Id"
            },
            "description": "Id of the file."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FileScoresOutput"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "projects:read"
            ]
          }
        ]
      }
    },
    "/v1/workspaces/{workspace_id}/webhook-secret": {
      "get": {
        "tags": [
          "Webhooks"
        ],
        "summary": "Read the webhook signing secret",
        "description": "The secret every delivery to this workspace's callbacks is signed with, minted on first read. Verify a delivery by computing HMAC-SHA256 over `{webhook-id}.{webhook-timestamp}.{raw body}` and comparing it to `webhook-signature` — or hand the secret to any Standard Webhooks library, which does exactly that.\n\nThis is a credential: anyone holding it can forge deliveries into your receivers.",
        "operationId": "getWebhookSecret",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookSecretResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "workspace:write"
            ]
          }
        ]
      }
    },
    "/v1/workspaces/{workspace_id}/webhook-secret/rotate": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "Rotate the webhook signing secret",
        "description": "Issue a new signing secret and put the outgoing one into a grace window. Both sign every delivery until the window closes, so update your receiver at your own pace rather than at the instant of rotation.",
        "operationId": "rotateWebhookSecret",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Opaque key making a retry of this request return the first result. A 2xx response is replayed for 24 hours with `Idempotent-Replayed: true`. A 4xx releases the key. A 5xx, or a request still running, holds the key for 120 seconds, during which a retry gets 409; after that a retry executes again. The key covers the method, path, query, and byte-identical body it was first used with; reusing it for a different request is rejected with 422. Protection is best effort: if the key store is unavailable, or a record is lost early, a retry can execute again even after an earlier 409. See the Idempotency section of the API description.",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RotateWebhookSecretResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "workspace:write"
            ]
          }
        ]
      }
    },
    "/v1/workspaces/{workspace_id}/webhook-tests": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "Send a test delivery",
        "description": "POST a signed sample event to a URL and report what came back, synchronously. Use it to check reachability and your signature verification before spending Creative Units on a real run. The sample carries `type` `inference.completed` with an empty `data` object, and is signed exactly as a real delivery is.\n\nNothing is charged, and no run is created.",
        "operationId": "testWebhook",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Opaque key making a retry of this request return the first result. A 2xx response is replayed for 24 hours with `Idempotent-Replayed: true`. A 4xx releases the key. A 5xx, or a request still running, holds the key for 120 seconds, during which a retry gets 409; after that a retry executes again. The key covers the method, path, query, and byte-identical body it was first used with; reusing it for a different request is rejected with 422. Protection is best effort: if the key store is unavailable, or a record is lost early, a retry can execute again even after an earlier 409. See the Idempotency section of the API description.",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookTestRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookTestResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "workspace:write"
            ]
          }
        ]
      }
    },
    "/v2/workspaces/{workspace_id}/webhook-secret": {
      "get": {
        "tags": [
          "Webhooks"
        ],
        "summary": "Read the webhook signing secret",
        "description": "The secret every delivery to this workspace's callbacks is signed with, minted on first read. Verify a delivery by computing HMAC-SHA256 over `{webhook-id}.{webhook-timestamp}.{raw body}` and comparing it to `webhook-signature` — or hand the secret to any Standard Webhooks library, which does exactly that.\n\nThis is a credential: anyone holding it can forge deliveries into your receivers.",
        "operationId": "getWebhookSecretV2",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookSecretResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "workspace:write"
            ]
          }
        ]
      }
    },
    "/v2/workspaces/{workspace_id}/webhook-secret/rotate": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "Rotate the webhook signing secret",
        "description": "Issue a new signing secret and put the outgoing one into a grace window. Both sign every delivery until the window closes, so update your receiver at your own pace rather than at the instant of rotation.",
        "operationId": "rotateWebhookSecretV2",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Opaque key making a retry of this request return the first result. A 2xx response is replayed for 24 hours with `Idempotent-Replayed: true`. A 4xx releases the key. A 5xx, or a request still running, holds the key for 120 seconds, during which a retry gets 409; after that a retry executes again. The key covers the method, path, query, and byte-identical body it was first used with; reusing it for a different request is rejected with 422. Protection is best effort: if the key store is unavailable, or a record is lost early, a retry can execute again even after an earlier 409. See the Idempotency section of the API description.",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RotateWebhookSecretResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "workspace:write"
            ]
          }
        ]
      }
    },
    "/v2/workspaces/{workspace_id}/webhook-tests": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "Send a test delivery",
        "description": "POST a signed sample event to a URL and report what came back, synchronously. Use it to check reachability and your signature verification before spending Creative Units on a real run. The sample carries `type` `inference.completed` with an empty `data` object, and is signed exactly as a real delivery is.\n\nNothing is charged, and no run is created.",
        "operationId": "testWebhookV2",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Id of the workspace that owns the resource.",
              "title": "Workspace Id"
            },
            "description": "Id of the workspace that owns the resource."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Opaque key making a retry of this request return the first result. A 2xx response is replayed for 24 hours with `Idempotent-Replayed: true`. A 4xx releases the key. A 5xx, or a request still running, holds the key for 120 seconds, during which a retry gets 409; after that a retry executes again. The key covers the method, path, query, and byte-identical body it was first used with; reusing it for a different request is rejected with 422. Protection is best effort: if the key store is unavailable, or a record is lost early, a retry can execute again even after an earlier 409. See the Idempotency section of the API description.",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookTestRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookTestResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated — missing or invalid Bearer token.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters, or an `Idempotency-Key` reused for a different request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — retry after the number of seconds in `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    },
                    "error_code": {
                      "type": "string",
                      "example": "ERROR_CODE",
                      "description": "Machine-readable error code: the last path segment of `type`."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail",
                    "error_code"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          },
          {
            "oauth2": []
          },
          {
            "serviceAccount": [
              "workspace:write"
            ]
          }
        ]
      }
    },
    "/versioning": {
      "get": {
        "summary": "Versioning and deprecation policy",
        "description": "How this API is versioned and how deprecations are announced.",
        "operationId": "getVersioningPolicy",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              },
              "text/markdown": {}
            }
          }
        },
        "security": []
      }
    },
    "/cli-auth": {
      "get": {
        "summary": "Get command-line client auth configuration",
        "description": "The OAuth client configuration for logging a user in from a native client: the `layer` command-line interface, or an application plugin built on it. Read this before starting a login: it names the public client id to use and the device login endpoints. Start a device login at `device_authorization_endpoint`, poll `token_endpoint` for its tokens, refresh them there, and revoke the refresh token at `revocation_endpoint` on sign-out.\n\nAn empty `client_id` means this deployment has no sign-in configured for that client; use a personal access token instead.",
        "operationId": "getCliAuthConfiguration",
        "parameters": [
          {
            "name": "client",
            "in": "query",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/CliClient",
              "description": "The client signing in. Each has an OAuth application of its own.",
              "default": "cli"
            },
            "description": "The client signing in. Each has an OAuth application of its own."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CliAuthConfiguration"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": []
      }
    },
    "/oauth/device/code": {
      "post": {
        "tags": [
          "Authentication"
        ],
        "summary": "Start a device login",
        "description": "OAuth 2.0 device authorization (RFC 8628 section 3.1), for Layer's own native clients: the plugin panels, the add-ons and the command-line interface. Show the person `user_code` and open `verification_uri_complete` in their browser, where they confirm the code and sign in; meanwhile poll the token endpoint with `grant_type=urn:ietf:params:oauth:grant-type:device_code` every `interval` seconds. The optional device fields describe the device on the confirm screen and on the person's Devices page.",
        "operationId": "startDeviceLogin",
        "requestBody": {
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/Body_startDeviceLogin"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IssuedDeviceCode"
                }
              }
            }
          },
          "400": {
            "description": "An OAuth 2.0 error"
          },
          "401": {
            "description": "Unknown client"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Too many device logins started from this address"
          }
        },
        "security": []
      }
    },
    "/oauth/token": {
      "post": {
        "tags": [
          "Authentication"
        ],
        "summary": "Exchange a credential for an access token",
        "description": "The OAuth 2.0 token endpoint. `grant_type` picks the exchange:\n\n- `client_credentials` (RFC 6749 section 4.4): authenticate as a service account, its id as `client_id` and one of its keys as `client_secret`, in the form body or as HTTP Basic credentials. The token is a signed JWT that lasts 60 minutes and carries every scope unless `scope` narrows it. Disabling or revoking the key, or disabling the service account, ends its tokens.\n- `urn:ietf:params:oauth:grant-type:device_code` (RFC 8628 section 3.4): a native client polling for the device login it started, with `device_code` and its `client_id`. Answers `authorization_pending` until the person approves, `slow_down` when polled sooner than the interval, then the token set, once.\n- `refresh_token`: a native client renewing the tokens a device login gave it, with `refresh_token` and its `client_id`. The refresh token is replaced on every use.",
        "operationId": "exchangeToken",
        "requestBody": {
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/Body_exchangeToken"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TokenResponse"
                }
              }
            }
          },
          "400": {
            "description": "An OAuth 2.0 error"
          },
          "401": {
            "description": "Client authentication failed"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": []
      }
    },
    "/oauth/revoke": {
      "post": {
        "tags": [
          "Authentication"
        ],
        "summary": "Revoke a key or refresh token",
        "description": "OAuth 2.0 token revocation (RFC 7009). A service account authenticates as for the token endpoint; revoking one of its keys ends the key and every access token exchanged for it. Access tokens are not revocable one by one (RFC 7009 section 2 lets a server decline): one sent here is answered with 200 and keeps working until it expires, at most an hour later. An unknown, expired or foreign token is answered the same way, so the response says nothing about it.\n\nA native client signs a person out by sending its refresh token with its `client_id` and no secret, which ends that refresh token.",
        "operationId": "revokeToken",
        "requestBody": {
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/Body_revokeToken"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "401": {
            "description": "Client authentication failed"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": []
      }
    }
  },
  "webhooks": {
    "inference.completed": {
      "post": {
        "summary": "Inference Event",
        "description": "Sent when a generation finishes, fails or is cancelled.",
        "operationId": "inference_eventinference_completed_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InferenceWebhookEvent"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "training.succeeded": {
      "post": {
        "summary": "Training Event",
        "description": "Sent when a training run finishes or fails.",
        "operationId": "training_eventtraining_succeeded_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TrainingWebhookEvent"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "scoring_run.completed": {
      "post": {
        "summary": "Scoring Run Event",
        "description": "Sent when a batch of output scoring settles, however it was triggered.",
        "operationId": "scoring_run_eventscoring_run_completed_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ScoringRunWebhookEvent"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "workflow_run.succeeded": {
      "post": {
        "summary": "Workflow Run Event",
        "description": "Sent when a workflow run finishes, fails or is cancelled.",
        "operationId": "workflow_run_eventworkflow_run_succeeded_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WorkflowRunWebhookEvent"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "AddGroupMemberBody": {
        "properties": {
          "principal_id": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ],
            "title": "Principal Id",
            "description": "Principal id of the workspace member to add to the group."
          },
          "user_id": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ],
            "title": "User Id",
            "description": "User id of the workspace member to add to the group. Deprecated: use principal_id.",
            "deprecated": true
          }
        },
        "type": "object",
        "title": "AddGroupMemberBody"
      },
      "AddProjectMembersBody": {
        "properties": {
          "user_ids": {
            "items": {
              "type": "string",
              "format": "uuid"
            },
            "type": "array",
            "maxItems": 50,
            "minItems": 1,
            "title": "User Ids",
            "description": "Ids of workspace members to add. All must already be active workspace members."
          }
        },
        "type": "object",
        "required": [
          "user_ids"
        ],
        "title": "AddProjectMembersBody"
      },
      "AudioAnchor": {
        "type": "string",
        "enum": [
          "START",
          "END"
        ],
        "title": "AudioAnchor",
        "description": "Which boundary of the source clip a section's times are measured from."
      },
      "AudioEditSection": {
        "properties": {
          "start_seconds": {
            "type": "number",
            "minimum": 0,
            "title": "Start Seconds"
          },
          "end_seconds": {
            "type": "number",
            "minimum": 0,
            "title": "End Seconds"
          },
          "anchor": {
            "$ref": "#/components/schemas/AudioAnchor",
            "default": "START"
          }
        },
        "type": "object",
        "required": [
          "start_seconds",
          "end_seconds"
        ],
        "title": "AudioEditSection",
        "description": "An interior time window of the source clip to regenerate (inpaint).\n\nTimes are non-negative magnitudes measured from ``anchor``. The window is\nalways inside the clip; extending past the clip is outpainting (see\n[[AudioExtension]]), a separate operation."
      },
      "AudioExtension": {
        "properties": {
          "before_seconds": {
            "type": "number",
            "minimum": 0,
            "title": "Before Seconds",
            "default": 0
          },
          "after_seconds": {
            "type": "number",
            "minimum": 0,
            "title": "After Seconds",
            "default": 0
          }
        },
        "type": "object",
        "title": "AudioExtension",
        "description": "Outpaint: how much audio to add before/after the source clip."
      },
      "AudioOutputFormat": {
        "type": "string",
        "enum": [
          "mp3",
          "wav",
          "aac",
          "flac"
        ],
        "title": "AudioOutputFormat",
        "description": "Container for a delivered audio file.\n\nProviders name these their own way and Layer never re-encodes what one returns, so the\nformat a caller asks for is only keepable on models whose capabilities list it. Members are\nnamed for their wire value: the frontend artifacts preserve enum *names*, and a name that\ndiffered from the value would hand clients a format string the request API rejects."
      },
      "BaseModelCapabilitiesREST": {
        "properties": {
          "session_modes": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Session Modes",
            "description": "Supported modes: create, create_video, create_3_d, create_speech, create_sound_effect, prompt_edit_image, etc."
          },
          "text_prompt": {
            "type": "boolean",
            "title": "Text Prompt",
            "default": false
          },
          "text_prompt_required": {
            "type": "boolean",
            "title": "Text Prompt Required",
            "default": false
          },
          "max_prompt_chars": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Max Prompt Chars",
            "description": "Longest prompt, in characters, the model accepts; null when unbounded."
          },
          "negative_prompt": {
            "type": "boolean",
            "title": "Negative Prompt",
            "default": false
          },
          "seed": {
            "type": "boolean",
            "title": "Seed",
            "default": false
          },
          "inpainting": {
            "type": "boolean",
            "title": "Inpainting",
            "default": false
          },
          "outpainting": {
            "type": "boolean",
            "title": "Outpainting",
            "default": false
          },
          "tileability": {
            "type": "boolean",
            "title": "Tileability",
            "default": false
          },
          "native_tileability": {
            "type": "boolean",
            "title": "Native Tileability",
            "description": "Generates a tileable image by construction when `tileability` is set, rather than through Layer's seam-repair pass. Cannot be combined with a LoRA style.",
            "default": false
          },
          "tile_grid": {
            "type": "boolean",
            "title": "Tile Grid",
            "description": "Draws a game tile (isometric or hex) onto a fixed grid when a generation sets `tile_grid`.",
            "default": false
          },
          "guidance_file_types": {
            "items": {
              "$ref": "#/components/schemas/ToolGuidanceFileTypeSupport"
            },
            "type": "array",
            "title": "Guidance File Types",
            "description": "Supported guidance inputs and their per-type file limits. `init_image` is the source image an edit model modifies; `reference_image` supplies subjects to reproduce; `ip_adapter` is legacy IP-Adapter style-only transfer."
          },
          "shared_guidance_limits": {
            "items": {
              "$ref": "#/components/schemas/ToolSharedGuidanceLimit"
            },
            "type": "array",
            "title": "Shared Guidance Limits",
            "description": "Caps on the combined count of several guidance types, on top of each type's own max_count. A run must fit both: 9 images, 3 videos and 3 audio files can each be within their own limits and still exceed a 12-file total."
          },
          "init_image_views": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Init Image Views",
            "description": "3D models that read their init_image files by view: the views a source can fill. Tag each init_image with the view it shows (`view` on the guidance file); the model reads each file as the view it is tagged with, so a wrong tag warps the mesh. Empty when the model takes its views unordered."
          },
          "duration_seconds": {
            "items": {
              "type": "integer"
            },
            "type": "array",
            "title": "Duration Seconds",
            "description": "Supported video durations in seconds"
          },
          "duration_seconds_min": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Duration Seconds Min",
            "description": "Audio models: shortest clip this model generates, in seconds."
          },
          "duration_seconds_max": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Duration Seconds Max",
            "description": "Audio models: longest clip this model generates, in seconds. Pass duration_seconds between the min and max; a request outside them is refused."
          },
          "duration_seconds_required": {
            "type": "boolean",
            "title": "Duration Seconds Required",
            "description": "This model has no default clip length; without duration_seconds the shortest is used.",
            "default": false
          },
          "quality_levels": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Quality Levels",
            "description": "Quality rungs this model offers, lowest first, from minimal, low, medium, high, xhigh, max. Empty means the model has no quality control. Pass one of these as `quality`; a rung outside the list is clamped to the nearest one offered rather than refused. Higher rungs can cost more — price a run before spending on one."
          },
          "generate_audio": {
            "type": "boolean",
            "title": "Generate Audio",
            "default": false
          },
          "lipsync": {
            "type": "boolean",
            "title": "Lipsync",
            "default": false
          },
          "textures": {
            "type": "boolean",
            "title": "Textures",
            "default": false
          },
          "quad_mesh": {
            "type": "boolean",
            "title": "Quad Mesh",
            "default": false
          },
          "pbr_materials": {
            "type": "boolean",
            "title": "Pbr Materials",
            "default": false
          },
          "generate_parts": {
            "type": "boolean",
            "title": "Generate Parts",
            "default": false
          },
          "text_to_speech": {
            "type": "boolean",
            "title": "Text To Speech",
            "default": false
          },
          "sound_effect": {
            "type": "boolean",
            "title": "Sound Effect",
            "default": false
          },
          "music": {
            "type": "boolean",
            "title": "Music",
            "description": "Composes music. Distinguishes a music model from a sound-effect model, which the modality and the duration range alone do not.",
            "default": false
          },
          "lyrics": {
            "type": "boolean",
            "title": "Lyrics",
            "description": "Takes sung words in a dedicated lyrics input, separate from the text prompt. This describes the input shape, not whether the model can sing: some families read lyrics written into the prompt instead, so a false value is not a reason to rule a model out for a song.",
            "default": false
          },
          "auto_duration": {
            "type": "boolean",
            "title": "Auto Duration",
            "description": "The model sets the output length itself, from the text or the input file. It has no duration control, so duration_seconds is ignored: do not promise a requested length.",
            "default": false
          },
          "instrumental": {
            "type": "boolean",
            "title": "Instrumental",
            "description": "Takes a flag that guarantees no vocals. On other music models, asking for an instrumental in the prompt is only a suggestion.",
            "default": false
          },
          "loop": {
            "type": "boolean",
            "title": "Loop",
            "description": "Composes the clip to repeat with no audible seam when the `loop` parameter is set.",
            "default": false
          },
          "composition_plan": {
            "type": "boolean",
            "title": "Composition Plan",
            "description": "Takes the track as an ordered list of sections, each with its own length, styles and sung lines, via the `composition_plan` parameter. A plan supersedes `prompt`, `duration_seconds` and `instrumental`, which are dropped rather than sent with it.",
            "default": false
          },
          "audio_inpaint": {
            "type": "boolean",
            "title": "Audio Inpaint",
            "default": false
          },
          "audio_outpaint": {
            "type": "boolean",
            "title": "Audio Outpaint",
            "default": false
          },
          "audio_segments": {
            "type": "boolean",
            "title": "Audio Segments",
            "description": "Scores a video stretch by stretch from a contiguous list of per-stretch briefs.",
            "default": false
          },
          "output_formats": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Output Formats",
            "description": "Containers this model can be asked to deliver. Layer never re-encodes a clip, so an empty list means the model returns what it returns and the format cannot be promised."
          },
          "dub_languages": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Dub Languages",
            "description": "ISO 639-1 codes a `dub_video` model can speak, passed to forge as `target_language`."
          },
          "voice_reference_set_required": {
            "type": "boolean",
            "title": "Voice Reference Set Required",
            "description": "Speaks only in a trained voice, so a generation needs a reference set holding one. Without it the provider falls back to its own default voice.",
            "default": false
          },
          "rigging": {
            "type": "boolean",
            "title": "Rigging",
            "default": false
          },
          "animation": {
            "type": "boolean",
            "title": "Animation",
            "default": false
          },
          "camera_transform": {
            "type": "boolean",
            "title": "Camera Transform",
            "default": false
          },
          "draft": {
            "type": "boolean",
            "title": "Draft",
            "description": "Renders a quick, low-cost draft when `draft` is set, to be completed at full quality later by its completion model (see the forge instructions).",
            "default": false
          },
          "camera_trajectory": {
            "type": "boolean",
            "title": "Camera Trajectory",
            "default": false
          },
          "voice_changer": {
            "type": "boolean",
            "title": "Voice Changer",
            "default": false
          },
          "audio_isolation": {
            "type": "boolean",
            "title": "Audio Isolation",
            "default": false
          },
          "audio_denoise": {
            "type": "boolean",
            "title": "Audio Denoise",
            "default": false
          },
          "audio_separation": {
            "type": "boolean",
            "title": "Audio Separation",
            "default": false
          },
          "subtitle_presets": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Subtitle Presets",
            "description": "Caption styles this subtitle model takes as `subtitle_preset`."
          },
          "subtitle_dynamic_presets": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Subtitle Dynamic Presets",
            "description": "The `subtitle_presets` that animate word by word; they bill at a higher rate than the rest."
          },
          "subtitle_primary_color": {
            "type": "boolean",
            "title": "Subtitle Primary Color",
            "description": "Takes the caption text colour as `subtitle_color`.",
            "default": false
          },
          "subtitle_secondary_color": {
            "type": "boolean",
            "title": "Subtitle Secondary Color",
            "description": "Takes the colour of the words it emphasises as `subtitle_secondary_color`.",
            "default": false
          },
          "subtitle_alignment": {
            "type": "boolean",
            "title": "Subtitle Alignment",
            "description": "Takes the captions' vertical position as `subtitle_alignment`.",
            "default": false
          },
          "subtitle_text_srt": {
            "type": "boolean",
            "title": "Subtitle Text Srt",
            "description": "Reads `prompt` as SRT cues to burn in verbatim and refuses any other text there; an empty prompt transcribes the video's own audio.",
            "default": false
          },
          "output_aspect_ratios": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Output Aspect Ratios"
          },
          "output_size_envelope": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Output Size Envelope"
          }
        },
        "type": "object",
        "title": "BaseModelCapabilitiesREST",
        "description": "ToolModelCapabilities without the MCP token-saving serializer — returns all fields for REST."
      },
      "BaseModelDefaultsOutput": {
        "properties": {
          "featured_by_modality": {
            "additionalProperties": {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            "propertyNames": {
              "$ref": "#/components/schemas/Modality"
            },
            "type": "object",
            "title": "Featured By Modality",
            "description": "Recommended base models per output modality, best first. `[0]` is the default for a request that names only a modality."
          },
          "preferred_by_use_case": {
            "additionalProperties": {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            "propertyNames": {
              "$ref": "#/components/schemas/InferenceUseCase"
            },
            "type": "object",
            "title": "Preferred By Use Case",
            "description": "Recommended base models per use case, best first. Finer-grained than modality — prefer this when the caller's intent is known."
          },
          "base_models": {
            "items": {
              "$ref": "#/components/schemas/BaseModelSummary"
            },
            "type": "array",
            "title": "Base Models",
            "description": "Details for every base model named above, deduplicated, so a client can render a recommendation without a second request."
          }
        },
        "type": "object",
        "required": [
          "featured_by_modality",
          "preferred_by_use_case",
          "base_models"
        ],
        "title": "BaseModelDefaultsOutput",
        "description": "Layer's curated recommendations, filtered to what this workspace may run.\n\nBoth maps are ordered best-first, and entry ``[0]`` is the pick to use when the\ncaller expresses no preference. Later entries are genuine fallbacks, so a client\nholding a stale copy can walk the list. Buckets left empty by workspace filtering\nare omitted rather than returned empty, so a present key always has a usable pick."
      },
      "BaseModelDetail": {
        "properties": {
          "base_model_id": {
            "type": "string",
            "title": "Base Model Id",
            "description": "Base model identifier, e.g. flux-dev — pass it as `base_model_id`."
          },
          "name": {
            "type": "string",
            "title": "Name",
            "description": "Display name."
          },
          "aliases": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Aliases",
            "description": "Community nicknames this model is also known by.",
            "default": []
          },
          "modality": {
            "$ref": "#/components/schemas/Modality",
            "description": "image, video, three_d, or audio."
          },
          "provider": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Provider",
            "description": "Slug of the organization behind the model, e.g. openai or bfl, when known."
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description",
            "description": "Short description."
          },
          "price_per_unit": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Price Per Unit",
            "description": "CU cost per measurement unit."
          },
          "price_unit": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Price Unit",
            "description": "Measurement unit, e.g. megapixel, second, generation."
          },
          "inference_timing": {
            "type": "string",
            "title": "Inference Timing",
            "description": "Typical generation time range, e.g. '5-15s'."
          },
          "capabilities": {
            "$ref": "#/components/schemas/BaseModelCapabilitiesREST",
            "description": "Supported inputs, sizes, and generation features."
          }
        },
        "type": "object",
        "required": [
          "base_model_id",
          "name",
          "modality",
          "inference_timing",
          "capabilities"
        ],
        "title": "BaseModelDetail"
      },
      "BaseModelSummary": {
        "properties": {
          "base_model_id": {
            "type": "string",
            "title": "Base Model Id",
            "description": "Base model identifier, e.g. flux-dev — pass it as `base_model_id`."
          },
          "name": {
            "type": "string",
            "title": "Name",
            "description": "Display name."
          },
          "aliases": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Aliases",
            "description": "Community nicknames this model is also known by.",
            "default": []
          },
          "modality": {
            "$ref": "#/components/schemas/Modality",
            "description": "image, video, three_d, or audio."
          },
          "provider": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Provider",
            "description": "Slug of the organization behind the model, e.g. openai or bfl, when known."
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description",
            "description": "Short description."
          },
          "price_per_unit": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Price Per Unit",
            "description": "CU cost per measurement unit."
          },
          "price_unit": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Price Unit",
            "description": "Measurement unit, e.g. megapixel, second, generation."
          },
          "inference_timing": {
            "type": "string",
            "title": "Inference Timing",
            "description": "Typical generation time range, e.g. '5-15s'."
          }
        },
        "type": "object",
        "required": [
          "base_model_id",
          "name",
          "modality",
          "inference_timing"
        ],
        "title": "BaseModelSummary"
      },
      "BlueprintRunStatus": {
        "type": "string",
        "enum": [
          "pending",
          "running",
          "success",
          "failure",
          "cancelled"
        ],
        "title": "BlueprintRunStatus",
        "description": "Enum representing the status of a blueprint run."
      },
      "Body_exchangeToken": {
        "properties": {
          "grant_type": {
            "type": "string",
            "title": "Grant Type",
            "description": "`client_credentials`, `urn:ietf:params:oauth:grant-type:device_code` or `refresh_token`."
          },
          "client_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Client Id",
            "description": "The service account's or native client's id."
          },
          "client_secret": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Client Secret",
            "description": "One of the service account's keys."
          },
          "scope": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Scope",
            "description": "Space-delimited scopes to narrow the token to."
          },
          "device_code": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Device Code",
            "description": "Device grant: the code the device login returned."
          },
          "refresh_token": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Refresh Token",
            "description": "Refresh grant: the refresh token to renew."
          }
        },
        "type": "object",
        "required": [
          "grant_type"
        ],
        "title": "Body_exchangeToken"
      },
      "Body_revokeToken": {
        "properties": {
          "token": {
            "type": "string",
            "title": "Token",
            "description": "The service account key, or a native client's refresh token."
          },
          "client_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Client Id",
            "description": "The service account's or native client's id."
          },
          "client_secret": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Client Secret",
            "description": "One of the service account's keys."
          }
        },
        "type": "object",
        "required": [
          "token"
        ],
        "title": "Body_revokeToken"
      },
      "Body_startDeviceLogin": {
        "properties": {
          "client_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Client Id",
            "description": "The native client's id."
          },
          "scope": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Scope",
            "description": "Space-delimited subset of `openid profile email offline_access`."
          },
          "audience": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Audience",
            "description": "The API audience. Optional."
          },
          "device_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Device Name",
            "description": "The machine's name, shown on the person's Devices page."
          },
          "app": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "App",
            "description": "The host application: `photoshop`, `figma`, `blender`, `cli`, ..."
          },
          "app_version": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "App Version",
            "description": "The host application's version."
          },
          "client_version": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Client Version",
            "description": "The Layer plugin, add-on or CLI version."
          },
          "os": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Os",
            "description": "The operating system and its version."
          }
        },
        "type": "object",
        "title": "Body_startDeviceLogin"
      },
      "CameraRotationDelta": {
        "properties": {
          "pitch_delta": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Pitch Delta"
          },
          "yaw_delta": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Yaw Delta"
          },
          "roll_delta": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Roll Delta"
          }
        },
        "type": "object",
        "title": "CameraRotationDelta"
      },
      "CameraTrajectoryKeyframe": {
        "properties": {
          "time": {
            "type": "number",
            "maximum": 1,
            "minimum": 0,
            "title": "Time"
          },
          "azimuth": {
            "type": "number",
            "title": "Azimuth"
          },
          "elevation": {
            "type": "number",
            "maximum": 90,
            "minimum": -90,
            "title": "Elevation"
          },
          "distance": {
            "type": "number",
            "exclusiveMinimum": 0,
            "title": "Distance"
          }
        },
        "type": "object",
        "required": [
          "time",
          "azimuth",
          "elevation",
          "distance"
        ],
        "title": "CameraTrajectoryKeyframe",
        "description": "One orbit-camera pose at a normalized point in a generated clip."
      },
      "CameraTransformDelta": {
        "properties": {
          "distance_delta": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Distance Delta"
          },
          "rotation_delta": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/CameraRotationDelta"
              },
              {
                "type": "null"
              }
            ]
          },
          "zoom_delta": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/CameraZoomDelta"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "type": "object",
        "title": "CameraTransformDelta",
        "description": "Relative adjustments to apply to an existing origin-locked orbit camera state."
      },
      "CameraZoomDelta": {
        "properties": {
          "fov_y_delta": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Fov Y Delta"
          }
        },
        "type": "object",
        "title": "CameraZoomDelta"
      },
      "CancelTrainingRunResponse": {
        "properties": {
          "training_run_id": {
            "type": "string",
            "format": "uuid",
            "title": "Training Run Id"
          },
          "state": {
            "type": "string",
            "enum": [
              "in_progress",
              "terminal_success",
              "terminal_failure"
            ],
            "title": "State"
          },
          "raw_status": {
            "type": "string",
            "title": "Raw Status"
          }
        },
        "type": "object",
        "required": [
          "training_run_id",
          "state",
          "raw_status"
        ],
        "title": "CancelTrainingRunResponse"
      },
      "CliAuthConfiguration": {
        "properties": {
          "issuer": {
            "type": "string",
            "title": "Issuer",
            "description": "Authorization server that issues tokens for this API."
          },
          "client_id": {
            "type": "string",
            "title": "Client Id",
            "description": "Public OAuth client id to authenticate as. Not a secret."
          },
          "audience": {
            "type": "string",
            "title": "Audience",
            "description": "Audience to request, so the token is accepted by this API."
          },
          "scopes": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Scopes",
            "description": "Scopes to request. `offline_access` is what keeps the login alive."
          },
          "grant_types": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Grant Types",
            "description": "Grant types this client may use, most preferred first."
          },
          "loopback_ports": {
            "items": {
              "type": "integer"
            },
            "type": "array",
            "title": "Loopback Ports",
            "description": "Ports registered as loopback callbacks, for releases that sign in with the authorization code flow at `issuer`. A current client signs in with `device_authorization_endpoint` instead."
          },
          "redirect_path": {
            "type": "string",
            "title": "Redirect Path",
            "description": "Path component of the registered loopback callback URLs, for the same older releases."
          },
          "device_authorization_endpoint": {
            "type": "string",
            "title": "Device Authorization Endpoint",
            "description": "Where to start a device login (RFC 8628 section 3.1). Sign in with this, not the issuer."
          },
          "token_endpoint": {
            "type": "string",
            "title": "Token Endpoint",
            "description": "Where to poll for the device login's tokens, and to refresh them."
          },
          "revocation_endpoint": {
            "type": "string",
            "title": "Revocation Endpoint",
            "description": "Where to revoke the refresh token on sign-out."
          }
        },
        "type": "object",
        "required": [
          "issuer",
          "client_id",
          "audience",
          "scopes",
          "grant_types",
          "loopback_ports",
          "redirect_path",
          "device_authorization_endpoint",
          "token_endpoint",
          "revocation_endpoint"
        ],
        "title": "CliAuthConfiguration",
        "description": "Everything a command-line client needs to run an OAuth login against this deployment.\n\nA CLI is pointed at a deployment by URL alone, so it cannot carry a per-deployment\nclient id or callback list of its own — it reads them from here. That also means the\nregistered ports can be widened, or the client rotated, without a CLI release."
      },
      "CliClient": {
        "type": "string",
        "enum": [
          "cli",
          "blender",
          "unity",
          "godot"
        ],
        "title": "CliClient",
        "description": "Which native client is signing in.\n\nEach is its own Auth0 application, so Auth0 can tell them apart in its logs, metrics and\ngrants, and a client-level change to one never reaches the other."
      },
      "CompositionPlan": {
        "properties": {
          "positive_styles": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Positive Styles",
            "default": []
          },
          "negative_styles": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Negative Styles",
            "default": []
          },
          "sections": {
            "items": {
              "$ref": "#/components/schemas/MusicSection"
            },
            "type": "array",
            "maxItems": 30,
            "minItems": 1,
            "title": "Sections"
          },
          "respect_section_durations": {
            "type": "boolean",
            "title": "Respect Section Durations",
            "default": true
          }
        },
        "type": "object",
        "required": [
          "sections"
        ],
        "title": "CompositionPlan",
        "description": "A track authored as an ordered list of sections rather than as one description.\n\nThe split is load-bearing: the plan's own styles carry what must hold for the whole\ntrack, genre, era, production character, palette, and each section carries only what\nchanges. Reversing it produces a track that either drifts or never moves.\n\nA plan replaces the prompt rather than supplementing it. Providers taking a plan ignore\nthe prompt, the requested length and the vocal-free flag, because the plan already\nstates all three."
      },
      "CreateGroupBody": {
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "title": "Name",
            "description": "The group's name. Must be unique within the workspace."
          },
          "role": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Role"
              },
              {
                "type": "null"
              }
            ],
            "description": "Optional workspace role to grant members."
          },
          "role_id": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ],
            "title": "Role Id",
            "description": "Id of a custom role to grant instead of a builtin `role`."
          }
        },
        "type": "object",
        "required": [
          "name"
        ],
        "title": "CreateGroupBody"
      },
      "CreateProjectBody": {
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "title": "Name",
            "description": "The project's display name. Must be unique within the workspace."
          },
          "description": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 1000
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "instructions": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200000
              },
              {
                "type": "null"
              }
            ],
            "title": "Instructions",
            "description": "Deprecated: attach a skill to the project instead. Honoured while it holds text, and read back as null once the project's instructions have been converted into a project-attached skill.",
            "deprecated": true
          }
        },
        "type": "object",
        "required": [
          "name"
        ],
        "title": "CreateProjectBody"
      },
      "CreateReferenceSetRequest": {
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 255,
            "title": "Name",
            "description": "Display name for the reference set."
          },
          "category": {
            "type": "string",
            "enum": [
              "general",
              "character",
              "object",
              "scene",
              "effect"
            ],
            "title": "Category",
            "description": "Training category: general (overall aesthetic), character (person/creature), object (specific item), scene (environment), or effect (visual effect)."
          },
          "file_ids": {
            "items": {
              "type": "string",
              "format": "uuid"
            },
            "type": "array",
            "maxItems": 1000,
            "minItems": 1,
            "title": "File Ids",
            "description": "Ordered image or video file IDs to include. Must belong to the workspace."
          },
          "description": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 2000
              },
              {
                "type": "null"
              }
            ],
            "title": "Description",
            "description": "Optional description."
          },
          "cover_file_ids": {
            "anyOf": [
              {
                "items": {
                  "type": "string",
                  "format": "uuid"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Cover File Ids",
            "description": "Optional ordered image file IDs to show as cover thumbnails. Omit to auto-pick."
          }
        },
        "type": "object",
        "required": [
          "name",
          "category",
          "file_ids"
        ],
        "title": "CreateReferenceSetRequest"
      },
      "CreateReferenceSetResponse": {
        "properties": {
          "reference_set_id": {
            "type": "string",
            "format": "uuid",
            "title": "Reference Set Id",
            "description": "ID of the created reference set (train this with a training run)."
          },
          "name": {
            "type": "string",
            "title": "Name"
          },
          "asset_count": {
            "type": "integer",
            "title": "Asset Count",
            "description": "Number of input files added to the reference set."
          },
          "cover_count": {
            "type": "integer",
            "title": "Cover Count",
            "description": "Number of cover thumbnails set on the reference set."
          },
          "skipped": {
            "items": {
              "$ref": "#/components/schemas/SkippedFile"
            },
            "type": "array",
            "title": "Skipped",
            "description": "Files from file_ids that were not included, each with the reason."
          }
        },
        "type": "object",
        "required": [
          "reference_set_id",
          "name",
          "asset_count",
          "cover_count"
        ],
        "title": "CreateReferenceSetResponse"
      },
      "CreateSessionBody": {
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 255,
            "minLength": 1,
            "title": "Name",
            "description": "The session's display name."
          }
        },
        "type": "object",
        "required": [
          "name"
        ],
        "title": "CreateSessionBody"
      },
      "DailyUsage": {
        "properties": {
          "date": {
            "type": "string",
            "title": "Date",
            "description": "Calendar day (UTC), ISO format YYYY-MM-DD."
          },
          "creative_units": {
            "type": "number",
            "title": "Creative Units",
            "description": "Creative Units consumed on this day across all models."
          }
        },
        "type": "object",
        "required": [
          "date",
          "creative_units"
        ],
        "title": "DailyUsage"
      },
      "EstimateForgePriceOutput": {
        "properties": {
          "estimated_price_creative_units": {
            "type": "number",
            "title": "Estimated Price Creative Units",
            "description": "Total estimated Creative Units price for this run."
          },
          "workspace_balance_creative_units": {
            "type": "number",
            "title": "Workspace Balance Creative Units",
            "description": "Usable Creative Units balance (total balance minus reserved by in-progress generations)."
          },
          "estimated_remaining_balance_creative_units": {
            "type": "number",
            "title": "Estimated Remaining Balance Creative Units",
            "description": "Usable balance after subtracting the estimated price. Can be negative."
          },
          "has_sufficient_creative_units": {
            "type": "boolean",
            "title": "Has Sufficient Creative Units",
            "description": "Whether the workspace has enough available Creative Units to cover the estimated price."
          }
        },
        "type": "object",
        "required": [
          "estimated_price_creative_units",
          "workspace_balance_creative_units",
          "estimated_remaining_balance_creative_units",
          "has_sufficient_creative_units"
        ],
        "title": "EstimateForgePriceOutput"
      },
      "EstimateInferencePriceRequest": {
        "properties": {
          "subtitle_preset": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Subtitle Preset",
            "description": "Caption style, spelled exactly as one of the model's `subtitle_presets`: any other name is quoted at the default style and refused at launch. Its `subtitle_dynamic_presets` animate word by word and bill at a higher rate, so pass the same preset to the estimate. Omit for the model's default style."
          },
          "subtitle_color": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^#([0-9A-Fa-f]{3}){1,2}$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Subtitle Color",
            "description": "Caption text colour as hex (`#FFFFFF`), for models whose capabilities report `subtitle_primary_color`."
          },
          "subtitle_secondary_color": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^#([0-9A-Fa-f]{3}){1,2}$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Subtitle Secondary Color",
            "description": "Colour of the words the model emphasises, as hex, for models whose capabilities report `subtitle_secondary_color`."
          },
          "subtitle_alignment": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "top",
                  "center",
                  "bottom"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Subtitle Alignment",
            "description": "Where the captions sit vertically, for models whose capabilities report `subtitle_alignment`."
          },
          "model_id": {
            "type": "string",
            "format": "uuid",
            "title": "Model Id",
            "description": "Model/style ID to use for generation."
          },
          "weight": {
            "type": "number",
            "maximum": 2,
            "minimum": 0,
            "title": "Weight",
            "description": "Style/LoRA strength applied to the model. 1.0 = as trained; lower weakens, higher over-applies the style. Only affects LoRA/adapter-backed styles; ignored for models without a trainable adapter.",
            "default": 1
          },
          "prompt": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 100000
              },
              {
                "type": "null"
              }
            ],
            "title": "Prompt",
            "description": "Text prompt."
          },
          "width": {
            "anyOf": [
              {
                "type": "integer",
                "exclusiveMinimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Width",
            "description": "Output width in pixels. If not specified, a default resolution based on the model will be applied."
          },
          "height": {
            "anyOf": [
              {
                "type": "integer",
                "exclusiveMinimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Height",
            "description": "Output height in pixels. If not specified, a default resolution based on the model will be applied."
          },
          "batch_size": {
            "type": "integer",
            "maximum": 16,
            "minimum": 1,
            "title": "Batch Size",
            "description": "Number of outputs (1-16).",
            "default": 4
          },
          "num_inference_steps": {
            "anyOf": [
              {
                "type": "integer",
                "exclusiveMinimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Num Inference Steps",
            "description": "Number of diffusion steps."
          },
          "guidance_scale": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Guidance Scale",
            "description": "Guidance scale (CFG)."
          },
          "prompt_strength": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 1,
                "minimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Prompt Strength",
            "description": "How closely the generated audio follows the text prompt (0-1); higher means less variation. Honored by ElevenLabs Sound Effects and the Sonilo video-to-music models, and ignored by every other model."
          },
          "quality": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "low",
                  "medium",
                  "high"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Quality",
            "description": "Quality level: low, medium, or high."
          },
          "sharpness": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sharpness",
            "description": "Output sharpness."
          },
          "duration_seconds": {
            "anyOf": [
              {
                "type": "number",
                "exclusiveMinimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Duration Seconds",
            "description": "Output length in seconds — a video clip's duration, or the clip length for audio models whose capabilities report duration_seconds_min and duration_seconds_max. A value outside a model's supported range is refused."
          },
          "generate_audio": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Generate Audio",
            "description": "Generate audio with video."
          },
          "keep_audio": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Keep Audio",
            "description": "Keep audio from input video."
          },
          "instrumental": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Instrumental",
            "description": "Guarantee a track with no vocals, on models whose capabilities report instrumental. Asking for one in the prompt is only a suggestion."
          },
          "loop": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Loop",
            "description": "Compose the clip to repeat with no audible seam, on models whose capabilities report loop."
          },
          "output_format": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/AudioOutputFormat"
              },
              {
                "type": "null"
              }
            ],
            "description": "Container for the delivered file, one of the values the model's capabilities list under output_formats. Layer never re-encodes a clip, so a model that lists none delivers what it delivers."
          },
          "lyrics": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Lyrics",
            "description": "Words to be sung, for models whose capabilities report lyrics. A separate input from the prompt, which describes the music itself."
          },
          "composition_plan": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/CompositionPlan"
              },
              {
                "type": "null"
              }
            ],
            "description": "The track as an ordered list of sections, for models whose capabilities report composition_plan. Supersedes prompt, duration_seconds and instrumental, which are dropped rather than sent with it."
          },
          "fps": {
            "anyOf": [
              {
                "type": "integer",
                "exclusiveMinimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Fps",
            "description": "FPS for LTX video generation (e.g. 25 or 50)."
          },
          "video_effects": {
            "items": {
              "$ref": "#/components/schemas/ForgeVideoEffectInput"
            },
            "type": "array",
            "title": "Video Effects",
            "description": "Video effects to apply.",
            "default": []
          },
          "use_ta_pose": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Use Ta Pose",
            "description": "Deprecated: use pose_mode. Legacy rig-ready-pose toggle for 3D."
          },
          "pose_mode": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/PoseMode"
              },
              {
                "type": "null"
              }
            ],
            "description": "Rest pose for a character mesh: A_POSE or T_POSE. Support varies by model."
          },
          "include_textures": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Include Textures",
            "description": "Include textures in 3D output."
          },
          "detailed_geometry": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Detailed Geometry",
            "description": "Denser, more detailed geometry (Meshy V7 ultra mode). Costs extra; support varies by model."
          },
          "remesh_geometry": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Remesh Geometry",
            "description": "Set false to skip the provider's remesh phase and keep its raw geometry. Support varies by model."
          },
          "texture_resolution": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/TextureResolution"
              },
              {
                "type": "null"
              }
            ],
            "description": "Base color texture size: RES_2K, RES_4K or RES_8K. Costs extra at RES_8K; support varies by model."
          },
          "remove_lighting": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Remove Lighting",
            "description": "Strip baked highlights and shadows from the texture. Support varies by model."
          },
          "mesh_density": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MeshDensity"
              },
              {
                "type": "null"
              }
            ],
            "description": "Adaptive face count in place of a face limit: ULTRA, HIGH, MEDIUM or LOW. Support varies by model."
          },
          "preserve_uvs": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Preserve Uvs",
            "description": "Keep the mesh's own UV layout when retexturing. Support varies by model."
          },
          "segment_by": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/SegmentBy"
              },
              {
                "type": "null"
              }
            ],
            "description": "What to split a mesh along: AUTO, or PARTS with the parts named in segment_part_names. Support varies by model."
          },
          "segment_part_names": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array",
                "maxItems": 10
              },
              {
                "type": "null"
              }
            ],
            "title": "Segment Part Names",
            "description": "Parts to split along when segment_by is PARTS, at most 10."
          },
          "segment_target": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/SegmentTarget"
              },
              {
                "type": "null"
              }
            ],
            "description": "What a mesh split treats the mesh as: CHARACTER, split by a body-part template, or GENERAL, split by segment_level. Support varies by model."
          },
          "segment_parts": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Segment Parts",
            "description": "How many parts a CHARACTER split makes. Support varies by model."
          },
          "segment_level": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/SegmentLevel"
              },
              {
                "type": "null"
              }
            ],
            "description": "How finely a GENERAL split cuts the mesh: LOW, MEDIUM or HIGH. Support varies by model."
          },
          "segment_strength": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Segment Strength",
            "description": "How aggressively a mesh split cuts: higher makes more parts. Support varies by model."
          },
          "quad_mesh": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Quad Mesh",
            "description": "Generate quad mesh."
          },
          "pbr_materials": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Pbr Materials",
            "description": "Generate PBR materials."
          },
          "low_poly": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Low Poly",
            "description": "Generate low-poly mesh."
          },
          "generate_parts": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Generate Parts",
            "description": "Generate separate parts."
          },
          "face_limit": {
            "anyOf": [
              {
                "type": "integer",
                "exclusiveMinimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Face Limit",
            "description": "Face/polygon limit for 3D mesh."
          },
          "stability": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 1,
                "minimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Stability",
            "description": "Audio stability (0-1)."
          },
          "use_speaker_boost": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Use Speaker Boost",
            "description": "Boost speaker clarity."
          },
          "similarity_boost": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 1,
                "minimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Similarity Boost",
            "description": "Voice similarity boost (0-1)."
          },
          "style_exaggeration": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 1,
                "minimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Style Exaggeration",
            "description": "Style exaggeration (0-1)."
          },
          "speed": {
            "anyOf": [
              {
                "type": "number",
                "exclusiveMinimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Speed",
            "description": "Speech speed multiplier."
          },
          "upscale_ratio": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Upscale Ratio",
            "description": "Upscale factor (e.g. 2.0, 4.0)."
          },
          "creativity": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Creativity",
            "description": "Creative variation strength for upscaling."
          },
          "resemblance": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resemblance",
            "description": "Resemblance to original for upscaling."
          },
          "vectorize": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Vectorize",
            "description": "Vectorize the output image."
          },
          "remove_background": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Remove Background",
            "description": "Remove background from output."
          },
          "reframe": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reframe",
            "description": "Reframe/extend the image."
          },
          "refill": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Refill",
            "description": "Outpaint/refill transparent areas."
          },
          "guidance_files": {
            "items": {
              "$ref": "#/components/schemas/ForgeGuidanceFileInput"
            },
            "type": "array",
            "maxItems": 20,
            "title": "Guidance Files",
            "description": "The guidance files the execute call will pass. An upscale or a per-megapixel background removal is priced by its source file's size, and on some models an input image bills the edit rate.",
            "default": []
          },
          "mask": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ForgeMaskInput"
              },
              {
                "type": "null"
              }
            ],
            "description": "The mask the execute call will pass. Some models bill a masked edit at a different rate."
          }
        },
        "type": "object",
        "required": [
          "model_id"
        ],
        "title": "EstimateInferencePriceRequest",
        "description": "REST request body for estimating inference price. workspace_id comes from path."
      },
      "EstimateInferencePriceV2Output": {
        "properties": {
          "estimated_price_creative_units": {
            "type": "number",
            "title": "Estimated Price Creative Units",
            "description": "Total estimated Creative Units price for this run."
          },
          "workspace_balance_creative_units": {
            "type": "number",
            "title": "Workspace Balance Creative Units",
            "description": "Usable Creative Units balance (total balance minus reserved by in-progress generations)."
          },
          "estimated_remaining_balance_creative_units": {
            "type": "number",
            "title": "Estimated Remaining Balance Creative Units",
            "description": "Usable balance after subtracting the estimated price. Can be negative."
          },
          "has_sufficient_creative_units": {
            "type": "boolean",
            "title": "Has Sufficient Creative Units",
            "description": "Whether the workspace has enough available Creative Units to cover the estimated price."
          },
          "base_model_id": {
            "type": "string",
            "title": "Base Model Id",
            "description": "Base model this price refers to, resolved or auto-picked."
          },
          "auto_picked": {
            "type": "boolean",
            "title": "Auto Picked",
            "description": "True when no base_model_id was supplied — the base model was selected from the reference sets."
          },
          "reference_set_contributions": {
            "items": {
              "$ref": "#/components/schemas/ForgeReferenceSetContribution"
            },
            "type": "array",
            "title": "Reference Set Contributions",
            "description": "Per-set summary of what each reference set would contribute to this run.",
            "default": []
          },
          "reference_sets_degraded": {
            "type": "boolean",
            "title": "Reference Sets Degraded",
            "description": "True when at least one attached reference set would not meaningfully contribute on the selected model.",
            "default": false
          },
          "reference_sets_warning": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reference Sets Warning",
            "description": "Names each degraded reference set and why, or null when none is degraded."
          }
        },
        "type": "object",
        "required": [
          "estimated_price_creative_units",
          "workspace_balance_creative_units",
          "estimated_remaining_balance_creative_units",
          "has_sufficient_creative_units",
          "base_model_id",
          "auto_picked"
        ],
        "title": "EstimateInferencePriceV2Output"
      },
      "EstimateInferencePriceV2Request": {
        "properties": {
          "subtitle_preset": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Subtitle Preset",
            "description": "Caption style, spelled exactly as one of the model's `subtitle_presets`: any other name is quoted at the default style and refused at launch. Its `subtitle_dynamic_presets` animate word by word and bill at a higher rate, so pass the same preset to the estimate. Omit for the model's default style."
          },
          "subtitle_color": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^#([0-9A-Fa-f]{3}){1,2}$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Subtitle Color",
            "description": "Caption text colour as hex (`#FFFFFF`), for models whose capabilities report `subtitle_primary_color`."
          },
          "subtitle_secondary_color": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^#([0-9A-Fa-f]{3}){1,2}$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Subtitle Secondary Color",
            "description": "Colour of the words the model emphasises, as hex, for models whose capabilities report `subtitle_secondary_color`."
          },
          "subtitle_alignment": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "top",
                  "center",
                  "bottom"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Subtitle Alignment",
            "description": "Where the captions sit vertically, for models whose capabilities report `subtitle_alignment`."
          },
          "base_model_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Base Model Id",
            "description": "Base model to run, as an id (e.g. flux-dev), display name, or community alias."
          },
          "reference_sets": {
            "items": {
              "$ref": "#/components/schemas/InferenceReferenceSetInput"
            },
            "type": "array",
            "maxItems": 25,
            "title": "Reference Sets",
            "description": "Reference sets to apply, up to 25.",
            "default": []
          },
          "modality": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Modality"
              },
              {
                "type": "null"
              }
            ],
            "description": "Output modality: image, video, three_d, or audio. Only needed to disambiguate reference-set translation when no base_model_id is given."
          },
          "prompt": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 100000
              },
              {
                "type": "null"
              }
            ],
            "title": "Prompt",
            "description": "Text prompt."
          },
          "negative_prompt": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 100000
              },
              {
                "type": "null"
              }
            ],
            "title": "Negative Prompt",
            "description": "What to steer the output away from. Honored by the models whose `inference-schema` lists `negative_prompt`, and ignored by the rest."
          },
          "width": {
            "anyOf": [
              {
                "type": "integer",
                "exclusiveMinimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Width",
            "description": "Output width in pixels. If not specified, a default resolution based on the model will be applied."
          },
          "height": {
            "anyOf": [
              {
                "type": "integer",
                "exclusiveMinimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Height",
            "description": "Output height in pixels. If not specified, a default resolution based on the model will be applied."
          },
          "auto_aspect_ratio": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Auto Aspect Ratio",
            "description": "Derive the output's shape from the input instead of from width/height. Only on models whose capabilities include autoAspectRatio."
          },
          "auto_resolution": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Auto Resolution",
            "description": "The size tier of an auto_aspect_ratio run (e.g. '2K'), one of the model's autoResolutions. Unset on an image run, the smallest tier that holds the input image."
          },
          "batch_size": {
            "type": "integer",
            "maximum": 16,
            "minimum": 1,
            "title": "Batch Size",
            "description": "Number of outputs (1-16).",
            "default": 4
          },
          "num_inference_steps": {
            "anyOf": [
              {
                "type": "integer",
                "exclusiveMinimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Num Inference Steps",
            "description": "Number of diffusion steps."
          },
          "guidance_scale": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Guidance Scale",
            "description": "Guidance scale (CFG)."
          },
          "prompt_strength": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 1,
                "minimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Prompt Strength",
            "description": "How closely the generated audio follows the text prompt (0-1); higher means less variation. Honored by ElevenLabs Sound Effects and the Sonilo video-to-music models, and ignored by every other model. To control how closely an image or video generation follows an input image, set guidance_files[].weight instead."
          },
          "quality": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "low",
                  "medium",
                  "high"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Quality",
            "description": "Quality level: low, medium, or high."
          },
          "sharpness": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sharpness",
            "description": "Output sharpness."
          },
          "prompt_enhancement": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/PromptEnhancement"
              },
              {
                "type": "null"
              }
            ],
            "description": "How much the provider rewrites the prompt before generating: off, fast, standard or quality, on models whose capabilities list prompt_enhancement_levels. A level the model does not offer settles on the nearest one it does; unset leaves the provider's own default."
          },
          "duration_seconds": {
            "anyOf": [
              {
                "type": "number",
                "exclusiveMinimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Duration Seconds",
            "description": "Output length in seconds — a video clip's duration, or the clip length for audio models whose capabilities report duration_seconds_min and duration_seconds_max. A value outside a model's supported range is refused."
          },
          "generate_audio": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Generate Audio",
            "description": "Generate audio with video."
          },
          "keep_audio": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Keep Audio",
            "description": "Keep audio from input video."
          },
          "draft": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Draft",
            "description": "Render a quick, low-cost draft instead of the full-quality output, on models whose capabilities report draft. Complete the draft later with the model named by the generating model's draftCompletionModelId, passing the draft file as a DRAFT_VIDEO input (DRAFT_WORLD for a world, DRAFT_MESH for a mesh)."
          },
          "instrumental": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Instrumental",
            "description": "Guarantee a track with no vocals, on models whose capabilities report instrumental. Asking for one in the prompt is only a suggestion."
          },
          "loop": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Loop",
            "description": "Compose the clip to repeat with no audible seam, on models whose capabilities report loop."
          },
          "output_format": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/AudioOutputFormat"
              },
              {
                "type": "null"
              }
            ],
            "description": "Container for the delivered file, one of the values the model's capabilities list under output_formats. Layer never re-encodes a clip, so a model that lists none delivers what it delivers."
          },
          "lyrics": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Lyrics",
            "description": "Words to be sung, for models whose capabilities report lyrics. A separate input from the prompt, which describes the music itself."
          },
          "composition_plan": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/CompositionPlan"
              },
              {
                "type": "null"
              }
            ],
            "description": "The track as an ordered list of sections, for models whose capabilities report composition_plan. Supersedes prompt, duration_seconds and instrumental, which are dropped rather than sent with it."
          },
          "fps": {
            "anyOf": [
              {
                "type": "integer",
                "exclusiveMinimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Fps",
            "description": "FPS for LTX video generation (e.g. 25 or 50)."
          },
          "video_effects": {
            "items": {
              "$ref": "#/components/schemas/ForgeVideoEffectInput"
            },
            "type": "array",
            "title": "Video Effects",
            "description": "Video effects to apply.",
            "default": []
          },
          "use_ta_pose": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Use Ta Pose",
            "description": "Deprecated: use pose_mode. Legacy rig-ready-pose toggle for 3D."
          },
          "pose_mode": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/PoseMode"
              },
              {
                "type": "null"
              }
            ],
            "description": "Rest pose for a character mesh: A_POSE or T_POSE. Support varies by model."
          },
          "include_textures": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Include Textures",
            "description": "Include textures in 3D output."
          },
          "detailed_geometry": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Detailed Geometry",
            "description": "Denser, more detailed geometry (Meshy V7 ultra mode). Costs extra; support varies by model."
          },
          "remesh_geometry": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Remesh Geometry",
            "description": "Set false to skip the provider's remesh phase and keep its raw geometry. Support varies by model."
          },
          "texture_resolution": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/TextureResolution"
              },
              {
                "type": "null"
              }
            ],
            "description": "Base color texture size: RES_2K, RES_4K or RES_8K. Costs extra at RES_8K; support varies by model."
          },
          "remove_lighting": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Remove Lighting",
            "description": "Strip baked highlights and shadows from the texture. Support varies by model."
          },
          "mesh_density": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MeshDensity"
              },
              {
                "type": "null"
              }
            ],
            "description": "Adaptive face count in place of a face limit: ULTRA, HIGH, MEDIUM or LOW. Support varies by model."
          },
          "preserve_uvs": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Preserve Uvs",
            "description": "Keep the mesh's own UV layout when retexturing. Support varies by model."
          },
          "segment_by": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/SegmentBy"
              },
              {
                "type": "null"
              }
            ],
            "description": "What to split a mesh along: AUTO, or PARTS with the parts named in segment_part_names. Support varies by model."
          },
          "segment_part_names": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array",
                "maxItems": 10
              },
              {
                "type": "null"
              }
            ],
            "title": "Segment Part Names",
            "description": "Parts to split along when segment_by is PARTS, at most 10."
          },
          "segment_target": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/SegmentTarget"
              },
              {
                "type": "null"
              }
            ],
            "description": "What a mesh split treats the mesh as: CHARACTER, split by a body-part template, or GENERAL, split by segment_level. Support varies by model."
          },
          "segment_parts": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Segment Parts",
            "description": "How many parts a CHARACTER split makes. Support varies by model."
          },
          "segment_level": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/SegmentLevel"
              },
              {
                "type": "null"
              }
            ],
            "description": "How finely a GENERAL split cuts the mesh: LOW, MEDIUM or HIGH. Support varies by model."
          },
          "segment_strength": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Segment Strength",
            "description": "How aggressively a mesh split cuts: higher makes more parts. Support varies by model."
          },
          "quad_mesh": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Quad Mesh",
            "description": "Generate quad mesh."
          },
          "pbr_materials": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Pbr Materials",
            "description": "Generate PBR materials."
          },
          "low_poly": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Low Poly",
            "description": "Generate low-poly mesh."
          },
          "generate_parts": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Generate Parts",
            "description": "Generate separate parts."
          },
          "face_limit": {
            "anyOf": [
              {
                "type": "integer",
                "exclusiveMinimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Face Limit",
            "description": "Face/polygon limit for 3D mesh."
          },
          "enable_rigging": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Enable Rigging",
            "description": "Rig the generated 3D mesh with a skeleton. Honored by the models whose capabilities report `rigging`."
          },
          "enable_animation": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Enable Animation",
            "description": "Animate the generated 3D mesh with the motion of the animation reference set passed in `reference_sets` (category `animation`), or the provider's default motion without one; implies rigging. Honored by the models whose capabilities report `animation`."
          },
          "stability": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 1,
                "minimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Stability",
            "description": "Audio stability (0-1)."
          },
          "use_speaker_boost": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Use Speaker Boost",
            "description": "Boost speaker clarity."
          },
          "similarity_boost": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 1,
                "minimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Similarity Boost",
            "description": "Voice similarity boost (0-1)."
          },
          "style_exaggeration": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 1,
                "minimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Style Exaggeration",
            "description": "Style exaggeration (0-1)."
          },
          "speed": {
            "anyOf": [
              {
                "type": "number",
                "exclusiveMinimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Speed",
            "description": "Speech speed multiplier."
          },
          "upscale_ratio": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Upscale Ratio",
            "description": "Upscale factor (e.g. 2.0, 4.0)."
          },
          "creativity": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Creativity",
            "description": "Creative variation strength for upscaling."
          },
          "resemblance": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resemblance",
            "description": "Resemblance to original for upscaling."
          },
          "denoise": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Denoise",
            "description": "Noise removal. On the models whose capabilities report `denoise_range`, in that range; a value outside it is refused."
          },
          "compression_repair": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Compression Repair",
            "description": "Compression-artifact removal. On the models whose capabilities report `compression_repair_range`, in that range; a value outside it is refused."
          },
          "halo_reduction": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Halo Reduction",
            "description": "Removal of bright edge outlines. On the models whose capabilities report `halo_reduction_range`, in that range; a value outside it is refused."
          },
          "recover_detail": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Recover Detail",
            "description": "How much of the source's own detail is kept. On the models whose capabilities report `recover_detail_range`, in that range; a value outside it is refused."
          },
          "detail": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Detail",
            "description": "How much fine detail the model adds. On the models whose capabilities report `detail_range`, in that range; a value outside it is refused."
          },
          "grain": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Grain",
            "description": "Film grain laid over the result. On the models whose capabilities report `grain_range`, in that range; a value outside it is refused."
          },
          "refine_strength": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Refine Strength",
            "description": "How strongly lettering and shapes are rebuilt. On the models whose capabilities report `refine_strength_range`, in that range; a value outside it is refused."
          },
          "realism": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Realism",
            "description": "Bias of added detail toward photorealism. On the models whose capabilities report `realism_range`, in that range; a value outside it is refused."
          },
          "face_enhancement": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Face Enhancement",
            "description": "Set false to skip the face-restoration pass, on models whose capabilities report face_enhancement."
          },
          "face_enhancement_strength": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Face Enhancement Strength",
            "description": "Strength of the face pass. On the models whose capabilities report `face_enhancement_strength_range`, in that range; a value outside it is refused."
          },
          "face_enhancement_creativity": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Face Enhancement Creativity",
            "description": "Facial detail the face pass invents. On the models whose capabilities report `face_enhancement_creativity_range`, in that range; a value outside it is refused."
          },
          "target_region": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/TargetRegion"
              },
              {
                "type": "null"
              }
            ],
            "description": "all, subject or background: the part of the image enhanced, on models whose capabilities report target_region."
          },
          "color_preservation": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Color Preservation",
            "description": "Keep the source's palette, on models whose capabilities report color_preservation."
          },
          "vectorize": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Vectorize",
            "description": "Vectorize the output image."
          },
          "vectorization_mode": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/VectorizationMode"
              },
              {
                "type": "null"
              }
            ],
            "description": "SVG path mode: `spline` (curves) or `polygon` (straight lines). Honored by the models whose capabilities report `vectorization_controls`."
          },
          "vectorization_color_mode": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/VectorizationColorMode"
              },
              {
                "type": "null"
              }
            ],
            "description": "SVG color output: `color` or `binary` (black and white). Honored by the models whose capabilities report `vectorization_controls`."
          },
          "vectorization_layering": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/VectorizationLayering"
              },
              {
                "type": "null"
              }
            ],
            "description": "SVG shape layering in color output: `stacked` (shapes overlap) or `cutout` (no overlap). Honored by the models whose capabilities report `vectorization_controls`."
          },
          "vectorization_filter_speckle": {
            "anyOf": [
              {
                "type": "integer",
                "maximum": 20,
                "minimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Vectorization Filter Speckle",
            "description": "Drop specks smaller than this many pixels. Honored by the models whose capabilities report `vectorization_controls`."
          },
          "vectorization_color_precision": {
            "anyOf": [
              {
                "type": "integer",
                "maximum": 10,
                "minimum": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Vectorization Color Precision",
            "description": "Color quantization level; lower merges more colors. Honored by the models whose capabilities report `vectorization_controls`."
          },
          "vectorization_layer_difference": {
            "anyOf": [
              {
                "type": "integer",
                "maximum": 32,
                "minimum": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Vectorization Layer Difference",
            "description": "Color difference that splits gradient layers. Honored by the models whose capabilities report `vectorization_controls`."
          },
          "vectorization_corner_threshold": {
            "anyOf": [
              {
                "type": "integer",
                "maximum": 180,
                "minimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Vectorization Corner Threshold",
            "description": "Minimum angle, in degrees, kept as a sharp corner (spline mode). Honored by the models whose capabilities report `vectorization_controls`."
          },
          "vectorization_length_threshold": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 10,
                "minimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Vectorization Length Threshold",
            "description": "Longest curve segment before it is subdivided (spline mode). Honored by the models whose capabilities report `vectorization_controls`."
          },
          "vectorization_splice_threshold": {
            "anyOf": [
              {
                "type": "integer",
                "maximum": 90,
                "minimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Vectorization Splice Threshold",
            "description": "Angle, in degrees, at which a curve is split (spline mode). Honored by the models whose capabilities report `vectorization_controls`."
          },
          "vectorization_max_iterations": {
            "anyOf": [
              {
                "type": "integer",
                "maximum": 20,
                "minimum": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Vectorization Max Iterations",
            "description": "Curve-fitting passes. Honored by the models whose capabilities report `vectorization_controls`."
          },
          "vectorization_path_precision": {
            "anyOf": [
              {
                "type": "integer",
                "maximum": 10,
                "minimum": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Vectorization Path Precision",
            "description": "Decimal places kept in SVG path coordinates. Honored by the models whose capabilities report `vectorization_controls`."
          },
          "transparency": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Transparency",
            "description": "Put the output on a transparent background. Also accepted as `remove_background`."
          },
          "reframe": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reframe",
            "description": "Reframe/extend the image."
          },
          "tileability": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Tileability",
            "description": "Generate a seamless texture that tiles without a visible edge. Honored by the models whose `inference-schema` lists `tileability` (list them with `GET .../base-models?tileable=true`), and ignored by the rest."
          },
          "projection": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ImageProjection"
              },
              {
                "type": "null"
              }
            ],
            "description": "`EQUIRECTANGULAR` draws a 2:1 360 degree skybox whose sides meet and whose poles are settled. Honored by the models listed for the `create_skybox` use case; the size must be one of the model's skybox sizes (its presets carrying the projection), and unset takes the largest."
          },
          "projection_strength": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 2,
                "minimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Projection Strength",
            "description": "How strongly a model's 360 LoRA draws the projection, as its scale. Unset takes the LoRA's own."
          },
          "refill": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Refill",
            "description": "Outpaint/refill transparent areas."
          },
          "camera_transform": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/CameraTransformDelta"
              },
              {
                "type": "null"
              }
            ],
            "description": "Re-render the init image from another camera position: rotation in degrees (`yaw_delta` turns around the subject, `pitch_delta` looks from above or below), `distance_delta` moves closer or further. Honored by the models whose capabilities report `camera_transform`, such as those listed for the `multi_angle` use case."
          },
          "camera_trajectory": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/CameraTrajectoryKeyframe"
                },
                "type": "array",
                "maxItems": 12,
                "minItems": 2
              },
              {
                "type": "null"
              }
            ],
            "title": "Camera Trajectory",
            "description": "A camera path for an image-to-video run: 2 to 12 keyframes, each an orbit pose (`azimuth` and `elevation` in degrees, `distance` where 1 is the source image's framing) at a `time` from 0 (first frame) to 1 (last). Honored by the models whose capabilities report `camera_trajectory`."
          },
          "scene_lighting": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/SceneLightingConfig"
              },
              {
                "type": "null"
              }
            ],
            "description": "Relight the init image: one or more orbit lights, each placed by `rotation` (`yaw` around the subject and `pitch` above or below it, in degrees) with an `intensity` and a `color_hex`. Honored by the models whose capabilities report `scene_lighting`."
          },
          "tile_grid": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/TileGrid"
              },
              {
                "type": "null"
              }
            ],
            "description": "Draw a game tile onto a grid: its `shape` (`SQUARE` for an isometric diamond, `HEXAGON` for a hex tile) and `orientation` (`POINTY_TOP` or `FLAT_TOP` for a hexagon), the camera `elevation` (30 for 2:1 dimetric; a hexagon takes 60, or 90 from straight above), a `facing` of 0, 90, 180 or 270 for a square, the `footprint_width` x `footprint_depth` in cells (a hexagon covers one), the wall `height` in cell sides (0 for a flat ground tile) and the delivered `tile_width` in pixels. The run draws over a blockout of the grid, so it takes no init image, and the output comes back cut out and fitted onto the grid, its base recorded in the file's `tile` metadata. Honored by the models whose capabilities report `tile_grid`."
          },
          "output_fit": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/OutputFit"
              },
              {
                "type": "null"
              }
            ],
            "description": "Fit the image onto its delivery canvas after everything else the run does: `trim` its transparent margin, keep the drawing's own size (`canvas: CONTENT`) or place it on a `FIXED` `width` x `height` canvas, scaled as `scale` says and aligned on `anchor` (`BASE` stands a game tile's base on the bottom centre), with `padding` px of transparent margin. Image outputs only."
          },
          "nine_slice": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Nine Slice",
            "description": "Deliver the image as a 9-slice UI element (a button, frame or panel that resizes): after everything else the run does, the plain band through its middle is found on each axis, the edges and centre are made to tile (painted texture kept, light evened out), and the insets are recorded as the file's `nineSlice` metadata. An image with no such band is delivered as drawn, without insets. Image outputs only."
          },
          "parallax": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ParallaxSplit"
              },
              {
                "type": "null"
              }
            ],
            "description": "Split the init image into parallax layers by depth: `layers` (2 to 6, default 5) cut at `cuts`, ascending nearness values in (0, 1), one fewer than the layers (unset cuts at the gaps in the scene's own depth); `loop` makes every layer repeat left to right. The model fills in what each layer hides, so it must be an image eraser or inpainting model (an `ERASE_OBJECT` or `INPAINTING` use case); an inpainting model given no prompt is told to continue the scenery. Delivered as a layered PSD, farthest layer at the bottom, with each layer's scroll speed in the file's `parallax` metadata. Billed as one run of the model per layer but the nearest."
          },
          "color_palette": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/InferenceColorPalette"
              },
              {
                "type": "null"
              }
            ],
            "description": "Colors the output should use: `colors`, each a `name` and a `#RRGGBB` `hex` (and an optional `role`), and optionally the `reference_set_id` they were picked from. The provider steers toward the hex values on the models whose capabilities report `max_palette_colors`, which is also the most colors a run takes there. Other models whose prompt describes how the output looks get the colors added to a non-empty prompt; models whose prompt is spoken, set into the output as text, a query, or a description of sound or motion, and text and audio models, ignore it."
          },
          "expression": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Expression",
            "description": "The expression a face edit gives the face, one of the names the model's capabilities list under `expressions`."
          },
          "target_language": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Target Language",
            "description": "The language a dub speaks, as one of the ISO 639-1 codes the model's capabilities list under `dub_languages`."
          },
          "audio_sections": {
            "items": {
              "$ref": "#/components/schemas/AudioEditSection"
            },
            "type": "array",
            "title": "Audio Sections",
            "description": "Regenerate stretches of the init audio: each section is a window from `start_seconds` to `end_seconds`, measured from the clip's `anchor` (its start by default), that the prompt rewrites while the rest is kept. Honored by the audio models listed for the `inpainting` use case.",
            "default": []
          },
          "audio_extension": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/AudioExtension"
              },
              {
                "type": "null"
              }
            ],
            "description": "Extend the init audio: `after_seconds` of new audio past its end (and, where the model allows it, `before_seconds` ahead of its start). Honored by the audio models listed for the `extend_audio` use case."
          },
          "video_section": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/VideoSection"
              },
              {
                "type": "null"
              }
            ],
            "description": "Replace a span of the init video with a generated scene: the source cuts at `start_seconds` and picks up again at `end_seconds`, both from the clip's start, while `duration_seconds` sets the new scene's length. Required by the video models listed for the `insert_video` use case."
          },
          "guidance_files": {
            "items": {
              "$ref": "#/components/schemas/ForgeGuidanceFileInput"
            },
            "type": "array",
            "maxItems": 20,
            "title": "Guidance Files",
            "description": "Reference images/files to guide generation.",
            "default": []
          },
          "mask": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ForgeMaskInput"
              },
              {
                "type": "null"
              }
            ],
            "description": "The mask the execute call will pass. Some models bill a masked edit at a different rate."
          }
        },
        "type": "object",
        "title": "EstimateInferencePriceV2Request",
        "description": "REST request body for estimating inference price. workspace_id comes from path."
      },
      "EstimateTrainingPriceRequest": {
        "properties": {
          "reference_set_id": {
            "type": "string",
            "format": "uuid",
            "title": "Reference Set Id",
            "description": "The reference set to price training for."
          },
          "base_model_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Base Model Id",
            "description": "Base model to train. Omit to use the reference set's configured or workspace default model."
          },
          "training_framework": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "fal",
                  "ai-toolkit"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Training Framework",
            "description": "Training framework override. Omit for the server default."
          }
        },
        "type": "object",
        "required": [
          "reference_set_id"
        ],
        "title": "EstimateTrainingPriceRequest"
      },
      "EstimateTrainingPriceResponse": {
        "properties": {
          "estimated_price_creative_units": {
            "type": "number",
            "title": "Estimated Price Creative Units",
            "description": "Estimated Creative Units to train this reference set."
          },
          "base_model_id": {
            "type": "string",
            "title": "Base Model Id",
            "description": "The base model the estimate was computed for."
          },
          "workspace_balance_creative_units": {
            "type": "number",
            "title": "Workspace Balance Creative Units",
            "description": "Usable Creative Units balance (total minus reserved by in-progress work)."
          },
          "estimated_remaining_balance_creative_units": {
            "type": "number",
            "title": "Estimated Remaining Balance Creative Units",
            "description": "Usable balance after subtracting the estimated price. Can be negative."
          },
          "has_sufficient_creative_units": {
            "type": "boolean",
            "title": "Has Sufficient Creative Units",
            "description": "Whether the workspace has enough available Creative Units to cover the estimate."
          }
        },
        "type": "object",
        "required": [
          "estimated_price_creative_units",
          "base_model_id",
          "workspace_balance_creative_units",
          "estimated_remaining_balance_creative_units",
          "has_sufficient_creative_units"
        ],
        "title": "EstimateTrainingPriceResponse"
      },
      "EstimateWorkflowOutputCount": {
        "properties": {
          "output": {
            "$ref": "#/components/schemas/WorkflowOutput",
            "description": "The output parameter definition."
          },
          "count": {
            "type": "integer",
            "title": "Count",
            "description": "The expected number of outputs"
          }
        },
        "type": "object",
        "required": [
          "output",
          "count"
        ],
        "title": "EstimateWorkflowOutputCount"
      },
      "EstimateWorkflowPriceOutput": {
        "properties": {
          "estimated_price_creative_units": {
            "type": "number",
            "title": "Estimated Price Creative Units",
            "description": "Total estimated Creative Units price for this run."
          },
          "output_counts": {
            "items": {
              "$ref": "#/components/schemas/EstimateWorkflowOutputCount"
            },
            "type": "array",
            "title": "Output Counts",
            "description": "Expected output count for each workflow output parameter."
          },
          "workspace_balance_creative_units": {
            "type": "number",
            "title": "Workspace Balance Creative Units",
            "description": "Usable Creative Units balance (total balance minus reserved by in-progress generations)."
          },
          "estimated_remaining_balance_creative_units": {
            "type": "number",
            "title": "Estimated Remaining Balance Creative Units",
            "description": "Usable balance after subtracting the estimated price. Can be negative."
          },
          "has_sufficient_creative_units": {
            "type": "boolean",
            "title": "Has Sufficient Creative Units",
            "description": "Whether the workspace has enough available Creative Units to cover the estimated price."
          }
        },
        "type": "object",
        "required": [
          "estimated_price_creative_units",
          "output_counts",
          "workspace_balance_creative_units",
          "estimated_remaining_balance_creative_units",
          "has_sufficient_creative_units"
        ],
        "title": "EstimateWorkflowPriceOutput"
      },
      "EstimateWorkflowPriceRequest": {
        "properties": {
          "inputs": {
            "additionalProperties": true,
            "type": "object",
            "title": "Inputs",
            "description": "Workflow inputs matching the workflow's input schema."
          }
        },
        "type": "object",
        "required": [
          "inputs"
        ],
        "title": "EstimateWorkflowPriceRequest"
      },
      "ExecuteForgeOutput": {
        "properties": {
          "inference_id": {
            "type": "string",
            "format": "uuid",
            "title": "Inference Id",
            "description": "Unique identifier for this forge run."
          },
          "status": {
            "$ref": "#/components/schemas/InferenceStatus",
            "description": "Current status: IN_PROGRESS."
          },
          "estimated_price_creative_units": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Estimated Price Creative Units",
            "description": "Estimated price in Creative Units."
          },
          "poll_interval_seconds": {
            "type": "integer",
            "title": "Poll Interval Seconds",
            "description": "Suggested polling interval in seconds."
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "title": "Created At",
            "description": "Timestamp of when the run was created."
          },
          "session_id": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ],
            "title": "Session Id",
            "description": "Session ID the run was added to, if a session was specified."
          },
          "normalized_parameters": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/NormalizedInferenceParameters"
              },
              {
                "type": "null"
              }
            ],
            "description": "Actual parameters used after model-specific normalization and defaults."
          }
        },
        "type": "object",
        "required": [
          "inference_id",
          "status",
          "poll_interval_seconds",
          "created_at"
        ],
        "title": "ExecuteForgeOutput"
      },
      "ExecuteInferenceRequest": {
        "properties": {
          "subtitle_preset": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Subtitle Preset",
            "description": "Caption style, spelled exactly as one of the model's `subtitle_presets`: any other name is quoted at the default style and refused at launch. Its `subtitle_dynamic_presets` animate word by word and bill at a higher rate, so pass the same preset to the estimate. Omit for the model's default style."
          },
          "subtitle_color": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^#([0-9A-Fa-f]{3}){1,2}$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Subtitle Color",
            "description": "Caption text colour as hex (`#FFFFFF`), for models whose capabilities report `subtitle_primary_color`."
          },
          "subtitle_secondary_color": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^#([0-9A-Fa-f]{3}){1,2}$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Subtitle Secondary Color",
            "description": "Colour of the words the model emphasises, as hex, for models whose capabilities report `subtitle_secondary_color`."
          },
          "subtitle_alignment": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "top",
                  "center",
                  "bottom"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Subtitle Alignment",
            "description": "Where the captions sit vertically, for models whose capabilities report `subtitle_alignment`."
          },
          "model_id": {
            "type": "string",
            "format": "uuid",
            "title": "Model Id",
            "description": "Model/style ID to use for generation."
          },
          "weight": {
            "type": "number",
            "maximum": 2,
            "minimum": 0,
            "title": "Weight",
            "description": "Style/LoRA strength applied to the model. 1.0 = as trained; lower weakens, higher over-applies the style. Only affects LoRA/adapter-backed styles; ignored for models without a trainable adapter.",
            "default": 1
          },
          "prompt": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 100000
              },
              {
                "type": "null"
              }
            ],
            "title": "Prompt",
            "description": "Text prompt."
          },
          "width": {
            "anyOf": [
              {
                "type": "integer",
                "exclusiveMinimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Width",
            "description": "Output width in pixels. If not specified, a default resolution based on the model will be applied."
          },
          "height": {
            "anyOf": [
              {
                "type": "integer",
                "exclusiveMinimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Height",
            "description": "Output height in pixels. If not specified, a default resolution based on the model will be applied."
          },
          "batch_size": {
            "type": "integer",
            "maximum": 16,
            "minimum": 1,
            "title": "Batch Size",
            "description": "Number of outputs (1-16).",
            "default": 4
          },
          "num_inference_steps": {
            "anyOf": [
              {
                "type": "integer",
                "exclusiveMinimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Num Inference Steps",
            "description": "Number of diffusion steps."
          },
          "guidance_scale": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Guidance Scale",
            "description": "Guidance scale (CFG)."
          },
          "prompt_strength": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 1,
                "minimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Prompt Strength",
            "description": "How closely the generated audio follows the text prompt (0-1); higher means less variation. Honored by ElevenLabs Sound Effects and the Sonilo video-to-music models, and ignored by every other model. To control how closely an image or video generation follows an input image, set guidance_files[].weight instead."
          },
          "quality": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "low",
                  "medium",
                  "high"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Quality",
            "description": "Quality level: low, medium, or high."
          },
          "sharpness": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sharpness",
            "description": "Output sharpness."
          },
          "duration_seconds": {
            "anyOf": [
              {
                "type": "number",
                "exclusiveMinimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Duration Seconds",
            "description": "Output length in seconds — a video clip's duration, or the clip length for audio models whose capabilities report duration_seconds_min and duration_seconds_max. A value outside a model's supported range is refused."
          },
          "generate_audio": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Generate Audio",
            "description": "Generate audio with video."
          },
          "keep_audio": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Keep Audio",
            "description": "Keep audio from input video."
          },
          "instrumental": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Instrumental",
            "description": "Guarantee a track with no vocals, on models whose capabilities report instrumental. Asking for one in the prompt is only a suggestion."
          },
          "loop": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Loop",
            "description": "Compose the clip to repeat with no audible seam, on models whose capabilities report loop."
          },
          "output_format": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/AudioOutputFormat"
              },
              {
                "type": "null"
              }
            ],
            "description": "Container for the delivered file, one of the values the model's capabilities list under output_formats. Layer never re-encodes a clip, so a model that lists none delivers what it delivers."
          },
          "lyrics": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Lyrics",
            "description": "Words to be sung, for models whose capabilities report lyrics. A separate input from the prompt, which describes the music itself."
          },
          "composition_plan": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/CompositionPlan"
              },
              {
                "type": "null"
              }
            ],
            "description": "The track as an ordered list of sections, for models whose capabilities report composition_plan. Supersedes prompt, duration_seconds and instrumental, which are dropped rather than sent with it."
          },
          "fps": {
            "anyOf": [
              {
                "type": "integer",
                "exclusiveMinimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Fps",
            "description": "FPS for LTX video generation (e.g. 25 or 50)."
          },
          "video_effects": {
            "items": {
              "$ref": "#/components/schemas/ForgeVideoEffectInput"
            },
            "type": "array",
            "title": "Video Effects",
            "description": "Video effects to apply.",
            "default": []
          },
          "use_ta_pose": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Use Ta Pose",
            "description": "Deprecated: use pose_mode. Legacy rig-ready-pose toggle for 3D."
          },
          "pose_mode": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/PoseMode"
              },
              {
                "type": "null"
              }
            ],
            "description": "Rest pose for a character mesh: A_POSE or T_POSE. Support varies by model."
          },
          "include_textures": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Include Textures",
            "description": "Include textures in 3D output."
          },
          "detailed_geometry": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Detailed Geometry",
            "description": "Denser, more detailed geometry (Meshy V7 ultra mode). Costs extra; support varies by model."
          },
          "remesh_geometry": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Remesh Geometry",
            "description": "Set false to skip the provider's remesh phase and keep its raw geometry. Support varies by model."
          },
          "texture_resolution": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/TextureResolution"
              },
              {
                "type": "null"
              }
            ],
            "description": "Base color texture size: RES_2K, RES_4K or RES_8K. Costs extra at RES_8K; support varies by model."
          },
          "remove_lighting": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Remove Lighting",
            "description": "Strip baked highlights and shadows from the texture. Support varies by model."
          },
          "mesh_density": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MeshDensity"
              },
              {
                "type": "null"
              }
            ],
            "description": "Adaptive face count in place of a face limit: ULTRA, HIGH, MEDIUM or LOW. Support varies by model."
          },
          "preserve_uvs": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Preserve Uvs",
            "description": "Keep the mesh's own UV layout when retexturing. Support varies by model."
          },
          "segment_by": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/SegmentBy"
              },
              {
                "type": "null"
              }
            ],
            "description": "What to split a mesh along: AUTO, or PARTS with the parts named in segment_part_names. Support varies by model."
          },
          "segment_part_names": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array",
                "maxItems": 10
              },
              {
                "type": "null"
              }
            ],
            "title": "Segment Part Names",
            "description": "Parts to split along when segment_by is PARTS, at most 10."
          },
          "segment_target": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/SegmentTarget"
              },
              {
                "type": "null"
              }
            ],
            "description": "What a mesh split treats the mesh as: CHARACTER, split by a body-part template, or GENERAL, split by segment_level. Support varies by model."
          },
          "segment_parts": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Segment Parts",
            "description": "How many parts a CHARACTER split makes. Support varies by model."
          },
          "segment_level": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/SegmentLevel"
              },
              {
                "type": "null"
              }
            ],
            "description": "How finely a GENERAL split cuts the mesh: LOW, MEDIUM or HIGH. Support varies by model."
          },
          "segment_strength": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Segment Strength",
            "description": "How aggressively a mesh split cuts: higher makes more parts. Support varies by model."
          },
          "quad_mesh": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Quad Mesh",
            "description": "Generate quad mesh."
          },
          "pbr_materials": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Pbr Materials",
            "description": "Generate PBR materials."
          },
          "low_poly": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Low Poly",
            "description": "Generate low-poly mesh."
          },
          "generate_parts": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Generate Parts",
            "description": "Generate separate parts."
          },
          "face_limit": {
            "anyOf": [
              {
                "type": "integer",
                "exclusiveMinimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Face Limit",
            "description": "Face/polygon limit for 3D mesh."
          },
          "stability": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 1,
                "minimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Stability",
            "description": "Audio stability (0-1)."
          },
          "use_speaker_boost": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Use Speaker Boost",
            "description": "Boost speaker clarity."
          },
          "similarity_boost": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 1,
                "minimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Similarity Boost",
            "description": "Voice similarity boost (0-1)."
          },
          "style_exaggeration": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 1,
                "minimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Style Exaggeration",
            "description": "Style exaggeration (0-1)."
          },
          "speed": {
            "anyOf": [
              {
                "type": "number",
                "exclusiveMinimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Speed",
            "description": "Speech speed multiplier."
          },
          "upscale_ratio": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Upscale Ratio",
            "description": "Upscale factor (e.g. 2.0, 4.0)."
          },
          "creativity": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Creativity",
            "description": "Creative variation strength for upscaling."
          },
          "resemblance": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resemblance",
            "description": "Resemblance to original for upscaling."
          },
          "vectorize": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Vectorize",
            "description": "Vectorize the output image."
          },
          "remove_background": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Remove Background",
            "description": "Remove background from output."
          },
          "reframe": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reframe",
            "description": "Reframe/extend the image."
          },
          "refill": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Refill",
            "description": "Outpaint/refill transparent areas."
          },
          "seed": {
            "type": "integer",
            "title": "Seed",
            "description": "Random seed. -1 for random.",
            "default": -1
          },
          "guidance_files": {
            "items": {
              "$ref": "#/components/schemas/ForgeGuidanceFileInput"
            },
            "type": "array",
            "maxItems": 20,
            "title": "Guidance Files",
            "description": "Reference images/files to guide generation.",
            "default": []
          },
          "mask": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ForgeMaskInput"
              },
              {
                "type": "null"
              }
            ],
            "description": "Mask for inpainting/outpainting."
          },
          "session_name": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 255
              },
              {
                "type": "null"
              }
            ],
            "title": "Session Name",
            "description": "Session name."
          }
        },
        "type": "object",
        "required": [
          "model_id"
        ],
        "title": "ExecuteInferenceRequest",
        "description": "REST request body for executing an inference. workspace_id comes from path."
      },
      "ExecuteInferenceV2Output": {
        "properties": {
          "inference_id": {
            "type": "string",
            "format": "uuid",
            "title": "Inference Id",
            "description": "Unique identifier for this inference run."
          },
          "status": {
            "$ref": "#/components/schemas/InferenceStatus",
            "description": "Current status: IN_PROGRESS."
          },
          "estimated_price_creative_units": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Estimated Price Creative Units",
            "description": "Estimated price in Creative Units."
          },
          "poll_interval_seconds": {
            "type": "integer",
            "title": "Poll Interval Seconds",
            "description": "Suggested polling interval in seconds."
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "title": "Created At",
            "description": "Timestamp of when the run was created."
          },
          "session_id": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ],
            "title": "Session Id",
            "description": "Session ID the run was added to, if a session was specified."
          },
          "normalized_parameters": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/NormalizedInferenceParametersV2"
              },
              {
                "type": "null"
              }
            ],
            "description": "Actual parameters used after model-specific normalization and defaults."
          },
          "base_model_id": {
            "type": "string",
            "title": "Base Model Id",
            "description": "Base model used for the run, resolved or auto-picked."
          },
          "reference_set_contributions": {
            "items": {
              "$ref": "#/components/schemas/ForgeReferenceSetContribution"
            },
            "type": "array",
            "title": "Reference Set Contributions",
            "description": "Per-set summary of what each reference set contributed.",
            "default": []
          },
          "reference_sets_degraded": {
            "type": "boolean",
            "title": "Reference Sets Degraded",
            "description": "True when at least one attached reference set did not meaningfully contribute. The run still costs Creative Units.",
            "default": false
          },
          "reference_sets_warning": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reference Sets Warning",
            "description": "Names each degraded reference set and why, or null when none is degraded."
          },
          "expected_events": {
            "items": {
              "$ref": "#/components/schemas/WebhookEventType"
            },
            "type": "array",
            "title": "Expected Events",
            "description": "Deliveries this run will produce, resolved when it was submitted. Empty when no webhook was supplied. A generation reports its own outcome, and additionally produces a scoring run when this scope has automatic scoring rules — so this is how to tell 'more is coming' from 'that was everything'. Best-effort: a rule turned off mid-run can still remove an event listed here.",
            "default": []
          }
        },
        "type": "object",
        "required": [
          "inference_id",
          "status",
          "poll_interval_seconds",
          "created_at",
          "base_model_id"
        ],
        "title": "ExecuteInferenceV2Output"
      },
      "ExecuteInferenceV2Request": {
        "properties": {
          "subtitle_preset": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Subtitle Preset",
            "description": "Caption style, spelled exactly as one of the model's `subtitle_presets`: any other name is quoted at the default style and refused at launch. Its `subtitle_dynamic_presets` animate word by word and bill at a higher rate, so pass the same preset to the estimate. Omit for the model's default style."
          },
          "subtitle_color": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^#([0-9A-Fa-f]{3}){1,2}$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Subtitle Color",
            "description": "Caption text colour as hex (`#FFFFFF`), for models whose capabilities report `subtitle_primary_color`."
          },
          "subtitle_secondary_color": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^#([0-9A-Fa-f]{3}){1,2}$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Subtitle Secondary Color",
            "description": "Colour of the words the model emphasises, as hex, for models whose capabilities report `subtitle_secondary_color`."
          },
          "subtitle_alignment": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "top",
                  "center",
                  "bottom"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Subtitle Alignment",
            "description": "Where the captions sit vertically, for models whose capabilities report `subtitle_alignment`."
          },
          "base_model_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Base Model Id",
            "description": "Base model to run, as an id (e.g. flux-dev), display name, or community alias."
          },
          "reference_sets": {
            "items": {
              "$ref": "#/components/schemas/InferenceReferenceSetInput"
            },
            "type": "array",
            "maxItems": 25,
            "title": "Reference Sets",
            "description": "Reference sets to apply, up to 25.",
            "default": []
          },
          "modality": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Modality"
              },
              {
                "type": "null"
              }
            ],
            "description": "Output modality: image, video, three_d, or audio. Only needed to disambiguate reference-set translation when no base_model_id is given."
          },
          "prompt": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 100000
              },
              {
                "type": "null"
              }
            ],
            "title": "Prompt",
            "description": "Text prompt."
          },
          "negative_prompt": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 100000
              },
              {
                "type": "null"
              }
            ],
            "title": "Negative Prompt",
            "description": "What to steer the output away from. Honored by the models whose `inference-schema` lists `negative_prompt`, and ignored by the rest."
          },
          "width": {
            "anyOf": [
              {
                "type": "integer",
                "exclusiveMinimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Width",
            "description": "Output width in pixels. If not specified, a default resolution based on the model will be applied."
          },
          "height": {
            "anyOf": [
              {
                "type": "integer",
                "exclusiveMinimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Height",
            "description": "Output height in pixels. If not specified, a default resolution based on the model will be applied."
          },
          "auto_aspect_ratio": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Auto Aspect Ratio",
            "description": "Derive the output's shape from the input instead of from width/height. Only on models whose capabilities include autoAspectRatio."
          },
          "auto_resolution": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Auto Resolution",
            "description": "The size tier of an auto_aspect_ratio run (e.g. '2K'), one of the model's autoResolutions. Unset on an image run, the smallest tier that holds the input image."
          },
          "batch_size": {
            "type": "integer",
            "maximum": 16,
            "minimum": 1,
            "title": "Batch Size",
            "description": "Number of outputs (1-16).",
            "default": 4
          },
          "num_inference_steps": {
            "anyOf": [
              {
                "type": "integer",
                "exclusiveMinimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Num Inference Steps",
            "description": "Number of diffusion steps."
          },
          "guidance_scale": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Guidance Scale",
            "description": "Guidance scale (CFG)."
          },
          "prompt_strength": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 1,
                "minimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Prompt Strength",
            "description": "How closely the generated audio follows the text prompt (0-1); higher means less variation. Honored by ElevenLabs Sound Effects and the Sonilo video-to-music models, and ignored by every other model. To control how closely an image or video generation follows an input image, set guidance_files[].weight instead."
          },
          "quality": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "low",
                  "medium",
                  "high"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Quality",
            "description": "Quality level: low, medium, or high."
          },
          "sharpness": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sharpness",
            "description": "Output sharpness."
          },
          "prompt_enhancement": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/PromptEnhancement"
              },
              {
                "type": "null"
              }
            ],
            "description": "How much the provider rewrites the prompt before generating: off, fast, standard or quality, on models whose capabilities list prompt_enhancement_levels. A level the model does not offer settles on the nearest one it does; unset leaves the provider's own default."
          },
          "duration_seconds": {
            "anyOf": [
              {
                "type": "number",
                "exclusiveMinimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Duration Seconds",
            "description": "Output length in seconds — a video clip's duration, or the clip length for audio models whose capabilities report duration_seconds_min and duration_seconds_max. A value outside a model's supported range is refused."
          },
          "generate_audio": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Generate Audio",
            "description": "Generate audio with video."
          },
          "keep_audio": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Keep Audio",
            "description": "Keep audio from input video."
          },
          "draft": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Draft",
            "description": "Render a quick, low-cost draft instead of the full-quality output, on models whose capabilities report draft. Complete the draft later with the model named by the generating model's draftCompletionModelId, passing the draft file as a DRAFT_VIDEO input (DRAFT_WORLD for a world, DRAFT_MESH for a mesh)."
          },
          "instrumental": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Instrumental",
            "description": "Guarantee a track with no vocals, on models whose capabilities report instrumental. Asking for one in the prompt is only a suggestion."
          },
          "loop": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Loop",
            "description": "Compose the clip to repeat with no audible seam, on models whose capabilities report loop."
          },
          "output_format": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/AudioOutputFormat"
              },
              {
                "type": "null"
              }
            ],
            "description": "Container for the delivered file, one of the values the model's capabilities list under output_formats. Layer never re-encodes a clip, so a model that lists none delivers what it delivers."
          },
          "lyrics": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Lyrics",
            "description": "Words to be sung, for models whose capabilities report lyrics. A separate input from the prompt, which describes the music itself."
          },
          "composition_plan": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/CompositionPlan"
              },
              {
                "type": "null"
              }
            ],
            "description": "The track as an ordered list of sections, for models whose capabilities report composition_plan. Supersedes prompt, duration_seconds and instrumental, which are dropped rather than sent with it."
          },
          "fps": {
            "anyOf": [
              {
                "type": "integer",
                "exclusiveMinimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Fps",
            "description": "FPS for LTX video generation (e.g. 25 or 50)."
          },
          "video_effects": {
            "items": {
              "$ref": "#/components/schemas/ForgeVideoEffectInput"
            },
            "type": "array",
            "title": "Video Effects",
            "description": "Video effects to apply.",
            "default": []
          },
          "use_ta_pose": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Use Ta Pose",
            "description": "Deprecated: use pose_mode. Legacy rig-ready-pose toggle for 3D."
          },
          "pose_mode": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/PoseMode"
              },
              {
                "type": "null"
              }
            ],
            "description": "Rest pose for a character mesh: A_POSE or T_POSE. Support varies by model."
          },
          "include_textures": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Include Textures",
            "description": "Include textures in 3D output."
          },
          "detailed_geometry": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Detailed Geometry",
            "description": "Denser, more detailed geometry (Meshy V7 ultra mode). Costs extra; support varies by model."
          },
          "remesh_geometry": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Remesh Geometry",
            "description": "Set false to skip the provider's remesh phase and keep its raw geometry. Support varies by model."
          },
          "texture_resolution": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/TextureResolution"
              },
              {
                "type": "null"
              }
            ],
            "description": "Base color texture size: RES_2K, RES_4K or RES_8K. Costs extra at RES_8K; support varies by model."
          },
          "remove_lighting": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Remove Lighting",
            "description": "Strip baked highlights and shadows from the texture. Support varies by model."
          },
          "mesh_density": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MeshDensity"
              },
              {
                "type": "null"
              }
            ],
            "description": "Adaptive face count in place of a face limit: ULTRA, HIGH, MEDIUM or LOW. Support varies by model."
          },
          "preserve_uvs": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Preserve Uvs",
            "description": "Keep the mesh's own UV layout when retexturing. Support varies by model."
          },
          "segment_by": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/SegmentBy"
              },
              {
                "type": "null"
              }
            ],
            "description": "What to split a mesh along: AUTO, or PARTS with the parts named in segment_part_names. Support varies by model."
          },
          "segment_part_names": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array",
                "maxItems": 10
              },
              {
                "type": "null"
              }
            ],
            "title": "Segment Part Names",
            "description": "Parts to split along when segment_by is PARTS, at most 10."
          },
          "segment_target": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/SegmentTarget"
              },
              {
                "type": "null"
              }
            ],
            "description": "What a mesh split treats the mesh as: CHARACTER, split by a body-part template, or GENERAL, split by segment_level. Support varies by model."
          },
          "segment_parts": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Segment Parts",
            "description": "How many parts a CHARACTER split makes. Support varies by model."
          },
          "segment_level": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/SegmentLevel"
              },
              {
                "type": "null"
              }
            ],
            "description": "How finely a GENERAL split cuts the mesh: LOW, MEDIUM or HIGH. Support varies by model."
          },
          "segment_strength": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Segment Strength",
            "description": "How aggressively a mesh split cuts: higher makes more parts. Support varies by model."
          },
          "quad_mesh": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Quad Mesh",
            "description": "Generate quad mesh."
          },
          "pbr_materials": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Pbr Materials",
            "description": "Generate PBR materials."
          },
          "low_poly": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Low Poly",
            "description": "Generate low-poly mesh."
          },
          "generate_parts": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Generate Parts",
            "description": "Generate separate parts."
          },
          "face_limit": {
            "anyOf": [
              {
                "type": "integer",
                "exclusiveMinimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Face Limit",
            "description": "Face/polygon limit for 3D mesh."
          },
          "enable_rigging": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Enable Rigging",
            "description": "Rig the generated 3D mesh with a skeleton. Honored by the models whose capabilities report `rigging`."
          },
          "enable_animation": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Enable Animation",
            "description": "Animate the generated 3D mesh with the motion of the animation reference set passed in `reference_sets` (category `animation`), or the provider's default motion without one; implies rigging. Honored by the models whose capabilities report `animation`."
          },
          "stability": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 1,
                "minimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Stability",
            "description": "Audio stability (0-1)."
          },
          "use_speaker_boost": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Use Speaker Boost",
            "description": "Boost speaker clarity."
          },
          "similarity_boost": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 1,
                "minimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Similarity Boost",
            "description": "Voice similarity boost (0-1)."
          },
          "style_exaggeration": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 1,
                "minimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Style Exaggeration",
            "description": "Style exaggeration (0-1)."
          },
          "speed": {
            "anyOf": [
              {
                "type": "number",
                "exclusiveMinimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Speed",
            "description": "Speech speed multiplier."
          },
          "upscale_ratio": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Upscale Ratio",
            "description": "Upscale factor (e.g. 2.0, 4.0)."
          },
          "creativity": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Creativity",
            "description": "Creative variation strength for upscaling."
          },
          "resemblance": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resemblance",
            "description": "Resemblance to original for upscaling."
          },
          "denoise": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Denoise",
            "description": "Noise removal. On the models whose capabilities report `denoise_range`, in that range; a value outside it is refused."
          },
          "compression_repair": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Compression Repair",
            "description": "Compression-artifact removal. On the models whose capabilities report `compression_repair_range`, in that range; a value outside it is refused."
          },
          "halo_reduction": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Halo Reduction",
            "description": "Removal of bright edge outlines. On the models whose capabilities report `halo_reduction_range`, in that range; a value outside it is refused."
          },
          "recover_detail": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Recover Detail",
            "description": "How much of the source's own detail is kept. On the models whose capabilities report `recover_detail_range`, in that range; a value outside it is refused."
          },
          "detail": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Detail",
            "description": "How much fine detail the model adds. On the models whose capabilities report `detail_range`, in that range; a value outside it is refused."
          },
          "grain": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Grain",
            "description": "Film grain laid over the result. On the models whose capabilities report `grain_range`, in that range; a value outside it is refused."
          },
          "refine_strength": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Refine Strength",
            "description": "How strongly lettering and shapes are rebuilt. On the models whose capabilities report `refine_strength_range`, in that range; a value outside it is refused."
          },
          "realism": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Realism",
            "description": "Bias of added detail toward photorealism. On the models whose capabilities report `realism_range`, in that range; a value outside it is refused."
          },
          "face_enhancement": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Face Enhancement",
            "description": "Set false to skip the face-restoration pass, on models whose capabilities report face_enhancement."
          },
          "face_enhancement_strength": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Face Enhancement Strength",
            "description": "Strength of the face pass. On the models whose capabilities report `face_enhancement_strength_range`, in that range; a value outside it is refused."
          },
          "face_enhancement_creativity": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Face Enhancement Creativity",
            "description": "Facial detail the face pass invents. On the models whose capabilities report `face_enhancement_creativity_range`, in that range; a value outside it is refused."
          },
          "target_region": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/TargetRegion"
              },
              {
                "type": "null"
              }
            ],
            "description": "all, subject or background: the part of the image enhanced, on models whose capabilities report target_region."
          },
          "color_preservation": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Color Preservation",
            "description": "Keep the source's palette, on models whose capabilities report color_preservation."
          },
          "vectorize": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Vectorize",
            "description": "Vectorize the output image."
          },
          "vectorization_mode": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/VectorizationMode"
              },
              {
                "type": "null"
              }
            ],
            "description": "SVG path mode: `spline` (curves) or `polygon` (straight lines). Honored by the models whose capabilities report `vectorization_controls`."
          },
          "vectorization_color_mode": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/VectorizationColorMode"
              },
              {
                "type": "null"
              }
            ],
            "description": "SVG color output: `color` or `binary` (black and white). Honored by the models whose capabilities report `vectorization_controls`."
          },
          "vectorization_layering": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/VectorizationLayering"
              },
              {
                "type": "null"
              }
            ],
            "description": "SVG shape layering in color output: `stacked` (shapes overlap) or `cutout` (no overlap). Honored by the models whose capabilities report `vectorization_controls`."
          },
          "vectorization_filter_speckle": {
            "anyOf": [
              {
                "type": "integer",
                "maximum": 20,
                "minimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Vectorization Filter Speckle",
            "description": "Drop specks smaller than this many pixels. Honored by the models whose capabilities report `vectorization_controls`."
          },
          "vectorization_color_precision": {
            "anyOf": [
              {
                "type": "integer",
                "maximum": 10,
                "minimum": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Vectorization Color Precision",
            "description": "Color quantization level; lower merges more colors. Honored by the models whose capabilities report `vectorization_controls`."
          },
          "vectorization_layer_difference": {
            "anyOf": [
              {
                "type": "integer",
                "maximum": 32,
                "minimum": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Vectorization Layer Difference",
            "description": "Color difference that splits gradient layers. Honored by the models whose capabilities report `vectorization_controls`."
          },
          "vectorization_corner_threshold": {
            "anyOf": [
              {
                "type": "integer",
                "maximum": 180,
                "minimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Vectorization Corner Threshold",
            "description": "Minimum angle, in degrees, kept as a sharp corner (spline mode). Honored by the models whose capabilities report `vectorization_controls`."
          },
          "vectorization_length_threshold": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 10,
                "minimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Vectorization Length Threshold",
            "description": "Longest curve segment before it is subdivided (spline mode). Honored by the models whose capabilities report `vectorization_controls`."
          },
          "vectorization_splice_threshold": {
            "anyOf": [
              {
                "type": "integer",
                "maximum": 90,
                "minimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Vectorization Splice Threshold",
            "description": "Angle, in degrees, at which a curve is split (spline mode). Honored by the models whose capabilities report `vectorization_controls`."
          },
          "vectorization_max_iterations": {
            "anyOf": [
              {
                "type": "integer",
                "maximum": 20,
                "minimum": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Vectorization Max Iterations",
            "description": "Curve-fitting passes. Honored by the models whose capabilities report `vectorization_controls`."
          },
          "vectorization_path_precision": {
            "anyOf": [
              {
                "type": "integer",
                "maximum": 10,
                "minimum": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Vectorization Path Precision",
            "description": "Decimal places kept in SVG path coordinates. Honored by the models whose capabilities report `vectorization_controls`."
          },
          "transparency": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Transparency",
            "description": "Put the output on a transparent background. Also accepted as `remove_background`."
          },
          "reframe": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reframe",
            "description": "Reframe/extend the image."
          },
          "tileability": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Tileability",
            "description": "Generate a seamless texture that tiles without a visible edge. Honored by the models whose `inference-schema` lists `tileability` (list them with `GET .../base-models?tileable=true`), and ignored by the rest."
          },
          "projection": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ImageProjection"
              },
              {
                "type": "null"
              }
            ],
            "description": "`EQUIRECTANGULAR` draws a 2:1 360 degree skybox whose sides meet and whose poles are settled. Honored by the models listed for the `create_skybox` use case; the size must be one of the model's skybox sizes (its presets carrying the projection), and unset takes the largest."
          },
          "projection_strength": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 2,
                "minimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Projection Strength",
            "description": "How strongly a model's 360 LoRA draws the projection, as its scale. Unset takes the LoRA's own."
          },
          "refill": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Refill",
            "description": "Outpaint/refill transparent areas."
          },
          "camera_transform": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/CameraTransformDelta"
              },
              {
                "type": "null"
              }
            ],
            "description": "Re-render the init image from another camera position: rotation in degrees (`yaw_delta` turns around the subject, `pitch_delta` looks from above or below), `distance_delta` moves closer or further. Honored by the models whose capabilities report `camera_transform`, such as those listed for the `multi_angle` use case."
          },
          "camera_trajectory": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/CameraTrajectoryKeyframe"
                },
                "type": "array",
                "maxItems": 12,
                "minItems": 2
              },
              {
                "type": "null"
              }
            ],
            "title": "Camera Trajectory",
            "description": "A camera path for an image-to-video run: 2 to 12 keyframes, each an orbit pose (`azimuth` and `elevation` in degrees, `distance` where 1 is the source image's framing) at a `time` from 0 (first frame) to 1 (last). Honored by the models whose capabilities report `camera_trajectory`."
          },
          "scene_lighting": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/SceneLightingConfig"
              },
              {
                "type": "null"
              }
            ],
            "description": "Relight the init image: one or more orbit lights, each placed by `rotation` (`yaw` around the subject and `pitch` above or below it, in degrees) with an `intensity` and a `color_hex`. Honored by the models whose capabilities report `scene_lighting`."
          },
          "tile_grid": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/TileGrid"
              },
              {
                "type": "null"
              }
            ],
            "description": "Draw a game tile onto a grid: its `shape` (`SQUARE` for an isometric diamond, `HEXAGON` for a hex tile) and `orientation` (`POINTY_TOP` or `FLAT_TOP` for a hexagon), the camera `elevation` (30 for 2:1 dimetric; a hexagon takes 60, or 90 from straight above), a `facing` of 0, 90, 180 or 270 for a square, the `footprint_width` x `footprint_depth` in cells (a hexagon covers one), the wall `height` in cell sides (0 for a flat ground tile) and the delivered `tile_width` in pixels. The run draws over a blockout of the grid, so it takes no init image, and the output comes back cut out and fitted onto the grid, its base recorded in the file's `tile` metadata. Honored by the models whose capabilities report `tile_grid`."
          },
          "output_fit": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/OutputFit"
              },
              {
                "type": "null"
              }
            ],
            "description": "Fit the image onto its delivery canvas after everything else the run does: `trim` its transparent margin, keep the drawing's own size (`canvas: CONTENT`) or place it on a `FIXED` `width` x `height` canvas, scaled as `scale` says and aligned on `anchor` (`BASE` stands a game tile's base on the bottom centre), with `padding` px of transparent margin. Image outputs only."
          },
          "nine_slice": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Nine Slice",
            "description": "Deliver the image as a 9-slice UI element (a button, frame or panel that resizes): after everything else the run does, the plain band through its middle is found on each axis, the edges and centre are made to tile (painted texture kept, light evened out), and the insets are recorded as the file's `nineSlice` metadata. An image with no such band is delivered as drawn, without insets. Image outputs only."
          },
          "parallax": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ParallaxSplit"
              },
              {
                "type": "null"
              }
            ],
            "description": "Split the init image into parallax layers by depth: `layers` (2 to 6, default 5) cut at `cuts`, ascending nearness values in (0, 1), one fewer than the layers (unset cuts at the gaps in the scene's own depth); `loop` makes every layer repeat left to right. The model fills in what each layer hides, so it must be an image eraser or inpainting model (an `ERASE_OBJECT` or `INPAINTING` use case); an inpainting model given no prompt is told to continue the scenery. Delivered as a layered PSD, farthest layer at the bottom, with each layer's scroll speed in the file's `parallax` metadata. Billed as one run of the model per layer but the nearest."
          },
          "color_palette": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/InferenceColorPalette"
              },
              {
                "type": "null"
              }
            ],
            "description": "Colors the output should use: `colors`, each a `name` and a `#RRGGBB` `hex` (and an optional `role`), and optionally the `reference_set_id` they were picked from. The provider steers toward the hex values on the models whose capabilities report `max_palette_colors`, which is also the most colors a run takes there. Other models whose prompt describes how the output looks get the colors added to a non-empty prompt; models whose prompt is spoken, set into the output as text, a query, or a description of sound or motion, and text and audio models, ignore it."
          },
          "expression": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Expression",
            "description": "The expression a face edit gives the face, one of the names the model's capabilities list under `expressions`."
          },
          "target_language": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Target Language",
            "description": "The language a dub speaks, as one of the ISO 639-1 codes the model's capabilities list under `dub_languages`."
          },
          "audio_sections": {
            "items": {
              "$ref": "#/components/schemas/AudioEditSection"
            },
            "type": "array",
            "title": "Audio Sections",
            "description": "Regenerate stretches of the init audio: each section is a window from `start_seconds` to `end_seconds`, measured from the clip's `anchor` (its start by default), that the prompt rewrites while the rest is kept. Honored by the audio models listed for the `inpainting` use case.",
            "default": []
          },
          "audio_extension": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/AudioExtension"
              },
              {
                "type": "null"
              }
            ],
            "description": "Extend the init audio: `after_seconds` of new audio past its end (and, where the model allows it, `before_seconds` ahead of its start). Honored by the audio models listed for the `extend_audio` use case."
          },
          "video_section": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/VideoSection"
              },
              {
                "type": "null"
              }
            ],
            "description": "Replace a span of the init video with a generated scene: the source cuts at `start_seconds` and picks up again at `end_seconds`, both from the clip's start, while `duration_seconds` sets the new scene's length. Required by the video models listed for the `insert_video` use case."
          },
          "guidance_files": {
            "items": {
              "$ref": "#/components/schemas/ForgeGuidanceFileInput"
            },
            "type": "array",
            "maxItems": 20,
            "title": "Guidance Files",
            "description": "Reference images/files to guide generation.",
            "default": []
          },
          "seed": {
            "type": "integer",
            "title": "Seed",
            "description": "Random seed. -1 for random.",
            "default": -1
          },
          "mask": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ForgeMaskInput"
              },
              {
                "type": "null"
              }
            ],
            "description": "Mask for inpainting/outpainting."
          },
          "session_name": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 255
              },
              {
                "type": "null"
              }
            ],
            "title": "Session Name",
            "description": "Organize this run under the most recent active session with this name, creating one if none matches. Ignored when `session_id` is given."
          },
          "session_id": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ],
            "title": "Session Id",
            "description": "Organize this run under this session, from GET /v2/workspaces/{workspace_id}/sessions. Takes precedence over `session_name`, and must belong to this workspace."
          },
          "webhook": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/WebhookInput"
              },
              {
                "type": "null"
              }
            ],
            "description": "Deliver this run's terminal events to a URL instead of polling for them. See the Webhooks section of this document for the payload, headers and retry behaviour."
          }
        },
        "type": "object",
        "title": "ExecuteInferenceV2Request",
        "description": "REST request body for executing an inference. workspace_id comes from path."
      },
      "ExecuteWorkflowOutput": {
        "properties": {
          "run_id": {
            "type": "string",
            "format": "uuid",
            "title": "Run Id",
            "description": "Unique identifier for this workflow run."
          },
          "status": {
            "$ref": "#/components/schemas/BlueprintRunStatus",
            "description": "Current run status: PENDING or RUNNING."
          },
          "estimated_price_creative_units": {
            "type": "number",
            "title": "Estimated Price Creative Units",
            "description": "Estimated price in Creative Units."
          },
          "poll_interval_seconds": {
            "type": "integer",
            "title": "Poll Interval Seconds",
            "description": "Suggested polling interval in seconds."
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "title": "Created At",
            "description": "Timestamp of when the run was created."
          },
          "session_id": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ],
            "title": "Session Id",
            "description": "Session ID the run was added to, if a session was specified."
          },
          "expected_events": {
            "items": {
              "$ref": "#/components/schemas/WebhookEventType"
            },
            "type": "array",
            "title": "Expected Events",
            "description": "Deliveries this run will produce. Empty when no webhook was supplied.",
            "default": []
          }
        },
        "type": "object",
        "required": [
          "run_id",
          "status",
          "estimated_price_creative_units",
          "poll_interval_seconds",
          "created_at"
        ],
        "title": "ExecuteWorkflowOutput"
      },
      "ExecuteWorkflowRequest": {
        "properties": {
          "inputs": {
            "additionalProperties": true,
            "type": "object",
            "title": "Inputs",
            "description": "Input values matching the workflow's input schema."
          },
          "session_id": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ],
            "title": "Session Id",
            "description": "Existing session ID. Takes precedence over session_name if both are provided."
          },
          "session_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Session Name",
            "description": "Session name. Creates a new session if not found in the workspace. Ignored if session_id is set."
          },
          "webhook": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/WebhookInput"
              },
              {
                "type": "null"
              }
            ],
            "description": "Deliver this run's terminal events to a URL instead of polling for them. Only the run's own outcome is delivered — the generations it performs internally are not yours to poll and raise no events of their own. See the Webhooks section of this document for the payload, headers and retry behaviour."
          }
        },
        "type": "object",
        "required": [
          "inputs"
        ],
        "title": "ExecuteWorkflowRequest"
      },
      "FileMetadataView": {
        "properties": {
          "tile": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/TileMetadataView"
              },
              {
                "type": "null"
              }
            ],
            "description": "Grid placement, for a game tile sprite."
          },
          "nine_slice": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/NineSliceMetadataView"
              },
              {
                "type": "null"
              }
            ],
            "description": "9-slice insets, for a UI element such as a button, frame, or panel."
          },
          "sprite_sheet": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/SpriteSheetMetadataView"
              },
              {
                "type": "null"
              }
            ],
            "description": "Frame grid and animations, for a sprite sheet."
          }
        },
        "type": "object",
        "title": "FileMetadataView",
        "description": "What an engine needs beyond the image to build a resource from a file. Each kind is null when absent."
      },
      "FileScore": {
        "properties": {
          "rule_id": {
            "type": "string",
            "format": "uuid",
            "title": "Rule Id",
            "description": "The rule that produced this verdict."
          },
          "rule_name": {
            "type": "string",
            "title": "Rule Name",
            "description": "The rule's name as it was when the file was judged."
          },
          "score": {
            "type": "integer",
            "title": "Score",
            "description": "The verdict, 0-100. Higher is a closer match to what the rule asks for."
          },
          "rationale": {
            "type": "string",
            "title": "Rationale",
            "description": "The judge's explanation of the score."
          },
          "judged_by_model": {
            "type": "string",
            "title": "Judged By Model",
            "description": "The model that judged it."
          },
          "judged_at": {
            "type": "string",
            "format": "date-time",
            "title": "Judged At",
            "description": "When the verdict was recorded."
          }
        },
        "type": "object",
        "required": [
          "rule_id",
          "rule_name",
          "score",
          "rationale",
          "judged_by_model",
          "judged_at"
        ],
        "title": "FileScore"
      },
      "FileScoresOutput": {
        "properties": {
          "file_id": {
            "type": "string",
            "format": "uuid",
            "title": "File Id",
            "description": "Echoes the requested file id."
          },
          "scores": {
            "items": {
              "$ref": "#/components/schemas/FileScore"
            },
            "type": "array",
            "title": "Scores",
            "description": "The current verdict per rule — the newest one, where a file has been scored more than once."
          },
          "headline_score": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Headline Score",
            "description": "The score stamped on the file itself, from the rule its scope nominated. Null when the file has not been judged by that rule."
          },
          "headline_rule_id": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ],
            "title": "Headline Rule Id",
            "description": "The rule the stamped score came from."
          },
          "headline_scored_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Headline Scored At",
            "description": "When the stamp was written."
          }
        },
        "type": "object",
        "required": [
          "file_id",
          "scores"
        ],
        "title": "FileScoresOutput"
      },
      "FileSourceType": {
        "type": "string",
        "enum": [
          "pose",
          "reference",
          "mask",
          "composite",
          "google_drive",
          "miro",
          "linear",
          "transformed_reference",
          "skill_resource",
          "skill_bundle"
        ],
        "title": "FileSourceType"
      },
      "ForgeGuidanceFileInput": {
        "properties": {
          "file_id": {
            "type": "string",
            "format": "uuid",
            "title": "File Id",
            "description": "File ID of an uploaded file."
          },
          "type": {
            "$ref": "#/components/schemas/GuidanceFileType",
            "description": "Guidance type. See model capabilities for supported types per model."
          },
          "weight": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 1,
                "minimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Weight",
            "description": "Influence weight (0-1). Defaults to 0.5 for init, 1 for others."
          },
          "view": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MultiViewSlot"
              },
              {
                "type": "null"
              }
            ],
            "description": "For a model whose capabilities list init_image_views: the view this init image shows. Untagged init images fill the remaining views in order. Every set needs a front view, even a single image."
          },
          "annotations": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ImageAnnotations"
              },
              {
                "type": "null"
              }
            ],
            "description": "On the init image or a reference image: numbered marks saying what to change where, or what to use from a reference. Each item is a `BOX`, `ELLIPSE`, `ARROW`, `FREEHAND` path or `PIN`, placed with points from (0, 0) at the top left to (1, 1) at the bottom right of the image after any crop or rotation, with an `intent` (`EDIT`, `REMOVE`, or `MOVE` for an arrow whose `source_id` names the box or ellipse it moves) and a `note` saying what to do there. Models whose capabilities report `visual_annotations` `RENDERED` read them from a copy of each marked image with the marks drawn on; `NATIVE_BOXES` models take boxes and arrows moving a box, on the init image only. Other models ignore them. Leave `color` unset to have it chosen against the image."
          }
        },
        "type": "object",
        "required": [
          "file_id",
          "type"
        ],
        "title": "ForgeGuidanceFileInput"
      },
      "ForgeMaskInput": {
        "properties": {
          "file_id": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ],
            "title": "File Id",
            "description": "Mask image file ID."
          },
          "for_transparency": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "For Transparency",
            "description": "Use the init image's transparent areas as the mask. As the only mask source, a fully opaque init used as stored (no transform, padding or target) is refused; a mask file works on any init."
          },
          "for_nontransparency": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "For Nontransparency",
            "description": "Use non-transparent areas as mask."
          },
          "edge_radius": {
            "type": "integer",
            "minimum": 0,
            "title": "Edge Radius",
            "description": "Mask edge blur radius in pixels.",
            "default": 0
          }
        },
        "type": "object",
        "title": "ForgeMaskInput"
      },
      "ForgeReferenceSetContribution": {
        "properties": {
          "set_id": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ],
            "title": "Set Id",
            "description": "Reference Set ID this contribution belongs to, if any."
          },
          "lora_applied": {
            "type": "boolean",
            "title": "Lora Applied",
            "description": "True when a LoRA finetune was applied for this set.",
            "default": false
          },
          "animation_applied": {
            "type": "boolean",
            "title": "Animation Applied",
            "description": "True when an animation (Meshy rigging action) finetune was applied for this set.",
            "default": false
          },
          "voice_applied": {
            "type": "boolean",
            "title": "Voice Applied",
            "description": "True when a voice (ElevenLabs) finetune was applied for this set.",
            "default": false
          },
          "mapped_asset_count": {
            "type": "integer",
            "title": "Mapped Asset Count",
            "description": "Number of assets successfully mapped to guidance inputs.",
            "default": 0
          },
          "palette_applied": {
            "type": "boolean",
            "title": "Palette Applied",
            "description": "True when the set's palette went into the run's color palette (up to the model's color limit), or a palette passed with the request stood in for it.",
            "default": false
          },
          "prompt_fallback_applied": {
            "type": "boolean",
            "title": "Prompt Fallback Applied",
            "description": "True when the set fell back to prompt-only representation.",
            "default": false
          },
          "auto_prompt_applied": {
            "type": "boolean",
            "title": "Auto Prompt Applied",
            "description": "True when the set's auto prompt addition was appended to the prompt. Informational: the text rides on top of whatever else the set contributed and is not a degradation.",
            "default": false
          },
          "lora_available_but_incompatible": {
            "type": "boolean",
            "title": "Lora Available But Incompatible",
            "description": "True when SBMC has a LoRA for this set on another base model but not the one used.",
            "default": false
          },
          "skipped_not_applicable": {
            "type": "boolean",
            "title": "Skipped Not Applicable",
            "description": "True when the set isn't applicable to the chosen model (its modality / applicable base models exclude it) so no LoRA or assets were applied.",
            "default": false
          },
          "skipped_irrelevant_category": {
            "type": "boolean",
            "title": "Skipped Irrelevant Category",
            "description": "True when the set's category means nothing for the chosen model's modality (a camera move on an image model), so it was dropped entirely, prompt text included. Implies skipped_not_applicable.",
            "default": false
          }
        },
        "type": "object",
        "title": "ForgeReferenceSetContribution"
      },
      "ForgeRunAsset": {
        "properties": {
          "file_id": {
            "type": "string",
            "format": "uuid",
            "title": "File Id",
            "description": "File ID for the generated asset."
          },
          "url": {
            "type": "string",
            "title": "Url",
            "description": "Download URL for the asset."
          },
          "content_type": {
            "type": "string",
            "title": "Content Type",
            "description": "MIME type, e.g. image/png or video/mp4."
          },
          "preview_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Preview Url",
            "description": "Thumbnail/preview URL."
          },
          "width": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Width",
            "description": "Width in pixels."
          },
          "height": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Height",
            "description": "Height in pixels."
          },
          "duration_seconds": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Duration Seconds",
            "description": "Duration for video/audio assets."
          },
          "file_size_bytes": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "File Size Bytes",
            "description": "File size in bytes."
          },
          "metadata": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/FileMetadataView"
              },
              {
                "type": "null"
              }
            ],
            "description": "What an engine needs beyond the file to build a resource from it. Null when the file has none."
          }
        },
        "type": "object",
        "required": [
          "file_id",
          "url",
          "content_type"
        ],
        "title": "ForgeRunAsset"
      },
      "ForgeVideoEffectInput": {
        "properties": {
          "type": {
            "$ref": "#/components/schemas/VideoEffectType",
            "description": "Video effect type. See model capabilities for supported effects per model."
          },
          "weight": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 100,
                "minimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Weight",
            "description": "Effect strength (0-100)."
          }
        },
        "type": "object",
        "required": [
          "type"
        ],
        "title": "ForgeVideoEffectInput"
      },
      "GetForgeRunOutput": {
        "properties": {
          "inference_id": {
            "type": "string",
            "format": "uuid",
            "title": "Inference Id",
            "description": "Unique identifier for this forge run."
          },
          "status": {
            "$ref": "#/components/schemas/InferenceStatus",
            "description": "Current status: in_progress, complete, failed, cancelled, or deleted."
          },
          "poll_interval_seconds": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Poll Interval Seconds",
            "description": "Suggested polling interval in seconds. Present while IN_PROGRESS."
          },
          "completed_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Completed At",
            "description": "Completion timestamp. Present only on COMPLETE."
          },
          "outputs": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/ForgeRunAsset"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Outputs",
            "description": "Generated assets. Present only on COMPLETE."
          },
          "actual_price_creative_units": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Actual Price Creative Units",
            "description": "Actual Creative Units charged. Present only on COMPLETE."
          },
          "error": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error",
            "description": "Error message. Present only on FAILED."
          },
          "error_code": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error Code",
            "description": "Machine-readable error code. Present only on FAILED. Balance-related values: `INSUFFICIENT_BALANCE` (the workspace ran out of Creative Units — top up and resubmit), `BALANCE_UNAVAILABLE` (the balance could not be verified, retry later) and `USAGE_LIMIT_EXCEEDED` (the member is past their usage limit: ask a workspace admin for more, or wait for it to reset)."
          }
        },
        "type": "object",
        "required": [
          "inference_id",
          "status"
        ],
        "title": "GetForgeRunOutput"
      },
      "GetInferenceRunV2Output": {
        "properties": {
          "inference_id": {
            "type": "string",
            "format": "uuid",
            "title": "Inference Id",
            "description": "Unique identifier for this inference run."
          },
          "status": {
            "$ref": "#/components/schemas/InferenceStatus",
            "description": "Current status: in_progress, complete, failed, cancelled, or deleted."
          },
          "poll_interval_seconds": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Poll Interval Seconds",
            "description": "Suggested polling interval in seconds. Present while IN_PROGRESS."
          },
          "completed_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Completed At",
            "description": "Completion timestamp. Present only on COMPLETE."
          },
          "outputs": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/ForgeRunAsset"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Outputs",
            "description": "Generated assets. Present only on COMPLETE."
          },
          "actual_price_creative_units": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Actual Price Creative Units",
            "description": "Actual Creative Units charged. Present only on COMPLETE."
          },
          "error": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error",
            "description": "Error message. Present only on FAILED."
          },
          "error_code": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error Code",
            "description": "Machine-readable error code. Present only on FAILED. Balance-related values: `INSUFFICIENT_BALANCE` (the workspace ran out of Creative Units — top up and resubmit), `BALANCE_UNAVAILABLE` (the balance could not be verified, retry later) and `USAGE_LIMIT_EXCEEDED` (the member is past their usage limit: ask a workspace admin for more, or wait for it to reset). Refusal values, each also described by `refusal`: `INPUT_GUARDRAIL_VIOLATION`, `CONTENT_POLICY_VIOLATION`, `PROMPT_INTELLECTUAL_PROPERTY` and `NO_MEDIA_GENERATED`."
          },
          "refusal": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/RunRefusal"
              },
              {
                "type": "null"
              }
            ],
            "description": "Who refused the generation and why, when it failed because a guardrail or the provider refused it. Null on every other outcome. Resubmitting the same inputs is refused the same way."
          },
          "base_model_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Base Model Id",
            "description": "Base model the run used, resolved or auto-picked."
          },
          "reference_set_contributions": {
            "items": {
              "$ref": "#/components/schemas/ForgeReferenceSetContribution"
            },
            "type": "array",
            "title": "Reference Set Contributions",
            "description": "Per-set summary of what each reference set contributed.",
            "default": []
          },
          "reference_sets_degraded": {
            "type": "boolean",
            "title": "Reference Sets Degraded",
            "description": "True when at least one attached reference set did not meaningfully contribute. The run still costs Creative Units.",
            "default": false
          },
          "reference_sets_warning": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reference Sets Warning",
            "description": "Names each degraded reference set and why, or null when none is degraded."
          },
          "webhook": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/WebhookStatusView"
              },
              {
                "type": "null"
              }
            ],
            "description": "The callback attached to this run and how its delivery has gone. Null when the run was submitted without one."
          }
        },
        "type": "object",
        "required": [
          "inference_id",
          "status"
        ],
        "title": "GetInferenceRunV2Output"
      },
      "GetModelRESTOutput": {
        "properties": {
          "model": {
            "$ref": "#/components/schemas/ModelDetailREST"
          }
        },
        "type": "object",
        "required": [
          "model"
        ],
        "title": "GetModelRESTOutput"
      },
      "GetReferenceSetOutput": {
        "properties": {
          "reference_set_id": {
            "type": "string",
            "format": "uuid",
            "title": "Reference Set Id"
          },
          "name": {
            "type": "string",
            "title": "Name",
            "description": "Display name of the reference set."
          },
          "slug": {
            "type": "string",
            "title": "Slug",
            "description": "URL-safe slug of the reference set."
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description",
            "description": "Free-text description."
          },
          "category": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/StyleCategory"
              },
              {
                "type": "null"
              }
            ],
            "description": "Category, e.g. character or object."
          },
          "status": {
            "type": "string",
            "enum": [
              "draft",
              "complete",
              "archived"
            ],
            "title": "Status",
            "description": "Lifecycle status: draft, complete, or archived."
          },
          "asset_count": {
            "type": "integer",
            "title": "Asset Count",
            "description": "Number of files attached to the reference set."
          },
          "files": {
            "items": {
              "$ref": "#/components/schemas/ReferenceSetFile"
            },
            "type": "array",
            "title": "Files",
            "description": "Attached files, ordered by index."
          }
        },
        "type": "object",
        "required": [
          "reference_set_id",
          "name",
          "slug",
          "status",
          "asset_count"
        ],
        "title": "GetReferenceSetOutput"
      },
      "GetScoringRunOutput": {
        "properties": {
          "scoring_run_id": {
            "type": "string",
            "format": "uuid",
            "title": "Scoring Run Id",
            "description": "Unique identifier for this scoring run."
          },
          "status": {
            "$ref": "#/components/schemas/ScoringRunStatus",
            "description": "Current status: pending, complete, or failed."
          },
          "inference_id": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ],
            "title": "Inference Id",
            "description": "The generation whose outputs this run judged, when it was started automatically."
          },
          "poll_interval_seconds": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Poll Interval Seconds",
            "description": "Suggested polling interval in seconds. Present while pending."
          },
          "requested_pair_count": {
            "type": "integer",
            "title": "Requested Pair Count",
            "description": "How many (file, rule) pairs the run set out to judge."
          },
          "completed_pair_count": {
            "type": "integer",
            "title": "Completed Pair Count",
            "description": "How many produced a verdict. Lower than requested means some pairs went unjudged."
          },
          "file_ids": {
            "items": {
              "type": "string",
              "format": "uuid"
            },
            "type": "array",
            "title": "File Ids",
            "description": "The files the run was asked to judge.",
            "default": []
          },
          "rule_ids": {
            "items": {
              "type": "string",
              "format": "uuid"
            },
            "type": "array",
            "title": "Rule Ids",
            "description": "The rules the run judged against.",
            "default": []
          },
          "scores": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/ScoringRunFileScore"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Scores",
            "description": "The verdicts recorded. Present once the run is complete."
          },
          "finished_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Finished At",
            "description": "When the run settled. Present once terminal."
          },
          "error": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error",
            "description": "Error message. Present only on failed."
          },
          "error_code": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error Code",
            "description": "Machine-readable error code. Present only on failed."
          },
          "webhook": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/WebhookStatusView"
              },
              {
                "type": "null"
              }
            ],
            "description": "The callback attached to this run and how its delivery has gone. Null when the run was submitted without one."
          }
        },
        "type": "object",
        "required": [
          "scoring_run_id",
          "status",
          "requested_pair_count",
          "completed_pair_count"
        ],
        "title": "GetScoringRunOutput"
      },
      "GetTrainingRunResponse": {
        "properties": {
          "training_run_id": {
            "type": "string",
            "format": "uuid",
            "title": "Training Run Id"
          },
          "state": {
            "type": "string",
            "enum": [
              "in_progress",
              "terminal_success",
              "terminal_failure"
            ],
            "title": "State",
            "description": "in_progress, terminal_success, or terminal_failure."
          },
          "raw_status": {
            "type": "string",
            "title": "Raw Status",
            "description": "Fine-grained run status."
          },
          "progress": {
            "type": "number",
            "title": "Progress",
            "description": "Training progress in [0, 1]; 1.0 when complete."
          },
          "poll_interval_seconds": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Poll Interval Seconds",
            "description": "Suggested polling interval in seconds. Present while in_progress."
          },
          "eta_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Eta At",
            "description": "Estimated completion time, if known."
          },
          "started_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Started At"
          },
          "finished_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Finished At"
          },
          "error": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error",
            "description": "Error message. Present only on terminal_failure."
          },
          "error_code": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error Code",
            "description": "Machine-readable error code. Present on terminal_failure."
          },
          "webhook": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/WebhookStatusView"
              },
              {
                "type": "null"
              }
            ],
            "description": "The callback attached to this run and how its delivery has gone. Null when the run was submitted without one."
          }
        },
        "type": "object",
        "required": [
          "training_run_id",
          "state",
          "raw_status",
          "progress"
        ],
        "title": "GetTrainingRunResponse"
      },
      "GetWorkflowRunOutput": {
        "properties": {
          "run_id": {
            "type": "string",
            "format": "uuid",
            "title": "Run Id",
            "description": "Unique identifier for this workflow run."
          },
          "status": {
            "$ref": "#/components/schemas/BlueprintRunStatus",
            "description": "Current status: pending, running, success, failure, or cancelled."
          },
          "poll_interval_seconds": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Poll Interval Seconds",
            "description": "Suggested polling interval in seconds. Present while PENDING or RUNNING."
          },
          "steps": {
            "items": {
              "$ref": "#/components/schemas/GetWorkflowRunStep"
            },
            "type": "array",
            "title": "Steps",
            "description": "Status of each step composing the workflow run.",
            "default": []
          },
          "estimated_price_creative_units": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Estimated Price Creative Units",
            "description": "Estimated Creative Units price. Present when available."
          },
          "completed_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Completed At",
            "description": "Completion timestamp. Present only on SUCCESS."
          },
          "actual_price_creative_units": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Actual Price Creative Units",
            "description": "Actual Creative Units price charged. Present only on SUCCESS."
          },
          "outputs": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/WorkflowRunAsset"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Outputs",
            "description": "Generated assets. Present only on SUCCESS."
          },
          "error": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error",
            "description": "Error message. Present only on FAILURE."
          },
          "error_code": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error Code",
            "description": "Machine-readable error code. Present only on FAILURE. Balance-related values: `BlueprintInsufficientBalanceError` (the workspace ran out of Creative Units — top up and resubmit), `BlueprintBalanceUnavailableError` (the balance could not be verified, retry later) and `BlueprintUsageLimitExceededError` (the member who started the run is past their usage limit: ask a workspace admin for more, or wait for it to reset). A run stopped by a refused generation reports `BlueprintInvalidRuntimeValueError`; `refusals` says who refused it and why."
          },
          "refusals": {
            "items": {
              "$ref": "#/components/schemas/RunRefusal"
            },
            "type": "array",
            "title": "Refusals",
            "description": "Every generation this run started that a guardrail or the provider refused, oldest first. Present only on FAILURE, and empty when no generation was refused.",
            "default": []
          },
          "webhook": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/WebhookStatusView"
              },
              {
                "type": "null"
              }
            ],
            "description": "The callback attached to this run and how its delivery has gone. Null when the run was submitted without one."
          }
        },
        "type": "object",
        "required": [
          "run_id",
          "status"
        ],
        "title": "GetWorkflowRunOutput"
      },
      "GetWorkflowRunStep": {
        "properties": {
          "name": {
            "type": "string",
            "title": "Name",
            "description": "The name of the workflow step"
          },
          "status": {
            "$ref": "#/components/schemas/BlueprintRunStatus",
            "description": "The execution status of the step: pending, running, success, failure, or cancelled."
          },
          "error": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error",
            "description": "The error details if any"
          },
          "error_code": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error Code",
            "description": "Machine-readable error code if the step failed."
          }
        },
        "type": "object",
        "required": [
          "name",
          "status"
        ],
        "title": "GetWorkflowRunStep"
      },
      "GroupMemberOut": {
        "properties": {
          "principal_id": {
            "type": "string",
            "format": "uuid",
            "title": "Principal Id",
            "description": "The member's principal id: for a person, the same as their user id."
          },
          "user_id": {
            "type": "string",
            "format": "uuid",
            "title": "User Id",
            "description": "The member's user id. Deprecated: use principal_id.",
            "deprecated": true
          },
          "email": {
            "type": "string",
            "title": "Email",
            "description": "The member's email address."
          },
          "name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Name",
            "description": "The member's display name, if set."
          },
          "status": {
            "$ref": "#/components/schemas/GroupMembershipStatus",
            "description": "Group membership status."
          }
        },
        "type": "object",
        "required": [
          "principal_id",
          "user_id",
          "email",
          "status"
        ],
        "title": "GroupMemberOut"
      },
      "GroupMembershipStatus": {
        "type": "string",
        "enum": [
          "active",
          "suspended"
        ],
        "title": "GroupMembershipStatus"
      },
      "GroupOut": {
        "properties": {
          "group_id": {
            "type": "string",
            "format": "uuid",
            "title": "Group Id",
            "description": "The group's unique identifier."
          },
          "name": {
            "type": "string",
            "title": "Name",
            "description": "The group's name."
          },
          "role": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Role"
              },
              {
                "type": "null"
              }
            ],
            "description": "The workspace role this group grants its members, if any."
          },
          "role_id": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ],
            "title": "Role Id",
            "description": "Id of the role actually assigned. A custom role reports its own id here while `role` reports the builtin floor it grants, so read this to tell the two apart."
          }
        },
        "type": "object",
        "required": [
          "group_id",
          "name"
        ],
        "title": "GroupOut"
      },
      "GuardrailCategory": {
        "type": "string",
        "enum": [
          "copyright_infringement",
          "ip_trademark_infringement",
          "artist_style_mimicry",
          "custom"
        ],
        "title": "GuardrailCategory",
        "description": "What kind of guardrail refused it: one of the guardrails Layer ships, or the workspace's own."
      },
      "GuidanceFileType": {
        "type": "string",
        "enum": [
          "init_image",
          "reference_image",
          "scribble",
          "color_sketch",
          "pose",
          "depth",
          "canny",
          "softedge_hed",
          "segmentation",
          "lineart",
          "face",
          "ip_adapter",
          "first_frame",
          "last_frame",
          "init_video",
          "reference_video",
          "draft_video",
          "init_mesh",
          "texture_image",
          "draft_mesh",
          "element_frontal_image",
          "element_reference_image",
          "element_video",
          "draft_world",
          "init_audio",
          "reference_audio"
        ],
        "title": "GuidanceFileType",
        "description": "What a guidance file *is*.\n\nThe type names the medium and the slot the file occupies. Where a model conditions on a\nfile through a different provider input — the legacy IP-adapter path — that is its own\ntype, because it is not the same slot."
      },
      "HTTPValidationError": {
        "properties": {
          "detail": {
            "items": {
              "$ref": "#/components/schemas/ValidationError"
            },
            "type": "array",
            "title": "Detail"
          }
        },
        "type": "object",
        "title": "HTTPValidationError"
      },
      "ImageAnnotation": {
        "properties": {
          "id": {
            "type": "string",
            "maxLength": 64,
            "minLength": 1,
            "title": "Id"
          },
          "kind": {
            "$ref": "#/components/schemas/ImageAnnotationKind"
          },
          "intent": {
            "$ref": "#/components/schemas/ImageAnnotationIntent",
            "default": "EDIT"
          },
          "points": {
            "items": {
              "$ref": "#/components/schemas/ImageAnnotationPoint"
            },
            "type": "array",
            "title": "Points"
          },
          "note": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 500
              },
              {
                "type": "null"
              }
            ],
            "title": "Note"
          },
          "color": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Color"
          },
          "source_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Source Id"
          }
        },
        "type": "object",
        "required": [
          "id",
          "kind",
          "points"
        ],
        "title": "ImageAnnotation",
        "description": "One mark. Its number, on the image and in the legend, is its position in the list plus one."
      },
      "ImageAnnotationIntent": {
        "type": "string",
        "enum": [
          "EDIT",
          "REMOVE",
          "MOVE"
        ],
        "title": "ImageAnnotationIntent"
      },
      "ImageAnnotationKind": {
        "type": "string",
        "enum": [
          "BOX",
          "ELLIPSE",
          "ARROW",
          "FREEHAND",
          "PIN"
        ],
        "title": "ImageAnnotationKind"
      },
      "ImageAnnotationPoint": {
        "properties": {
          "x": {
            "type": "number",
            "maximum": 1,
            "minimum": 0,
            "title": "X"
          },
          "y": {
            "type": "number",
            "maximum": 1,
            "minimum": 0,
            "title": "Y"
          }
        },
        "type": "object",
        "required": [
          "x",
          "y"
        ],
        "title": "ImageAnnotationPoint",
        "description": "A point on the image, from (0, 0) at the top left to (1, 1) at the bottom right.\n\nThe image is the one the slot sends, before the model fits it: the file as stored (or, for a\nvideo or a 3D model, the frame taken from it, ``video_to_image`` / ``mesh_to_image``) after its\nflip, scale, rotation and crop. Marks are the last edit on it."
      },
      "ImageAnnotations": {
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/ImageAnnotation"
            },
            "type": "array",
            "maxItems": 32,
            "title": "Items",
            "default": []
          },
          "color": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Color"
          }
        },
        "type": "object",
        "title": "ImageAnnotations",
        "description": "The marks drawn on one image, in the order they are numbered."
      },
      "ImageProjection": {
        "type": "string",
        "enum": [
          "EQUIRECTANGULAR"
        ],
        "title": "ImageProjection",
        "description": "The geometry an output image is drawn in, when it is not an ordinary flat picture."
      },
      "InferenceColorPalette": {
        "properties": {
          "colors": {
            "items": {
              "$ref": "#/components/schemas/PaletteColor"
            },
            "type": "array",
            "maxItems": 16,
            "title": "Colors",
            "default": []
          },
          "reference_set_id": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reference Set Id"
          }
        },
        "type": "object",
        "title": "InferenceColorPalette",
        "description": "The colors a generation is asked to use, and the reference set they were picked from.\n\nThe run uses the colors it carries: a later edit to the set changes no run already made.\n``reference_set_id`` only names where they came from, so a form can show and restore it."
      },
      "InferenceReferenceSetInput": {
        "properties": {
          "set_id": {
            "type": "string",
            "format": "uuid",
            "title": "Set Id",
            "description": "Reference set ID from GET /v2/workspaces/{workspace_id}/reference-sets."
          },
          "weight": {
            "type": "number",
            "maximum": 2,
            "minimum": 0,
            "title": "Weight",
            "description": "Weight for the set's LoRA adapter when one applies. Ignored for sets applied as reference images or prompt text.",
            "default": 1
          }
        },
        "type": "object",
        "required": [
          "set_id"
        ],
        "title": "InferenceReferenceSetInput"
      },
      "InferenceStatus": {
        "type": "string",
        "enum": [
          "in_progress",
          "complete",
          "failed",
          "cancelled",
          "deleted"
        ],
        "title": "InferenceStatus"
      },
      "InferenceUseCase": {
        "type": "string",
        "enum": [
          "text_to_image",
          "image_editing",
          "multi_angle",
          "inpainting",
          "reframing",
          "split_into_layers",
          "text_to_video",
          "image_to_video",
          "video_editing",
          "video_extend",
          "insert_video",
          "video_subtitle",
          "video_lipsync",
          "motion_transfer",
          "video_object_swap",
          "video_character_swap",
          "relight_video",
          "image_to_video_lipsync",
          "text_to_3d",
          "image_to_3d",
          "text_to_world",
          "image_to_world",
          "remesh",
          "retexture",
          "uv_unwrap",
          "animate",
          "rig",
          "segment",
          "image_segment",
          "image_mask",
          "text_to_speech",
          "sound_effects",
          "music",
          "upscaling",
          "video_interpolation",
          "denoise_image",
          "denoise_video",
          "denoise_audio",
          "voice_change",
          "audio_separation",
          "audio_isolation",
          "deblur_video",
          "restore_image",
          "sdr_to_hdr_video",
          "background_removal",
          "vectorization",
          "virtual_try_on",
          "restyle",
          "pixelate",
          "colorize",
          "change_expression",
          "erase_object",
          "edit_text",
          "dub_video",
          "extend_audio",
          "generate_pbr_materials",
          "create_skybox",
          "complete_draft"
        ],
        "title": "InferenceUseCase"
      },
      "InferenceWebhookEvent": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id",
            "description": "Unique event id, repeated in the webhook-id header."
          },
          "type": {
            "$ref": "#/components/schemas/WebhookEventType",
            "description": "inference.completed, inference.failed or inference.cancelled."
          },
          "created_at": {
            "type": "string",
            "title": "Created At",
            "description": "When the event was raised (RFC 3339)."
          },
          "data": {
            "$ref": "#/components/schemas/GetInferenceRunV2Output",
            "description": "Identical to the body of GET on the inference run."
          },
          "metadata": {
            "additionalProperties": {
              "type": "string"
            },
            "type": "object",
            "title": "Metadata",
            "description": "Whatever you sent as webhook.metadata.",
            "default": {}
          }
        },
        "type": "object",
        "required": [
          "id",
          "type",
          "created_at",
          "data"
        ],
        "title": "InferenceWebhookEvent",
        "description": "Delivered when an inference run reaches a terminal state."
      },
      "InviteMemberBody": {
        "properties": {
          "email": {
            "type": "string",
            "format": "email",
            "title": "Email",
            "description": "Email of the person to invite. A Layer user is created if none exists."
          },
          "role": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Role"
              },
              {
                "type": "null"
              }
            ],
            "description": "Workspace role to grant: admin or creator, plus member in an enterprise workspace. Defaults to creator, or member in an enterprise workspace."
          }
        },
        "type": "object",
        "required": [
          "email"
        ],
        "title": "InviteMemberBody"
      },
      "IssuedDeviceCode": {
        "properties": {
          "device_code": {
            "type": "string",
            "title": "Device Code"
          },
          "user_code": {
            "type": "string",
            "title": "User Code"
          },
          "verification_uri": {
            "type": "string",
            "title": "Verification Uri"
          },
          "verification_uri_complete": {
            "type": "string",
            "title": "Verification Uri Complete"
          },
          "expires_in": {
            "type": "integer",
            "title": "Expires In"
          },
          "interval": {
            "type": "integer",
            "title": "Interval"
          }
        },
        "type": "object",
        "required": [
          "device_code",
          "user_code",
          "verification_uri",
          "verification_uri_complete",
          "expires_in",
          "interval"
        ],
        "title": "IssuedDeviceCode",
        "description": "The device authorization response (RFC 8628 section 3.2)."
      },
      "LibraryObjectType": {
        "type": "string",
        "enum": [
          "directory",
          "file",
          "asset",
          "style",
          "blueprint",
          "skill"
        ],
        "title": "LibraryObjectType"
      },
      "ListBaseModelsOutput": {
        "properties": {
          "base_models": {
            "items": {
              "$ref": "#/components/schemas/BaseModelSummary"
            },
            "type": "array",
            "title": "Base Models"
          },
          "pagination": {
            "$ref": "#/components/schemas/PaginationOutput"
          }
        },
        "type": "object",
        "required": [
          "base_models",
          "pagination"
        ],
        "title": "ListBaseModelsOutput"
      },
      "ListGroupMembersOutput": {
        "properties": {
          "members": {
            "items": {
              "$ref": "#/components/schemas/GroupMemberOut"
            },
            "type": "array",
            "title": "Members"
          },
          "pagination": {
            "$ref": "#/components/schemas/PaginationOutput"
          }
        },
        "type": "object",
        "required": [
          "members",
          "pagination"
        ],
        "title": "ListGroupMembersOutput"
      },
      "ListGroupsOutput": {
        "properties": {
          "groups": {
            "items": {
              "$ref": "#/components/schemas/GroupOut"
            },
            "type": "array",
            "title": "Groups"
          },
          "pagination": {
            "$ref": "#/components/schemas/PaginationOutput"
          }
        },
        "type": "object",
        "required": [
          "groups",
          "pagination"
        ],
        "title": "ListGroupsOutput"
      },
      "ListMembersOutput": {
        "properties": {
          "members": {
            "items": {
              "$ref": "#/components/schemas/MemberOutput"
            },
            "type": "array",
            "title": "Members"
          },
          "pagination": {
            "$ref": "#/components/schemas/PaginationOutput"
          }
        },
        "type": "object",
        "required": [
          "members",
          "pagination"
        ],
        "title": "ListMembersOutput"
      },
      "ListModelsOutput": {
        "properties": {
          "models": {
            "items": {
              "$ref": "#/components/schemas/ModelSummary"
            },
            "type": "array",
            "title": "Models"
          },
          "pagination": {
            "$ref": "#/components/schemas/PaginationOutput"
          }
        },
        "type": "object",
        "required": [
          "models",
          "pagination"
        ],
        "title": "ListModelsOutput"
      },
      "ListProjectsOutput": {
        "properties": {
          "projects": {
            "items": {
              "$ref": "#/components/schemas/ProjectSummary"
            },
            "type": "array",
            "title": "Projects"
          },
          "pagination": {
            "$ref": "#/components/schemas/PaginationOutput"
          }
        },
        "type": "object",
        "required": [
          "projects",
          "pagination"
        ],
        "title": "ListProjectsOutput"
      },
      "ListReferenceSetsOutput": {
        "properties": {
          "reference_sets": {
            "items": {
              "$ref": "#/components/schemas/ReferenceSetSummary"
            },
            "type": "array",
            "title": "Reference Sets"
          },
          "pagination": {
            "$ref": "#/components/schemas/PaginationOutput"
          }
        },
        "type": "object",
        "required": [
          "reference_sets",
          "pagination"
        ],
        "title": "ListReferenceSetsOutput"
      },
      "ListScoringRulesOutput": {
        "properties": {
          "rules": {
            "items": {
              "$ref": "#/components/schemas/ScoringRuleSummary"
            },
            "type": "array",
            "title": "Rules",
            "description": "Every rule in force for the scope, workspace-mandated rules first."
          }
        },
        "type": "object",
        "required": [
          "rules"
        ],
        "title": "ListScoringRulesOutput"
      },
      "ListSessionObjectsOutput": {
        "properties": {
          "objects": {
            "items": {
              "$ref": "#/components/schemas/SessionObject"
            },
            "type": "array",
            "title": "Objects"
          },
          "pagination": {
            "$ref": "#/components/schemas/PaginationOutput"
          }
        },
        "type": "object",
        "required": [
          "objects",
          "pagination"
        ],
        "title": "ListSessionObjectsOutput"
      },
      "ListSessionsOutput": {
        "properties": {
          "sessions": {
            "items": {
              "$ref": "#/components/schemas/SessionSummary"
            },
            "type": "array",
            "title": "Sessions"
          },
          "pagination": {
            "$ref": "#/components/schemas/PaginationOutput"
          }
        },
        "type": "object",
        "required": [
          "sessions",
          "pagination"
        ],
        "title": "ListSessionsOutput"
      },
      "ListTrainingRunsResponse": {
        "properties": {
          "runs": {
            "items": {
              "$ref": "#/components/schemas/TrainingRunSummary"
            },
            "type": "array",
            "title": "Runs"
          },
          "pagination": {
            "$ref": "#/components/schemas/PaginationOutput"
          }
        },
        "type": "object",
        "required": [
          "runs",
          "pagination"
        ],
        "title": "ListTrainingRunsResponse"
      },
      "ListWorkflowsOutput": {
        "properties": {
          "workflows": {
            "items": {
              "$ref": "#/components/schemas/WorkflowSummary"
            },
            "type": "array",
            "title": "Workflows"
          },
          "pagination": {
            "$ref": "#/components/schemas/PaginationOutput"
          }
        },
        "type": "object",
        "required": [
          "workflows",
          "pagination"
        ],
        "title": "ListWorkflowsOutput"
      },
      "ListWorkspacesOutput": {
        "properties": {
          "workspaces": {
            "items": {
              "$ref": "#/components/schemas/WorkspaceInfo"
            },
            "type": "array",
            "title": "Workspaces",
            "description": "All workspaces the authenticated user belongs to, ordered by most recently active first."
          },
          "pagination": {
            "$ref": "#/components/schemas/PaginationOutput"
          }
        },
        "type": "object",
        "required": [
          "workspaces",
          "pagination"
        ],
        "title": "ListWorkspacesOutput"
      },
      "MemberOutput": {
        "properties": {
          "membership_id": {
            "type": "string",
            "format": "uuid",
            "title": "Membership Id",
            "description": "The workspace membership's unique identifier."
          },
          "principal_id": {
            "type": "string",
            "format": "uuid",
            "title": "Principal Id",
            "description": "The member's principal id: for a person, the same as their user id."
          },
          "user_id": {
            "type": "string",
            "format": "uuid",
            "title": "User Id",
            "description": "The member's user id. Deprecated: use principal_id.",
            "deprecated": true
          },
          "email": {
            "type": "string",
            "title": "Email",
            "description": "The member's email address."
          },
          "name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Name",
            "description": "The member's display name, if set."
          },
          "role": {
            "$ref": "#/components/schemas/Role",
            "description": "The member's workspace role."
          },
          "status": {
            "$ref": "#/components/schemas/WorkspaceMembershipStatus",
            "description": "Membership status: active or suspended."
          }
        },
        "type": "object",
        "required": [
          "membership_id",
          "principal_id",
          "user_id",
          "email",
          "role",
          "status"
        ],
        "title": "MemberOutput"
      },
      "MeshDensity": {
        "type": "string",
        "enum": [
          "ULTRA",
          "HIGH",
          "MEDIUM",
          "LOW"
        ],
        "title": "MeshDensity",
        "description": "How many faces a mesh keeps, as a level the provider sizes adaptively.\n\nStands in for a fixed face limit where the model's ``mesh_densities`` capability offers it."
      },
      "Modality": {
        "type": "string",
        "enum": [
          "text",
          "image",
          "audio",
          "video",
          "three_d",
          "playable",
          "world"
        ],
        "title": "Modality"
      },
      "ModelCapabilitiesREST": {
        "properties": {
          "session_modes": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Session Modes",
            "description": "Supported modes: create, create_video, create_3_d, create_speech, create_sound_effect, prompt_edit_image, etc."
          },
          "text_prompt": {
            "type": "boolean",
            "title": "Text Prompt",
            "default": false
          },
          "text_prompt_required": {
            "type": "boolean",
            "title": "Text Prompt Required",
            "default": false
          },
          "max_prompt_chars": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Max Prompt Chars",
            "description": "Longest prompt, in characters, the model accepts; null when unbounded."
          },
          "negative_prompt": {
            "type": "boolean",
            "title": "Negative Prompt",
            "default": false
          },
          "seed": {
            "type": "boolean",
            "title": "Seed",
            "default": false
          },
          "inpainting": {
            "type": "boolean",
            "title": "Inpainting",
            "default": false
          },
          "outpainting": {
            "type": "boolean",
            "title": "Outpainting",
            "default": false
          },
          "tileability": {
            "type": "boolean",
            "title": "Tileability",
            "default": false
          },
          "guidance_file_types": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Guidance File Types",
            "description": "Supported reference image types: pose, depth, canny, lineart, prompt (style reference), init, reference_image, etc."
          },
          "duration_seconds": {
            "items": {
              "type": "integer"
            },
            "type": "array",
            "title": "Duration Seconds",
            "description": "Supported video durations in seconds"
          },
          "duration_seconds_min": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Duration Seconds Min",
            "description": "Audio models: shortest clip this model generates, in seconds."
          },
          "duration_seconds_max": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Duration Seconds Max",
            "description": "Audio models: longest clip this model generates, in seconds. Pass duration_seconds between the min and max; a request outside them is refused."
          },
          "duration_seconds_required": {
            "type": "boolean",
            "title": "Duration Seconds Required",
            "description": "This model has no default clip length; without duration_seconds the shortest is used.",
            "default": false
          },
          "auto_aspect_ratio": {
            "type": "boolean",
            "title": "Auto Aspect Ratio",
            "default": false
          },
          "generate_audio": {
            "type": "boolean",
            "title": "Generate Audio",
            "default": false
          },
          "lipsync": {
            "type": "boolean",
            "title": "Lipsync",
            "default": false
          },
          "textures": {
            "type": "boolean",
            "title": "Textures",
            "default": false
          },
          "quad_mesh": {
            "type": "boolean",
            "title": "Quad Mesh",
            "default": false
          },
          "pbr_materials": {
            "type": "boolean",
            "title": "Pbr Materials",
            "default": false
          },
          "text_to_speech": {
            "type": "boolean",
            "title": "Text To Speech",
            "default": false
          },
          "sound_effect": {
            "type": "boolean",
            "title": "Sound Effect",
            "default": false
          },
          "music": {
            "type": "boolean",
            "title": "Music",
            "default": false
          },
          "voice_changer": {
            "type": "boolean",
            "title": "Voice Changer",
            "default": false
          },
          "text_to_dialogue": {
            "type": "boolean",
            "title": "Text To Dialogue",
            "default": false
          },
          "audio_separation": {
            "type": "boolean",
            "title": "Audio Separation",
            "default": false
          },
          "audio_isolation": {
            "type": "boolean",
            "title": "Audio Isolation",
            "default": false
          },
          "audio_inpaint": {
            "type": "boolean",
            "title": "Audio Inpaint",
            "default": false
          },
          "audio_outpaint": {
            "type": "boolean",
            "title": "Audio Outpaint",
            "default": false
          },
          "audio_denoise": {
            "type": "boolean",
            "title": "Audio Denoise",
            "default": false
          },
          "subtitle_presets": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Subtitle Presets",
            "description": "Caption styles this subtitle model takes as subtitle_preset."
          },
          "subtitle_dynamic_presets": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Subtitle Dynamic Presets",
            "description": "The subtitle_presets that animate word by word; they bill at a higher rate than the rest."
          },
          "subtitle_primary_color": {
            "type": "boolean",
            "title": "Subtitle Primary Color",
            "default": false
          },
          "subtitle_secondary_color": {
            "type": "boolean",
            "title": "Subtitle Secondary Color",
            "default": false
          },
          "subtitle_alignment": {
            "type": "boolean",
            "title": "Subtitle Alignment",
            "default": false
          },
          "subtitle_text_srt": {
            "type": "boolean",
            "title": "Subtitle Text Srt",
            "default": false
          }
        },
        "type": "object",
        "title": "ModelCapabilitiesREST",
        "description": "ModelCapabilities without the MCP token-saving serializer — returns all fields."
      },
      "ModelDetailREST": {
        "properties": {
          "model_id": {
            "type": "string",
            "format": "uuid",
            "title": "Model Id"
          },
          "name": {
            "type": "string",
            "title": "Name"
          },
          "modality": {
            "$ref": "#/components/schemas/Modality"
          },
          "base_model_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Base Model Id"
          },
          "base_model_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Base Model Name"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "inference_timing": {
            "type": "string",
            "title": "Inference Timing"
          },
          "capabilities": {
            "$ref": "#/components/schemas/ModelCapabilitiesREST"
          },
          "prompt_format": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Prompt Format"
          }
        },
        "type": "object",
        "required": [
          "model_id",
          "name",
          "modality",
          "inference_timing",
          "capabilities"
        ],
        "title": "ModelDetailREST"
      },
      "ModelSummary": {
        "properties": {
          "model_id": {
            "type": "string",
            "format": "uuid",
            "title": "Model Id",
            "description": "Unique model identifier — use for generation or to fetch full details."
          },
          "name": {
            "type": "string",
            "title": "Name"
          },
          "modality": {
            "$ref": "#/components/schemas/Modality",
            "description": "image, video, three_d, or audio"
          },
          "base_model_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Base Model Id",
            "description": "Base model identifier, e.g. flux_2_pro, kling_v3_pro"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description",
            "description": "Model description"
          },
          "inference_timing": {
            "type": "string",
            "title": "Inference Timing",
            "description": "Typical generation time range, e.g. '5-15s'"
          }
        },
        "type": "object",
        "required": [
          "model_id",
          "name",
          "modality",
          "inference_timing"
        ],
        "title": "ModelSummary"
      },
      "MultiViewSlot": {
        "type": "string",
        "enum": [
          "FRONT",
          "LEFT",
          "BACK",
          "RIGHT"
        ],
        "title": "MultiViewSlot",
        "description": "The view a source image shows, for 3D models that read their sources by view."
      },
      "MusicSection": {
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 100,
            "minLength": 1,
            "title": "Name"
          },
          "duration_seconds": {
            "type": "number",
            "maximum": 120,
            "minimum": 3,
            "title": "Duration Seconds"
          },
          "positive_styles": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Positive Styles",
            "default": []
          },
          "negative_styles": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Negative Styles",
            "default": []
          },
          "lines": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Lines",
            "default": []
          }
        },
        "type": "object",
        "required": [
          "name",
          "duration_seconds"
        ],
        "title": "MusicSection",
        "description": "One section of a planned track, carrying its own length, styles and sung lines.\n\n``positive_styles``/``negative_styles`` are the section's delta: what enters or leaves\nhere, against the palette the plan holds for the whole track. A section's exclusions are\nwhat keep it empty of something the rest of the track has, the plan-wide negatives\ncannot express \"no percussion until the second section\"."
      },
      "NineSliceMetadataView": {
        "properties": {
          "left": {
            "type": "integer",
            "title": "Left",
            "description": "Pixels in from the left edge."
          },
          "top": {
            "type": "integer",
            "title": "Top",
            "description": "Pixels in from the top edge."
          },
          "right": {
            "type": "integer",
            "title": "Right",
            "description": "Pixels in from the right edge."
          },
          "bottom": {
            "type": "integer",
            "title": "Bottom",
            "description": "Pixels in from the bottom edge."
          },
          "source": {
            "$ref": "#/components/schemas/NineSliceSource",
            "description": "DETECTED when measured off the pixels, USER when a person set the insets."
          }
        },
        "type": "object",
        "required": [
          "left",
          "top",
          "right",
          "bottom",
          "source"
        ],
        "title": "NineSliceMetadataView",
        "description": "The insets a 9-slice draws a UI element by, in the image's own pixels in from each edge.\n\nThe corners are drawn at their own size, the edges repeat along their length, and the centre\nrepeats both ways."
      },
      "NineSliceSource": {
        "type": "string",
        "enum": [
          "DETECTED",
          "USER"
        ],
        "title": "NineSliceSource"
      },
      "NormalizedInferenceParameters": {
        "properties": {
          "width": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Width",
            "description": "Resolved output width in pixels."
          },
          "height": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Height",
            "description": "Resolved output height in pixels."
          },
          "batch_size": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Batch Size",
            "description": "Number of outputs to generate."
          },
          "num_inference_steps": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Num Inference Steps",
            "description": "Resolved number of diffusion steps."
          },
          "guidance_scale": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Guidance Scale",
            "description": "Resolved guidance scale."
          },
          "duration_seconds": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Duration Seconds",
            "description": "Resolved output length in seconds — video duration or audio clip length."
          },
          "fps": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Fps",
            "description": "Resolved FPS."
          }
        },
        "type": "object",
        "title": "NormalizedInferenceParameters",
        "description": "Inference parameters after model-specific normalization.\n\nThese reflect the actual values used for generation, including\nmodel defaults applied for any parameters not explicitly set."
      },
      "NormalizedInferenceParametersV2": {
        "properties": {
          "width": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Width",
            "description": "Resolved output width in pixels."
          },
          "height": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Height",
            "description": "Resolved output height in pixels."
          },
          "batch_size": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Batch Size",
            "description": "Number of outputs to generate."
          },
          "num_inference_steps": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Num Inference Steps",
            "description": "Resolved number of diffusion steps."
          },
          "guidance_scale": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Guidance Scale",
            "description": "Resolved guidance scale."
          },
          "duration_seconds": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Duration Seconds",
            "description": "Resolved output length in seconds — video duration or audio clip length."
          },
          "fps": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Fps",
            "description": "Resolved FPS."
          }
        },
        "type": "object",
        "title": "NormalizedInferenceParametersV2",
        "description": "Inference parameters after model-specific normalization.\n\nThese reflect the actual values used for generation, including\nmodel defaults applied for any parameters not explicitly set."
      },
      "ObjectEventType": {
        "type": "string",
        "enum": [
          "created",
          "updated",
          "deleted"
        ],
        "title": "ObjectEventType"
      },
      "OrbitLight": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "distance": {
            "type": "number",
            "minimum": 0.0001,
            "title": "Distance"
          },
          "rotation": {
            "$ref": "#/components/schemas/OrbitLightRotation"
          },
          "properties": {
            "$ref": "#/components/schemas/OrbitLightProperties"
          }
        },
        "type": "object",
        "required": [
          "id",
          "distance",
          "rotation",
          "properties"
        ],
        "title": "OrbitLight"
      },
      "OrbitLightProperties": {
        "properties": {
          "intensity": {
            "type": "number",
            "minimum": 0,
            "title": "Intensity"
          },
          "color_hex": {
            "type": "string",
            "pattern": "^#([A-Fa-f0-9]{6})$",
            "title": "Color Hex"
          },
          "cast_shadows": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Cast Shadows"
          }
        },
        "type": "object",
        "required": [
          "intensity",
          "color_hex"
        ],
        "title": "OrbitLightProperties"
      },
      "OrbitLightRotation": {
        "properties": {
          "pitch": {
            "type": "number",
            "maximum": 90,
            "minimum": -90,
            "title": "Pitch"
          },
          "yaw": {
            "type": "number",
            "maximum": 360,
            "minimum": -360,
            "title": "Yaw"
          }
        },
        "type": "object",
        "required": [
          "pitch",
          "yaw"
        ],
        "title": "OrbitLightRotation"
      },
      "OutputFit": {
        "properties": {
          "trim": {
            "type": "boolean",
            "title": "Trim",
            "default": false
          },
          "canvas": {
            "$ref": "#/components/schemas/OutputFitCanvas",
            "default": "CONTENT"
          },
          "width": {
            "anyOf": [
              {
                "type": "integer",
                "maximum": 4096,
                "minimum": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Width"
          },
          "height": {
            "anyOf": [
              {
                "type": "integer",
                "maximum": 4096,
                "minimum": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Height"
          },
          "scale": {
            "$ref": "#/components/schemas/OutputFitScale",
            "default": "PLACE"
          },
          "anchor": {
            "$ref": "#/components/schemas/OutputFitAnchor",
            "default": "CENTER"
          },
          "padding": {
            "type": "integer",
            "maximum": 512,
            "minimum": 0,
            "title": "Padding",
            "default": 0
          }
        },
        "type": "object",
        "title": "OutputFit"
      },
      "OutputFitAnchor": {
        "type": "string",
        "enum": [
          "TOP_LEFT",
          "TOP_CENTER",
          "TOP_RIGHT",
          "CENTER_LEFT",
          "CENTER",
          "CENTER_RIGHT",
          "BOTTOM_LEFT",
          "BOTTOM_CENTER",
          "BOTTOM_RIGHT",
          "BASE"
        ],
        "title": "OutputFitAnchor",
        "description": "The point of the drawing that lands on the same point of the canvas.\n\n``BASE`` is a game tile's base: its anchor, the bottom centre of the cell it stands on, lands\nat the bottom centre of the canvas, so tiles of one grid stand on the same point whatever rises above them."
      },
      "OutputFitCanvas": {
        "type": "string",
        "enum": [
          "CONTENT",
          "FIXED"
        ],
        "title": "OutputFitCanvas"
      },
      "OutputFitScale": {
        "type": "string",
        "enum": [
          "PLACE",
          "SHRINK_AND_PAD",
          "FIT_AND_PAD",
          "FIT_AND_CROP",
          "STRETCH"
        ],
        "title": "OutputFitScale",
        "description": "How the drawing goes onto a fixed canvas. The names follow the workflow Resize node's."
      },
      "PaginationOutput": {
        "properties": {
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor",
            "description": "Cursor to use to get the next page"
          },
          "has_more_results": {
            "type": "boolean",
            "title": "Has More Results",
            "description": "If there are more results to page through"
          },
          "total_count": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Total Count",
            "description": "Total number of results matching the query"
          }
        },
        "type": "object",
        "required": [
          "has_more_results"
        ],
        "title": "PaginationOutput"
      },
      "PaletteColor": {
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 64,
            "minLength": 1,
            "title": "Name"
          },
          "hex": {
            "type": "string",
            "pattern": "^#(?:[0-9A-Fa-f]{6}|[0-9A-Fa-f]{3})$",
            "title": "Hex"
          },
          "role": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 64
              },
              {
                "type": "null"
              }
            ],
            "title": "Role"
          }
        },
        "type": "object",
        "required": [
          "name",
          "hex"
        ],
        "title": "PaletteColor",
        "description": "One named color of a palette."
      },
      "ParallaxSplit": {
        "properties": {
          "layers": {
            "type": "integer",
            "maximum": 6,
            "minimum": 2,
            "title": "Layers",
            "default": 5
          },
          "cuts": {
            "anyOf": [
              {
                "items": {
                  "type": "number",
                  "exclusiveMaximum": 1,
                  "exclusiveMinimum": 0
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Cuts"
          },
          "loop": {
            "type": "boolean",
            "title": "Loop",
            "default": false
          }
        },
        "type": "object",
        "title": "ParallaxSplit"
      },
      "PoseMode": {
        "type": "string",
        "enum": [
          "A_POSE",
          "T_POSE"
        ],
        "title": "PoseMode",
        "description": "Canonical rest pose a character-mesh model is asked to generate in.\n``A_POSE`` places the arms angled down at roughly 45°; ``T_POSE`` holds them\nstraight out to the sides. Only meaningful for models that advertise the\n``pose_modes`` capability (e.g. Meshy V7).\n\nDeliberately a light top-level module (like ``base_model_id``), NOT under\n``pkg.models.inference``: the Blueprint definition layer registers this as a\nBlueprintType and migrates legacy node ports, and must do so without pulling\nin the heavy ``pkg.models.inference`` package, which would perturb the Temporal\nworkflow-sandbox import graph and split pydantic class identity."
      },
      "ProjectDetail": {
        "properties": {
          "project_id": {
            "type": "string",
            "format": "uuid",
            "title": "Project Id",
            "description": "The project's unique identifier."
          },
          "name": {
            "type": "string",
            "title": "Name",
            "description": "The project's display name."
          },
          "status": {
            "$ref": "#/components/schemas/ProjectStatus",
            "description": "Project status: active or archived."
          },
          "object_count": {
            "type": "integer",
            "title": "Object Count",
            "description": "Number of library objects currently linked to this project."
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description",
            "description": "The project's long-form description, if set."
          },
          "instructions": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Instructions",
            "description": "Project-specific instructions that guide content created within it, if set. Deprecated: attach a skill to the project instead. Honoured while it holds text, and read back as null once the project's instructions have been converted into a project-attached skill.",
            "deprecated": true
          }
        },
        "type": "object",
        "required": [
          "project_id",
          "name",
          "status",
          "object_count"
        ],
        "title": "ProjectDetail"
      },
      "ProjectMember": {
        "properties": {
          "principal_id": {
            "type": "string",
            "format": "uuid",
            "title": "Principal Id",
            "description": "The member's principal id: for a person, the same as their user id."
          },
          "user_id": {
            "type": "string",
            "format": "uuid",
            "title": "User Id",
            "description": "The member's user id. Deprecated: use principal_id.",
            "deprecated": true
          }
        },
        "type": "object",
        "required": [
          "principal_id",
          "user_id"
        ],
        "title": "ProjectMember"
      },
      "ProjectMembersOutput": {
        "properties": {
          "members": {
            "items": {
              "$ref": "#/components/schemas/ProjectMember"
            },
            "type": "array",
            "title": "Members",
            "description": "The project's members after the add (idempotent)."
          }
        },
        "type": "object",
        "required": [
          "members"
        ],
        "title": "ProjectMembersOutput"
      },
      "ProjectStatus": {
        "type": "string",
        "enum": [
          "active",
          "archived",
          "deleted"
        ],
        "title": "ProjectStatus"
      },
      "ProjectSummary": {
        "properties": {
          "project_id": {
            "type": "string",
            "format": "uuid",
            "title": "Project Id",
            "description": "The project's unique identifier."
          },
          "name": {
            "type": "string",
            "title": "Name",
            "description": "The project's display name."
          },
          "status": {
            "$ref": "#/components/schemas/ProjectStatus",
            "description": "Project status: active or archived."
          },
          "object_count": {
            "type": "integer",
            "title": "Object Count",
            "description": "Number of library objects currently linked to this project."
          }
        },
        "type": "object",
        "required": [
          "project_id",
          "name",
          "status",
          "object_count"
        ],
        "title": "ProjectSummary"
      },
      "PromptEnhancement": {
        "type": "string",
        "enum": [
          "off",
          "fast",
          "standard",
          "quality"
        ],
        "title": "PromptEnhancement",
        "description": "How much effort the provider spends rewriting the prompt before it generates.\n\nOne ladder for a dial providers spell a dozen ways: an on/off flag (`enable_prompt_expansion`,\n`prompt_optimizer`, `enhance_prompt`, `expand_prompt`, `autoprompt`, ...) or a mode (MiniMax's\ndisabled/fast/balanced/quality, Seedream's fast/standard, Qwen's none/quality). Member order is\nthe ladder. Each model declares the levels it offers as ``prompt_enhancement_levels``, and the\nprovider mapping spells a level its own way; an on/off provider offers OFF and STANDARD.\n\nThis is the provider's own rewriting, distinct from Layer's prompt-enhance action, which\nrewrites the prompt visibly before the request is made."
      },
      "ReferenceSetFile": {
        "properties": {
          "file_id": {
            "type": "string",
            "format": "uuid",
            "title": "File Id",
            "description": "ID of a file attached to the reference set."
          },
          "url": {
            "type": "string",
            "title": "Url",
            "description": "Download URL for the file."
          },
          "content_type": {
            "type": "string",
            "title": "Content Type",
            "description": "MIME type, e.g. image/png or video/mp4."
          },
          "index": {
            "type": "integer",
            "title": "Index",
            "description": "Ordinal position of the file within the reference set."
          },
          "caption": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Caption",
            "description": "Training caption, or null when uncaptioned."
          },
          "view_type": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "View Type",
            "description": "Multi-view tag when set: front_image, back_image, left_image, right_image, top_image, or bottom_image."
          }
        },
        "type": "object",
        "required": [
          "file_id",
          "url",
          "content_type",
          "index"
        ],
        "title": "ReferenceSetFile"
      },
      "ReferenceSetSummary": {
        "properties": {
          "reference_set_id": {
            "type": "string",
            "format": "uuid",
            "title": "Reference Set Id",
            "description": "Reference set identifier — pass it in `reference_sets`."
          },
          "name": {
            "type": "string",
            "title": "Name",
            "description": "Display name of the reference set."
          },
          "category": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/StyleCategory"
              },
              {
                "type": "null"
              }
            ],
            "description": "Category, e.g. character or object."
          },
          "has_active_finetune": {
            "type": "boolean",
            "title": "Has Active Finetune",
            "description": "True when the set has a trained custom model."
          }
        },
        "type": "object",
        "required": [
          "reference_set_id",
          "name",
          "has_active_finetune"
        ],
        "title": "ReferenceSetSummary"
      },
      "RefusalCode": {
        "type": "string",
        "enum": [
          "INPUT_GUARDRAIL_VIOLATION",
          "CONTENT_POLICY_VIOLATION",
          "PROMPT_INTELLECTUAL_PROPERTY",
          "NO_MEDIA_GENERATED"
        ],
        "title": "RefusalCode",
        "description": "The error code a refused generation fails with."
      },
      "RefusalGuardrail": {
        "properties": {
          "guardrail_id": {
            "type": "string",
            "format": "uuid",
            "title": "Guardrail Id",
            "description": "ID of the guardrail rule that blocked the generation."
          },
          "name": {
            "type": "string",
            "title": "Name",
            "description": "The rule's name as it read when it judged the request."
          },
          "category": {
            "$ref": "#/components/schemas/GuardrailCategory",
            "description": "`copyright_infringement`, `ip_trademark_infringement` or `artist_style_mimicry` for the guardrails Layer ships, `custom` for a rule the workspace wrote itself."
          },
          "reason": {
            "type": "string",
            "title": "Reason",
            "description": "Why the rule judged the request a violation. May be empty."
          }
        },
        "type": "object",
        "required": [
          "guardrail_id",
          "name",
          "category",
          "reason"
        ],
        "title": "RefusalGuardrail"
      },
      "RequestUploadUrlRequest": {
        "properties": {
          "content_type": {
            "type": "string",
            "title": "Content Type",
            "description": "MIME type of the file to upload."
          },
          "file_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "File Name",
            "description": "Optional file name."
          },
          "file_size_bytes": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "title": "File Size Bytes",
            "description": "Expected file size in bytes. Used to enforce upload limits."
          },
          "source_type": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/FileSourceType"
              },
              {
                "type": "null"
              }
            ],
            "description": "Optional source type for the file. Use 'mask' to upload a mask for inpainting/masked-edit, then pass the returned file_id as the mask in a generation request. Mask uploads must be image files."
          }
        },
        "type": "object",
        "required": [
          "content_type",
          "file_size_bytes"
        ],
        "title": "RequestUploadUrlRequest"
      },
      "RequestUploadUrlResponse": {
        "properties": {
          "file_id": {
            "type": "string",
            "format": "uuid",
            "title": "File Id",
            "description": "Unique identifier for the file. Use as input to generation endpoints after upload completes."
          },
          "upload_url": {
            "type": "string",
            "title": "Upload Url",
            "description": "Signed upload URL. POST to this URL to initiate a resumable upload, then PUT file chunks to the session URI returned in the Location header. Expires in 15 minutes."
          },
          "content_type": {
            "type": "string",
            "title": "Content Type",
            "description": "MIME type to use when uploading."
          },
          "source_type": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/FileSourceType"
              },
              {
                "type": "null"
              }
            ],
            "description": "Source type the file was created with, echoed from the request."
          }
        },
        "type": "object",
        "required": [
          "file_id",
          "upload_url",
          "content_type"
        ],
        "title": "RequestUploadUrlResponse"
      },
      "Role": {
        "type": "string",
        "enum": [
          "admin",
          "editor",
          "settings_admin",
          "art_director",
          "artist",
          "creator",
          "member",
          "installation",
          "provisioning"
        ],
        "title": "Role"
      },
      "RotateWebhookSecretResponse": {
        "properties": {
          "secret": {
            "type": "string",
            "title": "Secret",
            "description": "The new signing secret. Start verifying with it."
          },
          "previous_secret_expires_at": {
            "type": "string",
            "format": "date-time",
            "title": "Previous Secret Expires At",
            "description": "When the previous secret stops signing. Until then both secrets sign every delivery, so a receiver can be updated without dropping anything."
          }
        },
        "type": "object",
        "required": [
          "secret",
          "previous_secret_expires_at"
        ],
        "title": "RotateWebhookSecretResponse"
      },
      "RunRefusal": {
        "properties": {
          "inference_id": {
            "type": "string",
            "format": "uuid",
            "title": "Inference Id",
            "description": "The generation that was refused."
          },
          "code": {
            "$ref": "#/components/schemas/RefusalCode",
            "description": "Machine-readable refusal code: `INPUT_GUARDRAIL_VIOLATION` (a guardrail the workspace or project set blocked it, and nothing reached the provider), `CONTENT_POLICY_VIOLATION` (the provider's content policy), `PROMPT_INTELLECTUAL_PROPERTY` (the provider refused protected IP) or `NO_MEDIA_GENERATED` (the provider returned no output and no reason, usually a silent refusal of the prompt)."
          },
          "guardrails": {
            "items": {
              "$ref": "#/components/schemas/RefusalGuardrail"
            },
            "type": "array",
            "title": "Guardrails",
            "description": "Every guardrail that blocked the generation. Empty unless `code` is `INPUT_GUARDRAIL_VIOLATION`.",
            "default": []
          }
        },
        "type": "object",
        "required": [
          "inference_id",
          "code"
        ],
        "title": "RunRefusal"
      },
      "SceneLightingConfig": {
        "properties": {
          "lights": {
            "items": {
              "$ref": "#/components/schemas/OrbitLight"
            },
            "type": "array",
            "title": "Lights",
            "default": []
          }
        },
        "type": "object",
        "title": "SceneLightingConfig",
        "description": "An array of orbiting light sources to populate the graphics engine environment."
      },
      "ScoreFilesBody": {
        "properties": {
          "file_ids": {
            "items": {
              "type": "string",
              "format": "uuid"
            },
            "type": "array",
            "maxItems": 100,
            "minItems": 1,
            "title": "File Ids",
            "description": "The files to score. Images, video and 3D can be judged; audio and text cannot."
          },
          "project_id": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ],
            "title": "Project Id",
            "description": "Score under a project's policy as well as the workspace's. A project's rules are added to its workspace's, never replace them."
          },
          "rule_ids": {
            "items": {
              "type": "string",
              "format": "uuid"
            },
            "type": "array",
            "title": "Rule Ids",
            "description": "Score against these rules only. Empty runs every rule in force for the scope.",
            "default": []
          },
          "webhook": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/WebhookInput"
              },
              {
                "type": "null"
              }
            ],
            "description": "Deliver this run's terminal event to a URL instead of polling for it. See the Webhooks section of this document for the payload, headers and retry behaviour."
          }
        },
        "type": "object",
        "required": [
          "file_ids"
        ],
        "title": "ScoreFilesBody"
      },
      "ScoreFilesOutput": {
        "properties": {
          "scoring_run_id": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ],
            "title": "Scoring Run Id",
            "description": "Handle for this batch. Poll `GET /v1/workspaces/{workspace_id}/scoring-runs/{id}` for its verdicts. Null when no rule was in force, which queues nothing."
          },
          "requested_pair_count": {
            "type": "integer",
            "title": "Requested Pair Count",
            "description": "How many (file, rule) judgements were queued — one model call each."
          },
          "file_count": {
            "type": "integer",
            "title": "File Count",
            "description": "How many files were accepted for scoring."
          },
          "rule_ids": {
            "items": {
              "type": "string",
              "format": "uuid"
            },
            "type": "array",
            "title": "Rule Ids",
            "description": "The rules the files are being scored against."
          },
          "expected_events": {
            "items": {
              "$ref": "#/components/schemas/WebhookEventType"
            },
            "type": "array",
            "title": "Expected Events",
            "description": "Deliveries this run will produce. Empty when no webhook was supplied.",
            "default": []
          }
        },
        "type": "object",
        "required": [
          "requested_pair_count",
          "file_count",
          "rule_ids"
        ],
        "title": "ScoreFilesOutput"
      },
      "ScoringRuleSummary": {
        "properties": {
          "rule_id": {
            "type": "string",
            "format": "uuid",
            "title": "Rule Id",
            "description": "Pass this as a `rule_ids` entry to score against this rule alone."
          },
          "name": {
            "type": "string",
            "title": "Name",
            "description": "The rule's display name."
          },
          "prompt": {
            "type": "string",
            "title": "Prompt",
            "description": "What the rule asks of an asset, in the scope's own words."
          },
          "run_mode": {
            "$ref": "#/components/schemas/ScoringRunMode",
            "description": "`always` scores every new output automatically; `on_demand` only when asked."
          },
          "threshold": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Threshold",
            "description": "The line below which a score reads as a fail. Null leaves the score informational."
          },
          "modalities": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/Modality"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Modalities",
            "description": "The modalities the rule applies to. Null means every scoreable modality."
          },
          "reference_image_count": {
            "type": "integer",
            "title": "Reference Image Count",
            "description": "How many reference images the judge is shown alongside the prompt."
          },
          "is_project_rule": {
            "type": "boolean",
            "title": "Is Project Rule",
            "description": "True when the rule belongs to the project rather than being inherited from the workspace."
          },
          "is_nominated": {
            "type": "boolean",
            "title": "Is Nominated",
            "description": "True for the one rule whose score is stamped on assets as their headline score."
          }
        },
        "type": "object",
        "required": [
          "rule_id",
          "name",
          "prompt",
          "run_mode",
          "reference_image_count",
          "is_project_rule",
          "is_nominated"
        ],
        "title": "ScoringRuleSummary"
      },
      "ScoringRunFileScore": {
        "properties": {
          "file_id": {
            "type": "string",
            "format": "uuid",
            "title": "File Id",
            "description": "The file this verdict is about."
          },
          "rule_id": {
            "type": "string",
            "format": "uuid",
            "title": "Rule Id",
            "description": "The scoring rule that produced it."
          },
          "rule_name": {
            "type": "string",
            "title": "Rule Name",
            "description": "The rule's name as it stood when the verdict was recorded."
          },
          "score": {
            "type": "integer",
            "title": "Score",
            "description": "Score in [0, 100] against that rule."
          },
          "rationale": {
            "type": "string",
            "title": "Rationale",
            "description": "The judge's reasoning, in its own words.",
            "default": ""
          }
        },
        "type": "object",
        "required": [
          "file_id",
          "rule_id",
          "rule_name",
          "score"
        ],
        "title": "ScoringRunFileScore"
      },
      "ScoringRunMode": {
        "type": "string",
        "enum": [
          "always",
          "on_demand"
        ],
        "title": "ScoringRunMode",
        "description": "When a rule runs."
      },
      "ScoringRunStatus": {
        "type": "string",
        "enum": [
          "pending",
          "complete",
          "failed"
        ],
        "title": "ScoringRunStatus"
      },
      "ScoringRunWebhookEvent": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id",
            "description": "Unique event id, repeated in the webhook-id header."
          },
          "type": {
            "$ref": "#/components/schemas/WebhookEventType",
            "description": "scoring_run.completed or scoring_run.failed."
          },
          "created_at": {
            "type": "string",
            "title": "Created At",
            "description": "When the event was raised (RFC 3339)."
          },
          "data": {
            "$ref": "#/components/schemas/GetScoringRunOutput",
            "description": "Identical to the body of GET on the scoring run."
          },
          "metadata": {
            "additionalProperties": {
              "type": "string"
            },
            "type": "object",
            "title": "Metadata",
            "description": "Whatever you sent as webhook.metadata.",
            "default": {}
          }
        },
        "type": "object",
        "required": [
          "id",
          "type",
          "created_at",
          "data"
        ],
        "title": "ScoringRunWebhookEvent",
        "description": "Delivered when a scoring run settles.\n\nAlso raised for the automatic scoring that follows a generation, in which case `data`\ncarries the `inference_id` of the generation whose outputs were judged."
      },
      "SegmentBy": {
        "type": "string",
        "enum": [
          "AUTO",
          "PARTS"
        ],
        "title": "SegmentBy",
        "description": "What a mesh is split along.\n\n``AUTO`` finds the parts itself; ``PARTS`` cuts along the parts ``segment_part_names`` names.\nOffered where the model's ``segment_by`` capability lists it."
      },
      "SegmentLevel": {
        "type": "string",
        "enum": [
          "LOW",
          "MEDIUM",
          "HIGH"
        ],
        "title": "SegmentLevel",
        "description": "Split granularity for a general-target segmentation (more parts as it\nrises). Only meaningful when the target is ``GENERAL``."
      },
      "SegmentTarget": {
        "type": "string",
        "enum": [
          "CHARACTER",
          "GENERAL"
        ],
        "title": "SegmentTarget",
        "description": "What a mesh-segmentation model treats the input as, selecting its split\nstrategy. ``CHARACTER`` splits a humanoid mesh with a body-part template;\n``GENERAL`` splits any mesh by granularity level (e.g. Hi3D Parts)."
      },
      "SessionEvent": {
        "properties": {
          "type": {
            "$ref": "#/components/schemas/ObjectEventType",
            "description": "What happened to the object: created, updated, or deleted."
          },
          "object_id": {
            "type": "string",
            "format": "uuid",
            "title": "Object Id",
            "description": "The object's id. For a file this is its file_id, the one generation outputs report."
          },
          "object": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/SessionEventObject"
              },
              {
                "type": "null"
              }
            ],
            "description": "The object as it stands after the event. Null on a deletion, or once the object is gone."
          }
        },
        "type": "object",
        "required": [
          "type",
          "object_id"
        ],
        "title": "SessionEvent",
        "description": "One `object` event on a session's stream."
      },
      "SessionEventObject": {
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "file",
              "asset"
            ],
            "title": "Kind",
            "description": "Whether the object is a single file or a composite asset."
          },
          "name": {
            "type": "string",
            "title": "Name",
            "description": "The object's display name."
          },
          "content_type": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Content Type",
            "description": "MIME type, for a file."
          },
          "status": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Status",
            "description": "Processing status, for a file. A file is ready to download once it reads `processed`."
          },
          "url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Url",
            "description": "Download URL, for a processed file."
          },
          "preview_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Preview Url",
            "description": "Thumbnail URL, for a file that has one."
          },
          "width": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Width",
            "description": "Width in pixels, for an image or video file."
          },
          "height": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Height",
            "description": "Height in pixels, for an image or video file."
          },
          "metadata": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/FileMetadataView"
              },
              {
                "type": "null"
              }
            ],
            "description": "What an engine needs beyond the file to build a resource from it, for a file. Null when it has none."
          }
        },
        "type": "object",
        "required": [
          "kind",
          "name"
        ],
        "title": "SessionEventObject",
        "description": "What the object an event names looks like now. Absent on a deletion."
      },
      "SessionObject": {
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "file",
              "asset"
            ],
            "title": "Kind",
            "description": "Whether the object is a single file or a composite asset."
          },
          "name": {
            "type": "string",
            "title": "Name",
            "description": "The object's display name."
          },
          "content_type": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Content Type",
            "description": "MIME type, for a file."
          },
          "status": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Status",
            "description": "Processing status, for a file. A file is ready to download once it reads `processed`."
          },
          "url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Url",
            "description": "Download URL, for a processed file."
          },
          "preview_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Preview Url",
            "description": "Thumbnail URL, for a file that has one."
          },
          "width": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Width",
            "description": "Width in pixels, for an image or video file."
          },
          "height": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Height",
            "description": "Height in pixels, for an image or video file."
          },
          "metadata": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/FileMetadataView"
              },
              {
                "type": "null"
              }
            ],
            "description": "What an engine needs beyond the file to build a resource from it, for a file. Null when it has none."
          },
          "object_id": {
            "type": "string",
            "format": "uuid",
            "title": "Object Id",
            "description": "The object's id, the same one its `SessionEvent`s carry. For a file this is its file_id."
          }
        },
        "type": "object",
        "required": [
          "kind",
          "name",
          "object_id"
        ],
        "title": "SessionObject",
        "description": "A file or asset in the session, as it stands now: what a `SessionEvent` carries."
      },
      "SessionSummary": {
        "properties": {
          "session_id": {
            "type": "string",
            "format": "uuid",
            "title": "Session Id",
            "description": "The session's unique identifier."
          },
          "name": {
            "type": "string",
            "title": "Name",
            "description": "The session's display name."
          },
          "project_id": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ],
            "title": "Project Id",
            "description": "The project the session is filed under, if any."
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "title": "Created At",
            "description": "When the session was created."
          },
          "last_interacted_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Interacted At",
            "description": "When anyone last worked in the session, or null if nobody has yet."
          }
        },
        "type": "object",
        "required": [
          "session_id",
          "name",
          "created_at"
        ],
        "title": "SessionSummary"
      },
      "SetUsageLimitBody": {
        "properties": {
          "cu_limit": {
            "type": "number",
            "maximum": 10000000,
            "exclusiveMinimum": 0,
            "title": "Cu Limit",
            "description": "Creative Units cap for the period."
          },
          "period": {
            "$ref": "#/components/schemas/UsageLimitPeriod",
            "description": "Reset period for the cap (e.g. DAILY, MONTHLY)."
          },
          "mode": {
            "$ref": "#/components/schemas/UsageLimitMode",
            "description": "WARN tells members they are past the cap; BLOCK also stops anything that charges Creative Units.",
            "default": "warn"
          },
          "warn_threshold_pct": {
            "type": "integer",
            "maximum": 100,
            "minimum": 1,
            "title": "Warn Threshold Pct",
            "description": "Percent of the cap at which members are warned.",
            "default": 80
          }
        },
        "type": "object",
        "required": [
          "cu_limit",
          "period"
        ],
        "title": "SetUsageLimitBody"
      },
      "SkippedFile": {
        "properties": {
          "file_id": {
            "type": "string",
            "format": "uuid",
            "title": "File Id"
          },
          "reason": {
            "type": "string",
            "enum": [
              "not_found",
              "foreign_workspace",
              "already_member",
              "duplicate_in_request"
            ],
            "title": "Reason",
            "description": "Why this file_id was not added: not_found (no such file), foreign_workspace (belongs to another workspace), already_member (already in the set), or duplicate_in_request (listed more than once in this call)."
          }
        },
        "type": "object",
        "required": [
          "file_id",
          "reason"
        ],
        "title": "SkippedFile"
      },
      "SpriteSheetAnimationView": {
        "properties": {
          "name": {
            "type": "string",
            "title": "Name",
            "description": "The animation's name."
          },
          "frames": {
            "items": {
              "type": "integer"
            },
            "type": "array",
            "title": "Frames",
            "description": "Frame indexes (`frames[].index`), in play order."
          },
          "fps": {
            "type": "number",
            "title": "Fps",
            "description": "Frames per second."
          },
          "loop": {
            "type": "boolean",
            "title": "Loop",
            "description": "Whether the animation restarts after its last frame."
          }
        },
        "type": "object",
        "required": [
          "name",
          "frames",
          "fps",
          "loop"
        ],
        "title": "SpriteSheetAnimationView"
      },
      "SpriteSheetFrameView": {
        "properties": {
          "index": {
            "type": "integer",
            "title": "Index",
            "description": "The frame's cell in reading order over the whole grid (left to right, then top to bottom). Cells that hold no frame are left out, so indexes can skip."
          },
          "x": {
            "type": "integer",
            "title": "X",
            "description": "The frame's left edge on the sheet, in pixels."
          },
          "y": {
            "type": "integer",
            "title": "Y",
            "description": "The frame's top edge on the sheet, in pixels."
          },
          "w": {
            "type": "integer",
            "title": "W",
            "description": "The frame's width in pixels."
          },
          "h": {
            "type": "integer",
            "title": "H",
            "description": "The frame's height in pixels."
          },
          "anchor": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/TilePointView"
              },
              {
                "type": "null"
              }
            ],
            "description": "The point the frame is placed by, in pixels from the frame's top-left corner. Null when the frames were registered by centring them in their cells."
          }
        },
        "type": "object",
        "required": [
          "index",
          "x",
          "y",
          "w",
          "h"
        ],
        "title": "SpriteSheetFrameView",
        "description": "One frame's rect on the sheet, in the sheet's own pixels from its top-left corner."
      },
      "SpriteSheetMetadataView": {
        "properties": {
          "columns": {
            "type": "integer",
            "title": "Columns",
            "description": "Cells across."
          },
          "rows": {
            "type": "integer",
            "title": "Rows",
            "description": "Cells down."
          },
          "cell_width": {
            "type": "integer",
            "title": "Cell Width",
            "description": "Width of one cell in pixels."
          },
          "cell_height": {
            "type": "integer",
            "title": "Cell Height",
            "description": "Height of one cell in pixels."
          },
          "margin": {
            "type": "integer",
            "title": "Margin",
            "description": "Pixels between the sheet's edges and the outer cells."
          },
          "spacing": {
            "type": "integer",
            "title": "Spacing",
            "description": "Pixels between neighbouring cells."
          },
          "frames": {
            "items": {
              "$ref": "#/components/schemas/SpriteSheetFrameView"
            },
            "type": "array",
            "title": "Frames",
            "description": "The frames, in play order: left to right, then top to bottom, unless the list orders them otherwise."
          },
          "animations": {
            "items": {
              "$ref": "#/components/schemas/SpriteSheetAnimationView"
            },
            "type": "array",
            "title": "Animations",
            "description": "Named animations over the frames. When empty, play the sheet as one animation named `default` over every frame in `frames` order, at 12 fps, looping."
          }
        },
        "type": "object",
        "required": [
          "columns",
          "rows",
          "cell_width",
          "cell_height",
          "margin",
          "spacing",
          "frames",
          "animations"
        ],
        "title": "SpriteSheetMetadataView",
        "description": "The frame grid a sprite sheet was packed on, in the sheet's own pixels from its top-left corner.\n\nCells start `margin` pixels in from the sheet's edges with `spacing` pixels between them."
      },
      "StartTrainingRequest": {
        "properties": {
          "reference_set_id": {
            "type": "string",
            "format": "uuid",
            "title": "Reference Set Id",
            "description": "The reference set (Style) to train a LoRA for."
          },
          "base_model_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Base Model Id",
            "description": "Base model to train. Omit to use the reference set's configured or workspace default model."
          },
          "training_framework": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "fal",
                  "ai-toolkit"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Training Framework",
            "description": "Training framework override. Omit for the server default."
          },
          "webhook": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/WebhookInput"
              },
              {
                "type": "null"
              }
            ],
            "description": "Deliver this run's terminal events to a URL instead of polling for them. See the Webhooks section of this document for the payload, headers and retry behaviour."
          }
        },
        "type": "object",
        "required": [
          "reference_set_id"
        ],
        "title": "StartTrainingRequest"
      },
      "StartTrainingResponse": {
        "properties": {
          "training_run_id": {
            "type": "string",
            "format": "uuid",
            "title": "Training Run Id",
            "description": "Unique identifier for this training run."
          },
          "state": {
            "type": "string",
            "enum": [
              "in_progress",
              "terminal_success",
              "terminal_failure"
            ],
            "title": "State",
            "description": "Coarse state; in_progress right after submission."
          },
          "raw_status": {
            "type": "string",
            "title": "Raw Status",
            "description": "Fine-grained run status (e.g. initializing)."
          },
          "base_model_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Base Model Id",
            "description": "Base model the run trains with."
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "title": "Created At",
            "description": "Timestamp the run was created."
          },
          "poll_interval_seconds": {
            "type": "integer",
            "title": "Poll Interval Seconds",
            "description": "Suggested polling interval in seconds."
          },
          "expected_events": {
            "items": {
              "$ref": "#/components/schemas/WebhookEventType"
            },
            "type": "array",
            "title": "Expected Events",
            "description": "Deliveries this run will produce. Empty when no webhook was supplied.",
            "default": []
          }
        },
        "type": "object",
        "required": [
          "training_run_id",
          "state",
          "raw_status",
          "created_at",
          "poll_interval_seconds"
        ],
        "title": "StartTrainingResponse"
      },
      "StyleCategory": {
        "type": "string",
        "enum": [
          "general",
          "character",
          "object",
          "scene",
          "animation",
          "brand",
          "camera_movement",
          "camera_angle",
          "camera_framing",
          "camera_lens",
          "scene_lighting",
          "scene_composition",
          "scene_atmosphere",
          "time_and_motion",
          "genre_look",
          "optical_effect",
          "visual_effect",
          "character_performance"
        ],
        "title": "StyleCategory",
        "description": "What a reference set *is*.\n\nThe first group is user-settable: a curator picks one when creating or editing a set.\nThe second group is internal: the cinematic-technique library owns those values, they\nare seeded only by the fixtures in ``core/workflows/fixtures/data/reference_sets`` and\na user-facing write path must reject them (see ``USER_SETTABLE_CATEGORIES``)."
      },
      "TargetRegion": {
        "type": "string",
        "enum": [
          "all",
          "subject",
          "background"
        ],
        "title": "TargetRegion"
      },
      "TextureResolution": {
        "type": "string",
        "enum": [
          "RES_2K",
          "RES_4K",
          "RES_8K"
        ],
        "title": "TextureResolution",
        "description": "Edge length of a generated mesh's base color texture.\n\nOffered where the model's ``texture_resolutions`` capability lists it (Meshy's and Tripo's own APIs)."
      },
      "TileFacing": {
        "type": "integer",
        "enum": [
          0,
          90,
          180,
          270
        ],
        "title": "TileFacing",
        "description": "A quarter turn of the camera around a diamond tile, in degrees clockwise seen from above.\n\n0 is the facing a set is drawn in first; the others show the same subject's other sides. A\nhexagon is only drawn facing 0."
      },
      "TileGrid": {
        "properties": {
          "shape": {
            "$ref": "#/components/schemas/TileShape",
            "default": "SQUARE"
          },
          "orientation": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/TileOrientation"
              },
              {
                "type": "null"
              }
            ],
            "description": "Unset takes the shape's first: DIAMOND for a square, POINTY_TOP for a hexagon."
          },
          "elevation": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 90,
                "minimum": 20
              },
              {
                "type": "null"
              }
            ],
            "title": "Elevation",
            "description": "Unset takes 30 (2:1 dimetric) for a square, 60 for a hexagon."
          },
          "facing": {
            "$ref": "#/components/schemas/TileFacing",
            "default": 0
          },
          "footprint_width": {
            "type": "integer",
            "maximum": 8,
            "minimum": 1,
            "title": "Footprint Width",
            "default": 1
          },
          "footprint_depth": {
            "type": "integer",
            "maximum": 8,
            "minimum": 1,
            "title": "Footprint Depth",
            "default": 1
          },
          "height": {
            "type": "number",
            "maximum": 6,
            "minimum": 0,
            "title": "Height",
            "default": 0
          },
          "tile_width": {
            "type": "integer",
            "maximum": 1024,
            "minimum": 16,
            "title": "Tile Width",
            "default": 128
          },
          "light_from": {
            "$ref": "#/components/schemas/TileLightSide",
            "default": "left"
          }
        },
        "type": "object",
        "title": "TileGrid",
        "description": "One tile's place on the grid. Every tile of a set shares all but the footprint and height."
      },
      "TileLightSide": {
        "type": "string",
        "enum": [
          "left",
          "right"
        ],
        "title": "TileLightSide",
        "description": "The side the key light comes from, seen from the camera."
      },
      "TileMetadataView": {
        "properties": {
          "shape": {
            "$ref": "#/components/schemas/TileShape",
            "description": "The outline of one grid cell seen from straight above."
          },
          "orientation": {
            "$ref": "#/components/schemas/TileOrientation",
            "description": "How the cell is turned to the camera: DIAMOND or ALIGNED for a square, POINTY_TOP or FLAT_TOP for a hexagon."
          },
          "elevation": {
            "type": "number",
            "title": "Elevation",
            "description": "Camera tilt in degrees above the ground plane; 90 is straight down."
          },
          "facing": {
            "type": "integer",
            "title": "Facing",
            "description": "Quarter turn of the camera around the tile, in degrees clockwise seen from above: 0, 90, 180, or 270. A hexagon is only drawn facing 0."
          },
          "footprint_width": {
            "type": "integer",
            "title": "Footprint Width",
            "description": "Cells the footprint covers across (the base's right-hand edge) at facing 0."
          },
          "footprint_depth": {
            "type": "integer",
            "title": "Footprint Depth",
            "description": "Cells the footprint covers deep (the base's left-hand edge) at facing 0."
          },
          "height": {
            "type": "number",
            "title": "Height",
            "description": "Wall height in cell sides: 0 is a flat ground tile, 1 a cube on a square."
          },
          "tile_width": {
            "type": "integer",
            "title": "Tile Width",
            "description": "Width in pixels of one cell's base outline in the sprite."
          },
          "tile_height": {
            "type": "integer",
            "title": "Tile Height",
            "description": "Height in pixels of one cell's base outline in the sprite."
          },
          "anchor": {
            "$ref": "#/components/schemas/TilePointView",
            "description": "The point the tile is placed by: the bottom centre of the cell it stands on (the front cell of a footprint wider than one)."
          },
          "cell_center": {
            "$ref": "#/components/schemas/TilePointView",
            "description": "The centre of the anchor's cell. Godot and Unity pin a tile here rather than at the anchor."
          },
          "base_outline": {
            "items": {
              "$ref": "#/components/schemas/TilePointView"
            },
            "type": "array",
            "title": "Base Outline",
            "description": "The footprint's whole base outline, clockwise on screen from the anchor's vertex or edge."
          },
          "subject_id": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ],
            "title": "Subject Id",
            "description": "What the tile shows. Every facing of one subject shares it, so a tileset can group them."
          }
        },
        "type": "object",
        "required": [
          "shape",
          "orientation",
          "elevation",
          "facing",
          "footprint_width",
          "footprint_depth",
          "height",
          "tile_width",
          "tile_height",
          "anchor",
          "cell_center",
          "base_outline"
        ],
        "title": "TileMetadataView",
        "description": "Where a game tile's sprite sits on its grid, in the sprite's own pixels from its top-left corner."
      },
      "TileOrientation": {
        "type": "string",
        "enum": [
          "DIAMOND",
          "ALIGNED",
          "POINTY_TOP",
          "FLAT_TOP"
        ],
        "title": "TileOrientation",
        "description": "How a cell's outline is turned to the camera.\n\nA square cell is either ``DIAMOND``, turned 45 degrees so its base reads as a diamond (the\nisometric look), or ``ALIGNED`` with the camera, as top-down maps are. A hexagon has either a\nvertex (``POINTY_TOP``) or an edge (``FLAT_TOP``) at the top."
      },
      "TilePointView": {
        "properties": {
          "x": {
            "type": "number",
            "title": "X",
            "description": "Pixels right of the sprite's left edge."
          },
          "y": {
            "type": "number",
            "title": "Y",
            "description": "Pixels down from the sprite's top edge."
          }
        },
        "type": "object",
        "required": [
          "x",
          "y"
        ],
        "title": "TilePointView"
      },
      "TileShape": {
        "type": "string",
        "enum": [
          "SQUARE",
          "HEXAGON"
        ],
        "title": "TileShape",
        "description": "The outline of one cell of the grid, seen from straight above."
      },
      "TokenResponse": {
        "properties": {
          "access_token": {
            "type": "string",
            "title": "Access Token",
            "description": "A signed JWT access token, sent as `Authorization: Bearer <token>`. Treat it as opaque."
          },
          "token_type": {
            "type": "string",
            "title": "Token Type",
            "description": "Always `Bearer`."
          },
          "expires_in": {
            "type": "integer",
            "title": "Expires In",
            "description": "Seconds until the token expires."
          },
          "scope": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Scope",
            "description": "The space-delimited scopes the token carries."
          },
          "refresh_token": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Refresh Token",
            "description": "Device and refresh grants only: the refresh token, replaced on every refresh."
          }
        },
        "type": "object",
        "required": [
          "access_token",
          "token_type",
          "expires_in"
        ],
        "title": "TokenResponse"
      },
      "ToolGuidanceFileTypeSupport": {
        "properties": {
          "type": {
            "type": "string",
            "title": "Type",
            "description": "Guidance file type, such as init_image, reference_image, first_frame, pose, or depth."
          },
          "max_count": {
            "type": "integer",
            "title": "Max Count",
            "description": "Maximum number of files of this type accepted by the model."
          },
          "max_duration_seconds": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Max Duration Seconds",
            "description": "Longest single video or audio this slot accepts, in seconds. A cap on the combined length of several files is listed under shared_guidance_limits. Null when the model states no cap."
          },
          "min_duration_seconds": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Min Duration Seconds",
            "description": "Shortest video or audio this slot accepts, in seconds; a shorter one is rejected. Null when the model states no floor."
          },
          "min_count": {
            "type": "integer",
            "title": "Min Count",
            "description": "Minimum number of files of this type a run must supply. 0 means the input is optional.",
            "default": 0
          }
        },
        "type": "object",
        "required": [
          "type",
          "max_count"
        ],
        "title": "ToolGuidanceFileTypeSupport"
      },
      "ToolSharedGuidanceLimit": {
        "properties": {
          "types": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Types",
            "description": "Guidance file types that count toward this limit."
          },
          "max_count": {
            "type": "integer",
            "title": "Max Count",
            "description": "Most files of these types one run may attach combined. Only one first_frame counts."
          },
          "min_combined_duration_seconds": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Min Combined Duration Seconds",
            "description": "Shortest summed length, in seconds, of the videos or audio of these types. Null when unbounded."
          },
          "max_combined_duration_seconds": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Max Combined Duration Seconds",
            "description": "Longest summed length, in seconds, of the videos or audio of these types. Null when unbounded."
          }
        },
        "type": "object",
        "required": [
          "types",
          "max_count"
        ],
        "title": "ToolSharedGuidanceLimit"
      },
      "TrainedModelResponse": {
        "properties": {
          "finetune_id": {
            "type": "string",
            "format": "uuid",
            "title": "Finetune Id",
            "description": "ID of the trained finetune (LoRA) for the run."
          },
          "reference_set_id": {
            "type": "string",
            "format": "uuid",
            "title": "Reference Set Id"
          },
          "base_model_id": {
            "type": "string",
            "title": "Base Model Id"
          },
          "is_active": {
            "type": "boolean",
            "title": "Is Active",
            "description": "Whether this finetune is the active one for the run's base model."
          }
        },
        "type": "object",
        "required": [
          "finetune_id",
          "reference_set_id",
          "base_model_id",
          "is_active"
        ],
        "title": "TrainedModelResponse"
      },
      "TrainingRunSummary": {
        "properties": {
          "training_run_id": {
            "type": "string",
            "format": "uuid",
            "title": "Training Run Id"
          },
          "reference_set_id": {
            "type": "string",
            "format": "uuid",
            "title": "Reference Set Id"
          },
          "state": {
            "type": "string",
            "enum": [
              "in_progress",
              "terminal_success",
              "terminal_failure"
            ],
            "title": "State"
          },
          "raw_status": {
            "type": "string",
            "title": "Raw Status"
          },
          "progress": {
            "type": "number",
            "title": "Progress",
            "description": "Training progress in [0, 1]; 1.0 when complete."
          },
          "started_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Started At"
          }
        },
        "type": "object",
        "required": [
          "training_run_id",
          "reference_set_id",
          "state",
          "raw_status",
          "progress"
        ],
        "title": "TrainingRunSummary"
      },
      "TrainingWebhookEvent": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id",
            "description": "Unique event id, repeated in the webhook-id header."
          },
          "type": {
            "$ref": "#/components/schemas/WebhookEventType",
            "description": "training.succeeded or training.failed."
          },
          "created_at": {
            "type": "string",
            "title": "Created At",
            "description": "When the event was raised (RFC 3339)."
          },
          "data": {
            "$ref": "#/components/schemas/GetTrainingRunResponse",
            "description": "Identical to the body of GET on the training run."
          },
          "metadata": {
            "additionalProperties": {
              "type": "string"
            },
            "type": "object",
            "title": "Metadata",
            "description": "Whatever you sent as webhook.metadata.",
            "default": {}
          }
        },
        "type": "object",
        "required": [
          "id",
          "type",
          "created_at",
          "data"
        ],
        "title": "TrainingWebhookEvent",
        "description": "Delivered when a training run reaches a terminal state."
      },
      "UpdateGroupBody": {
        "properties": {
          "role": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Role"
              },
              {
                "type": "null"
              }
            ],
            "description": "New builtin role to grant members. Send null with no role_id to clear the group's role."
          },
          "role_id": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ],
            "title": "Role Id",
            "description": "Id of a custom role to grant instead of a builtin `role`."
          }
        },
        "type": "object",
        "required": [
          "role"
        ],
        "title": "UpdateGroupBody"
      },
      "UpdateMemberBody": {
        "properties": {
          "role": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Role"
              },
              {
                "type": "null"
              }
            ],
            "description": "New role, if changing."
          },
          "status": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/WorkspaceMembershipStatus"
              },
              {
                "type": "null"
              }
            ],
            "description": "New status (active to reactivate, suspended to suspend), if changing."
          }
        },
        "type": "object",
        "title": "UpdateMemberBody"
      },
      "UpdateProjectBody": {
        "properties": {
          "name": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Name"
          },
          "description": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 1000
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "instructions": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200000
              },
              {
                "type": "null"
              }
            ],
            "title": "Instructions",
            "description": "Deprecated: attach a skill to the project instead. Honoured while it holds text, and read back as null once the project's instructions have been converted into a project-attached skill.",
            "deprecated": true
          },
          "archived": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Archived",
            "description": "Set true to archive, false to unarchive. Omit to leave unchanged."
          }
        },
        "type": "object",
        "title": "UpdateProjectBody"
      },
      "UpdateSessionBody": {
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 255,
            "minLength": 1,
            "title": "Name",
            "description": "The session's new display name."
          }
        },
        "type": "object",
        "required": [
          "name"
        ],
        "title": "UpdateSessionBody"
      },
      "UsageLimitMode": {
        "type": "string",
        "enum": [
          "warn",
          "block"
        ],
        "title": "UsageLimitMode",
        "description": "What a cap does once its member has used all of it."
      },
      "UsageLimitPeriod": {
        "type": "string",
        "enum": [
          "daily",
          "weekly",
          "monthly"
        ],
        "title": "UsageLimitPeriod"
      },
      "ValidationError": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          },
          "input": {
            "title": "Input"
          },
          "ctx": {
            "type": "object",
            "title": "Context"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "VectorizationColorMode": {
        "type": "string",
        "enum": [
          "color",
          "binary"
        ],
        "title": "VectorizationColorMode"
      },
      "VectorizationLayering": {
        "type": "string",
        "enum": [
          "stacked",
          "cutout"
        ],
        "title": "VectorizationLayering"
      },
      "VectorizationMode": {
        "type": "string",
        "enum": [
          "spline",
          "polygon"
        ],
        "title": "VectorizationMode"
      },
      "VideoEffectType": {
        "type": "string",
        "enum": [
          "general",
          "orbit_360",
          "action_run",
          "agent_reveal",
          "arc",
          "arc_left",
          "baseball_kick",
          "basketball_dunks",
          "boxing",
          "buckle_up",
          "building_explosion",
          "bullet_time",
          "car_chasing",
          "car_explosion",
          "car_grip",
          "catch",
          "catwalk",
          "crane_down",
          "crane_over_the_head",
          "crane_up",
          "crash_zoom_in",
          "crash_zoom_out",
          "dirty_lens",
          "disintegration",
          "dolly_in",
          "dolly_left",
          "dolly_out",
          "dolly_right",
          "dolly_zoom_in",
          "dolly_zoom_out",
          "double_dolly",
          "downhill_pov",
          "dutch_angle",
          "eyes_in",
          "face_punch",
          "fisheye",
          "flying",
          "focus_change",
          "fpv_drone",
          "glam",
          "handheld",
          "head_tracking",
          "hyperlapse",
          "invisible",
          "jib_down",
          "jib_up",
          "kiss",
          "lazy_susan",
          "lens_crack",
          "lens_flare",
          "levitation",
          "low_shutter",
          "melting",
          "moonwalk_left",
          "moonwalk_right",
          "mouth_in",
          "object_pov",
          "overhead",
          "push_to_glass",
          "rap_flex",
          "robo_arm",
          "set_on_fire",
          "skateboard_glide",
          "skateboarding",
          "skateboard_kickflip",
          "skateboard_ollie",
          "skate_cruise",
          "ski_carving",
          "ski_powder",
          "snorricam",
          "snowboard_carving",
          "snowboard_powder",
          "soul_jump",
          "static",
          "super_dolly_in",
          "super_dolly_out",
          "tentacles",
          "through_object_in",
          "through_object_out",
          "thunder_god",
          "tilt_down",
          "tilt_up",
          "timelapse_human",
          "timelapse_landscape",
          "turning_metal",
          "whip_pan",
          "wiggle",
          "wind_to_face",
          "yoyo_zoom",
          "zoom_in",
          "zoom_out"
        ],
        "title": "VideoEffectType"
      },
      "VideoSection": {
        "properties": {
          "start_seconds": {
            "type": "number",
            "minimum": 0,
            "title": "Start Seconds"
          },
          "end_seconds": {
            "type": "number",
            "minimum": 0,
            "title": "End Seconds"
          }
        },
        "type": "object",
        "required": [
          "start_seconds",
          "end_seconds"
        ],
        "title": "VideoSection",
        "description": "A time window of the source clip, in seconds from its start, that an edit replaces.\n\nA video insert cuts the source at ``start_seconds``, plays a generated scene, then picks the\nsource back up at ``end_seconds``."
      },
      "WebhookDeliveryStatus": {
        "type": "string",
        "enum": [
          "pending",
          "delivered",
          "failed"
        ],
        "title": "WebhookDeliveryStatus"
      },
      "WebhookEventType": {
        "type": "string",
        "enum": [
          "inference.completed",
          "inference.failed",
          "inference.cancelled",
          "training.succeeded",
          "training.failed",
          "scoring_run.completed",
          "scoring_run.failed",
          "workflow_run.succeeded",
          "workflow_run.failed",
          "workflow_run.cancelled"
        ],
        "title": "WebhookEventType",
        "description": "Every event the public API can deliver.\n\nTerminal outcomes only: a job produces exactly one of these, once. The value is what\nappears as ``type`` in the envelope and as the operation name in the OpenAPI\n``webhooks`` block, so it is a public contract."
      },
      "WebhookInput": {
        "properties": {
          "url": {
            "type": "string",
            "maxLength": 2048,
            "title": "Url",
            "description": "HTTPS URL that receives a POST when this request reaches a terminal state. Must be publicly reachable; must not redirect. Acknowledge with any 2xx within 10 seconds and do the work asynchronously. Reply 410 to stop delivery permanently."
          },
          "events": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/WebhookEventType"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Events",
            "description": "Narrows what is delivered. Omit to receive every event this request can produce, which is what `expected_events` on the response lists."
          },
          "metadata": {
            "additionalProperties": {
              "type": "string"
            },
            "type": "object",
            "title": "Metadata",
            "description": "Opaque key/value pairs echoed back verbatim in every delivery, for correlating a callback with your own records. At most 10 keys and 1024 bytes in total."
          }
        },
        "type": "object",
        "required": [
          "url"
        ],
        "title": "WebhookInput",
        "description": "Where to POST this request's terminal events, and what to include with them."
      },
      "WebhookSecretResponse": {
        "properties": {
          "secret": {
            "type": "string",
            "title": "Secret",
            "description": "The workspace's current signing secret, in `whsec_` form."
          }
        },
        "type": "object",
        "required": [
          "secret"
        ],
        "title": "WebhookSecretResponse"
      },
      "WebhookStatusView": {
        "properties": {
          "url": {
            "type": "string",
            "title": "Url",
            "description": "The callback URL this run was submitted with."
          },
          "status": {
            "$ref": "#/components/schemas/WebhookDeliveryStatus",
            "description": "pending until a delivery settles, then delivered or failed."
          },
          "attempts": {
            "type": "integer",
            "title": "Attempts",
            "description": "How many delivery attempts have been made."
          },
          "last_attempt_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Attempt At",
            "description": "When the last attempt was made."
          },
          "last_response_status": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Response Status",
            "description": "HTTP status the receiver returned on the last attempt, if it responded."
          },
          "last_error": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Error",
            "description": "Why the last attempt did not succeed. Null once delivered."
          }
        },
        "type": "object",
        "required": [
          "url",
          "status",
          "attempts"
        ],
        "title": "WebhookStatusView",
        "description": "What a job's ``GET`` reports about the callback attached to it.\n\nThe URL is echoed so a caller can tell which of its endpoints a run was aimed at; the\nrest is how the delivery went, which is the only place a failed delivery is visible."
      },
      "WebhookTestRequest": {
        "properties": {
          "webhook": {
            "$ref": "#/components/schemas/WebhookInput",
            "description": "The endpoint to test. `url` and `metadata` are used; `events` is ignored."
          }
        },
        "type": "object",
        "required": [
          "webhook"
        ],
        "title": "WebhookTestRequest"
      },
      "WebhookTestResponse": {
        "properties": {
          "delivered": {
            "type": "boolean",
            "title": "Delivered",
            "description": "Whether the receiver acknowledged with a 2xx."
          },
          "response_status": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Response Status",
            "description": "HTTP status the receiver returned, or null if it never responded."
          },
          "latency_ms": {
            "type": "integer",
            "title": "Latency Ms",
            "description": "How long the attempt took, end to end."
          },
          "error": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error",
            "description": "Why the attempt did not succeed, when it did not."
          }
        },
        "type": "object",
        "required": [
          "delivered",
          "latency_ms"
        ],
        "title": "WebhookTestResponse"
      },
      "WorkflowInput": {
        "properties": {
          "name": {
            "type": "string",
            "title": "Name",
            "description": "Input parameter name (used as key in execute_workflow inputs)"
          },
          "type": {
            "type": "string",
            "title": "Type",
            "description": "Parameter type: string, number, boolean, file, prompt, etc."
          },
          "value_schema": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Value Schema",
            "description": "JSON schema of the input value"
          },
          "required": {
            "type": "boolean",
            "title": "Required",
            "description": "Whether this input must be provided"
          },
          "description": {
            "type": "string",
            "title": "Description",
            "description": "What this input controls"
          },
          "display_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Display Name",
            "description": "Human-readable label"
          },
          "default": {
            "anyOf": [
              {},
              {
                "type": "null"
              }
            ],
            "title": "Default",
            "description": "Default value if not provided"
          }
        },
        "type": "object",
        "required": [
          "name",
          "type",
          "required",
          "description"
        ],
        "title": "WorkflowInput"
      },
      "WorkflowOutput": {
        "properties": {
          "name": {
            "type": "string",
            "title": "Name",
            "description": "Output parameter name"
          },
          "type": {
            "type": "string",
            "title": "Type",
            "description": "Output type: file, string, etc."
          },
          "value_schema": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Value Schema",
            "description": "JSON schema of the output value"
          },
          "description": {
            "type": "string",
            "title": "Description",
            "description": "What this output contains"
          },
          "display_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Display Name",
            "description": "Human-readable label"
          }
        },
        "type": "object",
        "required": [
          "name",
          "type",
          "description"
        ],
        "title": "WorkflowOutput"
      },
      "WorkflowRunAsset": {
        "properties": {
          "object_id": {
            "type": "string",
            "format": "uuid",
            "title": "Object Id",
            "description": "Unique identifier of the generated object."
          },
          "object_type": {
            "$ref": "#/components/schemas/LibraryObjectType",
            "description": "Type of generated object: file or asset."
          },
          "file_id": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ],
            "title": "File Id",
            "description": "File ID — pass directly as input to forge or workflow runs without re-uploading."
          },
          "url": {
            "type": "string",
            "title": "Url",
            "description": "Download URL for the asset."
          },
          "content_type": {
            "type": "string",
            "title": "Content Type",
            "description": "MIME type, e.g. image/png or video/mp4."
          },
          "preview_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Preview Url",
            "description": "Image preview URL."
          },
          "width": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Width",
            "description": "Width in pixels."
          },
          "height": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Height",
            "description": "Height in pixels."
          },
          "duration_seconds": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Duration Seconds",
            "description": "Duration in seconds for video assets."
          },
          "file_size_bytes": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "File Size Bytes",
            "description": "File size in bytes."
          },
          "metadata": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/FileMetadataView"
              },
              {
                "type": "null"
              }
            ],
            "description": "What an engine needs beyond the file to build a resource from it. Null when the file has none."
          }
        },
        "type": "object",
        "required": [
          "object_id",
          "object_type",
          "url",
          "content_type"
        ],
        "title": "WorkflowRunAsset"
      },
      "WorkflowRunWebhookEvent": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id",
            "description": "Unique event id, repeated in the webhook-id header."
          },
          "type": {
            "$ref": "#/components/schemas/WebhookEventType",
            "description": "workflow_run.succeeded, workflow_run.failed or workflow_run.cancelled."
          },
          "created_at": {
            "type": "string",
            "title": "Created At",
            "description": "When the event was raised (RFC 3339)."
          },
          "data": {
            "$ref": "#/components/schemas/GetWorkflowRunOutput",
            "description": "Identical to the body of GET on the workflow run."
          },
          "metadata": {
            "additionalProperties": {
              "type": "string"
            },
            "type": "object",
            "title": "Metadata",
            "description": "Whatever you sent as webhook.metadata.",
            "default": {}
          }
        },
        "type": "object",
        "required": [
          "id",
          "type",
          "created_at",
          "data"
        ],
        "title": "WorkflowRunWebhookEvent",
        "description": "Delivered when a workflow run reaches a terminal state."
      },
      "WorkflowSummary": {
        "properties": {
          "workflow_id": {
            "type": "string",
            "format": "uuid",
            "title": "Workflow Id",
            "description": "Unique workflow identifier"
          },
          "name": {
            "type": "string",
            "title": "Name",
            "description": "Workflow display name"
          },
          "description": {
            "type": "string",
            "title": "Description",
            "description": "What this workflow generates"
          },
          "modality": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Modality"
              },
              {
                "type": "null"
              }
            ],
            "description": "Primary output modality: image, video, three_d, audio"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "title": "Created At",
            "description": "When this workflow version was created"
          },
          "published_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Published At",
            "description": "When this workflow version was published"
          },
          "inputs": {
            "items": {
              "$ref": "#/components/schemas/WorkflowInput"
            },
            "type": "array",
            "title": "Inputs",
            "description": "Input parameters the workflow accepts"
          },
          "outputs": {
            "items": {
              "$ref": "#/components/schemas/WorkflowOutput"
            },
            "type": "array",
            "title": "Outputs",
            "description": "Output parameters the workflow produces"
          }
        },
        "type": "object",
        "required": [
          "workflow_id",
          "name",
          "description",
          "created_at",
          "inputs",
          "outputs"
        ],
        "title": "WorkflowSummary"
      },
      "WorkspaceInfo": {
        "properties": {
          "workspace_id": {
            "type": "string",
            "format": "uuid",
            "title": "Workspace Id",
            "description": "The workspace's unique identifier."
          },
          "slug": {
            "type": "string",
            "title": "Slug",
            "description": "The workspace slug (its representation in the app URL)."
          },
          "name": {
            "type": "string",
            "title": "Name",
            "description": "The workspace display name."
          },
          "balance_creative_units": {
            "type": "number",
            "title": "Balance Creative Units",
            "description": "Total Creative Units balance before reservations."
          },
          "reserved_creative_units": {
            "type": "number",
            "title": "Reserved Creative Units",
            "description": "Creative Units reserved by in-progress generations."
          },
          "available_creative_units": {
            "type": "number",
            "title": "Available Creative Units",
            "description": "Usable balance (balance minus reserved). Can be negative."
          },
          "last_active_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Active At",
            "description": "When the current user was last active in this workspace."
          }
        },
        "type": "object",
        "required": [
          "workspace_id",
          "slug",
          "name",
          "balance_creative_units",
          "reserved_creative_units",
          "available_creative_units",
          "last_active_at"
        ],
        "title": "WorkspaceInfo"
      },
      "WorkspaceMembershipStatus": {
        "type": "string",
        "enum": [
          "active",
          "suspended"
        ],
        "title": "WorkspaceMembershipStatus"
      },
      "WorkspaceUsageOutput": {
        "properties": {
          "balance_creative_units": {
            "type": "number",
            "title": "Balance Creative Units",
            "description": "Current Creative Units balance."
          },
          "reserved_creative_units": {
            "type": "number",
            "title": "Reserved Creative Units",
            "description": "Creative Units reserved by in-flight generations."
          },
          "available_creative_units": {
            "type": "number",
            "title": "Available Creative Units",
            "description": "Balance minus reserved: what's spendable right now."
          },
          "period_start": {
            "type": "string",
            "title": "Period Start",
            "description": "Start of the reported window (UTC date)."
          },
          "period_end": {
            "type": "string",
            "title": "Period End",
            "description": "End of the reported window (UTC date)."
          },
          "total_creative_units": {
            "type": "number",
            "title": "Total Creative Units",
            "description": "Total Creative Units consumed over the window."
          },
          "daily": {
            "items": {
              "$ref": "#/components/schemas/DailyUsage"
            },
            "type": "array",
            "title": "Daily",
            "description": "Per-day Creative Units consumption over the window, oldest first."
          }
        },
        "type": "object",
        "required": [
          "balance_creative_units",
          "reserved_creative_units",
          "available_creative_units",
          "period_start",
          "period_end",
          "total_creative_units",
          "daily"
        ],
        "title": "WorkspaceUsageOutput"
      }
    },
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "description": "Bearer authentication with a Layer Personal Access Token (PAT), prefixed `pat_`. Send it as `Authorization: Bearer <token>`. Create one in the app under Settings → Personal Access Tokens. An Auth0 session JWT is also accepted for first-party browser use."
      },
      "oauth2": {
        "type": "oauth2",
        "description": "OAuth 2.0 sign-in for a person, against Layer's authorization server. Discovery metadata for this resource is published at `https://api.app.layer.ai/.well-known/oauth-protected-resource` (RFC 9728), and the authorization server's own metadata at `https://auth.app.layer.ai/.well-known/oauth-authorization-server` (RFC 8414). A person's token carries no scope: it acts with the person's role.",
        "flows": {
          "authorizationCode": {
            "authorizationUrl": "https://auth.app.layer.ai/authorize",
            "tokenUrl": "https://auth.app.layer.ai/oauth/token",
            "refreshUrl": "https://auth.app.layer.ai/oauth/token",
            "scopes": {}
          }
        }
      },
      "serviceAccount": {
        "type": "oauth2",
        "description": "A service account's access token, from the client credentials grant: the account's id as `client_id`, one of its keys as `client_secret`. A key is also accepted directly as a bearer token. The account acts with its role, limited to the token's scopes.",
        "flows": {
          "clientCredentials": {
            "tokenUrl": "https://api.app.layer.ai/api/oauth/token",
            "scopes": {
              "workspace:read": "Read workspace",
              "workspace:write": "Read and change workspace",
              "members:read": "Read members",
              "members:write": "Read and change members",
              "scim:read": "Read scim",
              "scim:write": "Read and change scim",
              "billing:read": "Read billing",
              "billing:write": "Read and change billing",
              "labels:read": "Read labels",
              "labels:write": "Read and change labels",
              "library:read": "Read library",
              "library:write": "Read and change library",
              "sessions:read": "Read sessions",
              "sessions:write": "Read and change sessions",
              "projects:read": "Read projects",
              "projects:write": "Read and change projects",
              "reference_sets:read": "Read reference sets",
              "reference_sets:write": "Read and change reference sets",
              "generation:read": "Read generation",
              "generation:write": "Read and change generation",
              "workflows:read": "Read workflows",
              "workflows:write": "Read and change workflows",
              "skills:read": "Read skills",
              "skills:write": "Read and change skills",
              "integrations:read": "Read integrations",
              "integrations:write": "Read and change integrations",
              "campaigns:read": "Read campaigns",
              "campaigns:write": "Read and change campaigns"
            }
          }
        }
      }
    },
    "headers": {
      "Deprecation": {
        "description": "Present only on a deprecated operation: the moment it became deprecated, as an RFC 9745 sf-date (`@<unix-timestamp>`). The operation still works.",
        "schema": {
          "type": "string",
          "example": "@1798761600"
        },
        "required": false
      },
      "Sunset": {
        "description": "Present only on a deprecated operation: the earliest date it may stop responding, as an RFC 8594 IMF-fixdate. Treat it as the migration deadline.",
        "schema": {
          "type": "string",
          "example": "Sat, 01 Aug 2026 00:00:00 GMT"
        },
        "required": false
      },
      "Link": {
        "description": "On a deprecated operation, carries `rel=\"deprecation\"` pointing at the policy and `rel=\"successor-version\"` pointing at the replacement.",
        "schema": {
          "type": "string"
        },
        "required": false
      }
    }
  },
  "tags": [
    {
      "name": "Models",
      "description": "Browse the model catalog and inspect model capabilities."
    },
    {
      "name": "Base Models",
      "description": "Browse the base model catalog and inspect model capabilities."
    },
    {
      "name": "Reference Sets",
      "description": "Browse the workspace's reference sets — trained subjects, styles, and characters to generate with."
    },
    {
      "name": "Inferences",
      "description": "Generate assets — run a model to produce images, video, audio, or 3D."
    },
    {
      "name": "Training",
      "description": "Train custom styles/LoRAs from reference sets of your own assets."
    },
    {
      "name": "Files",
      "description": "Upload inputs and retrieve generated output files."
    },
    {
      "name": "Sessions",
      "description": "Group generations into sessions, and follow what lands in one as it happens."
    },
    {
      "name": "Scoring",
      "description": "Score assets against a workspace's or project's own output scoring rules."
    },
    {
      "name": "Workflows",
      "description": "Run multi-step generation pipelines built in Blueprint."
    },
    {
      "name": "Webhooks",
      "description": "Manage the signing secret your deliveries are verified with, and test a receiver."
    },
    {
      "name": "Workspaces",
      "description": "Top-level containers for your team's projects, members, and usage."
    },
    {
      "name": "Projects",
      "description": "Organize assets and access within a workspace."
    },
    {
      "name": "Members",
      "description": "Manage workspace membership and roles."
    },
    {
      "name": "Groups",
      "description": "Manage groups of members for access control."
    },
    {
      "name": "Authentication",
      "description": "Exchange a service account key for a short-lived, scoped access token, and revoke one."
    }
  ],
  "security": [
    {
      "bearerAuth": []
    },
    {
      "oauth2": []
    }
  ],
  "x-layer-versioning": {
    "style": "uri-path",
    "current_versions": [
      "v1",
      "v2"
    ],
    "default_version": "v2",
    "policy_url": "https://api.app.layer.ai/api/versioning",
    "documentation_url": "https://layer.ai/docs/versioning",
    "breaking_change_policy": "Breaking changes ship under a new version prefix rather than changing an existing one. New endpoints, new optional request fields, new response fields, and new enum values are non-breaking — parse responses leniently and ignore what you do not recognise.",
    "deprecation": {
      "documentation_url": "https://layer.ai/docs/deprecation",
      "minimum_notice_days": 90,
      "signals": [
        {
          "name": "OpenAPI deprecated flag",
          "specification": "https://spec.openapis.org/oas/v3.1.0#fixed-fields-7",
          "description": "The operation is marked `deprecated: true` in this document, with `x-layer-sunset` carrying the same date as the Sunset header."
        },
        {
          "name": "Deprecation header",
          "specification": "https://www.rfc-editor.org/rfc/rfc9745",
          "description": "A deprecated operation returns `Deprecation: @<unix-timestamp>` — the moment it became deprecated. It keeps working until its sunset date."
        },
        {
          "name": "Sunset header",
          "specification": "https://www.rfc-editor.org/rfc/rfc8594",
          "description": "A deprecated operation returns `Sunset: <HTTP-date>` — the moment it stops responding. Treat this as the migration deadline."
        },
        {
          "name": "Link: rel=\"deprecation\"",
          "specification": "https://www.rfc-editor.org/rfc/rfc9745#name-the-deprecation-link-relati",
          "description": "A `Link` header with `rel=\"deprecation\"` points at the migration notes."
        }
      ]
    }
  },
  "externalDocs": {
    "description": "Layer API reference and guides",
    "url": "https://layer.ai/docs/v2/rest-api"
  }
}
