{"openapi": "3.1.0", "info": {"title": "PlushFactory Logic Backend", "version": "0.3.1", "description": "Developer authoring API. Immutable model revisions, bounded decision graphs, Graphify bindings and reviewed Unreal authoring exports. No live gameplay authority."}, "servers": [{"url": "/"}], "paths": {"/health": {"get": {"summary": "Service health", "operationId": "get_health", "parameters": [], "security": [], "responses": {"200": {"description": "Successful response", "content": {"application/json": {"schema": {"type": "object"}}}}, "401": {"description": "Missing or invalid key", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Scope denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Revision conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Validation failure", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Graphify unavailable", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/v1/me": {"get": {"summary": "Current tool identity and access scopes", "operationId": "get_v1_me", "parameters": [], "security": [{"BearerKey": []}], "responses": {"200": {"description": "Successful response", "content": {"application/json": {"schema": {"type": "object"}}}}, "401": {"description": "Missing or invalid key", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Scope denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Revision conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Validation failure", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Graphify unavailable", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/mcp": {"post": {"summary": "Stateless MCP JSON-RPC endpoint for developer agents", "operationId": "post_mcp", "parameters": [], "security": [{"BearerKey": []}], "responses": {"200": {"description": "Successful response", "content": {"application/json": {"schema": {"type": "object"}}}}, "401": {"description": "Missing or invalid key", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Scope denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Revision conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Validation failure", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Graphify unavailable", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/MCPRequest"}}}}}}, "/v1/tuning/profiles": {"get": {"summary": "List game-master tuning drafts", "operationId": "get_v1_tuning_profiles", "parameters": [], "security": [{"BearerKey": []}], "responses": {"200": {"description": "Successful response", "content": {"application/json": {"schema": {"type": "object"}}}}, "401": {"description": "Missing or invalid key", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Scope denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Revision conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Validation failure", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Graphify unavailable", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}, "post": {"summary": "Create typed parameter definitions (developer write)", "operationId": "post_v1_tuning_profiles", "parameters": [], "security": [{"BearerKey": []}], "responses": {"200": {"description": "Successful response", "content": {"application/json": {"schema": {"type": "object"}}}}, "401": {"description": "Missing or invalid key", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Scope denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Revision conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Validation failure", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Graphify unavailable", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/TuningProfile"}}}}}}, "/v1/tuning/profiles/{profile_id}": {"get": {"summary": "Read tuning draft", "operationId": "get_v1_tuning_profiles_profile_id", "parameters": [{"in": "path", "name": "profile_id", "required": true, "schema": {"type": "string"}}], "security": [{"BearerKey": []}], "responses": {"200": {"description": "Successful response", "content": {"application/json": {"schema": {"type": "object"}}}}, "401": {"description": "Missing or invalid key", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Scope denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Revision conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Validation failure", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Graphify unavailable", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}, "put": {"summary": "Save tuning values with revision precondition", "operationId": "put_v1_tuning_profiles_profile_id", "parameters": [{"in": "path", "name": "profile_id", "required": true, "schema": {"type": "string"}}], "security": [{"BearerKey": []}], "responses": {"200": {"description": "Successful response", "content": {"application/json": {"schema": {"type": "object"}}}}, "401": {"description": "Missing or invalid key", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Scope denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Revision conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Validation failure", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Graphify unavailable", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/TuningUpdate"}}}}}}, "/v1/tuning/profiles/{profile_id}/history": {"get": {"summary": "Read tuning draft revision history", "operationId": "get_v1_tuning_profiles_profile_id_history", "parameters": [{"in": "path", "name": "profile_id", "required": true, "schema": {"type": "string"}}], "security": [{"BearerKey": []}], "responses": {"200": {"description": "Successful response", "content": {"application/json": {"schema": {"type": "object"}}}}, "401": {"description": "Missing or invalid key", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Scope denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Revision conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Validation failure", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Graphify unavailable", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/v1/tuning/profiles/{profile_id}/release": {"post": {"summary": "Freeze a tuning release (publish)", "operationId": "post_v1_tuning_profiles_profile_id_release", "parameters": [{"in": "path", "name": "profile_id", "required": true, "schema": {"type": "string"}}], "security": [{"BearerKey": []}], "responses": {"200": {"description": "Successful response", "content": {"application/json": {"schema": {"type": "object"}}}}, "401": {"description": "Missing or invalid key", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Scope denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Revision conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Validation failure", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Graphify unavailable", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/TuningRelease"}}}}}}, "/v1/tuning/releases": {"get": {"summary": "List immutable tuning releases", "operationId": "get_v1_tuning_releases", "parameters": [{"in": "query", "name": "profile_id", "schema": {"type": "string"}}], "security": [{"BearerKey": []}], "responses": {"200": {"description": "Successful response", "content": {"application/json": {"schema": {"type": "object"}}}}, "401": {"description": "Missing or invalid key", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Scope denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Revision conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Validation failure", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Graphify unavailable", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/v1/tuning/releases/{release_id}": {"get": {"summary": "Fetch exact build configuration by SHA-256", "operationId": "get_v1_tuning_releases_release_id", "parameters": [{"in": "path", "name": "release_id", "required": true, "schema": {"type": "string"}}], "security": [{"BearerKey": []}], "responses": {"200": {"description": "Successful response", "content": {"application/json": {"schema": {"type": "object"}}}}, "401": {"description": "Missing or invalid key", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Scope denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Revision conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Validation failure", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Graphify unavailable", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/v1/tuning/channels/{channel}": {"get": {"summary": "Resolve current channel to an immutable tuning release", "operationId": "get_v1_tuning_channels_channel", "parameters": [{"in": "path", "name": "channel", "required": true, "schema": {"type": "string"}}], "security": [{"BearerKey": []}], "responses": {"200": {"description": "Successful response", "content": {"application/json": {"schema": {"type": "object"}}}}, "401": {"description": "Missing or invalid key", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Scope denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Revision conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Validation failure", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Graphify unavailable", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}, "put": {"summary": "Promote or roll back a channel (publish)", "operationId": "put_v1_tuning_channels_channel", "parameters": [{"in": "path", "name": "channel", "required": true, "schema": {"type": "string"}}], "security": [{"BearerKey": []}], "responses": {"200": {"description": "Successful response", "content": {"application/json": {"schema": {"type": "object"}}}}, "401": {"description": "Missing or invalid key", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Scope denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Revision conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Validation failure", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Graphify unavailable", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/TuningChannel"}}}}}}, "/v1/capabilities": {"get": {"summary": "Supported operations and limits", "operationId": "get_v1_capabilities", "parameters": [], "security": [{"BearerKey": []}], "responses": {"200": {"description": "Successful response", "content": {"application/json": {"schema": {"type": "object"}}}}, "401": {"description": "Missing or invalid key", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Scope denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Revision conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Validation failure", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Graphify unavailable", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/v1/project": {"get": {"summary": "Export portable project snapshot without credentials", "operationId": "get_v1_project", "parameters": [], "security": [{"BearerKey": []}], "responses": {"200": {"description": "Successful response", "content": {"application/json": {"schema": {"type": "object"}}}}, "401": {"description": "Missing or invalid key", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Scope denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Revision conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Validation failure", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Graphify unavailable", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/v1/features/batch": {"post": {"summary": "Atomically import or update a feature graph", "operationId": "post_v1_features_batch", "parameters": [], "security": [{"BearerKey": []}], "responses": {"200": {"description": "Successful response", "content": {"application/json": {"schema": {"type": "object"}}}}, "401": {"description": "Missing or invalid key", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Scope denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Revision conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Validation failure", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Graphify unavailable", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Batch"}}}}}}, "/v1/features": {"get": {"summary": "List feature revisions (optional category filter)", "operationId": "get_v1_features", "parameters": [{"in": "query", "name": "category", "schema": {"type": "string"}}], "security": [{"BearerKey": []}], "responses": {"200": {"description": "Successful response", "content": {"application/json": {"schema": {"type": "object"}}}}, "401": {"description": "Missing or invalid key", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Scope denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Revision conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Validation failure", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Graphify unavailable", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}, "post": {"summary": "Create a feature", "operationId": "post_v1_features", "parameters": [], "security": [{"BearerKey": []}], "responses": {"201": {"description": "Successful response", "content": {"application/json": {"schema": {"type": "object"}}}}, "401": {"description": "Missing or invalid key", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Scope denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Revision conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Validation failure", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Graphify unavailable", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Feature"}}}}}}, "/v1/features/{feature_id}": {"get": {"summary": "Read current or historical revision", "operationId": "get_v1_features_feature_id", "parameters": [{"in": "path", "name": "feature_id", "required": true, "schema": {"type": "string"}}, {"in": "query", "name": "revision", "schema": {"type": "integer", "minimum": 1}}], "security": [{"BearerKey": []}], "responses": {"200": {"description": "Successful response", "content": {"application/json": {"schema": {"type": "object"}}}}, "401": {"description": "Missing or invalid key", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Scope denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Revision conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Validation failure", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Graphify unavailable", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}, "put": {"summary": "Replace feature with optimistic concurrency", "operationId": "put_v1_features_feature_id", "parameters": [{"in": "path", "name": "feature_id", "required": true, "schema": {"type": "string"}}], "security": [{"BearerKey": []}], "responses": {"200": {"description": "Successful response", "content": {"application/json": {"schema": {"type": "object"}}}}, "401": {"description": "Missing or invalid key", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Scope denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Revision conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Validation failure", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Graphify unavailable", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Update"}}}}}}, "/v1/features/{feature_id}/revisions": {"get": {"summary": "Read immutable revision history", "operationId": "get_v1_features_feature_id_revisions", "parameters": [{"in": "path", "name": "feature_id", "required": true, "schema": {"type": "string"}}], "security": [{"BearerKey": []}], "responses": {"200": {"description": "Successful response", "content": {"application/json": {"schema": {"type": "object"}}}}, "401": {"description": "Missing or invalid key", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Scope denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Revision conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Validation failure", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Graphify unavailable", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/v1/features/{feature_id}/simulate": {"post": {"summary": "Evaluate a decision graph without side effects", "operationId": "post_v1_features_feature_id_simulate", "parameters": [{"in": "path", "name": "feature_id", "required": true, "schema": {"type": "string"}}], "security": [{"BearerKey": []}], "responses": {"200": {"description": "Successful response", "content": {"application/json": {"schema": {"type": "object"}}}}, "401": {"description": "Missing or invalid key", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Scope denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Revision conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Validation failure", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Graphify unavailable", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Simulation"}}}}}}, "/v1/features/{feature_id}/verify": {"post": {"summary": "Run saved verification cases", "operationId": "post_v1_features_feature_id_verify", "parameters": [{"in": "path", "name": "feature_id", "required": true, "schema": {"type": "string"}}], "security": [{"BearerKey": []}], "responses": {"200": {"description": "Successful response", "content": {"application/json": {"schema": {"type": "object"}}}}, "401": {"description": "Missing or invalid key", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Scope denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Revision conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Validation failure", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Graphify unavailable", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Revision"}}}}}}, "/v1/features/{feature_id}/python": {"get": {"summary": "Export Python runner and its runtime dependency", "operationId": "get_v1_features_feature_id_python", "parameters": [{"in": "path", "name": "feature_id", "required": true, "schema": {"type": "string"}}], "security": [{"BearerKey": []}], "responses": {"200": {"description": "Successful response", "content": {"application/json": {"schema": {"type": "object"}}}}, "401": {"description": "Missing or invalid key", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Scope denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Revision conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Validation failure", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Graphify unavailable", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/v1/imports": {"get": {"summary": "Read source draft provenance and counts", "operationId": "get_v1_imports", "parameters": [], "security": [{"BearerKey": []}], "responses": {"200": {"description": "Successful response", "content": {"application/json": {"schema": {"type": "object"}}}}, "401": {"description": "Missing or invalid key", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Scope denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Revision conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Validation failure", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Graphify unavailable", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/v1/imports/drafts": {"post": {"summary": "Import absent draft nodes; preserve developer edits", "operationId": "post_v1_imports_drafts", "parameters": [], "security": [{"BearerKey": []}], "responses": {"200": {"description": "Successful response", "content": {"application/json": {"schema": {"type": "object"}}}}, "401": {"description": "Missing or invalid key", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Scope denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Revision conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Validation failure", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Graphify unavailable", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Empty"}}}}}}, "/v1/tools": {"get": {"summary": "List tool identities (admin)", "operationId": "get_v1_tools", "parameters": [], "security": [{"BearerKey": []}], "responses": {"200": {"description": "Successful response", "content": {"application/json": {"schema": {"type": "object"}}}}, "401": {"description": "Missing or invalid key", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Scope denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Revision conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Validation failure", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Graphify unavailable", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}, "post": {"summary": "Create a scoped tool key, returned once (admin)", "operationId": "post_v1_tools", "parameters": [], "security": [{"BearerKey": []}], "responses": {"201": {"description": "Successful response", "content": {"application/json": {"schema": {"type": "object"}}}}, "401": {"description": "Missing or invalid key", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Scope denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Revision conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Validation failure", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Graphify unavailable", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Tool"}}}}}}, "/v1/tools/{tool_id}/revoke": {"post": {"summary": "Revoke a tool key (admin)", "operationId": "post_v1_tools_tool_id_revoke", "parameters": [{"in": "path", "name": "tool_id", "required": true, "schema": {"type": "string"}}], "security": [{"BearerKey": []}], "responses": {"200": {"description": "Successful response", "content": {"application/json": {"schema": {"type": "object"}}}}, "401": {"description": "Missing or invalid key", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Scope denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Revision conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Validation failure", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Graphify unavailable", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Empty"}}}}}}, "/v1/events": {"get": {"summary": "Poll durable audit events with sequence cursor", "operationId": "get_v1_events", "parameters": [{"in": "query", "name": "after", "schema": {"type": "integer", "minimum": 0, "default": 0}}, {"in": "query", "name": "limit", "schema": {"type": "integer", "minimum": 1, "maximum": 500, "default": 100}}, {"in": "query", "name": "latest", "schema": {"type": "boolean", "default": false}}], "security": [{"BearerKey": []}], "responses": {"200": {"description": "Successful response", "content": {"application/json": {"schema": {"type": "object"}}}}, "401": {"description": "Missing or invalid key", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Scope denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Revision conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Validation failure", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Graphify unavailable", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/v1/graph/status": {"get": {"summary": "Inspect Graphify source snapshot", "operationId": "get_v1_graph_status", "parameters": [], "security": [{"BearerKey": []}], "responses": {"200": {"description": "Successful response", "content": {"application/json": {"schema": {"type": "object"}}}}, "401": {"description": "Missing or invalid key", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Scope denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Revision conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Validation failure", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Graphify unavailable", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/v1/graph/symbols": {"get": {"summary": "Find source symbols for feature bindings", "operationId": "get_v1_graph_symbols", "parameters": [{"in": "query", "name": "q", "schema": {"type": "string"}}, {"in": "query", "name": "limit", "schema": {"type": "integer", "minimum": 1, "maximum": 100}}], "security": [{"BearerKey": []}], "responses": {"200": {"description": "Successful response", "content": {"application/json": {"schema": {"type": "object"}}}}, "401": {"description": "Missing or invalid key", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Scope denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Revision conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Validation failure", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Graphify unavailable", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/v1/graph/features": {"get": {"summary": "Export prerequisite and feature-to-code graph", "operationId": "get_v1_graph_features", "parameters": [], "security": [{"BearerKey": []}], "responses": {"200": {"description": "Successful response", "content": {"application/json": {"schema": {"type": "object"}}}}, "401": {"description": "Missing or invalid key", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Scope denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Revision conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Validation failure", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Graphify unavailable", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/v1/graph/query": {"post": {"summary": "Run a bounded Graphify context query", "operationId": "post_v1_graph_query", "parameters": [], "security": [{"BearerKey": []}], "responses": {"200": {"description": "Successful response", "content": {"application/json": {"schema": {"type": "object"}}}}, "401": {"description": "Missing or invalid key", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Scope denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Revision conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Validation failure", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Graphify unavailable", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/GraphQuery"}}}}}}, "/v1/graph/refresh": {"post": {"summary": "Refresh the project AST graph (admin)", "operationId": "post_v1_graph_refresh", "parameters": [], "security": [{"BearerKey": []}], "responses": {"200": {"description": "Successful response", "content": {"application/json": {"schema": {"type": "object"}}}}, "401": {"description": "Missing or invalid key", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Scope denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Revision conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Validation failure", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Graphify unavailable", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Empty"}}}}}}, "/v1/publications": {"post": {"summary": "Freeze verified logic for Unreal authoring", "operationId": "post_v1_publications", "parameters": [], "security": [{"BearerKey": []}], "responses": {"201": {"description": "Successful response", "content": {"application/json": {"schema": {"type": "object"}}}}, "401": {"description": "Missing or invalid key", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Scope denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Revision conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Validation failure", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Graphify unavailable", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Publication"}}}}}}, "/v1/publications/{publication_id}": {"get": {"summary": "Read immutable artifact by hash or latest", "operationId": "get_v1_publications_publication_id", "parameters": [{"in": "path", "name": "publication_id", "required": true, "schema": {"type": "string"}}], "security": [{"BearerKey": []}], "responses": {"200": {"description": "Successful response", "content": {"application/json": {"schema": {"type": "object"}}}}, "401": {"description": "Missing or invalid key", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Scope denied", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Revision conflict", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Validation failure", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Graphify unavailable", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}}, "components": {"securitySchemes": {"BearerKey": {"type": "http", "scheme": "bearer"}}, "schemas": {"Empty": {"type": "object", "properties": {}, "required": [], "additionalProperties": false}, "MCPRequest": {"type": "object", "properties": {"jsonrpc": {"const": "2.0"}, "id": {"anyOf": [{"type": "string"}, {"type": "number"}]}, "method": {"type": "string"}, "params": {"type": "object"}}, "required": ["jsonrpc", "method"], "additionalProperties": false}, "Input": {"type": "object", "properties": {"type": {"enum": ["number", "integer", "boolean", "string"]}, "required": {"type": "boolean", "default": true}, "default": {}, "min": {"type": "number"}, "max": {"type": "number"}}, "required": ["type"], "additionalProperties": false}, "Logic": {"type": "object", "properties": {"version": {"const": 1}, "entry": {"type": "string"}, "inputs": {"type": "object", "maxProperties": 64, "additionalProperties": {"$ref": "#/components/schemas/Input"}}, "nodes": {"type": "array", "minItems": 1, "maxItems": 256, "items": {"oneOf": [{"type": "object", "properties": {"id": {"type": "string"}, "kind": {"const": "compute"}, "assign": {"type": "array", "maxItems": 128, "items": {"type": "object", "properties": {"name": {"type": "string"}, "expression": {"type": "string", "maxLength": 1024, "description": "Restricted expression: arithmetic, comparisons, boolean operators, min/max/abs/round/clamp. No attributes, subscripts or arbitrary calls."}}, "required": ["name", "expression"], "additionalProperties": false}}, "next": {"type": "string"}}, "required": ["id", "kind", "assign", "next"], "additionalProperties": false}, {"type": "object", "properties": {"id": {"type": "string"}, "kind": {"const": "branch"}, "condition": {"type": "string", "maxLength": 1024, "description": "Restricted expression: arithmetic, comparisons, boolean operators, min/max/abs/round/clamp. No attributes, subscripts or arbitrary calls."}, "on_true": {"type": "string"}, "on_false": {"type": "string"}}, "required": ["id", "kind", "condition", "on_true", "on_false"], "additionalProperties": false}, {"type": "object", "properties": {"id": {"type": "string"}, "kind": {"const": "result"}, "outputs": {"type": "object", "maxProperties": 128, "additionalProperties": {"type": "string", "maxLength": 1024, "description": "Restricted expression: arithmetic, comparisons, boolean operators, min/max/abs/round/clamp. No attributes, subscripts or arbitrary calls."}}}, "required": ["id", "kind", "outputs"], "additionalProperties": false}]}}}, "required": ["version", "entry", "inputs", "nodes"], "additionalProperties": false}, "Case": {"type": "object", "properties": {"name": {"type": "string"}, "inputs": {"type": "object"}, "expected": {"type": "object", "minProperties": 1}}, "required": ["name", "inputs", "expected"], "additionalProperties": false}, "Binding": {"type": "object", "properties": {"node_id": {"type": "string"}, "source_file": {"type": "string"}, "symbol": {"type": "string"}}, "required": ["source_file", "symbol"], "additionalProperties": false}, "Feature": {"type": "object", "properties": {"id": {"type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,119}$"}, "name": {"type": "string", "maxLength": 240}, "description": {"type": "string", "maxLength": 20000}, "category": {"type": "string"}, "status": {"enum": ["draft", "ready", "implemented", "archived"], "default": "draft"}, "requires": {"type": "array", "items": {"type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,119}$"}, "uniqueItems": true}, "tags": {"type": "array", "items": {"type": "string"}}, "logic": {"anyOf": [{"$ref": "#/components/schemas/Logic"}, {"type": "null"}]}, "tests": {"type": "array", "items": {"$ref": "#/components/schemas/Case"}}, "code_bindings": {"type": "array", "items": {"$ref": "#/components/schemas/Binding"}}, "metadata": {"type": "object"}}, "required": ["id", "name"], "additionalProperties": false}, "Update": {"type": "object", "properties": {"expected_revision": {"type": "integer", "minimum": 1}, "feature": {"$ref": "#/components/schemas/Feature"}}, "required": ["expected_revision", "feature"], "additionalProperties": false}, "Batch": {"type": "object", "properties": {"changes": {"type": "array", "minItems": 1, "maxItems": 256, "items": {"type": "object", "properties": {"expected_revision": {"type": "integer", "minimum": 0}, "feature": {"$ref": "#/components/schemas/Feature"}}, "required": ["expected_revision", "feature"], "additionalProperties": false}}}, "required": ["changes"], "additionalProperties": false}, "Simulation": {"type": "object", "properties": {"inputs": {"type": "object"}, "revision": {"type": "integer", "minimum": 1}}, "required": ["inputs"], "additionalProperties": false}, "Revision": {"type": "object", "properties": {"revision": {"type": "integer", "minimum": 1}}, "required": [], "additionalProperties": false}, "Tool": {"type": "object", "properties": {"id": {"type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,119}$"}, "name": {"type": "string"}, "scopes": {"type": "array", "minItems": 1, "items": {"enum": ["read", "write", "simulate", "tune", "publish", "admin"]}}}, "required": ["id", "name", "scopes"], "additionalProperties": false}, "GraphQuery": {"type": "object", "properties": {"question": {"type": "string", "minLength": 1, "maxLength": 1000}}, "required": ["question"], "additionalProperties": false}, "Publication": {"type": "object", "properties": {"feature_ids": {"type": "array", "minItems": 1, "maxItems": 256, "uniqueItems": true, "items": {"type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,119}$"}}, "expected_revisions": {"type": "object", "additionalProperties": {"type": "integer", "minimum": 1}}}, "required": ["feature_ids", "expected_revisions"], "additionalProperties": false}, "TuningParameter": {"type": "object", "properties": {"key": {"type": "string"}, "label": {"type": "string"}, "type": {"enum": ["number", "integer", "boolean", "string"]}, "default": {}, "min": {"type": "number"}, "max": {"type": "number"}, "step": {"type": "number", "exclusiveMinimum": 0}, "unit": {"type": "string"}, "description": {"type": "string"}, "feature_id": {"type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,119}$"}}, "required": ["key", "label", "type", "default"], "additionalProperties": false}, "TuningProfile": {"type": "object", "properties": {"id": {"type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,119}$"}, "name": {"type": "string"}, "description": {"type": "string"}, "feature_ids": {"type": "array", "items": {"type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,119}$"}}, "parameters": {"type": "array", "minItems": 1, "maxItems": 64, "items": {"$ref": "#/components/schemas/TuningParameter"}}, "values": {"type": "object"}}, "required": ["id", "name", "parameters", "values"], "additionalProperties": false}, "TuningUpdate": {"type": "object", "properties": {"expected_revision": {"type": "integer", "minimum": 1}, "profile": {"$ref": "#/components/schemas/TuningProfile"}}, "required": ["expected_revision", "profile"], "additionalProperties": false}, "TuningRelease": {"type": "object", "properties": {"expected_revision": {"type": "integer", "minimum": 1}, "notes": {"type": "string"}}, "required": ["expected_revision"], "additionalProperties": false}, "TuningChannel": {"type": "object", "properties": {"expected_revision": {"type": "integer", "minimum": 0}, "release_id": {"type": "string", "pattern": "^[a-f0-9]{64}$"}}, "required": ["expected_revision", "release_id"], "additionalProperties": false}, "Error": {"type": "object", "properties": {"error": {"type": "object", "properties": {"message": {"type": "string"}, "request_id": {"type": "string"}}, "required": ["message"], "additionalProperties": false}}, "required": ["error"], "additionalProperties": false}}}}