{
  "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\nAll endpoints require a Bearer token in the `Authorization` header:\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 [app.layer.ai](https://app.layer.ai)\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 7807 Problem Details](https://tools.ietf.org/html/rfc7807):\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}\n```\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\n## Versioning\n\n`/v1` is the stable surface. `/v2` extends inference generation with reference sets —\ntrained subjects, styles, and characters — and adds the base-model and reference-set\ncatalog endpoints those runs are built from. Both versions are served together and v1\nroutes are unaffected by v2's addition.\n",
    "version": "1.0.0"
  },
  "servers": [
    {
      "url": "https://api.app.layer.ai/api",
      "description": "Production"
    }
  ],
  "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — too many concurrent requests.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/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",
              "title": "Workspace Id"
            }
          }
        ],
        "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — too many concurrent requests.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/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",
              "title": "Workspace Id"
            }
          },
          {
            "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — too many concurrent requests.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/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",
              "title": "Workspace Id"
            }
          },
          {
            "name": "include_archived",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false,
              "title": "Include Archived"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 100,
              "minimum": 1,
              "default": 20,
              "title": "Limit"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          }
        ],
        "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — too many concurrent requests.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Projects"
        ],
        "summary": "Create project",
        "operationId": "createProject",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Workspace Id"
            }
          }
        ],
        "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — too many concurrent requests.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/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",
              "title": "Workspace Id"
            }
          },
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Project Id"
            }
          }
        ],
        "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — too many concurrent requests.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          }
        }
      },
      "patch": {
        "tags": [
          "Projects"
        ],
        "summary": "Update project",
        "operationId": "updateProject",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Workspace Id"
            }
          },
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Project Id"
            }
          }
        ],
        "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — too many concurrent requests.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Projects"
        ],
        "summary": "Delete project",
        "operationId": "deleteProject",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Workspace Id"
            }
          },
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Project Id"
            }
          }
        ],
        "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — too many concurrent requests.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/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",
              "title": "Workspace Id"
            }
          },
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Project Id"
            }
          }
        ],
        "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — too many concurrent requests.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/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",
              "title": "Workspace Id"
            }
          },
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Project Id"
            }
          },
          {
            "name": "user_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "User Id"
            }
          }
        ],
        "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — too many concurrent requests.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/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",
              "title": "Workspace Id"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 100,
              "minimum": 1,
              "default": 20,
              "title": "Limit"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          }
        ],
        "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — too many concurrent requests.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Members"
        ],
        "summary": "Invite workspace member",
        "operationId": "inviteWorkspaceMember",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Workspace Id"
            }
          }
        ],
        "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — too many concurrent requests.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/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",
              "title": "Workspace Id"
            }
          },
          {
            "name": "user_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "User Id"
            }
          }
        ],
        "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — too many concurrent requests.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/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",
              "title": "Workspace Id"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 100,
              "minimum": 1,
              "default": 20,
              "title": "Limit"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          }
        ],
        "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — too many concurrent requests.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Groups"
        ],
        "summary": "Create group",
        "operationId": "createGroup",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Workspace Id"
            }
          }
        ],
        "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — too many concurrent requests.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/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",
              "title": "Workspace Id"
            }
          },
          {
            "name": "group_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Group Id"
            }
          }
        ],
        "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — too many concurrent requests.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Groups"
        ],
        "summary": "Delete group",
        "operationId": "deleteGroup",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Workspace Id"
            }
          },
          {
            "name": "group_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Group Id"
            }
          }
        ],
        "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — too many concurrent requests.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/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",
              "title": "Workspace Id"
            }
          },
          {
            "name": "group_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Group Id"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 100,
              "minimum": 1,
              "default": 20,
              "title": "Limit"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          }
        ],
        "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — too many concurrent requests.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Groups"
        ],
        "summary": "Add group member",
        "operationId": "addGroupMember",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Workspace Id"
            }
          },
          {
            "name": "group_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Group Id"
            }
          }
        ],
        "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — too many concurrent requests.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/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",
              "title": "Workspace Id"
            }
          },
          {
            "name": "group_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Group Id"
            }
          },
          {
            "name": "user_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "User Id"
            }
          }
        ],
        "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — too many concurrent requests.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/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",
              "title": "Workspace Id"
            }
          },
          {
            "name": "group_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Group Id"
            }
          }
        ],
        "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — too many concurrent requests.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Groups"
        ],
        "summary": "Remove group usage limit",
        "operationId": "removeGroupUsageLimit",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Workspace Id"
            }
          },
          {
            "name": "group_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Group Id"
            }
          }
        ],
        "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — too many concurrent requests.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/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",
              "title": "Workspace Id"
            }
          },
          {
            "name": "modality",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "enum": [
                    "image",
                    "video",
                    "three_d",
                    "audio",
                    "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,
              "default": 20,
              "title": "Limit"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          }
        ],
        "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — too many concurrent requests.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/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",
              "title": "Workspace Id"
            }
          },
          {
            "name": "model_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Model Id"
            }
          }
        ],
        "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — too many concurrent requests.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/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. Reference sets are listed separately under /reference-sets.",
        "operationId": "listBaseModels",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Workspace Id"
            }
          },
          {
            "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": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 100,
              "minimum": 1,
              "default": 20,
              "title": "Limit"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          }
        ],
        "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — too many concurrent requests.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/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",
              "title": "Workspace Id"
            }
          },
          {
            "name": "base_model_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Base Model Id"
            }
          }
        ],
        "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — too many concurrent requests.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/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",
              "title": "Workspace Id"
            }
          },
          {
            "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": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 100,
              "minimum": 1,
              "default": 20,
              "title": "Limit"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          }
        ],
        "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — too many concurrent requests.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/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",
              "title": "Workspace Id"
            }
          },
          {
            "name": "reference_set_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Reference Set Id"
            }
          }
        ],
        "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — too many concurrent requests.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/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",
              "title": "Workspace Id"
            }
          },
          {
            "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,
              "default": 20,
              "title": "Limit"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          }
        ],
        "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — too many concurrent requests.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/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",
              "title": "Workspace Id"
            }
          },
          {
            "name": "workflow_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Workflow Id"
            }
          }
        ],
        "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — too many concurrent requests.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/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",
              "title": "Workspace Id"
            }
          },
          {
            "name": "workflow_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Workflow Id"
            }
          }
        ],
        "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — too many concurrent requests.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/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",
              "title": "Workspace Id"
            }
          },
          {
            "name": "workflow_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Workflow Id"
            }
          },
          {
            "name": "run_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Run Id"
            }
          }
        ],
        "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — too many concurrent requests.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/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",
              "title": "Workspace Id"
            }
          }
        ],
        "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — too many concurrent requests.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/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",
              "title": "Workspace Id"
            }
          }
        ],
        "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — too many concurrent requests.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/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",
              "title": "Workspace Id"
            }
          },
          {
            "name": "inference_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Inference Id"
            }
          }
        ],
        "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — too many concurrent requests.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/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",
              "title": "Workspace Id"
            }
          },
          {
            "name": "inference_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Inference Id"
            }
          }
        ],
        "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — too many concurrent requests.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/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), 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",
              "title": "Workspace Id"
            }
          }
        ],
        "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — too many concurrent requests.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/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), 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",
              "title": "Workspace Id"
            }
          }
        ],
        "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — too many concurrent requests.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/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",
              "title": "Workspace Id"
            }
          },
          {
            "name": "inference_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Inference Id"
            }
          }
        ],
        "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — too many concurrent requests.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/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",
              "title": "Workspace Id"
            }
          }
        ],
        "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — too many concurrent requests.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/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",
              "title": "Workspace Id"
            }
          }
        ],
        "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — too many concurrent requests.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/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",
              "title": "Workspace Id"
            }
          }
        ],
        "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — too many concurrent requests.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          }
        }
      },
      "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",
              "title": "Workspace Id"
            }
          },
          {
            "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,
              "default": 20,
              "title": "Limit"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          }
        ],
        "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — too many concurrent requests.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/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",
              "title": "Workspace Id"
            }
          },
          {
            "name": "training_run_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Training Run Id"
            }
          }
        ],
        "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — too many concurrent requests.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/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",
              "title": "Workspace Id"
            }
          },
          {
            "name": "training_run_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Training Run Id"
            }
          }
        ],
        "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — too many concurrent requests.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/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",
              "title": "Workspace Id"
            }
          },
          {
            "name": "training_run_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Training Run Id"
            }
          }
        ],
        "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — too many concurrent requests.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/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/jpeg, image/png, image/webp, video/mp4. Max size: 64 MB. Upload URL expires in 15 minutes.",
        "operationId": "requestFileUploadUrl",
        "parameters": [
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Workspace Id"
            }
          }
        ],
        "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — too many concurrent requests.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/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",
              "title": "Workspace Id"
            }
          },
          {
            "name": "project_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "uuid"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Project Id"
            }
          }
        ],
        "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — too many concurrent requests.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/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",
              "title": "Workspace Id"
            }
          }
        ],
        "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — too many concurrent requests.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/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",
              "title": "Workspace Id"
            }
          },
          {
            "name": "file_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "File Id"
            }
          }
        ],
        "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Invalid input parameters.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — too many concurrent requests.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "https://api.layer.ai/errors/ERROR_CODE"
                    },
                    "title": {
                      "type": "string",
                      "example": "Error Title"
                    },
                    "status": {
                      "type": "integer",
                      "example": 400
                    },
                    "detail": {
                      "type": "string",
                      "example": "Human-readable description."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          },
          "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."
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ]
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "AddGroupMemberBody": {
        "properties": {
          "user_id": {
            "type": "string",
            "format": "uuid",
            "title": "User Id",
            "description": "Id of the workspace member to add to the group."
          }
        },
        "type": "object",
        "required": [
          "user_id"
        ],
        "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"
      },
      "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
          },
          "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": {
              "$ref": "#/components/schemas/ToolGuidanceFileTypeSupport"
            },
            "type": "array",
            "title": "Guidance File Types",
            "description": "Supported guidance inputs and their per-type file limits. `editing_reference` reproduces subjects from reference images; `prompt` is legacy IP-Adapter style-only transfer."
          },
          "duration_seconds": {
            "items": {
              "type": "integer"
            },
            "type": "array",
            "title": "Duration Seconds",
            "description": "Supported video durations in seconds"
          },
          "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
          },
          "camera_transform": {
            "type": "boolean",
            "title": "Camera Transform",
            "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."
      },
      "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."
          },
          "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."
          },
          "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."
      },
      "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"
      },
      "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."
          }
        },
        "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"
          }
        },
        "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"
      },
      "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": {
          "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": "Prompt strength for img2img (0-1)."
          },
          "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": "Video duration in seconds."
          },
          "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."
          },
          "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."
          },
          "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."
          }
        },
        "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": {
          "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": 10,
            "title": "Reference Sets",
            "description": "Reference sets to apply, up to 10.",
            "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."
          },
          "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": "Prompt strength for img2img (0-1)."
          },
          "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": "Video duration in seconds."
          },
          "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."
          },
          "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."
          },
          "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": "Reference images/files to guide generation.",
            "default": []
          }
        },
        "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": {
          "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": "Prompt strength for img2img (0-1)."
          },
          "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": "Video duration in seconds."
          },
          "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."
          },
          "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."
          },
          "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."
          }
        },
        "type": "object",
        "required": [
          "inference_id",
          "status",
          "poll_interval_seconds",
          "created_at",
          "base_model_id"
        ],
        "title": "ExecuteInferenceV2Output"
      },
      "ExecuteInferenceV2Request": {
        "properties": {
          "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": 10,
            "title": "Reference Sets",
            "description": "Reference sets to apply, up to 10.",
            "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."
          },
          "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": "Prompt strength for img2img (0-1)."
          },
          "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": "Video duration in seconds."
          },
          "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."
          },
          "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."
          },
          "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": "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": "Session name."
          }
        },
        "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."
          }
        },
        "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."
          }
        },
        "type": "object",
        "required": [
          "inputs"
        ],
        "title": "ExecuteWorkflowRequest"
      },
      "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",
          "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."
          }
        },
        "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 transparent areas as mask."
          },
          "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
          },
          "prompt_fallback_applied": {
            "type": "boolean",
            "title": "Prompt Fallback Applied",
            "description": "True when the set fell back to prompt-only representation.",
            "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
          }
        },
        "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."
          }
        },
        "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) and `BALANCE_UNAVAILABLE` (the balance could not be verified — retry later)."
          }
        },
        "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) and `BALANCE_UNAVAILABLE` (the balance could not be verified — retry later)."
          },
          "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."
          }
        },
        "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"
      },
      "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."
          }
        },
        "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) and `BlueprintBalanceUnavailableError` (the balance could not be verified — retry later)."
          }
        },
        "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": {
          "user_id": {
            "type": "string",
            "format": "uuid",
            "title": "User Id",
            "description": "The member's user id."
          },
          "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": [
          "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."
          }
        },
        "type": "object",
        "required": [
          "group_id",
          "name"
        ],
        "title": "GroupOut"
      },
      "GuidanceFileType": {
        "type": "string",
        "enum": [
          "init",
          "reference_image",
          "editing_reference",
          "scribble",
          "color_sketch",
          "pose",
          "depth",
          "canny",
          "softedge_hed",
          "segmentation",
          "lineart",
          "prompt",
          "face",
          "first_frame",
          "last_frame",
          "init_video",
          "reference_video",
          "init_mesh",
          "texture_image",
          "element_frontal_image",
          "element_reference_image",
          "element_video",
          "init_audio",
          "audio"
        ],
        "title": "GuidanceFileType"
      },
      "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"
      },
      "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": {
            "$ref": "#/components/schemas/Role",
            "description": "Workspace role to grant. Defaults to member.",
            "default": "member"
          }
        },
        "type": "object",
        "required": [
          "email"
        ],
        "title": "InviteMemberBody"
      },
      "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"
      },
      "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."
          },
          "user_id": {
            "type": "string",
            "format": "uuid",
            "title": "User Id",
            "description": "The member's user id."
          },
          "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",
          "user_id",
          "email",
          "role",
          "status"
        ],
        "title": "MemberOutput"
      },
      "Modality": {
        "type": "string",
        "enum": [
          "text",
          "image",
          "audio",
          "video",
          "three_d",
          "playable"
        ],
        "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
          },
          "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"
          },
          "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
          }
        },
        "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"
      },
      "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 video duration in seconds."
          },
          "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 video duration in seconds."
          },
          "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."
      },
      "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"
      },
      "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."
          }
        },
        "type": "object",
        "required": [
          "project_id",
          "name",
          "status",
          "object_count"
        ],
        "title": "ProjectDetail"
      },
      "ProjectMember": {
        "properties": {
          "user_id": {
            "type": "string",
            "format": "uuid",
            "title": "User Id",
            "description": "The member's user id."
          }
        },
        "type": "object",
        "required": [
          "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"
      },
      "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"
      },
      "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",
          "member"
        ],
        "title": "Role"
      },
      "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": []
          }
        },
        "type": "object",
        "required": [
          "file_ids"
        ],
        "title": "ScoreFilesBody"
      },
      "ScoreFilesOutput": {
        "properties": {
          "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."
          }
        },
        "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"
      },
      "ScoringRunMode": {
        "type": "string",
        "enum": [
          "always",
          "on_demand"
        ],
        "title": "ScoringRunMode",
        "description": "When a rule runs."
      },
      "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)."
          }
        },
        "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"
      },
      "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."
          }
        },
        "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."
          }
        },
        "type": "object",
        "required": [
          "training_run_id",
          "state",
          "raw_status",
          "created_at",
          "poll_interval_seconds"
        ],
        "title": "StartTrainingResponse"
      },
      "StyleCategory": {
        "type": "string",
        "enum": [
          "general",
          "character",
          "object",
          "scene",
          "effect",
          "animation"
        ],
        "title": "StyleCategory"
      },
      "ToolGuidanceFileTypeSupport": {
        "properties": {
          "type": {
            "type": "string",
            "title": "Type",
            "description": "Guidance file type, such as editing_reference, first_frame, pose, or depth."
          },
          "max_count": {
            "type": "integer",
            "title": "Max Count",
            "description": "Maximum number of files of this type accepted by the model."
          }
        },
        "type": "object",
        "required": [
          "type",
          "max_count"
        ],
        "title": "ToolGuidanceFileTypeSupport"
      },
      "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"
      },
      "UpdateGroupBody": {
        "properties": {
          "role": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Role"
              },
              {
                "type": "null"
              }
            ],
            "description": "New role to grant members, or null to clear the group's 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"
          },
          "archived": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Archived",
            "description": "Set true to archive, false to unarchive. Omit to leave unchanged."
          }
        },
        "type": "object",
        "title": "UpdateProjectBody"
      },
      "UsageLimitPeriod": {
        "type": "string",
        "enum": [
          "daily",
          "weekly",
          "monthly"
        ],
        "title": "UsageLimitPeriod"
      },
      "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"
      },
      "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."
          }
        },
        "type": "object",
        "required": [
          "object_id",
          "object_type",
          "url",
          "content_type"
        ],
        "title": "WorkflowRunAsset"
      },
      "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."
      }
    }
  },
  "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": "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": "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."
    }
  ],
  "security": [
    {
      "bearerAuth": []
    }
  ],
  "externalDocs": {
    "description": "Layer API reference and guides",
    "url": "https://www.layer.ai/docs/rest-api"
  }
}
