{"openapi":"3.1.0","info":{"title":"Nosana API","version":"1.0.0","description":"Every endpoint reachable through the Nosana gateway. Paths are the public ones — call them exactly as written against the server below. Assembled from the deployment-manager, client-manager, host-manager, blockchain-indexer and Nosa specs; see the x-service field on each operation for which one serves it. A path with its own servers entry is served from that origin instead of the gateway."},"servers":[{"url":"https://api.nosana.com"}],"tags":[{"name":"Blockchain Indexer / Jobs"},{"name":"Blockchain Indexer / Stats"},{"name":"Blockchain Indexer / mcp"},{"name":"Client Manager / API Keys"},{"name":"Client Manager / Auth"},{"name":"Client Manager / Credits"},{"name":"Client Manager / General"},{"name":"Client Manager / Templates"},{"name":"Client Manager / mcp"},{"name":"Deployment Manager / Deployments"},{"name":"Deployment Manager / Deployments Jobs"},{"name":"Deployment Manager / Deployments Vaults"},{"name":"Deployment Manager / mcp"},{"name":"Host Manager / Benchmarks"},{"name":"Host Manager / Errors"},{"name":"Host Manager / Heartbeats"},{"name":"Host Manager / Markets"},{"name":"Host Manager / Nodes"},{"name":"Host Manager / Stats"},{"name":"Host Manager / Templates"},{"name":"Host Manager / mcp"},{"name":"Nosa / mcp"}],"paths":{"/api-keys/":{"post":{"parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"llmModels":{"nullable":true,"anyOf":[{"maxItems":100,"uniqueItems":true,"description":"Which LLM models this key may call, checked when inference is reserved. null means no restriction; an empty array denies inference entirely. What the key may do is set by `scopes` — this only narrows the model choice.","type":"array","items":{"minLength":1,"maxLength":128,"type":"string"}},{"type":"null"}]},"key":{"description":"The full API key.","type":"string"},"id":{"type":"string"},"name":{"type":"string"},"status":{"type":"string"},"scopes":{"description":"What this key is allowed to do.","type":"array","items":{"type":"string"}},"expiresAt":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string"}},"required":["llmModels","key","id","name","status","scopes","expiresAt","createdAt"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"llmModels":{"nullable":true,"anyOf":[{"maxItems":100,"uniqueItems":true,"description":"Which LLM models this key may call, checked when inference is reserved. null means no restriction; an empty array denies inference entirely. What the key may do is set by `scopes` — this only narrows the model choice.","type":"array","items":{"minLength":1,"maxLength":128,"type":"string"}},{"type":"null"}]},"key":{"description":"The full API key.","type":"string"},"id":{"type":"string"},"name":{"type":"string"},"status":{"type":"string"},"scopes":{"description":"What this key is allowed to do.","type":"array","items":{"type":"string"}},"expiresAt":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string"}},"required":["llmModels","key","id","name","status","scopes","expiresAt","createdAt"]}},"text/plain":{"schema":{"type":"object","properties":{"llmModels":{"nullable":true,"anyOf":[{"maxItems":100,"uniqueItems":true,"description":"Which LLM models this key may call, checked when inference is reserved. null means no restriction; an empty array denies inference entirely. What the key may do is set by `scopes` — this only narrows the model choice.","type":"array","items":{"minLength":1,"maxLength":128,"type":"string"}},{"type":"null"}]},"key":{"description":"The full API key.","type":"string"},"id":{"type":"string"},"name":{"type":"string"},"status":{"type":"string"},"scopes":{"description":"What this key is allowed to do.","type":"array","items":{"type":"string"}},"expiresAt":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string"}},"required":["llmModels","key","id","name","status","scopes","expiresAt","createdAt"]}}}}},"operationId":"postApi-keys","summary":"Create API Key","description":"Create a new API key for the authenticated user","tags":["Client Manager / API Keys"],"security":[{"bearerAuth":[]},{"nosanaOAuth":["api-keys:manage"]}],"x-required-scopes":["api-keys:manage"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name"],"properties":{"llmModels":{"nullable":true,"anyOf":[{"maxItems":100,"uniqueItems":true,"description":"Which LLM models this key may call, checked when inference is reserved. null means no restriction; an empty array denies inference entirely. What the key may do is set by `scopes` — this only narrows the model choice.","type":"array","items":{"minLength":1,"maxLength":128,"type":"string"}},{"type":"null"}]},"name":{"minLength":1,"maxLength":100,"description":"A descriptive name for the API key.","type":"string"},"expiresIn":{"minimum":1,"maximum":31536000,"description":"Key expiration time in seconds. If not provided, key never expires.","type":"number"},"scopes":{"minItems":1,"description":"What the key may do. Must be a subset of the scopes the calling credential holds. Defaults to the caller's own scopes.","type":"array","items":{"type":"string"}}}}},"multipart/form-data":{"schema":{"type":"object","required":["name"],"properties":{"llmModels":{"nullable":true,"anyOf":[{"maxItems":100,"uniqueItems":true,"description":"Which LLM models this key may call, checked when inference is reserved. null means no restriction; an empty array denies inference entirely. What the key may do is set by `scopes` — this only narrows the model choice.","type":"array","items":{"minLength":1,"maxLength":128,"type":"string"}},{"type":"null"}]},"name":{"minLength":1,"maxLength":100,"description":"A descriptive name for the API key.","type":"string"},"expiresIn":{"minimum":1,"maximum":31536000,"description":"Key expiration time in seconds. If not provided, key never expires.","type":"number"},"scopes":{"minItems":1,"description":"What the key may do. Must be a subset of the scopes the calling credential holds. Defaults to the caller's own scopes.","type":"array","items":{"type":"string"}}}}},"text/plain":{"schema":{"type":"object","required":["name"],"properties":{"llmModels":{"nullable":true,"anyOf":[{"maxItems":100,"uniqueItems":true,"description":"Which LLM models this key may call, checked when inference is reserved. null means no restriction; an empty array denies inference entirely. What the key may do is set by `scopes` — this only narrows the model choice.","type":"array","items":{"minLength":1,"maxLength":128,"type":"string"}},{"type":"null"}]},"name":{"minLength":1,"maxLength":100,"description":"A descriptive name for the API key.","type":"string"},"expiresIn":{"minimum":1,"maximum":31536000,"description":"Key expiration time in seconds. If not provided, key never expires.","type":"number"},"scopes":{"minItems":1,"description":"What the key may do. Must be a subset of the scopes the calling credential holds. Defaults to the caller's own scopes.","type":"array","items":{"type":"string"}}}}}}},"x-service":"client-manager"},"get":{"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"keys":{"type":"array","items":{"type":"object","required":["llmModels","id","name","key","status","scopes","lastUsedAt","expiresAt","createdAt","updatedAt"],"properties":{"llmModels":{"nullable":true,"anyOf":[{"maxItems":100,"uniqueItems":true,"description":"Which LLM models this key may call, checked when inference is reserved. null means no restriction; an empty array denies inference entirely. What the key may do is set by `scopes` — this only narrows the model choice.","type":"array","items":{"minLength":1,"maxLength":128,"type":"string"}},{"type":"null"}]},"id":{"type":"string"},"name":{"type":"string"},"key":{"description":"Full API key","type":"string"},"status":{"type":"string"},"scopes":{"description":"What this key is allowed to do.","type":"array","items":{"type":"string"}},"lastUsedAt":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"expiresAt":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}}}},"total":{"type":"number"}},"required":["keys","total"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"keys":{"type":"array","items":{"type":"object","required":["llmModels","id","name","key","status","scopes","lastUsedAt","expiresAt","createdAt","updatedAt"],"properties":{"llmModels":{"nullable":true,"anyOf":[{"maxItems":100,"uniqueItems":true,"description":"Which LLM models this key may call, checked when inference is reserved. null means no restriction; an empty array denies inference entirely. What the key may do is set by `scopes` — this only narrows the model choice.","type":"array","items":{"minLength":1,"maxLength":128,"type":"string"}},{"type":"null"}]},"id":{"type":"string"},"name":{"type":"string"},"key":{"description":"Full API key","type":"string"},"status":{"type":"string"},"scopes":{"description":"What this key is allowed to do.","type":"array","items":{"type":"string"}},"lastUsedAt":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"expiresAt":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}}}},"total":{"type":"number"}},"required":["keys","total"]}},"text/plain":{"schema":{"type":"object","properties":{"keys":{"type":"array","items":{"type":"object","required":["llmModels","id","name","key","status","scopes","lastUsedAt","expiresAt","createdAt","updatedAt"],"properties":{"llmModels":{"nullable":true,"anyOf":[{"maxItems":100,"uniqueItems":true,"description":"Which LLM models this key may call, checked when inference is reserved. null means no restriction; an empty array denies inference entirely. What the key may do is set by `scopes` — this only narrows the model choice.","type":"array","items":{"minLength":1,"maxLength":128,"type":"string"}},{"type":"null"}]},"id":{"type":"string"},"name":{"type":"string"},"key":{"description":"Full API key","type":"string"},"status":{"type":"string"},"scopes":{"description":"What this key is allowed to do.","type":"array","items":{"type":"string"}},"lastUsedAt":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"expiresAt":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}}}},"total":{"type":"number"}},"required":["keys","total"]}}}}},"operationId":"getApi-keys","summary":"Get API Keys","description":"Get all API keys for the authenticated user","tags":["Client Manager / API Keys"],"security":[{"bearerAuth":[]},{"nosanaOAuth":["api-keys:manage"]}],"x-required-scopes":["api-keys:manage"],"x-service":"client-manager"}},"/api-keys/{id}":{"get":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"llmModels":{"nullable":true,"anyOf":[{"maxItems":100,"uniqueItems":true,"description":"Which LLM models this key may call, checked when inference is reserved. null means no restriction; an empty array denies inference entirely. What the key may do is set by `scopes` — this only narrows the model choice.","type":"array","items":{"minLength":1,"maxLength":128,"type":"string"}},{"type":"null"}]},"id":{"type":"string"},"name":{"type":"string"},"key":{"description":"Full API key","type":"string"},"status":{"type":"string"},"scopes":{"description":"What this key is allowed to do.","type":"array","items":{"type":"string"}},"lastUsedAt":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"expiresAt":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["llmModels","id","name","key","status","scopes","lastUsedAt","expiresAt","createdAt","updatedAt"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"llmModels":{"nullable":true,"anyOf":[{"maxItems":100,"uniqueItems":true,"description":"Which LLM models this key may call, checked when inference is reserved. null means no restriction; an empty array denies inference entirely. What the key may do is set by `scopes` — this only narrows the model choice.","type":"array","items":{"minLength":1,"maxLength":128,"type":"string"}},{"type":"null"}]},"id":{"type":"string"},"name":{"type":"string"},"key":{"description":"Full API key","type":"string"},"status":{"type":"string"},"scopes":{"description":"What this key is allowed to do.","type":"array","items":{"type":"string"}},"lastUsedAt":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"expiresAt":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["llmModels","id","name","key","status","scopes","lastUsedAt","expiresAt","createdAt","updatedAt"]}},"text/plain":{"schema":{"type":"object","properties":{"llmModels":{"nullable":true,"anyOf":[{"maxItems":100,"uniqueItems":true,"description":"Which LLM models this key may call, checked when inference is reserved. null means no restriction; an empty array denies inference entirely. What the key may do is set by `scopes` — this only narrows the model choice.","type":"array","items":{"minLength":1,"maxLength":128,"type":"string"}},{"type":"null"}]},"id":{"type":"string"},"name":{"type":"string"},"key":{"description":"Full API key","type":"string"},"status":{"type":"string"},"scopes":{"description":"What this key is allowed to do.","type":"array","items":{"type":"string"}},"lastUsedAt":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"expiresAt":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["llmModels","id","name","key","status","scopes","lastUsedAt","expiresAt","createdAt","updatedAt"]}}}}},"operationId":"getApi-keysById","summary":"Get API Key","description":"Get a specific API key by ID","tags":["Client Manager / API Keys"],"security":[{"bearerAuth":[]},{"nosanaOAuth":["api-keys:manage"]}],"x-required-scopes":["api-keys:manage"],"x-service":"client-manager"}},"/api-keys/{id}/delete":{"post":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"]}},"text/plain":{"schema":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"]}}}}},"operationId":"postApi-keysByIdDelete","summary":"Delete API Key","description":"Delete an API key","tags":["Client Manager / API Keys"],"security":[{"bearerAuth":[]},{"nosanaOAuth":["api-keys:manage"]}],"x-required-scopes":["api-keys:manage"],"x-service":"client-manager"}},"/api-keys/{id}/update":{"post":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"llmModels":{"nullable":true,"anyOf":[{"maxItems":100,"uniqueItems":true,"description":"Which LLM models this key may call, checked when inference is reserved. null means no restriction; an empty array denies inference entirely. What the key may do is set by `scopes` — this only narrows the model choice.","type":"array","items":{"minLength":1,"maxLength":128,"type":"string"}},{"type":"null"}]},"id":{"type":"string"},"name":{"type":"string"},"key":{"description":"Full API key","type":"string"},"status":{"type":"string"},"scopes":{"description":"What this key is allowed to do.","type":"array","items":{"type":"string"}},"lastUsedAt":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"expiresAt":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["llmModels","id","name","key","status","scopes","lastUsedAt","expiresAt","createdAt","updatedAt"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"llmModels":{"nullable":true,"anyOf":[{"maxItems":100,"uniqueItems":true,"description":"Which LLM models this key may call, checked when inference is reserved. null means no restriction; an empty array denies inference entirely. What the key may do is set by `scopes` — this only narrows the model choice.","type":"array","items":{"minLength":1,"maxLength":128,"type":"string"}},{"type":"null"}]},"id":{"type":"string"},"name":{"type":"string"},"key":{"description":"Full API key","type":"string"},"status":{"type":"string"},"scopes":{"description":"What this key is allowed to do.","type":"array","items":{"type":"string"}},"lastUsedAt":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"expiresAt":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["llmModels","id","name","key","status","scopes","lastUsedAt","expiresAt","createdAt","updatedAt"]}},"text/plain":{"schema":{"type":"object","properties":{"llmModels":{"nullable":true,"anyOf":[{"maxItems":100,"uniqueItems":true,"description":"Which LLM models this key may call, checked when inference is reserved. null means no restriction; an empty array denies inference entirely. What the key may do is set by `scopes` — this only narrows the model choice.","type":"array","items":{"minLength":1,"maxLength":128,"type":"string"}},{"type":"null"}]},"id":{"type":"string"},"name":{"type":"string"},"key":{"description":"Full API key","type":"string"},"status":{"type":"string"},"scopes":{"description":"What this key is allowed to do.","type":"array","items":{"type":"string"}},"lastUsedAt":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"expiresAt":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["llmModels","id","name","key","status","scopes","lastUsedAt","expiresAt","createdAt","updatedAt"]}}}}},"operationId":"postApi-keysByIdUpdate","summary":"Update API Key","description":"Update an API key's name, status or model restriction.","tags":["Client Manager / API Keys"],"security":[{"bearerAuth":[]},{"nosanaOAuth":["api-keys:manage"]}],"x-required-scopes":["api-keys:manage"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"llmModels":{"nullable":true,"anyOf":[{"maxItems":100,"uniqueItems":true,"description":"Which LLM models this key may call, checked when inference is reserved. null means no restriction; an empty array denies inference entirely. What the key may do is set by `scopes` — this only narrows the model choice.","type":"array","items":{"minLength":1,"maxLength":128,"type":"string"}},{"type":"null"}]},"name":{"minLength":1,"maxLength":100,"description":"Update the key name.","type":"string"},"status":{"description":"Update the key status.","anyOf":[{"const":"active","type":"string"},{"const":"disabled","type":"string"}]}}}},"multipart/form-data":{"schema":{"type":"object","properties":{"llmModels":{"nullable":true,"anyOf":[{"maxItems":100,"uniqueItems":true,"description":"Which LLM models this key may call, checked when inference is reserved. null means no restriction; an empty array denies inference entirely. What the key may do is set by `scopes` — this only narrows the model choice.","type":"array","items":{"minLength":1,"maxLength":128,"type":"string"}},{"type":"null"}]},"name":{"minLength":1,"maxLength":100,"description":"Update the key name.","type":"string"},"status":{"description":"Update the key status.","anyOf":[{"const":"active","type":"string"},{"const":"disabled","type":"string"}]}}}},"text/plain":{"schema":{"type":"object","properties":{"llmModels":{"nullable":true,"anyOf":[{"maxItems":100,"uniqueItems":true,"description":"Which LLM models this key may call, checked when inference is reserved. null means no restriction; an empty array denies inference entirely. What the key may do is set by `scopes` — this only narrows the model choice.","type":"array","items":{"minLength":1,"maxLength":128,"type":"string"}},{"type":"null"}]},"name":{"minLength":1,"maxLength":100,"description":"Update the key name.","type":"string"},"status":{"description":"Update the key status.","anyOf":[{"const":"active","type":"string"},{"const":"disabled","type":"string"}]}}}}}},"x-service":"client-manager"}},"/auth/scopes":{"get":{"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"scopes":{"type":"array","items":{"type":"object","required":["scope","description","oauthGrantable"],"properties":{"scope":{"description":"The scope token, e.g. `credits:read`.","type":"string"},"description":{"description":"User-facing wording, as shown on the consent screen.","type":"string"},"oauthGrantable":{"description":"Whether an OAuth app may hold this scope. False for scopes whose routes accept an API key only, which no access token can satisfy.","type":"boolean"}}}}},"required":["scopes"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"scopes":{"type":"array","items":{"type":"object","required":["scope","description","oauthGrantable"],"properties":{"scope":{"description":"The scope token, e.g. `credits:read`.","type":"string"},"description":{"description":"User-facing wording, as shown on the consent screen.","type":"string"},"oauthGrantable":{"description":"Whether an OAuth app may hold this scope. False for scopes whose routes accept an API key only, which no access token can satisfy.","type":"boolean"}}}}},"required":["scopes"]}},"text/plain":{"schema":{"type":"object","properties":{"scopes":{"type":"array","items":{"type":"object","required":["scope","description","oauthGrantable"],"properties":{"scope":{"description":"The scope token, e.g. `credits:read`.","type":"string"},"description":{"description":"User-facing wording, as shown on the consent screen.","type":"string"},"oauthGrantable":{"description":"Whether an OAuth app may hold this scope. False for scopes whose routes accept an API key only, which no access token can satisfy.","type":"boolean"}}}}},"required":["scopes"]}}}}},"operationId":"getAuthScopes","tags":["Client Manager / Auth"],"summary":"List scopes","description":"Every scope an API key may hold, with the wording shown to users. Filter on `oauthGrantable` for the set an OAuth app may be given.","x-service":"client-manager"}},"/auth/sign-message/external":{"post":{"parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"signature":{"description":"The signed message in base58 format","type":"string"},"message":{"description":"The original message that was signed","type":"string"},"userAddress":{"description":"The address of the user whose private key should be used for signing","type":"string"},"timestamp":{"description":"Unix ms when the signature was created; present when includeTime was true","type":"number"}},"required":["signature","message","userAddress"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"signature":{"description":"The signed message in base58 format","type":"string"},"message":{"description":"The original message that was signed","type":"string"},"userAddress":{"description":"The address of the user whose private key should be used for signing","type":"string"},"timestamp":{"description":"Unix ms when the signature was created; present when includeTime was true","type":"number"}},"required":["signature","message","userAddress"]}},"text/plain":{"schema":{"type":"object","properties":{"signature":{"description":"The signed message in base58 format","type":"string"},"message":{"description":"The original message that was signed","type":"string"},"userAddress":{"description":"The address of the user whose private key should be used for signing","type":"string"},"timestamp":{"description":"Unix ms when the signature was created; present when includeTime was true","type":"number"}},"required":["signature","message","userAddress"]}}}},"401":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"}},"required":["name","message"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"}},"required":["name","message"]}},"text/plain":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"}},"required":["name","message"]}}}},"500":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"}},"required":["name","message"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"}},"required":["name","message"]}},"text/plain":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"}},"required":["name","message"]}}}}},"operationId":"postAuthSign-messageExternal","tags":["Client Manager / Auth"],"summary":"Sign message for external service authentication","description":"Sign message for external service authentication","security":[{"bearerAuth":[]},{"nosanaOAuth":["wallet:sign"]}],"x-required-scopes":["wallet:sign"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["message"],"properties":{"message":{"description":"The message to be signed with the user's private key","minLength":1,"type":"string"},"includeTime":{"type":"boolean"}},"additionalProperties":false}},"multipart/form-data":{"schema":{"type":"object","required":["message"],"properties":{"message":{"description":"The message to be signed with the user's private key","minLength":1,"type":"string"},"includeTime":{"type":"boolean"}},"additionalProperties":false}},"text/plain":{"schema":{"type":"object","required":["message"],"properties":{"message":{"description":"The message to be signed with the user's private key","minLength":1,"type":"string"},"includeTime":{"type":"boolean"}},"additionalProperties":false}}}},"x-service":"client-manager"}},"/auth/sign-messages/external":{"post":{"parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"userAddress":{"description":"The address of the user whose private key signed the messages","type":"string"},"signatures":{"description":"One signature per message, in request order","type":"array","items":{"type":"object","required":["message","signature"],"properties":{"message":{"description":"The original message that was signed","type":"string"},"signature":{"description":"The signed message in base58 format","type":"string"},"timestamp":{"description":"Unix ms when the signature was created; present when includeTime was true","type":"number"}}}}},"required":["userAddress","signatures"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"userAddress":{"description":"The address of the user whose private key signed the messages","type":"string"},"signatures":{"description":"One signature per message, in request order","type":"array","items":{"type":"object","required":["message","signature"],"properties":{"message":{"description":"The original message that was signed","type":"string"},"signature":{"description":"The signed message in base58 format","type":"string"},"timestamp":{"description":"Unix ms when the signature was created; present when includeTime was true","type":"number"}}}}},"required":["userAddress","signatures"]}},"text/plain":{"schema":{"type":"object","properties":{"userAddress":{"description":"The address of the user whose private key signed the messages","type":"string"},"signatures":{"description":"One signature per message, in request order","type":"array","items":{"type":"object","required":["message","signature"],"properties":{"message":{"description":"The original message that was signed","type":"string"},"signature":{"description":"The signed message in base58 format","type":"string"},"timestamp":{"description":"Unix ms when the signature was created; present when includeTime was true","type":"number"}}}}},"required":["userAddress","signatures"]}}}},"401":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"}},"required":["name","message"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"}},"required":["name","message"]}},"text/plain":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"}},"required":["name","message"]}}}},"500":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"}},"required":["name","message"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"}},"required":["name","message"]}},"text/plain":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"}},"required":["name","message"]}}}}},"operationId":"postAuthSign-messagesExternal","tags":["Client Manager / Auth"],"summary":"Sign messages for external service authentication","description":"Sign up to 100 messages in one call, e.g. one auth header per running job of a deployment.","security":[{"bearerAuth":[]},{"nosanaOAuth":["wallet:sign"]}],"x-required-scopes":["wallet:sign"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["messages"],"properties":{"messages":{"minItems":1,"maxItems":100,"description":"The messages to sign (1-100)","type":"array","items":{"description":"A message to be signed with the user's private key","minLength":1,"type":"string"}},"includeTime":{"type":"boolean"}}}},"multipart/form-data":{"schema":{"type":"object","required":["messages"],"properties":{"messages":{"minItems":1,"maxItems":100,"description":"The messages to sign (1-100)","type":"array","items":{"description":"A message to be signed with the user's private key","minLength":1,"type":"string"}},"includeTime":{"type":"boolean"}}}},"text/plain":{"schema":{"type":"object","required":["messages"],"properties":{"messages":{"minItems":1,"maxItems":100,"description":"The messages to sign (1-100)","type":"array","items":{"description":"A message to be signed with the user's private key","minLength":1,"type":"string"}},"includeTime":{"type":"boolean"}}}}}},"x-service":"client-manager"}},"/auth/validate-api-key":{"post":{"parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"valid":{"type":"boolean"},"user":{"type":"object","required":["id","legacyUserId","email","name","provider","providerUsername","generatedAddress","created_at"],"properties":{"id":{"type":"string"},"legacyUserId":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"email":{"type":"string"},"name":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"providerUsername":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"generatedAddress":{"type":"string"},"created_at":{"nullable":true,"anyOf":[{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},{"type":"null"}]}}},"apiKeyId":{"type":"string"},"scopes":{"description":"What the validated key is allowed to do.","type":"array","items":{"type":"string"}}},"required":["valid"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"valid":{"type":"boolean"},"user":{"type":"object","required":["id","legacyUserId","email","name","provider","providerUsername","generatedAddress","created_at"],"properties":{"id":{"type":"string"},"legacyUserId":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"email":{"type":"string"},"name":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"providerUsername":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"generatedAddress":{"type":"string"},"created_at":{"nullable":true,"anyOf":[{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},{"type":"null"}]}}},"apiKeyId":{"type":"string"},"scopes":{"description":"What the validated key is allowed to do.","type":"array","items":{"type":"string"}}},"required":["valid"]}},"text/plain":{"schema":{"type":"object","properties":{"valid":{"type":"boolean"},"user":{"type":"object","required":["id","legacyUserId","email","name","provider","providerUsername","generatedAddress","created_at"],"properties":{"id":{"type":"string"},"legacyUserId":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"email":{"type":"string"},"name":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"providerUsername":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"generatedAddress":{"type":"string"},"created_at":{"nullable":true,"anyOf":[{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},{"type":"null"}]}}},"apiKeyId":{"type":"string"},"scopes":{"description":"What the validated key is allowed to do.","type":"array","items":{"type":"string"}}},"required":["valid"]}}}}},"operationId":"postAuthValidate-api-key","tags":["Client Manager / Auth"],"summary":"Validate API key","description":"Check whether an API key is active and report whose it is, with its scopes.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["apiKey"],"properties":{"apiKey":{"type":"string"}},"additionalProperties":false}},"multipart/form-data":{"schema":{"type":"object","required":["apiKey"],"properties":{"apiKey":{"type":"string"}},"additionalProperties":false}},"text/plain":{"schema":{"type":"object","required":["apiKey"],"properties":{"apiKey":{"type":"string"}},"additionalProperties":false}}}},"x-service":"client-manager"}},"/auth/validate-session":{"post":{"parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"valid":{"type":"boolean"},"user":{"type":"object","required":["id","supertokensUserId","legacyUserId","email","name","provider","providerUsername","generatedAddress","authenticationHeader","systemApiKey","created_at"],"properties":{"id":{"type":"string"},"supertokensUserId":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"legacyUserId":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"email":{"type":"string"},"name":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"providerUsername":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"generatedAddress":{"type":"string"},"authenticationHeader":{"type":"string"},"systemApiKey":{"type":"string"},"created_at":{"nullable":true,"anyOf":[{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},{"type":"null"}]}}},"session":{"type":"object","properties":{"handle":{"type":"string"},"expiresAt":{"type":"string"}}}},"required":["valid"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"valid":{"type":"boolean"},"user":{"type":"object","required":["id","supertokensUserId","legacyUserId","email","name","provider","providerUsername","generatedAddress","authenticationHeader","systemApiKey","created_at"],"properties":{"id":{"type":"string"},"supertokensUserId":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"legacyUserId":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"email":{"type":"string"},"name":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"providerUsername":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"generatedAddress":{"type":"string"},"authenticationHeader":{"type":"string"},"systemApiKey":{"type":"string"},"created_at":{"nullable":true,"anyOf":[{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},{"type":"null"}]}}},"session":{"type":"object","properties":{"handle":{"type":"string"},"expiresAt":{"type":"string"}}}},"required":["valid"]}},"text/plain":{"schema":{"type":"object","properties":{"valid":{"type":"boolean"},"user":{"type":"object","required":["id","supertokensUserId","legacyUserId","email","name","provider","providerUsername","generatedAddress","authenticationHeader","systemApiKey","created_at"],"properties":{"id":{"type":"string"},"supertokensUserId":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"legacyUserId":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"email":{"type":"string"},"name":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"providerUsername":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"generatedAddress":{"type":"string"},"authenticationHeader":{"type":"string"},"systemApiKey":{"type":"string"},"created_at":{"nullable":true,"anyOf":[{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},{"type":"null"}]}}},"session":{"type":"object","properties":{"handle":{"type":"string"},"expiresAt":{"type":"string"}}}},"required":["valid"]}}}}},"operationId":"postAuthValidate-session","tags":["Client Manager / Auth"],"summary":"Validate session","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"cookieHeader":{"type":"string"}}}},"multipart/form-data":{"schema":{"type":"object","properties":{"cookieHeader":{"type":"string"}}}},"text/plain":{"schema":{"type":"object","properties":{"cookieHeader":{"type":"string"}}}}}},"x-service":"client-manager"}},"/benchmark-templates/apply":{"post":{"parameters":[{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"changes":{"type":"array","items":{"type":"object","required":["slug","status","operation","requirements","metricChanges","conflictKeys","supportedMarkets","existingThresholds","existingMarketThresholds","reconciliation"],"properties":{"slug":{"type":"string"},"status":{"anyOf":[{"const":"added","type":"string"},{"const":"updated","type":"string"},{"const":"removed","type":"string"},{"const":"unchanged","type":"string"}]},"operation":{"nullable":true,"anyOf":[{"type":"object","required":["name","ops","metrics"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"source":{"type":"string"},"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["container/run","container/create-volume"]},"id":{"type":"string"},"args":{"oneOf":[{"type":"object","properties":{"image":{"type":"string"},"aliases":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"cmd":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"volumes":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"dest":{"type":"string"}},"required":["name","dest"]}},"expose":{"oneOf":[{"type":"number"},{"type":"string"},{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"port":{"type":"number"},"type":{"type":"string","enum":["api","web","websocket","webapi","none"]},"health_checks":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["http"]},"path":{"type":"string"},"method":{"type":"string","enum":["GET","POST","PUT","DELETE"]},"expected_status":{"type":"number"},"headers":{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"type":"string"}},"body":{},"continuous":{"type":"boolean"}},"required":["type","path","method","expected_status","continuous"]},{"type":"object","properties":{"type":{"type":"string","enum":["websocket"]},"expected_response":{"type":"string"},"continuous":{"type":"boolean"}},"required":["type","expected_response","continuous"]}]}}},"required":["port"]},{"type":"array","items":{"oneOf":[{"type":"number"},{"type":"string"},{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"port":{"type":"number"},"type":{"type":"string","enum":["api","web","websocket","webapi","none"]},"health_checks":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["http"]},"path":{"type":"string"},"method":{"type":"string","enum":["GET","POST","PUT","DELETE"]},"expected_status":{"type":"number"},"headers":{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"type":"string"}},"body":{},"continuous":{"type":"boolean"}},"required":["type","path","method","expected_status","continuous"]},{"type":"object","properties":{"type":{"type":"string","enum":["websocket"]},"expected_response":{"type":"string"},"continuous":{"type":"boolean"}},"required":["type","expected_response","continuous"]}]}}},"required":["port"]}]}}]},"gpu":{"type":"boolean"},"work_dir":{"type":"string"},"entrypoint":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"env":{"type":"object","properties":{},"required":[],"additionalProperties":{"type":"string"}},"restart_policy":{"oneOf":[{"type":"object","properties":{"policy":{"type":"string","enum":["on-failure"]},"restart_tries":{"type":"number"}},"required":["policy"]},{"type":"string","enum":["on-failure","no","always","unless-stopped"]}]},"private":{"type":"boolean"},"resources":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"files":{"type":"array","items":{"type":"string"}},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"bucket":{"type":"string"},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target","bucket"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"buckets":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"files":{"type":"array","items":{"type":"string"}}},"required":["url"]}},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target","buckets"]},{"type":"object","properties":{"type":{"type":"string","enum":["HF"]},"target":{"type":"string"},"repo":{"type":"string"},"revision":{"type":"string"},"files":{"type":"array","items":{"type":"string"}},"accessToken":{"type":"string"}},"required":["type","target","repo"]},{"type":"object","properties":{"type":{"type":"string","enum":["Ollama"]},"model":{"type":"string"},"target":{"type":"string"}},"required":["type","model"]},{"type":"string","enum":["__remove-if-empty__"]}]}},"authentication":{"type":"object","properties":{"docker":{"type":"object","properties":{"username":{"type":"string"},"password":{"type":"string"},"email":{"type":"string"},"server":{"type":"string"}},"required":[]}},"required":[]}},"required":["image"]},{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}]},"results":{"type":"object","properties":{},"required":[],"additionalProperties":{"oneOf":[{"type":"string"},{"type":"object","properties":{"regex":{"type":"string"},"logType":{"type":"array","items":{"type":"string","enum":["stdin","stdout","stderr","nodeerr"]}}},"required":["regex","logType"]}]}},"execution":{"type":"object","properties":{"group":{"type":"string"},"timeout":{"type":"number"},"depends_on":{"type":"array","items":{"type":"string"}},"stop_if_dependent_stops":{"type":"boolean"}},"required":[]}},"required":["type","id","args"]}},"metrics":{"type":"array","items":{"type":"object","patternProperties":{"^(.*)$":{}}}}}},{"type":"null"}]},"requirements":{"type":"array","items":{"type":"object","patternProperties":{"^(.*)$":{}}}},"metricChanges":{"type":"object","required":["added","updated","removed","unchanged"],"properties":{"added":{"type":"array","items":{"type":"string"}},"updated":{"type":"array","items":{"type":"string"}},"removed":{"type":"array","items":{"type":"string"}},"unchanged":{"type":"array","items":{"type":"string"}}}},"conflictKeys":{"type":"array","items":{"type":"string"}},"supportedMarkets":{"type":"array","items":{"type":"string"}},"existingThresholds":{"type":"array","items":{"type":"object","required":["id","name","metric","group","isGating"],"properties":{"id":{"type":"number"},"name":{"type":"string"},"metric":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"group":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"isGating":{"type":"boolean"}}}},"existingMarketThresholds":{"type":"array","items":{"type":"object","required":["thresholdId","marketAddress","jsonLogic","isOptional"],"properties":{"thresholdId":{"type":"number"},"marketAddress":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"jsonLogic":{"type":"object","patternProperties":{"^(.*)$":{}}},"isOptional":{"type":"boolean"}}}},"reconciliation":{"type":"object","required":["inSync","actionable","needsThreshold","hasGlobalLink","targetThresholdId","targetMetricKey","add","remove","benchmarkMetricKeys","defaultMetricKey"],"properties":{"inSync":{"type":"boolean"},"actionable":{"type":"boolean"},"needsThreshold":{"type":"boolean"},"hasGlobalLink":{"type":"boolean"},"targetThresholdId":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"targetMetricKey":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"add":{"type":"array","items":{"type":"object","required":["marketAddress","jsonLogic"],"properties":{"marketAddress":{"type":"string"},"jsonLogic":{"type":"object","patternProperties":{"^(.*)$":{}}}}}},"remove":{"type":"array","items":{"type":"object","required":["thresholdId","marketAddress"],"properties":{"thresholdId":{"type":"number"},"marketAddress":{"type":"string"}}}},"benchmarkMetricKeys":{"type":"array","items":{"type":"string"}},"defaultMetricKey":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]}}}}}}},"required":["changes"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"changes":{"type":"array","items":{"type":"object","required":["slug","status","operation","requirements","metricChanges","conflictKeys","supportedMarkets","existingThresholds","existingMarketThresholds","reconciliation"],"properties":{"slug":{"type":"string"},"status":{"anyOf":[{"const":"added","type":"string"},{"const":"updated","type":"string"},{"const":"removed","type":"string"},{"const":"unchanged","type":"string"}]},"operation":{"nullable":true,"anyOf":[{"type":"object","required":["name","ops","metrics"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"source":{"type":"string"},"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["container/run","container/create-volume"]},"id":{"type":"string"},"args":{"oneOf":[{"type":"object","properties":{"image":{"type":"string"},"aliases":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"cmd":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"volumes":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"dest":{"type":"string"}},"required":["name","dest"]}},"expose":{"oneOf":[{"type":"number"},{"type":"string"},{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"port":{"type":"number"},"type":{"type":"string","enum":["api","web","websocket","webapi","none"]},"health_checks":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["http"]},"path":{"type":"string"},"method":{"type":"string","enum":["GET","POST","PUT","DELETE"]},"expected_status":{"type":"number"},"headers":{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"type":"string"}},"body":{},"continuous":{"type":"boolean"}},"required":["type","path","method","expected_status","continuous"]},{"type":"object","properties":{"type":{"type":"string","enum":["websocket"]},"expected_response":{"type":"string"},"continuous":{"type":"boolean"}},"required":["type","expected_response","continuous"]}]}}},"required":["port"]},{"type":"array","items":{"oneOf":[{"type":"number"},{"type":"string"},{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"port":{"type":"number"},"type":{"type":"string","enum":["api","web","websocket","webapi","none"]},"health_checks":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["http"]},"path":{"type":"string"},"method":{"type":"string","enum":["GET","POST","PUT","DELETE"]},"expected_status":{"type":"number"},"headers":{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"type":"string"}},"body":{},"continuous":{"type":"boolean"}},"required":["type","path","method","expected_status","continuous"]},{"type":"object","properties":{"type":{"type":"string","enum":["websocket"]},"expected_response":{"type":"string"},"continuous":{"type":"boolean"}},"required":["type","expected_response","continuous"]}]}}},"required":["port"]}]}}]},"gpu":{"type":"boolean"},"work_dir":{"type":"string"},"entrypoint":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"env":{"type":"object","properties":{},"required":[],"additionalProperties":{"type":"string"}},"restart_policy":{"oneOf":[{"type":"object","properties":{"policy":{"type":"string","enum":["on-failure"]},"restart_tries":{"type":"number"}},"required":["policy"]},{"type":"string","enum":["on-failure","no","always","unless-stopped"]}]},"private":{"type":"boolean"},"resources":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"files":{"type":"array","items":{"type":"string"}},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"bucket":{"type":"string"},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target","bucket"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"buckets":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"files":{"type":"array","items":{"type":"string"}}},"required":["url"]}},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target","buckets"]},{"type":"object","properties":{"type":{"type":"string","enum":["HF"]},"target":{"type":"string"},"repo":{"type":"string"},"revision":{"type":"string"},"files":{"type":"array","items":{"type":"string"}},"accessToken":{"type":"string"}},"required":["type","target","repo"]},{"type":"object","properties":{"type":{"type":"string","enum":["Ollama"]},"model":{"type":"string"},"target":{"type":"string"}},"required":["type","model"]},{"type":"string","enum":["__remove-if-empty__"]}]}},"authentication":{"type":"object","properties":{"docker":{"type":"object","properties":{"username":{"type":"string"},"password":{"type":"string"},"email":{"type":"string"},"server":{"type":"string"}},"required":[]}},"required":[]}},"required":["image"]},{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}]},"results":{"type":"object","properties":{},"required":[],"additionalProperties":{"oneOf":[{"type":"string"},{"type":"object","properties":{"regex":{"type":"string"},"logType":{"type":"array","items":{"type":"string","enum":["stdin","stdout","stderr","nodeerr"]}}},"required":["regex","logType"]}]}},"execution":{"type":"object","properties":{"group":{"type":"string"},"timeout":{"type":"number"},"depends_on":{"type":"array","items":{"type":"string"}},"stop_if_dependent_stops":{"type":"boolean"}},"required":[]}},"required":["type","id","args"]}},"metrics":{"type":"array","items":{"type":"object","patternProperties":{"^(.*)$":{}}}}}},{"type":"null"}]},"requirements":{"type":"array","items":{"type":"object","patternProperties":{"^(.*)$":{}}}},"metricChanges":{"type":"object","required":["added","updated","removed","unchanged"],"properties":{"added":{"type":"array","items":{"type":"string"}},"updated":{"type":"array","items":{"type":"string"}},"removed":{"type":"array","items":{"type":"string"}},"unchanged":{"type":"array","items":{"type":"string"}}}},"conflictKeys":{"type":"array","items":{"type":"string"}},"supportedMarkets":{"type":"array","items":{"type":"string"}},"existingThresholds":{"type":"array","items":{"type":"object","required":["id","name","metric","group","isGating"],"properties":{"id":{"type":"number"},"name":{"type":"string"},"metric":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"group":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"isGating":{"type":"boolean"}}}},"existingMarketThresholds":{"type":"array","items":{"type":"object","required":["thresholdId","marketAddress","jsonLogic","isOptional"],"properties":{"thresholdId":{"type":"number"},"marketAddress":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"jsonLogic":{"type":"object","patternProperties":{"^(.*)$":{}}},"isOptional":{"type":"boolean"}}}},"reconciliation":{"type":"object","required":["inSync","actionable","needsThreshold","hasGlobalLink","targetThresholdId","targetMetricKey","add","remove","benchmarkMetricKeys","defaultMetricKey"],"properties":{"inSync":{"type":"boolean"},"actionable":{"type":"boolean"},"needsThreshold":{"type":"boolean"},"hasGlobalLink":{"type":"boolean"},"targetThresholdId":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"targetMetricKey":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"add":{"type":"array","items":{"type":"object","required":["marketAddress","jsonLogic"],"properties":{"marketAddress":{"type":"string"},"jsonLogic":{"type":"object","patternProperties":{"^(.*)$":{}}}}}},"remove":{"type":"array","items":{"type":"object","required":["thresholdId","marketAddress"],"properties":{"thresholdId":{"type":"number"},"marketAddress":{"type":"string"}}}},"benchmarkMetricKeys":{"type":"array","items":{"type":"string"}},"defaultMetricKey":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]}}}}}}},"required":["changes"]}},"text/plain":{"schema":{"type":"object","properties":{"changes":{"type":"array","items":{"type":"object","required":["slug","status","operation","requirements","metricChanges","conflictKeys","supportedMarkets","existingThresholds","existingMarketThresholds","reconciliation"],"properties":{"slug":{"type":"string"},"status":{"anyOf":[{"const":"added","type":"string"},{"const":"updated","type":"string"},{"const":"removed","type":"string"},{"const":"unchanged","type":"string"}]},"operation":{"nullable":true,"anyOf":[{"type":"object","required":["name","ops","metrics"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"source":{"type":"string"},"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["container/run","container/create-volume"]},"id":{"type":"string"},"args":{"oneOf":[{"type":"object","properties":{"image":{"type":"string"},"aliases":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"cmd":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"volumes":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"dest":{"type":"string"}},"required":["name","dest"]}},"expose":{"oneOf":[{"type":"number"},{"type":"string"},{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"port":{"type":"number"},"type":{"type":"string","enum":["api","web","websocket","webapi","none"]},"health_checks":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["http"]},"path":{"type":"string"},"method":{"type":"string","enum":["GET","POST","PUT","DELETE"]},"expected_status":{"type":"number"},"headers":{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"type":"string"}},"body":{},"continuous":{"type":"boolean"}},"required":["type","path","method","expected_status","continuous"]},{"type":"object","properties":{"type":{"type":"string","enum":["websocket"]},"expected_response":{"type":"string"},"continuous":{"type":"boolean"}},"required":["type","expected_response","continuous"]}]}}},"required":["port"]},{"type":"array","items":{"oneOf":[{"type":"number"},{"type":"string"},{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"port":{"type":"number"},"type":{"type":"string","enum":["api","web","websocket","webapi","none"]},"health_checks":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["http"]},"path":{"type":"string"},"method":{"type":"string","enum":["GET","POST","PUT","DELETE"]},"expected_status":{"type":"number"},"headers":{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"type":"string"}},"body":{},"continuous":{"type":"boolean"}},"required":["type","path","method","expected_status","continuous"]},{"type":"object","properties":{"type":{"type":"string","enum":["websocket"]},"expected_response":{"type":"string"},"continuous":{"type":"boolean"}},"required":["type","expected_response","continuous"]}]}}},"required":["port"]}]}}]},"gpu":{"type":"boolean"},"work_dir":{"type":"string"},"entrypoint":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"env":{"type":"object","properties":{},"required":[],"additionalProperties":{"type":"string"}},"restart_policy":{"oneOf":[{"type":"object","properties":{"policy":{"type":"string","enum":["on-failure"]},"restart_tries":{"type":"number"}},"required":["policy"]},{"type":"string","enum":["on-failure","no","always","unless-stopped"]}]},"private":{"type":"boolean"},"resources":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"files":{"type":"array","items":{"type":"string"}},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"bucket":{"type":"string"},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target","bucket"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"buckets":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"files":{"type":"array","items":{"type":"string"}}},"required":["url"]}},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target","buckets"]},{"type":"object","properties":{"type":{"type":"string","enum":["HF"]},"target":{"type":"string"},"repo":{"type":"string"},"revision":{"type":"string"},"files":{"type":"array","items":{"type":"string"}},"accessToken":{"type":"string"}},"required":["type","target","repo"]},{"type":"object","properties":{"type":{"type":"string","enum":["Ollama"]},"model":{"type":"string"},"target":{"type":"string"}},"required":["type","model"]},{"type":"string","enum":["__remove-if-empty__"]}]}},"authentication":{"type":"object","properties":{"docker":{"type":"object","properties":{"username":{"type":"string"},"password":{"type":"string"},"email":{"type":"string"},"server":{"type":"string"}},"required":[]}},"required":[]}},"required":["image"]},{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}]},"results":{"type":"object","properties":{},"required":[],"additionalProperties":{"oneOf":[{"type":"string"},{"type":"object","properties":{"regex":{"type":"string"},"logType":{"type":"array","items":{"type":"string","enum":["stdin","stdout","stderr","nodeerr"]}}},"required":["regex","logType"]}]}},"execution":{"type":"object","properties":{"group":{"type":"string"},"timeout":{"type":"number"},"depends_on":{"type":"array","items":{"type":"string"}},"stop_if_dependent_stops":{"type":"boolean"}},"required":[]}},"required":["type","id","args"]}},"metrics":{"type":"array","items":{"type":"object","patternProperties":{"^(.*)$":{}}}}}},{"type":"null"}]},"requirements":{"type":"array","items":{"type":"object","patternProperties":{"^(.*)$":{}}}},"metricChanges":{"type":"object","required":["added","updated","removed","unchanged"],"properties":{"added":{"type":"array","items":{"type":"string"}},"updated":{"type":"array","items":{"type":"string"}},"removed":{"type":"array","items":{"type":"string"}},"unchanged":{"type":"array","items":{"type":"string"}}}},"conflictKeys":{"type":"array","items":{"type":"string"}},"supportedMarkets":{"type":"array","items":{"type":"string"}},"existingThresholds":{"type":"array","items":{"type":"object","required":["id","name","metric","group","isGating"],"properties":{"id":{"type":"number"},"name":{"type":"string"},"metric":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"group":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"isGating":{"type":"boolean"}}}},"existingMarketThresholds":{"type":"array","items":{"type":"object","required":["thresholdId","marketAddress","jsonLogic","isOptional"],"properties":{"thresholdId":{"type":"number"},"marketAddress":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"jsonLogic":{"type":"object","patternProperties":{"^(.*)$":{}}},"isOptional":{"type":"boolean"}}}},"reconciliation":{"type":"object","required":["inSync","actionable","needsThreshold","hasGlobalLink","targetThresholdId","targetMetricKey","add","remove","benchmarkMetricKeys","defaultMetricKey"],"properties":{"inSync":{"type":"boolean"},"actionable":{"type":"boolean"},"needsThreshold":{"type":"boolean"},"hasGlobalLink":{"type":"boolean"},"targetThresholdId":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"targetMetricKey":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"add":{"type":"array","items":{"type":"object","required":["marketAddress","jsonLogic"],"properties":{"marketAddress":{"type":"string"},"jsonLogic":{"type":"object","patternProperties":{"^(.*)$":{}}}}}},"remove":{"type":"array","items":{"type":"object","required":["thresholdId","marketAddress"],"properties":{"thresholdId":{"type":"number"},"marketAddress":{"type":"string"}}}},"benchmarkMetricKeys":{"type":"array","items":{"type":"string"}},"defaultMetricKey":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]}}}}}}},"required":["changes"]}}}}},"operationId":"postBenchmark-templatesApply","tags":["Host Manager / Templates"],"summary":"Apply the operation/metric diff, the supplied human-reviewed thresholds, and the approved market-threshold reconciliations in one transaction. Metrics → thresholds → reconciliations, so each step's targets exist before the next. Omit all for a template-only sync.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"thresholds":{"type":"array","items":{"type":"object","required":["name","marketThresholds"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"metric":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"group":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"isGating":{"type":"boolean"},"failureMessage":{"type":"string"},"marketThresholds":{"type":"array","items":{"type":"object","required":["marketAddresses","jsonLogic"],"properties":{"marketAddresses":{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"null"}]}},"jsonLogic":{"type":"object","patternProperties":{"^(.*)$":{}}},"interval":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"isOptional":{"type":"boolean"}}}}}}},"reconciliations":{"type":"array","items":{"type":"object","required":["slug","targetThresholdId","add","remove"],"properties":{"slug":{"type":"string"},"targetThresholdId":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"add":{"type":"array","items":{"type":"object","required":["marketAddress","jsonLogic"],"properties":{"marketAddress":{"type":"string"},"jsonLogic":{"type":"object","patternProperties":{"^(.*)$":{}}}}}},"remove":{"type":"array","items":{"type":"object","required":["thresholdId","marketAddress"],"properties":{"thresholdId":{"type":"number"},"marketAddress":{"type":"string"}}}}}}}}}},"multipart/form-data":{"schema":{"type":"object","properties":{"thresholds":{"type":"array","items":{"type":"object","required":["name","marketThresholds"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"metric":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"group":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"isGating":{"type":"boolean"},"failureMessage":{"type":"string"},"marketThresholds":{"type":"array","items":{"type":"object","required":["marketAddresses","jsonLogic"],"properties":{"marketAddresses":{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"null"}]}},"jsonLogic":{"type":"object","patternProperties":{"^(.*)$":{}}},"interval":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"isOptional":{"type":"boolean"}}}}}}},"reconciliations":{"type":"array","items":{"type":"object","required":["slug","targetThresholdId","add","remove"],"properties":{"slug":{"type":"string"},"targetThresholdId":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"add":{"type":"array","items":{"type":"object","required":["marketAddress","jsonLogic"],"properties":{"marketAddress":{"type":"string"},"jsonLogic":{"type":"object","patternProperties":{"^(.*)$":{}}}}}},"remove":{"type":"array","items":{"type":"object","required":["thresholdId","marketAddress"],"properties":{"thresholdId":{"type":"number"},"marketAddress":{"type":"string"}}}}}}}}}},"text/plain":{"schema":{"type":"object","properties":{"thresholds":{"type":"array","items":{"type":"object","required":["name","marketThresholds"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"metric":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"group":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"isGating":{"type":"boolean"},"failureMessage":{"type":"string"},"marketThresholds":{"type":"array","items":{"type":"object","required":["marketAddresses","jsonLogic"],"properties":{"marketAddresses":{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"null"}]}},"jsonLogic":{"type":"object","patternProperties":{"^(.*)$":{}}},"interval":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"isOptional":{"type":"boolean"}}}}}}},"reconciliations":{"type":"array","items":{"type":"object","required":["slug","targetThresholdId","add","remove"],"properties":{"slug":{"type":"string"},"targetThresholdId":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"add":{"type":"array","items":{"type":"object","required":["marketAddress","jsonLogic"],"properties":{"marketAddress":{"type":"string"},"jsonLogic":{"type":"object","patternProperties":{"^(.*)$":{}}}}}},"remove":{"type":"array","items":{"type":"object","required":["thresholdId","marketAddress"],"properties":{"thresholdId":{"type":"number"},"marketAddress":{"type":"string"}}}}}}}}}}}},"x-service":"host-manager"}},"/benchmark-templates/config":{"get":{"parameters":[{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"benchmarks":{"type":"array","items":{"type":"object","required":["slug","operationId","operation","thresholds","marketThresholds"],"properties":{"slug":{"type":"string"},"operationId":{"type":"number"},"operation":{"type":"object","required":["name","ops","metrics"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"source":{"type":"string"},"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["container/run","container/create-volume"]},"id":{"type":"string"},"args":{"oneOf":[{"type":"object","properties":{"image":{"type":"string"},"aliases":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"cmd":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"volumes":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"dest":{"type":"string"}},"required":["name","dest"]}},"expose":{"oneOf":[{"type":"number"},{"type":"string"},{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"port":{"type":"number"},"type":{"type":"string","enum":["api","web","websocket","webapi","none"]},"health_checks":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["http"]},"path":{"type":"string"},"method":{"type":"string","enum":["GET","POST","PUT","DELETE"]},"expected_status":{"type":"number"},"headers":{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"type":"string"}},"body":{},"continuous":{"type":"boolean"}},"required":["type","path","method","expected_status","continuous"]},{"type":"object","properties":{"type":{"type":"string","enum":["websocket"]},"expected_response":{"type":"string"},"continuous":{"type":"boolean"}},"required":["type","expected_response","continuous"]}]}}},"required":["port"]},{"type":"array","items":{"oneOf":[{"type":"number"},{"type":"string"},{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"port":{"type":"number"},"type":{"type":"string","enum":["api","web","websocket","webapi","none"]},"health_checks":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["http"]},"path":{"type":"string"},"method":{"type":"string","enum":["GET","POST","PUT","DELETE"]},"expected_status":{"type":"number"},"headers":{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"type":"string"}},"body":{},"continuous":{"type":"boolean"}},"required":["type","path","method","expected_status","continuous"]},{"type":"object","properties":{"type":{"type":"string","enum":["websocket"]},"expected_response":{"type":"string"},"continuous":{"type":"boolean"}},"required":["type","expected_response","continuous"]}]}}},"required":["port"]}]}}]},"gpu":{"type":"boolean"},"work_dir":{"type":"string"},"entrypoint":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"env":{"type":"object","properties":{},"required":[],"additionalProperties":{"type":"string"}},"restart_policy":{"oneOf":[{"type":"object","properties":{"policy":{"type":"string","enum":["on-failure"]},"restart_tries":{"type":"number"}},"required":["policy"]},{"type":"string","enum":["on-failure","no","always","unless-stopped"]}]},"private":{"type":"boolean"},"resources":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"files":{"type":"array","items":{"type":"string"}},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"bucket":{"type":"string"},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target","bucket"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"buckets":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"files":{"type":"array","items":{"type":"string"}}},"required":["url"]}},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target","buckets"]},{"type":"object","properties":{"type":{"type":"string","enum":["HF"]},"target":{"type":"string"},"repo":{"type":"string"},"revision":{"type":"string"},"files":{"type":"array","items":{"type":"string"}},"accessToken":{"type":"string"}},"required":["type","target","repo"]},{"type":"object","properties":{"type":{"type":"string","enum":["Ollama"]},"model":{"type":"string"},"target":{"type":"string"}},"required":["type","model"]},{"type":"string","enum":["__remove-if-empty__"]}]}},"authentication":{"type":"object","properties":{"docker":{"type":"object","properties":{"username":{"type":"string"},"password":{"type":"string"},"email":{"type":"string"},"server":{"type":"string"}},"required":[]}},"required":[]}},"required":["image"]},{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}]},"results":{"type":"object","properties":{},"required":[],"additionalProperties":{"oneOf":[{"type":"string"},{"type":"object","properties":{"regex":{"type":"string"},"logType":{"type":"array","items":{"type":"string","enum":["stdin","stdout","stderr","nodeerr"]}}},"required":["regex","logType"]}]}},"execution":{"type":"object","properties":{"group":{"type":"string"},"timeout":{"type":"number"},"depends_on":{"type":"array","items":{"type":"string"}},"stop_if_dependent_stops":{"type":"boolean"}},"required":[]}},"required":["type","id","args"]}},"metrics":{"type":"array","items":{"type":"object","patternProperties":{"^(.*)$":{}}}}}},"thresholds":{"type":"array","items":{"type":"object","required":["id","name","metric","group","isGating"],"properties":{"id":{"type":"number"},"name":{"type":"string"},"metric":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"group":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"isGating":{"type":"boolean"}}}},"marketThresholds":{"type":"array","items":{"type":"object","required":["thresholdId","marketAddress","jsonLogic","isOptional"],"properties":{"thresholdId":{"type":"number"},"marketAddress":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"jsonLogic":{"type":"object","patternProperties":{"^(.*)$":{}}},"isOptional":{"type":"boolean"}}}}}}}},"required":["benchmarks"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"benchmarks":{"type":"array","items":{"type":"object","required":["slug","operationId","operation","thresholds","marketThresholds"],"properties":{"slug":{"type":"string"},"operationId":{"type":"number"},"operation":{"type":"object","required":["name","ops","metrics"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"source":{"type":"string"},"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["container/run","container/create-volume"]},"id":{"type":"string"},"args":{"oneOf":[{"type":"object","properties":{"image":{"type":"string"},"aliases":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"cmd":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"volumes":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"dest":{"type":"string"}},"required":["name","dest"]}},"expose":{"oneOf":[{"type":"number"},{"type":"string"},{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"port":{"type":"number"},"type":{"type":"string","enum":["api","web","websocket","webapi","none"]},"health_checks":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["http"]},"path":{"type":"string"},"method":{"type":"string","enum":["GET","POST","PUT","DELETE"]},"expected_status":{"type":"number"},"headers":{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"type":"string"}},"body":{},"continuous":{"type":"boolean"}},"required":["type","path","method","expected_status","continuous"]},{"type":"object","properties":{"type":{"type":"string","enum":["websocket"]},"expected_response":{"type":"string"},"continuous":{"type":"boolean"}},"required":["type","expected_response","continuous"]}]}}},"required":["port"]},{"type":"array","items":{"oneOf":[{"type":"number"},{"type":"string"},{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"port":{"type":"number"},"type":{"type":"string","enum":["api","web","websocket","webapi","none"]},"health_checks":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["http"]},"path":{"type":"string"},"method":{"type":"string","enum":["GET","POST","PUT","DELETE"]},"expected_status":{"type":"number"},"headers":{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"type":"string"}},"body":{},"continuous":{"type":"boolean"}},"required":["type","path","method","expected_status","continuous"]},{"type":"object","properties":{"type":{"type":"string","enum":["websocket"]},"expected_response":{"type":"string"},"continuous":{"type":"boolean"}},"required":["type","expected_response","continuous"]}]}}},"required":["port"]}]}}]},"gpu":{"type":"boolean"},"work_dir":{"type":"string"},"entrypoint":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"env":{"type":"object","properties":{},"required":[],"additionalProperties":{"type":"string"}},"restart_policy":{"oneOf":[{"type":"object","properties":{"policy":{"type":"string","enum":["on-failure"]},"restart_tries":{"type":"number"}},"required":["policy"]},{"type":"string","enum":["on-failure","no","always","unless-stopped"]}]},"private":{"type":"boolean"},"resources":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"files":{"type":"array","items":{"type":"string"}},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"bucket":{"type":"string"},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target","bucket"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"buckets":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"files":{"type":"array","items":{"type":"string"}}},"required":["url"]}},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target","buckets"]},{"type":"object","properties":{"type":{"type":"string","enum":["HF"]},"target":{"type":"string"},"repo":{"type":"string"},"revision":{"type":"string"},"files":{"type":"array","items":{"type":"string"}},"accessToken":{"type":"string"}},"required":["type","target","repo"]},{"type":"object","properties":{"type":{"type":"string","enum":["Ollama"]},"model":{"type":"string"},"target":{"type":"string"}},"required":["type","model"]},{"type":"string","enum":["__remove-if-empty__"]}]}},"authentication":{"type":"object","properties":{"docker":{"type":"object","properties":{"username":{"type":"string"},"password":{"type":"string"},"email":{"type":"string"},"server":{"type":"string"}},"required":[]}},"required":[]}},"required":["image"]},{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}]},"results":{"type":"object","properties":{},"required":[],"additionalProperties":{"oneOf":[{"type":"string"},{"type":"object","properties":{"regex":{"type":"string"},"logType":{"type":"array","items":{"type":"string","enum":["stdin","stdout","stderr","nodeerr"]}}},"required":["regex","logType"]}]}},"execution":{"type":"object","properties":{"group":{"type":"string"},"timeout":{"type":"number"},"depends_on":{"type":"array","items":{"type":"string"}},"stop_if_dependent_stops":{"type":"boolean"}},"required":[]}},"required":["type","id","args"]}},"metrics":{"type":"array","items":{"type":"object","patternProperties":{"^(.*)$":{}}}}}},"thresholds":{"type":"array","items":{"type":"object","required":["id","name","metric","group","isGating"],"properties":{"id":{"type":"number"},"name":{"type":"string"},"metric":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"group":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"isGating":{"type":"boolean"}}}},"marketThresholds":{"type":"array","items":{"type":"object","required":["thresholdId","marketAddress","jsonLogic","isOptional"],"properties":{"thresholdId":{"type":"number"},"marketAddress":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"jsonLogic":{"type":"object","patternProperties":{"^(.*)$":{}}},"isOptional":{"type":"boolean"}}}}}}}},"required":["benchmarks"]}},"text/plain":{"schema":{"type":"object","properties":{"benchmarks":{"type":"array","items":{"type":"object","required":["slug","operationId","operation","thresholds","marketThresholds"],"properties":{"slug":{"type":"string"},"operationId":{"type":"number"},"operation":{"type":"object","required":["name","ops","metrics"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"source":{"type":"string"},"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["container/run","container/create-volume"]},"id":{"type":"string"},"args":{"oneOf":[{"type":"object","properties":{"image":{"type":"string"},"aliases":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"cmd":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"volumes":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"dest":{"type":"string"}},"required":["name","dest"]}},"expose":{"oneOf":[{"type":"number"},{"type":"string"},{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"port":{"type":"number"},"type":{"type":"string","enum":["api","web","websocket","webapi","none"]},"health_checks":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["http"]},"path":{"type":"string"},"method":{"type":"string","enum":["GET","POST","PUT","DELETE"]},"expected_status":{"type":"number"},"headers":{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"type":"string"}},"body":{},"continuous":{"type":"boolean"}},"required":["type","path","method","expected_status","continuous"]},{"type":"object","properties":{"type":{"type":"string","enum":["websocket"]},"expected_response":{"type":"string"},"continuous":{"type":"boolean"}},"required":["type","expected_response","continuous"]}]}}},"required":["port"]},{"type":"array","items":{"oneOf":[{"type":"number"},{"type":"string"},{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"port":{"type":"number"},"type":{"type":"string","enum":["api","web","websocket","webapi","none"]},"health_checks":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["http"]},"path":{"type":"string"},"method":{"type":"string","enum":["GET","POST","PUT","DELETE"]},"expected_status":{"type":"number"},"headers":{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"type":"string"}},"body":{},"continuous":{"type":"boolean"}},"required":["type","path","method","expected_status","continuous"]},{"type":"object","properties":{"type":{"type":"string","enum":["websocket"]},"expected_response":{"type":"string"},"continuous":{"type":"boolean"}},"required":["type","expected_response","continuous"]}]}}},"required":["port"]}]}}]},"gpu":{"type":"boolean"},"work_dir":{"type":"string"},"entrypoint":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"env":{"type":"object","properties":{},"required":[],"additionalProperties":{"type":"string"}},"restart_policy":{"oneOf":[{"type":"object","properties":{"policy":{"type":"string","enum":["on-failure"]},"restart_tries":{"type":"number"}},"required":["policy"]},{"type":"string","enum":["on-failure","no","always","unless-stopped"]}]},"private":{"type":"boolean"},"resources":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"files":{"type":"array","items":{"type":"string"}},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"bucket":{"type":"string"},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target","bucket"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"buckets":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"files":{"type":"array","items":{"type":"string"}}},"required":["url"]}},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target","buckets"]},{"type":"object","properties":{"type":{"type":"string","enum":["HF"]},"target":{"type":"string"},"repo":{"type":"string"},"revision":{"type":"string"},"files":{"type":"array","items":{"type":"string"}},"accessToken":{"type":"string"}},"required":["type","target","repo"]},{"type":"object","properties":{"type":{"type":"string","enum":["Ollama"]},"model":{"type":"string"},"target":{"type":"string"}},"required":["type","model"]},{"type":"string","enum":["__remove-if-empty__"]}]}},"authentication":{"type":"object","properties":{"docker":{"type":"object","properties":{"username":{"type":"string"},"password":{"type":"string"},"email":{"type":"string"},"server":{"type":"string"}},"required":[]}},"required":[]}},"required":["image"]},{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}]},"results":{"type":"object","properties":{},"required":[],"additionalProperties":{"oneOf":[{"type":"string"},{"type":"object","properties":{"regex":{"type":"string"},"logType":{"type":"array","items":{"type":"string","enum":["stdin","stdout","stderr","nodeerr"]}}},"required":["regex","logType"]}]}},"execution":{"type":"object","properties":{"group":{"type":"string"},"timeout":{"type":"number"},"depends_on":{"type":"array","items":{"type":"string"}},"stop_if_dependent_stops":{"type":"boolean"}},"required":[]}},"required":["type","id","args"]}},"metrics":{"type":"array","items":{"type":"object","patternProperties":{"^(.*)$":{}}}}}},"thresholds":{"type":"array","items":{"type":"object","required":["id","name","metric","group","isGating"],"properties":{"id":{"type":"number"},"name":{"type":"string"},"metric":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"group":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"isGating":{"type":"boolean"}}}},"marketThresholds":{"type":"array","items":{"type":"object","required":["thresholdId","marketAddress","jsonLogic","isOptional"],"properties":{"thresholdId":{"type":"number"},"marketAddress":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"jsonLogic":{"type":"object","patternProperties":{"^(.*)$":{}}},"isOptional":{"type":"boolean"}}}}}}}},"required":["benchmarks"]}}}}},"operationId":"getBenchmark-templatesConfig","tags":["Host Manager / Templates"],"summary":"Current stored benchmark templates — operations + metrics + their thresholds. Read-only, no GitHub fetch; shown on the template page before a refresh.","x-service":"host-manager"}},"/benchmark-templates/refresh":{"get":{"parameters":[{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"changes":{"type":"array","items":{"type":"object","required":["slug","status","operation","requirements","metricChanges","conflictKeys","supportedMarkets","existingThresholds","existingMarketThresholds","reconciliation"],"properties":{"slug":{"type":"string"},"status":{"anyOf":[{"const":"added","type":"string"},{"const":"updated","type":"string"},{"const":"removed","type":"string"},{"const":"unchanged","type":"string"}]},"operation":{"nullable":true,"anyOf":[{"type":"object","required":["name","ops","metrics"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"source":{"type":"string"},"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["container/run","container/create-volume"]},"id":{"type":"string"},"args":{"oneOf":[{"type":"object","properties":{"image":{"type":"string"},"aliases":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"cmd":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"volumes":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"dest":{"type":"string"}},"required":["name","dest"]}},"expose":{"oneOf":[{"type":"number"},{"type":"string"},{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"port":{"type":"number"},"type":{"type":"string","enum":["api","web","websocket","webapi","none"]},"health_checks":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["http"]},"path":{"type":"string"},"method":{"type":"string","enum":["GET","POST","PUT","DELETE"]},"expected_status":{"type":"number"},"headers":{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"type":"string"}},"body":{},"continuous":{"type":"boolean"}},"required":["type","path","method","expected_status","continuous"]},{"type":"object","properties":{"type":{"type":"string","enum":["websocket"]},"expected_response":{"type":"string"},"continuous":{"type":"boolean"}},"required":["type","expected_response","continuous"]}]}}},"required":["port"]},{"type":"array","items":{"oneOf":[{"type":"number"},{"type":"string"},{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"port":{"type":"number"},"type":{"type":"string","enum":["api","web","websocket","webapi","none"]},"health_checks":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["http"]},"path":{"type":"string"},"method":{"type":"string","enum":["GET","POST","PUT","DELETE"]},"expected_status":{"type":"number"},"headers":{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"type":"string"}},"body":{},"continuous":{"type":"boolean"}},"required":["type","path","method","expected_status","continuous"]},{"type":"object","properties":{"type":{"type":"string","enum":["websocket"]},"expected_response":{"type":"string"},"continuous":{"type":"boolean"}},"required":["type","expected_response","continuous"]}]}}},"required":["port"]}]}}]},"gpu":{"type":"boolean"},"work_dir":{"type":"string"},"entrypoint":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"env":{"type":"object","properties":{},"required":[],"additionalProperties":{"type":"string"}},"restart_policy":{"oneOf":[{"type":"object","properties":{"policy":{"type":"string","enum":["on-failure"]},"restart_tries":{"type":"number"}},"required":["policy"]},{"type":"string","enum":["on-failure","no","always","unless-stopped"]}]},"private":{"type":"boolean"},"resources":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"files":{"type":"array","items":{"type":"string"}},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"bucket":{"type":"string"},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target","bucket"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"buckets":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"files":{"type":"array","items":{"type":"string"}}},"required":["url"]}},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target","buckets"]},{"type":"object","properties":{"type":{"type":"string","enum":["HF"]},"target":{"type":"string"},"repo":{"type":"string"},"revision":{"type":"string"},"files":{"type":"array","items":{"type":"string"}},"accessToken":{"type":"string"}},"required":["type","target","repo"]},{"type":"object","properties":{"type":{"type":"string","enum":["Ollama"]},"model":{"type":"string"},"target":{"type":"string"}},"required":["type","model"]},{"type":"string","enum":["__remove-if-empty__"]}]}},"authentication":{"type":"object","properties":{"docker":{"type":"object","properties":{"username":{"type":"string"},"password":{"type":"string"},"email":{"type":"string"},"server":{"type":"string"}},"required":[]}},"required":[]}},"required":["image"]},{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}]},"results":{"type":"object","properties":{},"required":[],"additionalProperties":{"oneOf":[{"type":"string"},{"type":"object","properties":{"regex":{"type":"string"},"logType":{"type":"array","items":{"type":"string","enum":["stdin","stdout","stderr","nodeerr"]}}},"required":["regex","logType"]}]}},"execution":{"type":"object","properties":{"group":{"type":"string"},"timeout":{"type":"number"},"depends_on":{"type":"array","items":{"type":"string"}},"stop_if_dependent_stops":{"type":"boolean"}},"required":[]}},"required":["type","id","args"]}},"metrics":{"type":"array","items":{"type":"object","patternProperties":{"^(.*)$":{}}}}}},{"type":"null"}]},"requirements":{"type":"array","items":{"type":"object","patternProperties":{"^(.*)$":{}}}},"metricChanges":{"type":"object","required":["added","updated","removed","unchanged"],"properties":{"added":{"type":"array","items":{"type":"string"}},"updated":{"type":"array","items":{"type":"string"}},"removed":{"type":"array","items":{"type":"string"}},"unchanged":{"type":"array","items":{"type":"string"}}}},"conflictKeys":{"type":"array","items":{"type":"string"}},"supportedMarkets":{"type":"array","items":{"type":"string"}},"existingThresholds":{"type":"array","items":{"type":"object","required":["id","name","metric","group","isGating"],"properties":{"id":{"type":"number"},"name":{"type":"string"},"metric":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"group":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"isGating":{"type":"boolean"}}}},"existingMarketThresholds":{"type":"array","items":{"type":"object","required":["thresholdId","marketAddress","jsonLogic","isOptional"],"properties":{"thresholdId":{"type":"number"},"marketAddress":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"jsonLogic":{"type":"object","patternProperties":{"^(.*)$":{}}},"isOptional":{"type":"boolean"}}}},"reconciliation":{"type":"object","required":["inSync","actionable","needsThreshold","hasGlobalLink","targetThresholdId","targetMetricKey","add","remove","benchmarkMetricKeys","defaultMetricKey"],"properties":{"inSync":{"type":"boolean"},"actionable":{"type":"boolean"},"needsThreshold":{"type":"boolean"},"hasGlobalLink":{"type":"boolean"},"targetThresholdId":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"targetMetricKey":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"add":{"type":"array","items":{"type":"object","required":["marketAddress","jsonLogic"],"properties":{"marketAddress":{"type":"string"},"jsonLogic":{"type":"object","patternProperties":{"^(.*)$":{}}}}}},"remove":{"type":"array","items":{"type":"object","required":["thresholdId","marketAddress"],"properties":{"thresholdId":{"type":"number"},"marketAddress":{"type":"string"}}}},"benchmarkMetricKeys":{"type":"array","items":{"type":"string"}},"defaultMetricKey":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]}}}}}}},"required":["changes"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"changes":{"type":"array","items":{"type":"object","required":["slug","status","operation","requirements","metricChanges","conflictKeys","supportedMarkets","existingThresholds","existingMarketThresholds","reconciliation"],"properties":{"slug":{"type":"string"},"status":{"anyOf":[{"const":"added","type":"string"},{"const":"updated","type":"string"},{"const":"removed","type":"string"},{"const":"unchanged","type":"string"}]},"operation":{"nullable":true,"anyOf":[{"type":"object","required":["name","ops","metrics"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"source":{"type":"string"},"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["container/run","container/create-volume"]},"id":{"type":"string"},"args":{"oneOf":[{"type":"object","properties":{"image":{"type":"string"},"aliases":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"cmd":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"volumes":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"dest":{"type":"string"}},"required":["name","dest"]}},"expose":{"oneOf":[{"type":"number"},{"type":"string"},{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"port":{"type":"number"},"type":{"type":"string","enum":["api","web","websocket","webapi","none"]},"health_checks":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["http"]},"path":{"type":"string"},"method":{"type":"string","enum":["GET","POST","PUT","DELETE"]},"expected_status":{"type":"number"},"headers":{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"type":"string"}},"body":{},"continuous":{"type":"boolean"}},"required":["type","path","method","expected_status","continuous"]},{"type":"object","properties":{"type":{"type":"string","enum":["websocket"]},"expected_response":{"type":"string"},"continuous":{"type":"boolean"}},"required":["type","expected_response","continuous"]}]}}},"required":["port"]},{"type":"array","items":{"oneOf":[{"type":"number"},{"type":"string"},{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"port":{"type":"number"},"type":{"type":"string","enum":["api","web","websocket","webapi","none"]},"health_checks":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["http"]},"path":{"type":"string"},"method":{"type":"string","enum":["GET","POST","PUT","DELETE"]},"expected_status":{"type":"number"},"headers":{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"type":"string"}},"body":{},"continuous":{"type":"boolean"}},"required":["type","path","method","expected_status","continuous"]},{"type":"object","properties":{"type":{"type":"string","enum":["websocket"]},"expected_response":{"type":"string"},"continuous":{"type":"boolean"}},"required":["type","expected_response","continuous"]}]}}},"required":["port"]}]}}]},"gpu":{"type":"boolean"},"work_dir":{"type":"string"},"entrypoint":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"env":{"type":"object","properties":{},"required":[],"additionalProperties":{"type":"string"}},"restart_policy":{"oneOf":[{"type":"object","properties":{"policy":{"type":"string","enum":["on-failure"]},"restart_tries":{"type":"number"}},"required":["policy"]},{"type":"string","enum":["on-failure","no","always","unless-stopped"]}]},"private":{"type":"boolean"},"resources":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"files":{"type":"array","items":{"type":"string"}},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"bucket":{"type":"string"},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target","bucket"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"buckets":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"files":{"type":"array","items":{"type":"string"}}},"required":["url"]}},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target","buckets"]},{"type":"object","properties":{"type":{"type":"string","enum":["HF"]},"target":{"type":"string"},"repo":{"type":"string"},"revision":{"type":"string"},"files":{"type":"array","items":{"type":"string"}},"accessToken":{"type":"string"}},"required":["type","target","repo"]},{"type":"object","properties":{"type":{"type":"string","enum":["Ollama"]},"model":{"type":"string"},"target":{"type":"string"}},"required":["type","model"]},{"type":"string","enum":["__remove-if-empty__"]}]}},"authentication":{"type":"object","properties":{"docker":{"type":"object","properties":{"username":{"type":"string"},"password":{"type":"string"},"email":{"type":"string"},"server":{"type":"string"}},"required":[]}},"required":[]}},"required":["image"]},{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}]},"results":{"type":"object","properties":{},"required":[],"additionalProperties":{"oneOf":[{"type":"string"},{"type":"object","properties":{"regex":{"type":"string"},"logType":{"type":"array","items":{"type":"string","enum":["stdin","stdout","stderr","nodeerr"]}}},"required":["regex","logType"]}]}},"execution":{"type":"object","properties":{"group":{"type":"string"},"timeout":{"type":"number"},"depends_on":{"type":"array","items":{"type":"string"}},"stop_if_dependent_stops":{"type":"boolean"}},"required":[]}},"required":["type","id","args"]}},"metrics":{"type":"array","items":{"type":"object","patternProperties":{"^(.*)$":{}}}}}},{"type":"null"}]},"requirements":{"type":"array","items":{"type":"object","patternProperties":{"^(.*)$":{}}}},"metricChanges":{"type":"object","required":["added","updated","removed","unchanged"],"properties":{"added":{"type":"array","items":{"type":"string"}},"updated":{"type":"array","items":{"type":"string"}},"removed":{"type":"array","items":{"type":"string"}},"unchanged":{"type":"array","items":{"type":"string"}}}},"conflictKeys":{"type":"array","items":{"type":"string"}},"supportedMarkets":{"type":"array","items":{"type":"string"}},"existingThresholds":{"type":"array","items":{"type":"object","required":["id","name","metric","group","isGating"],"properties":{"id":{"type":"number"},"name":{"type":"string"},"metric":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"group":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"isGating":{"type":"boolean"}}}},"existingMarketThresholds":{"type":"array","items":{"type":"object","required":["thresholdId","marketAddress","jsonLogic","isOptional"],"properties":{"thresholdId":{"type":"number"},"marketAddress":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"jsonLogic":{"type":"object","patternProperties":{"^(.*)$":{}}},"isOptional":{"type":"boolean"}}}},"reconciliation":{"type":"object","required":["inSync","actionable","needsThreshold","hasGlobalLink","targetThresholdId","targetMetricKey","add","remove","benchmarkMetricKeys","defaultMetricKey"],"properties":{"inSync":{"type":"boolean"},"actionable":{"type":"boolean"},"needsThreshold":{"type":"boolean"},"hasGlobalLink":{"type":"boolean"},"targetThresholdId":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"targetMetricKey":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"add":{"type":"array","items":{"type":"object","required":["marketAddress","jsonLogic"],"properties":{"marketAddress":{"type":"string"},"jsonLogic":{"type":"object","patternProperties":{"^(.*)$":{}}}}}},"remove":{"type":"array","items":{"type":"object","required":["thresholdId","marketAddress"],"properties":{"thresholdId":{"type":"number"},"marketAddress":{"type":"string"}}}},"benchmarkMetricKeys":{"type":"array","items":{"type":"string"}},"defaultMetricKey":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]}}}}}}},"required":["changes"]}},"text/plain":{"schema":{"type":"object","properties":{"changes":{"type":"array","items":{"type":"object","required":["slug","status","operation","requirements","metricChanges","conflictKeys","supportedMarkets","existingThresholds","existingMarketThresholds","reconciliation"],"properties":{"slug":{"type":"string"},"status":{"anyOf":[{"const":"added","type":"string"},{"const":"updated","type":"string"},{"const":"removed","type":"string"},{"const":"unchanged","type":"string"}]},"operation":{"nullable":true,"anyOf":[{"type":"object","required":["name","ops","metrics"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"source":{"type":"string"},"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["container/run","container/create-volume"]},"id":{"type":"string"},"args":{"oneOf":[{"type":"object","properties":{"image":{"type":"string"},"aliases":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"cmd":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"volumes":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"dest":{"type":"string"}},"required":["name","dest"]}},"expose":{"oneOf":[{"type":"number"},{"type":"string"},{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"port":{"type":"number"},"type":{"type":"string","enum":["api","web","websocket","webapi","none"]},"health_checks":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["http"]},"path":{"type":"string"},"method":{"type":"string","enum":["GET","POST","PUT","DELETE"]},"expected_status":{"type":"number"},"headers":{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"type":"string"}},"body":{},"continuous":{"type":"boolean"}},"required":["type","path","method","expected_status","continuous"]},{"type":"object","properties":{"type":{"type":"string","enum":["websocket"]},"expected_response":{"type":"string"},"continuous":{"type":"boolean"}},"required":["type","expected_response","continuous"]}]}}},"required":["port"]},{"type":"array","items":{"oneOf":[{"type":"number"},{"type":"string"},{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"port":{"type":"number"},"type":{"type":"string","enum":["api","web","websocket","webapi","none"]},"health_checks":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["http"]},"path":{"type":"string"},"method":{"type":"string","enum":["GET","POST","PUT","DELETE"]},"expected_status":{"type":"number"},"headers":{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"type":"string"}},"body":{},"continuous":{"type":"boolean"}},"required":["type","path","method","expected_status","continuous"]},{"type":"object","properties":{"type":{"type":"string","enum":["websocket"]},"expected_response":{"type":"string"},"continuous":{"type":"boolean"}},"required":["type","expected_response","continuous"]}]}}},"required":["port"]}]}}]},"gpu":{"type":"boolean"},"work_dir":{"type":"string"},"entrypoint":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"env":{"type":"object","properties":{},"required":[],"additionalProperties":{"type":"string"}},"restart_policy":{"oneOf":[{"type":"object","properties":{"policy":{"type":"string","enum":["on-failure"]},"restart_tries":{"type":"number"}},"required":["policy"]},{"type":"string","enum":["on-failure","no","always","unless-stopped"]}]},"private":{"type":"boolean"},"resources":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"files":{"type":"array","items":{"type":"string"}},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"bucket":{"type":"string"},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target","bucket"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"buckets":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"files":{"type":"array","items":{"type":"string"}}},"required":["url"]}},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target","buckets"]},{"type":"object","properties":{"type":{"type":"string","enum":["HF"]},"target":{"type":"string"},"repo":{"type":"string"},"revision":{"type":"string"},"files":{"type":"array","items":{"type":"string"}},"accessToken":{"type":"string"}},"required":["type","target","repo"]},{"type":"object","properties":{"type":{"type":"string","enum":["Ollama"]},"model":{"type":"string"},"target":{"type":"string"}},"required":["type","model"]},{"type":"string","enum":["__remove-if-empty__"]}]}},"authentication":{"type":"object","properties":{"docker":{"type":"object","properties":{"username":{"type":"string"},"password":{"type":"string"},"email":{"type":"string"},"server":{"type":"string"}},"required":[]}},"required":[]}},"required":["image"]},{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}]},"results":{"type":"object","properties":{},"required":[],"additionalProperties":{"oneOf":[{"type":"string"},{"type":"object","properties":{"regex":{"type":"string"},"logType":{"type":"array","items":{"type":"string","enum":["stdin","stdout","stderr","nodeerr"]}}},"required":["regex","logType"]}]}},"execution":{"type":"object","properties":{"group":{"type":"string"},"timeout":{"type":"number"},"depends_on":{"type":"array","items":{"type":"string"}},"stop_if_dependent_stops":{"type":"boolean"}},"required":[]}},"required":["type","id","args"]}},"metrics":{"type":"array","items":{"type":"object","patternProperties":{"^(.*)$":{}}}}}},{"type":"null"}]},"requirements":{"type":"array","items":{"type":"object","patternProperties":{"^(.*)$":{}}}},"metricChanges":{"type":"object","required":["added","updated","removed","unchanged"],"properties":{"added":{"type":"array","items":{"type":"string"}},"updated":{"type":"array","items":{"type":"string"}},"removed":{"type":"array","items":{"type":"string"}},"unchanged":{"type":"array","items":{"type":"string"}}}},"conflictKeys":{"type":"array","items":{"type":"string"}},"supportedMarkets":{"type":"array","items":{"type":"string"}},"existingThresholds":{"type":"array","items":{"type":"object","required":["id","name","metric","group","isGating"],"properties":{"id":{"type":"number"},"name":{"type":"string"},"metric":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"group":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"isGating":{"type":"boolean"}}}},"existingMarketThresholds":{"type":"array","items":{"type":"object","required":["thresholdId","marketAddress","jsonLogic","isOptional"],"properties":{"thresholdId":{"type":"number"},"marketAddress":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"jsonLogic":{"type":"object","patternProperties":{"^(.*)$":{}}},"isOptional":{"type":"boolean"}}}},"reconciliation":{"type":"object","required":["inSync","actionable","needsThreshold","hasGlobalLink","targetThresholdId","targetMetricKey","add","remove","benchmarkMetricKeys","defaultMetricKey"],"properties":{"inSync":{"type":"boolean"},"actionable":{"type":"boolean"},"needsThreshold":{"type":"boolean"},"hasGlobalLink":{"type":"boolean"},"targetThresholdId":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"targetMetricKey":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"add":{"type":"array","items":{"type":"object","required":["marketAddress","jsonLogic"],"properties":{"marketAddress":{"type":"string"},"jsonLogic":{"type":"object","patternProperties":{"^(.*)$":{}}}}}},"remove":{"type":"array","items":{"type":"object","required":["thresholdId","marketAddress"],"properties":{"thresholdId":{"type":"number"},"marketAddress":{"type":"string"}}}},"benchmarkMetricKeys":{"type":"array","items":{"type":"string"}},"defaultMetricKey":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]}}}}}}},"required":["changes"]}}}}},"operationId":"getBenchmark-templatesRefresh","tags":["Host Manager / Templates"],"summary":"Preview the benchmark template diff against stored github operations (added/updated/removed metrics + operations, supported markets, existing thresholds). Read-only — writes nothing.","x-service":"host-manager"}},"/benchmarks/{id}/prediction":{"post":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"operationId":"postBenchmarksByIdPrediction","tags":["Host Manager / Benchmarks"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["uuid","prediction"],"properties":{"uuid":{"type":"string"},"prediction":{"type":"number"}},"additionalProperties":false}},"multipart/form-data":{"schema":{"type":"object","required":["uuid","prediction"],"properties":{"uuid":{"type":"string"},"prediction":{"type":"number"}},"additionalProperties":false}},"text/plain":{"schema":{"type":"object","required":["uuid","prediction"],"properties":{"uuid":{"type":"string"},"prediction":{"type":"number"}},"additionalProperties":false}}}},"responses":{"200":{}},"x-service":"host-manager"}},"/benchmarks/{id}/seed":{"post":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"seeds":{"type":"object","patternProperties":{"^(.*)$":{"type":"number"}}}},"required":["seeds"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"seeds":{"type":"object","patternProperties":{"^(.*)$":{"type":"number"}}}},"required":["seeds"]}},"text/plain":{"schema":{"type":"object","properties":{"seeds":{"type":"object","patternProperties":{"^(.*)$":{"type":"number"}}}},"required":["seeds"]}}}}},"operationId":"postBenchmarksByIdSeed","tags":["Host Manager / Benchmarks"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"type":"object","required":["uuid","type"],"properties":{"uuid":{"type":"string"},"type":{"type":"string"}}}}},"multipart/form-data":{"schema":{"type":"array","items":{"type":"object","required":["uuid","type"],"properties":{"uuid":{"type":"string"},"type":{"type":"string"}}}}},"text/plain":{"schema":{"type":"array","items":{"type":"object","required":["uuid","type"],"properties":{"uuid":{"type":"string"},"type":{"type":"string"}}}}}}},"x-service":"host-manager"}},"/benchmarks/{id}/submit-results":{"post":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"status":{"anyOf":[{"const":"success","type":"string"},{"const":"failed","type":"string"}]},"report":{"type":"object","required":["marketAddress","passed","metrics"],"properties":{"marketAddress":{"type":"string"},"marketName":{"type":"string"},"passed":{"type":"boolean"},"metrics":{"type":"array","items":{"type":"object","required":["metricKey","ruleDescription","passed"],"properties":{"metricKey":{"type":"string"},"measuredValue":{"anyOf":[{"type":"number"},{"type":"string"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"anyOf":[{"type":"number"},{"type":"string"},{"type":"boolean"},{"type":"null"}]}}]},"ruleDescription":{"type":"string"},"passed":{"type":"boolean"},"failureMessage":{"type":"string"}}}}}}},"required":["status"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"status":{"anyOf":[{"const":"success","type":"string"},{"const":"failed","type":"string"}]},"report":{"type":"object","required":["marketAddress","passed","metrics"],"properties":{"marketAddress":{"type":"string"},"marketName":{"type":"string"},"passed":{"type":"boolean"},"metrics":{"type":"array","items":{"type":"object","required":["metricKey","ruleDescription","passed"],"properties":{"metricKey":{"type":"string"},"measuredValue":{"anyOf":[{"type":"number"},{"type":"string"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"anyOf":[{"type":"number"},{"type":"string"},{"type":"boolean"},{"type":"null"}]}}]},"ruleDescription":{"type":"string"},"passed":{"type":"boolean"},"failureMessage":{"type":"string"}}}}}}},"required":["status"]}},"text/plain":{"schema":{"type":"object","properties":{"status":{"anyOf":[{"const":"success","type":"string"},{"const":"failed","type":"string"}]},"report":{"type":"object","required":["marketAddress","passed","metrics"],"properties":{"marketAddress":{"type":"string"},"marketName":{"type":"string"},"passed":{"type":"boolean"},"metrics":{"type":"array","items":{"type":"object","required":["metricKey","ruleDescription","passed"],"properties":{"metricKey":{"type":"string"},"measuredValue":{"anyOf":[{"type":"number"},{"type":"string"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"anyOf":[{"type":"number"},{"type":"string"},{"type":"boolean"},{"type":"null"}]}}]},"ruleDescription":{"type":"string"},"passed":{"type":"boolean"},"failureMessage":{"type":"string"}}}}}}},"required":["status"]}}}}},"operationId":"postBenchmarksByIdSubmit-results","tags":["Host Manager / Benchmarks"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"noValidate":true,"type":"object","required":["opStates"],"properties":{"status":{"type":"string"},"startTime":{"type":"number"},"endTime":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"errors":{"type":"array","items":{}},"opStates":{"type":"array","items":{"type":"object","required":["exitCode"],"properties":{"providerId":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"operationId":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"group":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"startTime":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"endTime":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"exitCode":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"logs":{"type":"array","items":{"type":"object","required":["type"],"properties":{"type":{"anyOf":[{"const":"stdin","type":"string"},{"const":"stdout","type":"string"},{"const":"stderr","type":"string"},{"const":"nodeerr","type":"string"}]},"log":{"type":"string"},"timestamp":{"type":"string"}}}},"results":{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"type":"object","properties":{}},"error":{"type":"object","required":["event","message"],"properties":{"event":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"}}},"diagnostics":{"type":"object","required":["reason"],"properties":{"reason":{"type":"object","required":["hostShutDown","jobStopped","jobExpired"],"properties":{"hostShutDown":{"type":"boolean"},"jobStopped":{"type":"boolean"},"jobExpired":{"type":"boolean"},"reason":{"type":"string"}}},"state":{"type":"object","required":["Status","Running","Paused","Restarting","OOMKilled","Dead","Pid","ExitCode","Error","StartedAt","FinishedAt","RestartCount"],"properties":{"Status":{"type":"string"},"Running":{"type":"boolean"},"Paused":{"type":"boolean"},"Restarting":{"type":"boolean"},"OOMKilled":{"type":"boolean"},"Dead":{"type":"boolean"},"Pid":{"type":"number"},"ExitCode":{"type":"number"},"Error":{"type":"string"},"StartedAt":{"type":"string"},"FinishedAt":{"type":"string"},"RestartCount":{"type":"number"},"Health":{"type":"object","required":["Status","FailingStreak","Log"],"properties":{"Status":{"type":"string"},"FailingStreak":{"type":"number"},"Log":{"type":"array","items":{"type":"object","required":["Start","End","ExitCode","Output"],"properties":{"Start":{"type":"string"},"End":{"type":"string"},"ExitCode":{"type":"number"},"Output":{"type":"string"}}}}}}}}}},"env":{"additionalProperties":{"type":"string"},"type":"object","properties":{}}}}},"secrets":{"additionalProperties":{},"type":"object","properties":{}}},"additionalProperties":false}},"multipart/form-data":{"schema":{"noValidate":true,"type":"object","required":["opStates"],"properties":{"status":{"type":"string"},"startTime":{"type":"number"},"endTime":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"errors":{"type":"array","items":{}},"opStates":{"type":"array","items":{"type":"object","required":["exitCode"],"properties":{"providerId":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"operationId":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"group":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"startTime":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"endTime":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"exitCode":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"logs":{"type":"array","items":{"type":"object","required":["type"],"properties":{"type":{"anyOf":[{"const":"stdin","type":"string"},{"const":"stdout","type":"string"},{"const":"stderr","type":"string"},{"const":"nodeerr","type":"string"}]},"log":{"type":"string"},"timestamp":{"type":"string"}}}},"results":{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"type":"object","properties":{}},"error":{"type":"object","required":["event","message"],"properties":{"event":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"}}},"diagnostics":{"type":"object","required":["reason"],"properties":{"reason":{"type":"object","required":["hostShutDown","jobStopped","jobExpired"],"properties":{"hostShutDown":{"type":"boolean"},"jobStopped":{"type":"boolean"},"jobExpired":{"type":"boolean"},"reason":{"type":"string"}}},"state":{"type":"object","required":["Status","Running","Paused","Restarting","OOMKilled","Dead","Pid","ExitCode","Error","StartedAt","FinishedAt","RestartCount"],"properties":{"Status":{"type":"string"},"Running":{"type":"boolean"},"Paused":{"type":"boolean"},"Restarting":{"type":"boolean"},"OOMKilled":{"type":"boolean"},"Dead":{"type":"boolean"},"Pid":{"type":"number"},"ExitCode":{"type":"number"},"Error":{"type":"string"},"StartedAt":{"type":"string"},"FinishedAt":{"type":"string"},"RestartCount":{"type":"number"},"Health":{"type":"object","required":["Status","FailingStreak","Log"],"properties":{"Status":{"type":"string"},"FailingStreak":{"type":"number"},"Log":{"type":"array","items":{"type":"object","required":["Start","End","ExitCode","Output"],"properties":{"Start":{"type":"string"},"End":{"type":"string"},"ExitCode":{"type":"number"},"Output":{"type":"string"}}}}}}}}}},"env":{"additionalProperties":{"type":"string"},"type":"object","properties":{}}}}},"secrets":{"additionalProperties":{},"type":"object","properties":{}}},"additionalProperties":false}},"text/plain":{"schema":{"noValidate":true,"type":"object","required":["opStates"],"properties":{"status":{"type":"string"},"startTime":{"type":"number"},"endTime":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"errors":{"type":"array","items":{}},"opStates":{"type":"array","items":{"type":"object","required":["exitCode"],"properties":{"providerId":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"operationId":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"group":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"startTime":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"endTime":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"exitCode":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"logs":{"type":"array","items":{"type":"object","required":["type"],"properties":{"type":{"anyOf":[{"const":"stdin","type":"string"},{"const":"stdout","type":"string"},{"const":"stderr","type":"string"},{"const":"nodeerr","type":"string"}]},"log":{"type":"string"},"timestamp":{"type":"string"}}}},"results":{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"type":"object","properties":{}},"error":{"type":"object","required":["event","message"],"properties":{"event":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"}}},"diagnostics":{"type":"object","required":["reason"],"properties":{"reason":{"type":"object","required":["hostShutDown","jobStopped","jobExpired"],"properties":{"hostShutDown":{"type":"boolean"},"jobStopped":{"type":"boolean"},"jobExpired":{"type":"boolean"},"reason":{"type":"string"}}},"state":{"type":"object","required":["Status","Running","Paused","Restarting","OOMKilled","Dead","Pid","ExitCode","Error","StartedAt","FinishedAt","RestartCount"],"properties":{"Status":{"type":"string"},"Running":{"type":"boolean"},"Paused":{"type":"boolean"},"Restarting":{"type":"boolean"},"OOMKilled":{"type":"boolean"},"Dead":{"type":"boolean"},"Pid":{"type":"number"},"ExitCode":{"type":"number"},"Error":{"type":"string"},"StartedAt":{"type":"string"},"FinishedAt":{"type":"string"},"RestartCount":{"type":"number"},"Health":{"type":"object","required":["Status","FailingStreak","Log"],"properties":{"Status":{"type":"string"},"FailingStreak":{"type":"number"},"Log":{"type":"array","items":{"type":"object","required":["Start","End","ExitCode","Output"],"properties":{"Start":{"type":"string"},"End":{"type":"string"},"ExitCode":{"type":"number"},"Output":{"type":"string"}}}}}}}}}},"env":{"additionalProperties":{"type":"string"},"type":"object","properties":{}}}}},"secrets":{"additionalProperties":{},"type":"object","properties":{}}},"additionalProperties":false}}}},"x-service":"host-manager"}},"/benchmarks/benchmark-version":{"get":{"operationId":"getBenchmarksBenchmark-version","tags":["Host Manager / Benchmarks"],"responses":{"200":{}},"x-service":"host-manager"},"post":{"parameters":[{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"operationId":"postBenchmarksBenchmark-version","tags":["Host Manager / Benchmarks"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["value"],"properties":{"value":{"type":"string"}}}},"multipart/form-data":{"schema":{"type":"object","required":["value"],"properties":{"value":{"type":"string"}}}},"text/plain":{"schema":{"type":"object","required":["value"],"properties":{"value":{"type":"string"}}}}}},"responses":{"200":{}},"x-service":"host-manager"}},"/benchmarks/market-metric-aggregates":{"get":{"parameters":[{"schema":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"in":"query","name":"metrics","required":false},{"schema":{"type":"string"},"in":"query","name":"marketAddress","required":false},{"schema":{"type":"string"},"in":"query","name":"nodeId","required":false},{"schema":{"anyOf":[{"const":"average","type":"string"},{"const":"min","type":"string"},{"const":"max","type":"string"},{"const":"median","type":"string"}]},"in":"query","name":"aggregate","required":false}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"aggregate":{"anyOf":[{"const":"average","type":"string"},{"const":"min","type":"string"},{"const":"max","type":"string"},{"const":"median","type":"string"}]},"markets":{"type":"array","items":{"description":"Aggregate of per-node averages per metric — each node is weighted equally regardless of how many benchmark runs it has.","type":"object","required":["marketAddress","metrics"],"properties":{"marketAddress":{"type":"string"},"metrics":{"type":"object","patternProperties":{"^(.*)$":{"type":"number"}}}}}},"node":{"description":"Aggregate across all individual benchmark runs for this node.","type":"object","required":["nodeId","metrics"],"properties":{"nodeId":{"type":"string"},"metrics":{"type":"object","patternProperties":{"^(.*)$":{"type":"number"}}}}}},"required":["aggregate","markets"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"aggregate":{"anyOf":[{"const":"average","type":"string"},{"const":"min","type":"string"},{"const":"max","type":"string"},{"const":"median","type":"string"}]},"markets":{"type":"array","items":{"description":"Aggregate of per-node averages per metric — each node is weighted equally regardless of how many benchmark runs it has.","type":"object","required":["marketAddress","metrics"],"properties":{"marketAddress":{"type":"string"},"metrics":{"type":"object","patternProperties":{"^(.*)$":{"type":"number"}}}}}},"node":{"description":"Aggregate across all individual benchmark runs for this node.","type":"object","required":["nodeId","metrics"],"properties":{"nodeId":{"type":"string"},"metrics":{"type":"object","patternProperties":{"^(.*)$":{"type":"number"}}}}}},"required":["aggregate","markets"]}},"text/plain":{"schema":{"type":"object","properties":{"aggregate":{"anyOf":[{"const":"average","type":"string"},{"const":"min","type":"string"},{"const":"max","type":"string"},{"const":"median","type":"string"}]},"markets":{"type":"array","items":{"description":"Aggregate of per-node averages per metric — each node is weighted equally regardless of how many benchmark runs it has.","type":"object","required":["marketAddress","metrics"],"properties":{"marketAddress":{"type":"string"},"metrics":{"type":"object","patternProperties":{"^(.*)$":{"type":"number"}}}}}},"node":{"description":"Aggregate across all individual benchmark runs for this node.","type":"object","required":["nodeId","metrics"],"properties":{"nodeId":{"type":"string"},"metrics":{"type":"object","patternProperties":{"^(.*)$":{"type":"number"}}}}}},"required":["aggregate","markets"]}}}}},"operationId":"getBenchmarksMarket-metric-aggregates","tags":["Host Manager / Benchmarks"],"x-service":"host-manager"}},"/benchmarks/market-thresholds":{"get":{"parameters":[{"schema":{"type":"string"},"in":"header","name":"authorization","required":true},{"schema":{"anyOf":[{"format":"numeric","default":0,"type":"string"},{"type":"number"}]},"in":"query","name":"thresholdId","required":false},{"schema":{"type":"string"},"in":"query","name":"marketAddress","required":false}],"operationId":"getBenchmarksMarket-thresholds","tags":["Host Manager / Benchmarks"],"responses":{"200":{}},"x-service":"host-manager"}},"/benchmarks/market-thresholds/create":{"post":{"parameters":[{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"operationId":"postBenchmarksMarket-thresholdsCreate","tags":["Host Manager / Benchmarks"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["thresholdId","marketAddresses","jsonLogic"],"properties":{"thresholdId":{"type":"number"},"marketAddresses":{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"null"}]}},"jsonLogic":{"type":"object","patternProperties":{"^(.*)$":{}}},"interval":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"isOptional":{"type":"boolean"}}}},"multipart/form-data":{"schema":{"type":"object","required":["thresholdId","marketAddresses","jsonLogic"],"properties":{"thresholdId":{"type":"number"},"marketAddresses":{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"null"}]}},"jsonLogic":{"type":"object","patternProperties":{"^(.*)$":{}}},"interval":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"isOptional":{"type":"boolean"}}}},"text/plain":{"schema":{"type":"object","required":["thresholdId","marketAddresses","jsonLogic"],"properties":{"thresholdId":{"type":"number"},"marketAddresses":{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"null"}]}},"jsonLogic":{"type":"object","patternProperties":{"^(.*)$":{}}},"interval":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"isOptional":{"type":"boolean"}}}}}},"responses":{"200":{}},"x-service":"host-manager"}},"/benchmarks/market-thresholds/delete":{"delete":{"parameters":[{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"operationId":"deleteBenchmarksMarket-thresholdsDelete","tags":["Host Manager / Benchmarks"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["thresholdId","marketAddress"],"properties":{"thresholdId":{"type":"number"},"marketAddress":{"anyOf":[{"type":"string"},{"type":"null"}]}}}},"multipart/form-data":{"schema":{"type":"object","required":["thresholdId","marketAddress"],"properties":{"thresholdId":{"type":"number"},"marketAddress":{"anyOf":[{"type":"string"},{"type":"null"}]}}}},"text/plain":{"schema":{"type":"object","required":["thresholdId","marketAddress"],"properties":{"thresholdId":{"type":"number"},"marketAddress":{"anyOf":[{"type":"string"},{"type":"null"}]}}}}}},"responses":{"200":{}},"x-service":"host-manager"}},"/benchmarks/market-thresholds/describe":{"post":{"parameters":[{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string"}},"required":["description"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"description":{"type":"string"}},"required":["description"]}},"text/plain":{"schema":{"type":"object","properties":{"description":{"type":"string"}},"required":["description"]}}}}},"operationId":"postBenchmarksMarket-thresholdsDescribe","tags":["Host Manager / Benchmarks"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["jsonLogic"],"properties":{"jsonLogic":{"type":"object","patternProperties":{"^(.*)$":{}}},"subject":{"type":"string"}}}},"multipart/form-data":{"schema":{"type":"object","required":["jsonLogic"],"properties":{"jsonLogic":{"type":"object","patternProperties":{"^(.*)$":{}}},"subject":{"type":"string"}}}},"text/plain":{"schema":{"type":"object","required":["jsonLogic"],"properties":{"jsonLogic":{"type":"object","patternProperties":{"^(.*)$":{}}},"subject":{"type":"string"}}}}}},"x-service":"host-manager"}},"/benchmarks/market-thresholds/simulate-impact":{"post":{"parameters":[{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"evaluatedNodes":{"type":"number"},"nodes":{"type":"array","items":{"type":"object","required":["nodeAddress","marketAddress","assignedMarket","reason","measured"],"properties":{"nodeAddress":{"type":"string"},"marketAddress":{"type":"string"},"assignedMarket":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"reason":{"anyOf":[{"const":"missingMetric","type":"string"},{"const":"noRecentData","type":"string"},{"const":"expired","type":"string"},{"const":"belowRequirement","type":"string"}]},"measured":{"nullable":true,"anyOf":[{"anyOf":[{"type":"number"},{"type":"string"},{"type":"boolean"}]},{"type":"null"}]}}}}},"required":["evaluatedNodes","nodes"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"evaluatedNodes":{"type":"number"},"nodes":{"type":"array","items":{"type":"object","required":["nodeAddress","marketAddress","assignedMarket","reason","measured"],"properties":{"nodeAddress":{"type":"string"},"marketAddress":{"type":"string"},"assignedMarket":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"reason":{"anyOf":[{"const":"missingMetric","type":"string"},{"const":"noRecentData","type":"string"},{"const":"expired","type":"string"},{"const":"belowRequirement","type":"string"}]},"measured":{"nullable":true,"anyOf":[{"anyOf":[{"type":"number"},{"type":"string"},{"type":"boolean"}]},{"type":"null"}]}}}}},"required":["evaluatedNodes","nodes"]}},"text/plain":{"schema":{"type":"object","properties":{"evaluatedNodes":{"type":"number"},"nodes":{"type":"array","items":{"type":"object","required":["nodeAddress","marketAddress","assignedMarket","reason","measured"],"properties":{"nodeAddress":{"type":"string"},"marketAddress":{"type":"string"},"assignedMarket":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"reason":{"anyOf":[{"const":"missingMetric","type":"string"},{"const":"noRecentData","type":"string"},{"const":"expired","type":"string"},{"const":"belowRequirement","type":"string"}]},"measured":{"nullable":true,"anyOf":[{"anyOf":[{"type":"number"},{"type":"string"},{"type":"boolean"}]},{"type":"null"}]}}}}},"required":["evaluatedNodes","nodes"]}}}}},"operationId":"postBenchmarksMarket-thresholdsSimulate-impact","tags":["Host Manager / Benchmarks"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["thresholdId","marketAddresses","jsonLogic"],"properties":{"thresholdId":{"type":"number"},"marketAddresses":{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"null"}]}},"jsonLogic":{"type":"object","patternProperties":{"^(.*)$":{}}},"interval":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"isOptional":{"type":"boolean"},"isGating":{"type":"boolean"}}}},"multipart/form-data":{"schema":{"type":"object","required":["thresholdId","marketAddresses","jsonLogic"],"properties":{"thresholdId":{"type":"number"},"marketAddresses":{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"null"}]}},"jsonLogic":{"type":"object","patternProperties":{"^(.*)$":{}}},"interval":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"isOptional":{"type":"boolean"},"isGating":{"type":"boolean"}}}},"text/plain":{"schema":{"type":"object","required":["thresholdId","marketAddresses","jsonLogic"],"properties":{"thresholdId":{"type":"number"},"marketAddresses":{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"null"}]}},"jsonLogic":{"type":"object","patternProperties":{"^(.*)$":{}}},"interval":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"isOptional":{"type":"boolean"},"isGating":{"type":"boolean"}}}}}},"x-service":"host-manager"}},"/benchmarks/market-thresholds/update":{"post":{"parameters":[{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"operationId":"postBenchmarksMarket-thresholdsUpdate","tags":["Host Manager / Benchmarks"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["thresholdId","marketAddresses","jsonLogic"],"properties":{"thresholdId":{"type":"number"},"marketAddresses":{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"null"}]}},"jsonLogic":{"type":"object","patternProperties":{"^(.*)$":{}}},"interval":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"isOptional":{"type":"boolean"}}}},"multipart/form-data":{"schema":{"type":"object","required":["thresholdId","marketAddresses","jsonLogic"],"properties":{"thresholdId":{"type":"number"},"marketAddresses":{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"null"}]}},"jsonLogic":{"type":"object","patternProperties":{"^(.*)$":{}}},"interval":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"isOptional":{"type":"boolean"}}}},"text/plain":{"schema":{"type":"object","required":["thresholdId","marketAddresses","jsonLogic"],"properties":{"thresholdId":{"type":"number"},"marketAddresses":{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"null"}]}},"jsonLogic":{"type":"object","patternProperties":{"^(.*)$":{}}},"interval":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"isOptional":{"type":"boolean"}}}}}},"responses":{"200":{}},"x-service":"host-manager"}},"/benchmarks/metric-processors":{"get":{"operationId":"getBenchmarksMetric-processors","tags":["Host Manager / Benchmarks"],"responses":{"200":{}},"x-service":"host-manager"}},"/benchmarks/metrics":{"get":{"parameters":[{"schema":{"type":"string"},"in":"header","name":"authorization","required":true},{"schema":{"anyOf":[{"format":"numeric","default":0,"type":"string"},{"type":"number"}]},"in":"query","name":"operationId","required":false}],"operationId":"getBenchmarksMetrics","tags":["Host Manager / Benchmarks"],"responses":{"200":{}},"x-service":"host-manager"}},"/benchmarks/metrics/{key}/delete":{"delete":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"key","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"operationId":"deleteBenchmarksMetricsByKeyDelete","tags":["Host Manager / Benchmarks"],"responses":{"200":{}},"x-service":"host-manager"}},"/benchmarks/metrics/{key}/update":{"post":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"key","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"operationId":"postBenchmarksMetricsByKeyUpdate","tags":["Host Manager / Benchmarks"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["key","defaultValue"],"properties":{"key":{"type":"string"},"invalidatedByMetricKey":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"input":{"type":"string"},"type":{"type":"string"},"expiry":{"type":"string"},"internal":{"type":"boolean"},"lifecycle":{"type":"boolean"},"match":{"nullable":true,"anyOf":[{"default":"exact","type":"string","enum":["exact","minimum"]},{"type":"null"}]},"processor":{"type":"string"},"operationId":{"type":"number"},"group":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"multiValue":{"type":"boolean"},"instanceKey":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"defaultValue":{}}}},"multipart/form-data":{"schema":{"type":"object","required":["key","defaultValue"],"properties":{"key":{"type":"string"},"invalidatedByMetricKey":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"input":{"type":"string"},"type":{"type":"string"},"expiry":{"type":"string"},"internal":{"type":"boolean"},"lifecycle":{"type":"boolean"},"match":{"nullable":true,"anyOf":[{"default":"exact","type":"string","enum":["exact","minimum"]},{"type":"null"}]},"processor":{"type":"string"},"operationId":{"type":"number"},"group":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"multiValue":{"type":"boolean"},"instanceKey":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"defaultValue":{}}}},"text/plain":{"schema":{"type":"object","required":["key","defaultValue"],"properties":{"key":{"type":"string"},"invalidatedByMetricKey":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"input":{"type":"string"},"type":{"type":"string"},"expiry":{"type":"string"},"internal":{"type":"boolean"},"lifecycle":{"type":"boolean"},"match":{"nullable":true,"anyOf":[{"default":"exact","type":"string","enum":["exact","minimum"]},{"type":"null"}]},"processor":{"type":"string"},"operationId":{"type":"number"},"group":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"multiValue":{"type":"boolean"},"instanceKey":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"defaultValue":{}}}}}},"responses":{"200":{}},"x-service":"host-manager"}},"/benchmarks/metrics/create":{"post":{"parameters":[{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"operationId":"postBenchmarksMetricsCreate","tags":["Host Manager / Benchmarks"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["key","defaultValue"],"properties":{"key":{"type":"string"},"invalidatedByMetricKey":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"input":{"type":"string"},"type":{"type":"string"},"expiry":{"type":"string"},"internal":{"type":"boolean"},"lifecycle":{"type":"boolean"},"match":{"nullable":true,"anyOf":[{"default":"exact","type":"string","enum":["exact","minimum"]},{"type":"null"}]},"processor":{"type":"string"},"operationId":{"type":"number"},"group":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"multiValue":{"type":"boolean"},"instanceKey":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"defaultValue":{}}}},"multipart/form-data":{"schema":{"type":"object","required":["key","defaultValue"],"properties":{"key":{"type":"string"},"invalidatedByMetricKey":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"input":{"type":"string"},"type":{"type":"string"},"expiry":{"type":"string"},"internal":{"type":"boolean"},"lifecycle":{"type":"boolean"},"match":{"nullable":true,"anyOf":[{"default":"exact","type":"string","enum":["exact","minimum"]},{"type":"null"}]},"processor":{"type":"string"},"operationId":{"type":"number"},"group":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"multiValue":{"type":"boolean"},"instanceKey":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"defaultValue":{}}}},"text/plain":{"schema":{"type":"object","required":["key","defaultValue"],"properties":{"key":{"type":"string"},"invalidatedByMetricKey":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"input":{"type":"string"},"type":{"type":"string"},"expiry":{"type":"string"},"internal":{"type":"boolean"},"lifecycle":{"type":"boolean"},"match":{"nullable":true,"anyOf":[{"default":"exact","type":"string","enum":["exact","minimum"]},{"type":"null"}]},"processor":{"type":"string"},"operationId":{"type":"number"},"group":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"multiValue":{"type":"boolean"},"instanceKey":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"defaultValue":{}}}}}},"responses":{"200":{}},"x-service":"host-manager"}},"/benchmarks/operations":{"get":{"operationId":"getBenchmarksOperations","tags":["Host Manager / Benchmarks"],"responses":{"200":{}},"x-service":"host-manager"}},"/benchmarks/operations/{id}/delete":{"delete":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"operationId":"deleteBenchmarksOperationsByIdDelete","tags":["Host Manager / Benchmarks"],"responses":{"200":{}},"x-service":"host-manager"}},"/benchmarks/operations/{id}/update":{"post":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"operationId":"postBenchmarksOperationsByIdUpdate","tags":["Host Manager / Benchmarks"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name","ops"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["container/run","container/create-volume"]},"id":{"type":"string"},"args":{"oneOf":[{"type":"object","properties":{"image":{"type":"string"},"aliases":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"cmd":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"volumes":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"dest":{"type":"string"}},"required":["name","dest"]}},"expose":{"oneOf":[{"type":"number"},{"type":"string"},{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"port":{"type":"number"},"type":{"type":"string","enum":["api","web","websocket","webapi","none"]},"health_checks":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["http"]},"path":{"type":"string"},"method":{"type":"string","enum":["GET","POST","PUT","DELETE"]},"expected_status":{"type":"number"},"headers":{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"type":"string"}},"body":{},"continuous":{"type":"boolean"}},"required":["type","path","method","expected_status","continuous"]},{"type":"object","properties":{"type":{"type":"string","enum":["websocket"]},"expected_response":{"type":"string"},"continuous":{"type":"boolean"}},"required":["type","expected_response","continuous"]}]}}},"required":["port"]},{"type":"array","items":{"oneOf":[{"type":"number"},{"type":"string"},{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"port":{"type":"number"},"type":{"type":"string","enum":["api","web","websocket","webapi","none"]},"health_checks":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["http"]},"path":{"type":"string"},"method":{"type":"string","enum":["GET","POST","PUT","DELETE"]},"expected_status":{"type":"number"},"headers":{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"type":"string"}},"body":{},"continuous":{"type":"boolean"}},"required":["type","path","method","expected_status","continuous"]},{"type":"object","properties":{"type":{"type":"string","enum":["websocket"]},"expected_response":{"type":"string"},"continuous":{"type":"boolean"}},"required":["type","expected_response","continuous"]}]}}},"required":["port"]}]}}]},"gpu":{"type":"boolean"},"work_dir":{"type":"string"},"entrypoint":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"env":{"type":"object","properties":{},"required":[],"additionalProperties":{"type":"string"}},"restart_policy":{"oneOf":[{"type":"object","properties":{"policy":{"type":"string","enum":["on-failure"]},"restart_tries":{"type":"number"}},"required":["policy"]},{"type":"string","enum":["on-failure","no","always","unless-stopped"]}]},"private":{"type":"boolean"},"resources":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"files":{"type":"array","items":{"type":"string"}},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"bucket":{"type":"string"},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target","bucket"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"buckets":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"files":{"type":"array","items":{"type":"string"}}},"required":["url"]}},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target","buckets"]},{"type":"object","properties":{"type":{"type":"string","enum":["HF"]},"target":{"type":"string"},"repo":{"type":"string"},"revision":{"type":"string"},"files":{"type":"array","items":{"type":"string"}},"accessToken":{"type":"string"}},"required":["type","target","repo"]},{"type":"object","properties":{"type":{"type":"string","enum":["Ollama"]},"model":{"type":"string"},"target":{"type":"string"}},"required":["type","model"]},{"type":"string","enum":["__remove-if-empty__"]}]}},"authentication":{"type":"object","properties":{"docker":{"type":"object","properties":{"username":{"type":"string"},"password":{"type":"string"},"email":{"type":"string"},"server":{"type":"string"}},"required":[]}},"required":[]}},"required":["image"]},{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}]},"results":{"type":"object","properties":{},"required":[],"additionalProperties":{"oneOf":[{"type":"string"},{"type":"object","properties":{"regex":{"type":"string"},"logType":{"type":"array","items":{"type":"string","enum":["stdin","stdout","stderr","nodeerr"]}}},"required":["regex","logType"]}]}},"execution":{"type":"object","properties":{"group":{"type":"string"},"timeout":{"type":"number"},"depends_on":{"type":"array","items":{"type":"string"}},"stop_if_dependent_stops":{"type":"boolean"}},"required":[]}},"required":["type","id","args"]}},"source":{"type":"string"},"timeoutSeconds":{"minimum":1,"anyOf":[{"format":"integer","default":0,"type":"string"},{"minimum":1,"type":"integer"}]},"metrics":{"type":"array","items":{"type":"object","required":["key","defaultValue"],"properties":{"key":{"type":"string"},"invalidatedByMetricKey":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"input":{"type":"string"},"type":{"type":"string"},"expiry":{"type":"string"},"internal":{"type":"boolean"},"lifecycle":{"type":"boolean"},"match":{"nullable":true,"anyOf":[{"default":"exact","type":"string","enum":["exact","minimum"]},{"type":"null"}]},"processor":{"type":"string"},"operationId":{"type":"number"},"group":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"multiValue":{"type":"boolean"},"instanceKey":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"defaultValue":{}}}}}}},"multipart/form-data":{"schema":{"type":"object","required":["name","ops"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["container/run","container/create-volume"]},"id":{"type":"string"},"args":{"oneOf":[{"type":"object","properties":{"image":{"type":"string"},"aliases":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"cmd":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"volumes":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"dest":{"type":"string"}},"required":["name","dest"]}},"expose":{"oneOf":[{"type":"number"},{"type":"string"},{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"port":{"type":"number"},"type":{"type":"string","enum":["api","web","websocket","webapi","none"]},"health_checks":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["http"]},"path":{"type":"string"},"method":{"type":"string","enum":["GET","POST","PUT","DELETE"]},"expected_status":{"type":"number"},"headers":{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"type":"string"}},"body":{},"continuous":{"type":"boolean"}},"required":["type","path","method","expected_status","continuous"]},{"type":"object","properties":{"type":{"type":"string","enum":["websocket"]},"expected_response":{"type":"string"},"continuous":{"type":"boolean"}},"required":["type","expected_response","continuous"]}]}}},"required":["port"]},{"type":"array","items":{"oneOf":[{"type":"number"},{"type":"string"},{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"port":{"type":"number"},"type":{"type":"string","enum":["api","web","websocket","webapi","none"]},"health_checks":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["http"]},"path":{"type":"string"},"method":{"type":"string","enum":["GET","POST","PUT","DELETE"]},"expected_status":{"type":"number"},"headers":{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"type":"string"}},"body":{},"continuous":{"type":"boolean"}},"required":["type","path","method","expected_status","continuous"]},{"type":"object","properties":{"type":{"type":"string","enum":["websocket"]},"expected_response":{"type":"string"},"continuous":{"type":"boolean"}},"required":["type","expected_response","continuous"]}]}}},"required":["port"]}]}}]},"gpu":{"type":"boolean"},"work_dir":{"type":"string"},"entrypoint":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"env":{"type":"object","properties":{},"required":[],"additionalProperties":{"type":"string"}},"restart_policy":{"oneOf":[{"type":"object","properties":{"policy":{"type":"string","enum":["on-failure"]},"restart_tries":{"type":"number"}},"required":["policy"]},{"type":"string","enum":["on-failure","no","always","unless-stopped"]}]},"private":{"type":"boolean"},"resources":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"files":{"type":"array","items":{"type":"string"}},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"bucket":{"type":"string"},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target","bucket"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"buckets":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"files":{"type":"array","items":{"type":"string"}}},"required":["url"]}},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target","buckets"]},{"type":"object","properties":{"type":{"type":"string","enum":["HF"]},"target":{"type":"string"},"repo":{"type":"string"},"revision":{"type":"string"},"files":{"type":"array","items":{"type":"string"}},"accessToken":{"type":"string"}},"required":["type","target","repo"]},{"type":"object","properties":{"type":{"type":"string","enum":["Ollama"]},"model":{"type":"string"},"target":{"type":"string"}},"required":["type","model"]},{"type":"string","enum":["__remove-if-empty__"]}]}},"authentication":{"type":"object","properties":{"docker":{"type":"object","properties":{"username":{"type":"string"},"password":{"type":"string"},"email":{"type":"string"},"server":{"type":"string"}},"required":[]}},"required":[]}},"required":["image"]},{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}]},"results":{"type":"object","properties":{},"required":[],"additionalProperties":{"oneOf":[{"type":"string"},{"type":"object","properties":{"regex":{"type":"string"},"logType":{"type":"array","items":{"type":"string","enum":["stdin","stdout","stderr","nodeerr"]}}},"required":["regex","logType"]}]}},"execution":{"type":"object","properties":{"group":{"type":"string"},"timeout":{"type":"number"},"depends_on":{"type":"array","items":{"type":"string"}},"stop_if_dependent_stops":{"type":"boolean"}},"required":[]}},"required":["type","id","args"]}},"source":{"type":"string"},"timeoutSeconds":{"minimum":1,"anyOf":[{"format":"integer","default":0,"type":"string"},{"minimum":1,"type":"integer"}]},"metrics":{"type":"array","items":{"type":"object","required":["key","defaultValue"],"properties":{"key":{"type":"string"},"invalidatedByMetricKey":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"input":{"type":"string"},"type":{"type":"string"},"expiry":{"type":"string"},"internal":{"type":"boolean"},"lifecycle":{"type":"boolean"},"match":{"nullable":true,"anyOf":[{"default":"exact","type":"string","enum":["exact","minimum"]},{"type":"null"}]},"processor":{"type":"string"},"operationId":{"type":"number"},"group":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"multiValue":{"type":"boolean"},"instanceKey":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"defaultValue":{}}}}}}},"text/plain":{"schema":{"type":"object","required":["name","ops"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["container/run","container/create-volume"]},"id":{"type":"string"},"args":{"oneOf":[{"type":"object","properties":{"image":{"type":"string"},"aliases":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"cmd":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"volumes":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"dest":{"type":"string"}},"required":["name","dest"]}},"expose":{"oneOf":[{"type":"number"},{"type":"string"},{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"port":{"type":"number"},"type":{"type":"string","enum":["api","web","websocket","webapi","none"]},"health_checks":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["http"]},"path":{"type":"string"},"method":{"type":"string","enum":["GET","POST","PUT","DELETE"]},"expected_status":{"type":"number"},"headers":{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"type":"string"}},"body":{},"continuous":{"type":"boolean"}},"required":["type","path","method","expected_status","continuous"]},{"type":"object","properties":{"type":{"type":"string","enum":["websocket"]},"expected_response":{"type":"string"},"continuous":{"type":"boolean"}},"required":["type","expected_response","continuous"]}]}}},"required":["port"]},{"type":"array","items":{"oneOf":[{"type":"number"},{"type":"string"},{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"port":{"type":"number"},"type":{"type":"string","enum":["api","web","websocket","webapi","none"]},"health_checks":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["http"]},"path":{"type":"string"},"method":{"type":"string","enum":["GET","POST","PUT","DELETE"]},"expected_status":{"type":"number"},"headers":{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"type":"string"}},"body":{},"continuous":{"type":"boolean"}},"required":["type","path","method","expected_status","continuous"]},{"type":"object","properties":{"type":{"type":"string","enum":["websocket"]},"expected_response":{"type":"string"},"continuous":{"type":"boolean"}},"required":["type","expected_response","continuous"]}]}}},"required":["port"]}]}}]},"gpu":{"type":"boolean"},"work_dir":{"type":"string"},"entrypoint":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"env":{"type":"object","properties":{},"required":[],"additionalProperties":{"type":"string"}},"restart_policy":{"oneOf":[{"type":"object","properties":{"policy":{"type":"string","enum":["on-failure"]},"restart_tries":{"type":"number"}},"required":["policy"]},{"type":"string","enum":["on-failure","no","always","unless-stopped"]}]},"private":{"type":"boolean"},"resources":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"files":{"type":"array","items":{"type":"string"}},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"bucket":{"type":"string"},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target","bucket"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"buckets":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"files":{"type":"array","items":{"type":"string"}}},"required":["url"]}},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target","buckets"]},{"type":"object","properties":{"type":{"type":"string","enum":["HF"]},"target":{"type":"string"},"repo":{"type":"string"},"revision":{"type":"string"},"files":{"type":"array","items":{"type":"string"}},"accessToken":{"type":"string"}},"required":["type","target","repo"]},{"type":"object","properties":{"type":{"type":"string","enum":["Ollama"]},"model":{"type":"string"},"target":{"type":"string"}},"required":["type","model"]},{"type":"string","enum":["__remove-if-empty__"]}]}},"authentication":{"type":"object","properties":{"docker":{"type":"object","properties":{"username":{"type":"string"},"password":{"type":"string"},"email":{"type":"string"},"server":{"type":"string"}},"required":[]}},"required":[]}},"required":["image"]},{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}]},"results":{"type":"object","properties":{},"required":[],"additionalProperties":{"oneOf":[{"type":"string"},{"type":"object","properties":{"regex":{"type":"string"},"logType":{"type":"array","items":{"type":"string","enum":["stdin","stdout","stderr","nodeerr"]}}},"required":["regex","logType"]}]}},"execution":{"type":"object","properties":{"group":{"type":"string"},"timeout":{"type":"number"},"depends_on":{"type":"array","items":{"type":"string"}},"stop_if_dependent_stops":{"type":"boolean"}},"required":[]}},"required":["type","id","args"]}},"source":{"type":"string"},"timeoutSeconds":{"minimum":1,"anyOf":[{"format":"integer","default":0,"type":"string"},{"minimum":1,"type":"integer"}]},"metrics":{"type":"array","items":{"type":"object","required":["key","defaultValue"],"properties":{"key":{"type":"string"},"invalidatedByMetricKey":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"input":{"type":"string"},"type":{"type":"string"},"expiry":{"type":"string"},"internal":{"type":"boolean"},"lifecycle":{"type":"boolean"},"match":{"nullable":true,"anyOf":[{"default":"exact","type":"string","enum":["exact","minimum"]},{"type":"null"}]},"processor":{"type":"string"},"operationId":{"type":"number"},"group":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"multiValue":{"type":"boolean"},"instanceKey":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"defaultValue":{}}}}}}}}},"responses":{"200":{}},"x-service":"host-manager"}},"/benchmarks/operations/create":{"post":{"parameters":[{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"operationId":"postBenchmarksOperationsCreate","tags":["Host Manager / Benchmarks"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name","ops"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["container/run","container/create-volume"]},"id":{"type":"string"},"args":{"oneOf":[{"type":"object","properties":{"image":{"type":"string"},"aliases":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"cmd":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"volumes":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"dest":{"type":"string"}},"required":["name","dest"]}},"expose":{"oneOf":[{"type":"number"},{"type":"string"},{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"port":{"type":"number"},"type":{"type":"string","enum":["api","web","websocket","webapi","none"]},"health_checks":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["http"]},"path":{"type":"string"},"method":{"type":"string","enum":["GET","POST","PUT","DELETE"]},"expected_status":{"type":"number"},"headers":{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"type":"string"}},"body":{},"continuous":{"type":"boolean"}},"required":["type","path","method","expected_status","continuous"]},{"type":"object","properties":{"type":{"type":"string","enum":["websocket"]},"expected_response":{"type":"string"},"continuous":{"type":"boolean"}},"required":["type","expected_response","continuous"]}]}}},"required":["port"]},{"type":"array","items":{"oneOf":[{"type":"number"},{"type":"string"},{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"port":{"type":"number"},"type":{"type":"string","enum":["api","web","websocket","webapi","none"]},"health_checks":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["http"]},"path":{"type":"string"},"method":{"type":"string","enum":["GET","POST","PUT","DELETE"]},"expected_status":{"type":"number"},"headers":{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"type":"string"}},"body":{},"continuous":{"type":"boolean"}},"required":["type","path","method","expected_status","continuous"]},{"type":"object","properties":{"type":{"type":"string","enum":["websocket"]},"expected_response":{"type":"string"},"continuous":{"type":"boolean"}},"required":["type","expected_response","continuous"]}]}}},"required":["port"]}]}}]},"gpu":{"type":"boolean"},"work_dir":{"type":"string"},"entrypoint":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"env":{"type":"object","properties":{},"required":[],"additionalProperties":{"type":"string"}},"restart_policy":{"oneOf":[{"type":"object","properties":{"policy":{"type":"string","enum":["on-failure"]},"restart_tries":{"type":"number"}},"required":["policy"]},{"type":"string","enum":["on-failure","no","always","unless-stopped"]}]},"private":{"type":"boolean"},"resources":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"files":{"type":"array","items":{"type":"string"}},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"bucket":{"type":"string"},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target","bucket"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"buckets":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"files":{"type":"array","items":{"type":"string"}}},"required":["url"]}},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target","buckets"]},{"type":"object","properties":{"type":{"type":"string","enum":["HF"]},"target":{"type":"string"},"repo":{"type":"string"},"revision":{"type":"string"},"files":{"type":"array","items":{"type":"string"}},"accessToken":{"type":"string"}},"required":["type","target","repo"]},{"type":"object","properties":{"type":{"type":"string","enum":["Ollama"]},"model":{"type":"string"},"target":{"type":"string"}},"required":["type","model"]},{"type":"string","enum":["__remove-if-empty__"]}]}},"authentication":{"type":"object","properties":{"docker":{"type":"object","properties":{"username":{"type":"string"},"password":{"type":"string"},"email":{"type":"string"},"server":{"type":"string"}},"required":[]}},"required":[]}},"required":["image"]},{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}]},"results":{"type":"object","properties":{},"required":[],"additionalProperties":{"oneOf":[{"type":"string"},{"type":"object","properties":{"regex":{"type":"string"},"logType":{"type":"array","items":{"type":"string","enum":["stdin","stdout","stderr","nodeerr"]}}},"required":["regex","logType"]}]}},"execution":{"type":"object","properties":{"group":{"type":"string"},"timeout":{"type":"number"},"depends_on":{"type":"array","items":{"type":"string"}},"stop_if_dependent_stops":{"type":"boolean"}},"required":[]}},"required":["type","id","args"]}},"source":{"type":"string"},"timeoutSeconds":{"minimum":1,"anyOf":[{"format":"integer","default":0,"type":"string"},{"minimum":1,"type":"integer"}]},"metrics":{"type":"array","items":{"type":"object","required":["key","defaultValue"],"properties":{"key":{"type":"string"},"invalidatedByMetricKey":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"input":{"type":"string"},"type":{"type":"string"},"expiry":{"type":"string"},"internal":{"type":"boolean"},"lifecycle":{"type":"boolean"},"match":{"nullable":true,"anyOf":[{"default":"exact","type":"string","enum":["exact","minimum"]},{"type":"null"}]},"processor":{"type":"string"},"operationId":{"type":"number"},"group":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"multiValue":{"type":"boolean"},"instanceKey":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"defaultValue":{}}}}}}},"multipart/form-data":{"schema":{"type":"object","required":["name","ops"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["container/run","container/create-volume"]},"id":{"type":"string"},"args":{"oneOf":[{"type":"object","properties":{"image":{"type":"string"},"aliases":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"cmd":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"volumes":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"dest":{"type":"string"}},"required":["name","dest"]}},"expose":{"oneOf":[{"type":"number"},{"type":"string"},{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"port":{"type":"number"},"type":{"type":"string","enum":["api","web","websocket","webapi","none"]},"health_checks":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["http"]},"path":{"type":"string"},"method":{"type":"string","enum":["GET","POST","PUT","DELETE"]},"expected_status":{"type":"number"},"headers":{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"type":"string"}},"body":{},"continuous":{"type":"boolean"}},"required":["type","path","method","expected_status","continuous"]},{"type":"object","properties":{"type":{"type":"string","enum":["websocket"]},"expected_response":{"type":"string"},"continuous":{"type":"boolean"}},"required":["type","expected_response","continuous"]}]}}},"required":["port"]},{"type":"array","items":{"oneOf":[{"type":"number"},{"type":"string"},{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"port":{"type":"number"},"type":{"type":"string","enum":["api","web","websocket","webapi","none"]},"health_checks":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["http"]},"path":{"type":"string"},"method":{"type":"string","enum":["GET","POST","PUT","DELETE"]},"expected_status":{"type":"number"},"headers":{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"type":"string"}},"body":{},"continuous":{"type":"boolean"}},"required":["type","path","method","expected_status","continuous"]},{"type":"object","properties":{"type":{"type":"string","enum":["websocket"]},"expected_response":{"type":"string"},"continuous":{"type":"boolean"}},"required":["type","expected_response","continuous"]}]}}},"required":["port"]}]}}]},"gpu":{"type":"boolean"},"work_dir":{"type":"string"},"entrypoint":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"env":{"type":"object","properties":{},"required":[],"additionalProperties":{"type":"string"}},"restart_policy":{"oneOf":[{"type":"object","properties":{"policy":{"type":"string","enum":["on-failure"]},"restart_tries":{"type":"number"}},"required":["policy"]},{"type":"string","enum":["on-failure","no","always","unless-stopped"]}]},"private":{"type":"boolean"},"resources":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"files":{"type":"array","items":{"type":"string"}},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"bucket":{"type":"string"},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target","bucket"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"buckets":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"files":{"type":"array","items":{"type":"string"}}},"required":["url"]}},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target","buckets"]},{"type":"object","properties":{"type":{"type":"string","enum":["HF"]},"target":{"type":"string"},"repo":{"type":"string"},"revision":{"type":"string"},"files":{"type":"array","items":{"type":"string"}},"accessToken":{"type":"string"}},"required":["type","target","repo"]},{"type":"object","properties":{"type":{"type":"string","enum":["Ollama"]},"model":{"type":"string"},"target":{"type":"string"}},"required":["type","model"]},{"type":"string","enum":["__remove-if-empty__"]}]}},"authentication":{"type":"object","properties":{"docker":{"type":"object","properties":{"username":{"type":"string"},"password":{"type":"string"},"email":{"type":"string"},"server":{"type":"string"}},"required":[]}},"required":[]}},"required":["image"]},{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}]},"results":{"type":"object","properties":{},"required":[],"additionalProperties":{"oneOf":[{"type":"string"},{"type":"object","properties":{"regex":{"type":"string"},"logType":{"type":"array","items":{"type":"string","enum":["stdin","stdout","stderr","nodeerr"]}}},"required":["regex","logType"]}]}},"execution":{"type":"object","properties":{"group":{"type":"string"},"timeout":{"type":"number"},"depends_on":{"type":"array","items":{"type":"string"}},"stop_if_dependent_stops":{"type":"boolean"}},"required":[]}},"required":["type","id","args"]}},"source":{"type":"string"},"timeoutSeconds":{"minimum":1,"anyOf":[{"format":"integer","default":0,"type":"string"},{"minimum":1,"type":"integer"}]},"metrics":{"type":"array","items":{"type":"object","required":["key","defaultValue"],"properties":{"key":{"type":"string"},"invalidatedByMetricKey":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"input":{"type":"string"},"type":{"type":"string"},"expiry":{"type":"string"},"internal":{"type":"boolean"},"lifecycle":{"type":"boolean"},"match":{"nullable":true,"anyOf":[{"default":"exact","type":"string","enum":["exact","minimum"]},{"type":"null"}]},"processor":{"type":"string"},"operationId":{"type":"number"},"group":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"multiValue":{"type":"boolean"},"instanceKey":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"defaultValue":{}}}}}}},"text/plain":{"schema":{"type":"object","required":["name","ops"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["container/run","container/create-volume"]},"id":{"type":"string"},"args":{"oneOf":[{"type":"object","properties":{"image":{"type":"string"},"aliases":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"cmd":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"volumes":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"dest":{"type":"string"}},"required":["name","dest"]}},"expose":{"oneOf":[{"type":"number"},{"type":"string"},{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"port":{"type":"number"},"type":{"type":"string","enum":["api","web","websocket","webapi","none"]},"health_checks":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["http"]},"path":{"type":"string"},"method":{"type":"string","enum":["GET","POST","PUT","DELETE"]},"expected_status":{"type":"number"},"headers":{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"type":"string"}},"body":{},"continuous":{"type":"boolean"}},"required":["type","path","method","expected_status","continuous"]},{"type":"object","properties":{"type":{"type":"string","enum":["websocket"]},"expected_response":{"type":"string"},"continuous":{"type":"boolean"}},"required":["type","expected_response","continuous"]}]}}},"required":["port"]},{"type":"array","items":{"oneOf":[{"type":"number"},{"type":"string"},{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"port":{"type":"number"},"type":{"type":"string","enum":["api","web","websocket","webapi","none"]},"health_checks":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["http"]},"path":{"type":"string"},"method":{"type":"string","enum":["GET","POST","PUT","DELETE"]},"expected_status":{"type":"number"},"headers":{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"type":"string"}},"body":{},"continuous":{"type":"boolean"}},"required":["type","path","method","expected_status","continuous"]},{"type":"object","properties":{"type":{"type":"string","enum":["websocket"]},"expected_response":{"type":"string"},"continuous":{"type":"boolean"}},"required":["type","expected_response","continuous"]}]}}},"required":["port"]}]}}]},"gpu":{"type":"boolean"},"work_dir":{"type":"string"},"entrypoint":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"env":{"type":"object","properties":{},"required":[],"additionalProperties":{"type":"string"}},"restart_policy":{"oneOf":[{"type":"object","properties":{"policy":{"type":"string","enum":["on-failure"]},"restart_tries":{"type":"number"}},"required":["policy"]},{"type":"string","enum":["on-failure","no","always","unless-stopped"]}]},"private":{"type":"boolean"},"resources":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"files":{"type":"array","items":{"type":"string"}},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"bucket":{"type":"string"},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target","bucket"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"buckets":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"files":{"type":"array","items":{"type":"string"}}},"required":["url"]}},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target","buckets"]},{"type":"object","properties":{"type":{"type":"string","enum":["HF"]},"target":{"type":"string"},"repo":{"type":"string"},"revision":{"type":"string"},"files":{"type":"array","items":{"type":"string"}},"accessToken":{"type":"string"}},"required":["type","target","repo"]},{"type":"object","properties":{"type":{"type":"string","enum":["Ollama"]},"model":{"type":"string"},"target":{"type":"string"}},"required":["type","model"]},{"type":"string","enum":["__remove-if-empty__"]}]}},"authentication":{"type":"object","properties":{"docker":{"type":"object","properties":{"username":{"type":"string"},"password":{"type":"string"},"email":{"type":"string"},"server":{"type":"string"}},"required":[]}},"required":[]}},"required":["image"]},{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}]},"results":{"type":"object","properties":{},"required":[],"additionalProperties":{"oneOf":[{"type":"string"},{"type":"object","properties":{"regex":{"type":"string"},"logType":{"type":"array","items":{"type":"string","enum":["stdin","stdout","stderr","nodeerr"]}}},"required":["regex","logType"]}]}},"execution":{"type":"object","properties":{"group":{"type":"string"},"timeout":{"type":"number"},"depends_on":{"type":"array","items":{"type":"string"}},"stop_if_dependent_stops":{"type":"boolean"}},"required":[]}},"required":["type","id","args"]}},"source":{"type":"string"},"timeoutSeconds":{"minimum":1,"anyOf":[{"format":"integer","default":0,"type":"string"},{"minimum":1,"type":"integer"}]},"metrics":{"type":"array","items":{"type":"object","required":["key","defaultValue"],"properties":{"key":{"type":"string"},"invalidatedByMetricKey":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"input":{"type":"string"},"type":{"type":"string"},"expiry":{"type":"string"},"internal":{"type":"boolean"},"lifecycle":{"type":"boolean"},"match":{"nullable":true,"anyOf":[{"default":"exact","type":"string","enum":["exact","minimum"]},{"type":"null"}]},"processor":{"type":"string"},"operationId":{"type":"number"},"group":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"multiValue":{"type":"boolean"},"instanceKey":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"defaultValue":{}}}}}}}}},"responses":{"200":{}},"x-service":"host-manager"}},"/benchmarks/recent":{"get":{"parameters":[{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"feedbackReport":{"nullable":true,"anyOf":[{"type":"object","required":["marketAddress","passed","metrics"],"properties":{"marketAddress":{"type":"string"},"marketName":{"type":"string"},"passed":{"type":"boolean"},"metrics":{"type":"array","items":{"type":"object","required":["metricKey","ruleDescription","passed","isOptional"],"properties":{"metricKey":{"type":"string"},"measuredValue":{"anyOf":[{"type":"number"},{"type":"string"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"anyOf":[{"type":"number"},{"type":"string"},{"type":"boolean"},{"type":"null"}]}}]},"ruleDescription":{"type":"string"},"passed":{"type":"boolean"},"failureMessage":{"type":"string"},"isOptional":{"type":"boolean"}}}}}},{"type":"null"}]},"benchmarks":{"type":"array","items":{"type":"object","required":["id","status","createdAt","submittedAt","rawResults","operations","metrics","antiSpoofs"],"properties":{"id":{"type":"string"},"status":{"type":"string"},"createdAt":{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},"submittedAt":{"nullable":true,"anyOf":[{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},{"type":"null"}]},"rawResults":{"nullable":true,"anyOf":[{},{"type":"null"}]},"operations":{"type":"array","items":{"type":"object","required":["operationId"],"properties":{"operationId":{"type":"number"}}}},"metrics":{"type":"array","items":{"type":"object","required":["metricKey","instance","value","isValid","createdAt"],"properties":{"metricKey":{"type":"string"},"instance":{"type":"string"},"value":{},"isValid":{"type":"boolean"},"createdAt":{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]}}}},"antiSpoofs":{"type":"array","items":{"type":"object","required":["gpuType","gpuUUID","verified","seedAt","predictedAt"],"properties":{"gpuType":{"type":"string"},"gpuUUID":{"type":"string"},"verified":{"type":"boolean"},"seedAt":{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},"predictedAt":{"nullable":true,"anyOf":[{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},{"type":"null"}]}}}}}}}},"required":["feedbackReport","benchmarks"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"feedbackReport":{"nullable":true,"anyOf":[{"type":"object","required":["marketAddress","passed","metrics"],"properties":{"marketAddress":{"type":"string"},"marketName":{"type":"string"},"passed":{"type":"boolean"},"metrics":{"type":"array","items":{"type":"object","required":["metricKey","ruleDescription","passed","isOptional"],"properties":{"metricKey":{"type":"string"},"measuredValue":{"anyOf":[{"type":"number"},{"type":"string"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"anyOf":[{"type":"number"},{"type":"string"},{"type":"boolean"},{"type":"null"}]}}]},"ruleDescription":{"type":"string"},"passed":{"type":"boolean"},"failureMessage":{"type":"string"},"isOptional":{"type":"boolean"}}}}}},{"type":"null"}]},"benchmarks":{"type":"array","items":{"type":"object","required":["id","status","createdAt","submittedAt","rawResults","operations","metrics","antiSpoofs"],"properties":{"id":{"type":"string"},"status":{"type":"string"},"createdAt":{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},"submittedAt":{"nullable":true,"anyOf":[{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},{"type":"null"}]},"rawResults":{"nullable":true,"anyOf":[{},{"type":"null"}]},"operations":{"type":"array","items":{"type":"object","required":["operationId"],"properties":{"operationId":{"type":"number"}}}},"metrics":{"type":"array","items":{"type":"object","required":["metricKey","instance","value","isValid","createdAt"],"properties":{"metricKey":{"type":"string"},"instance":{"type":"string"},"value":{},"isValid":{"type":"boolean"},"createdAt":{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]}}}},"antiSpoofs":{"type":"array","items":{"type":"object","required":["gpuType","gpuUUID","verified","seedAt","predictedAt"],"properties":{"gpuType":{"type":"string"},"gpuUUID":{"type":"string"},"verified":{"type":"boolean"},"seedAt":{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},"predictedAt":{"nullable":true,"anyOf":[{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},{"type":"null"}]}}}}}}}},"required":["feedbackReport","benchmarks"]}},"text/plain":{"schema":{"type":"object","properties":{"feedbackReport":{"nullable":true,"anyOf":[{"type":"object","required":["marketAddress","passed","metrics"],"properties":{"marketAddress":{"type":"string"},"marketName":{"type":"string"},"passed":{"type":"boolean"},"metrics":{"type":"array","items":{"type":"object","required":["metricKey","ruleDescription","passed","isOptional"],"properties":{"metricKey":{"type":"string"},"measuredValue":{"anyOf":[{"type":"number"},{"type":"string"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"anyOf":[{"type":"number"},{"type":"string"},{"type":"boolean"},{"type":"null"}]}}]},"ruleDescription":{"type":"string"},"passed":{"type":"boolean"},"failureMessage":{"type":"string"},"isOptional":{"type":"boolean"}}}}}},{"type":"null"}]},"benchmarks":{"type":"array","items":{"type":"object","required":["id","status","createdAt","submittedAt","rawResults","operations","metrics","antiSpoofs"],"properties":{"id":{"type":"string"},"status":{"type":"string"},"createdAt":{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},"submittedAt":{"nullable":true,"anyOf":[{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},{"type":"null"}]},"rawResults":{"nullable":true,"anyOf":[{},{"type":"null"}]},"operations":{"type":"array","items":{"type":"object","required":["operationId"],"properties":{"operationId":{"type":"number"}}}},"metrics":{"type":"array","items":{"type":"object","required":["metricKey","instance","value","isValid","createdAt"],"properties":{"metricKey":{"type":"string"},"instance":{"type":"string"},"value":{},"isValid":{"type":"boolean"},"createdAt":{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]}}}},"antiSpoofs":{"type":"array","items":{"type":"object","required":["gpuType","gpuUUID","verified","seedAt","predictedAt"],"properties":{"gpuType":{"type":"string"},"gpuUUID":{"type":"string"},"verified":{"type":"boolean"},"seedAt":{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},"predictedAt":{"nullable":true,"anyOf":[{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},{"type":"null"}]}}}}}}}},"required":["feedbackReport","benchmarks"]}}}}},"operationId":"getBenchmarksRecent","tags":["Host Manager / Benchmarks"],"x-service":"host-manager"}},"/benchmarks/thresholds":{"get":{"parameters":[{"schema":{"type":"string"},"in":"header","name":"authorization","required":true},{"schema":{"type":"string"},"in":"query","name":"metric","required":false},{"schema":{"type":"string"},"in":"query","name":"marketAddress","required":false}],"operationId":"getBenchmarksThresholds","tags":["Host Manager / Benchmarks"],"responses":{"200":{}},"x-service":"host-manager"}},"/benchmarks/thresholds/{id}/delete":{"delete":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"operationId":"deleteBenchmarksThresholdsByIdDelete","tags":["Host Manager / Benchmarks"],"responses":{"200":{}},"x-service":"host-manager"}},"/benchmarks/thresholds/{id}/update":{"post":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"operationId":"postBenchmarksThresholdsByIdUpdate","tags":["Host Manager / Benchmarks"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"metric":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"group":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"isGating":{"type":"boolean"},"failureMessage":{"type":"string"}}}},"multipart/form-data":{"schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"metric":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"group":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"isGating":{"type":"boolean"},"failureMessage":{"type":"string"}}}},"text/plain":{"schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"metric":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"group":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"isGating":{"type":"boolean"},"failureMessage":{"type":"string"}}}}}},"responses":{"200":{}},"x-service":"host-manager"}},"/benchmarks/thresholds/create":{"post":{"parameters":[{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"operationId":"postBenchmarksThresholdsCreate","tags":["Host Manager / Benchmarks"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"metric":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"group":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"isGating":{"type":"boolean"},"failureMessage":{"type":"string"}}}},"multipart/form-data":{"schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"metric":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"group":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"isGating":{"type":"boolean"},"failureMessage":{"type":"string"}}}},"text/plain":{"schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"metric":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"group":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"isGating":{"type":"boolean"},"failureMessage":{"type":"string"}}}}}},"responses":{"200":{}},"x-service":"host-manager"}},"/credits/admin/llm/models":{"get":{"operationId":"getCreditsAdminLlmModels","responses":{"200":{}},"tags":["Client Manager / General"],"x-service":"client-manager"},"post":{"parameters":[],"operationId":"postCreditsAdminLlmModels","requestBody":{"required":true,"content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["templateId","sourceCommit","market","replicas","pricing"],"properties":{"templateId":{"minLength":1,"type":"string"},"sourceCommit":{"pattern":"^[a-f0-9]{40}$","type":"string"},"market":{"minLength":32,"maxLength":64,"type":"string"},"replicas":{"minimum":1,"maximum":10,"anyOf":[{"format":"integer","default":0,"type":"string"},{"minimum":1,"maximum":10,"type":"integer"}]},"maxHourlyUsd":{"exclusiveMinimum":0,"type":"number"},"pricing":{"type":"object","required":["prompt","completion"],"properties":{"prompt":{"pattern":"^[0-9]+(\\.[0-9]{1,9})?$","type":"string"},"completion":{"pattern":"^[0-9]+(\\.[0-9]{1,9})?$","type":"string"}}}}}},"multipart/form-data":{"schema":{"additionalProperties":false,"type":"object","required":["templateId","sourceCommit","market","replicas","pricing"],"properties":{"templateId":{"minLength":1,"type":"string"},"sourceCommit":{"pattern":"^[a-f0-9]{40}$","type":"string"},"market":{"minLength":32,"maxLength":64,"type":"string"},"replicas":{"minimum":1,"maximum":10,"anyOf":[{"format":"integer","default":0,"type":"string"},{"minimum":1,"maximum":10,"type":"integer"}]},"maxHourlyUsd":{"exclusiveMinimum":0,"type":"number"},"pricing":{"type":"object","required":["prompt","completion"],"properties":{"prompt":{"pattern":"^[0-9]+(\\.[0-9]{1,9})?$","type":"string"},"completion":{"pattern":"^[0-9]+(\\.[0-9]{1,9})?$","type":"string"}}}}}},"text/plain":{"schema":{"additionalProperties":false,"type":"object","required":["templateId","sourceCommit","market","replicas","pricing"],"properties":{"templateId":{"minLength":1,"type":"string"},"sourceCommit":{"pattern":"^[a-f0-9]{40}$","type":"string"},"market":{"minLength":32,"maxLength":64,"type":"string"},"replicas":{"minimum":1,"maximum":10,"anyOf":[{"format":"integer","default":0,"type":"string"},{"minimum":1,"maximum":10,"type":"integer"}]},"maxHourlyUsd":{"exclusiveMinimum":0,"type":"number"},"pricing":{"type":"object","required":["prompt","completion"],"properties":{"prompt":{"pattern":"^[0-9]+(\\.[0-9]{1,9})?$","type":"string"},"completion":{"pattern":"^[0-9]+(\\.[0-9]{1,9})?$","type":"string"}}}}}}}},"responses":{"200":{}},"tags":["Client Manager / General"],"x-service":"client-manager"}},"/credits/admin/llm/models/{id}":{"delete":{"operationId":"deleteCreditsAdminLlmModelsById","parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true}],"responses":{"200":{}},"tags":["Client Manager / General"],"x-service":"client-manager"},"patch":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true}],"operationId":"patchCreditsAdminLlmModelsById","requestBody":{"required":true,"content":{"application/json":{"schema":{"additionalProperties":false,"minProperties":1,"type":"object","properties":{"enabled":{"type":"boolean"},"pricing":{"type":"object","required":["prompt","completion"],"properties":{"prompt":{"pattern":"^[0-9]+(\\.[0-9]{1,9})?$","type":"string"},"completion":{"pattern":"^[0-9]+(\\.[0-9]{1,9})?$","type":"string"}}},"maxHourlyUsd":{"exclusiveMinimum":0,"type":"number"},"replicas":{"minimum":1,"maximum":10,"anyOf":[{"format":"integer","default":0,"type":"string"},{"minimum":1,"maximum":10,"type":"integer"}]},"market":{"minLength":32,"maxLength":64,"type":"string"}}}},"multipart/form-data":{"schema":{"additionalProperties":false,"minProperties":1,"type":"object","properties":{"enabled":{"type":"boolean"},"pricing":{"type":"object","required":["prompt","completion"],"properties":{"prompt":{"pattern":"^[0-9]+(\\.[0-9]{1,9})?$","type":"string"},"completion":{"pattern":"^[0-9]+(\\.[0-9]{1,9})?$","type":"string"}}},"maxHourlyUsd":{"exclusiveMinimum":0,"type":"number"},"replicas":{"minimum":1,"maximum":10,"anyOf":[{"format":"integer","default":0,"type":"string"},{"minimum":1,"maximum":10,"type":"integer"}]},"market":{"minLength":32,"maxLength":64,"type":"string"}}}},"text/plain":{"schema":{"additionalProperties":false,"minProperties":1,"type":"object","properties":{"enabled":{"type":"boolean"},"pricing":{"type":"object","required":["prompt","completion"],"properties":{"prompt":{"pattern":"^[0-9]+(\\.[0-9]{1,9})?$","type":"string"},"completion":{"pattern":"^[0-9]+(\\.[0-9]{1,9})?$","type":"string"}}},"maxHourlyUsd":{"exclusiveMinimum":0,"type":"number"},"replicas":{"minimum":1,"maximum":10,"anyOf":[{"format":"integer","default":0,"type":"string"},{"minimum":1,"maximum":10,"type":"integer"}]},"market":{"minLength":32,"maxLength":64,"type":"string"}}}}}},"responses":{"200":{}},"tags":["Client Manager / General"],"x-service":"client-manager"}},"/credits/admin/llm/templates":{"get":{"operationId":"getCreditsAdminLlmTemplates","responses":{"200":{}},"tags":["Client Manager / General"],"x-service":"client-manager"}},"/credits/balance":{"get":{"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"assignedCredits":{"description":"Credits assigned to the user in USD cents.","type":"number"},"reservedCredits":{"description":"Credits reserved for active jobs in USD cents.","type":"number"},"settledCredits":{"description":"Credits that have been used/settled in USD cents.","type":"number"}},"required":["assignedCredits","reservedCredits","settledCredits"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"assignedCredits":{"description":"Credits assigned to the user in USD cents.","type":"number"},"reservedCredits":{"description":"Credits reserved for active jobs in USD cents.","type":"number"},"settledCredits":{"description":"Credits that have been used/settled in USD cents.","type":"number"}},"required":["assignedCredits","reservedCredits","settledCredits"]}},"text/plain":{"schema":{"type":"object","properties":{"assignedCredits":{"description":"Credits assigned to the user in USD cents.","type":"number"},"reservedCredits":{"description":"Credits reserved for active jobs in USD cents.","type":"number"},"settledCredits":{"description":"Credits that have been used/settled in USD cents.","type":"number"}},"required":["assignedCredits","reservedCredits","settledCredits"]}}}}},"operationId":"getCreditsBalance","tags":["Client Manager / Credits","Client Manager / mcp"],"summary":"Get credit balance","security":[{"bearerAuth":[]},{"nosanaOAuth":["credits:read"]}],"x-required-scopes":["credits:read"],"x-service":"client-manager"}},"/credits/claim":{"post":{"parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"amount":{"type":"number"}},"required":["message","amount"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"message":{"type":"string"},"amount":{"type":"number"}},"required":["message","amount"]}},"text/plain":{"schema":{"type":"object","properties":{"message":{"type":"string"},"amount":{"type":"number"}},"required":["message","amount"]}}}}},"operationId":"postCreditsClaim","tags":["Client Manager / Credits"],"summary":"Claim a credit code","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["code"],"properties":{"code":{"minLength":1,"description":"The credit code to claim.","type":"string"}}}},"multipart/form-data":{"schema":{"type":"object","required":["code"],"properties":{"code":{"minLength":1,"description":"The credit code to claim.","type":"string"}}}},"text/plain":{"schema":{"type":"object","required":["code"],"properties":{"code":{"minLength":1,"description":"The credit code to claim.","type":"string"}}}}}},"x-service":"client-manager"}},"/credits/internal/llm/finalize":{"post":{"parameters":[],"operationId":"postCreditsInternalLlmFinalize","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["requestId","usage"],"properties":{"requestId":{"format":"uuid","type":"string"},"usage":{"type":"object","required":["promptTokens","completionTokens","costNano","status"],"properties":{"promptTokens":{"minimum":0,"maximum":2147483647,"anyOf":[{"format":"integer","default":0,"type":"string"},{"minimum":0,"maximum":2147483647,"type":"integer"}]},"completionTokens":{"minimum":0,"maximum":2147483647,"anyOf":[{"format":"integer","default":0,"type":"string"},{"minimum":0,"maximum":2147483647,"type":"integer"}]},"costNano":{"minimum":0,"maximum":9007199254740991,"anyOf":[{"format":"integer","default":0,"type":"string"},{"minimum":0,"maximum":9007199254740991,"type":"integer"}]},"estimated":{"type":"boolean"},"streamed":{"type":"boolean"},"status":{"minimum":100,"maximum":599,"anyOf":[{"format":"integer","default":0,"type":"string"},{"minimum":100,"maximum":599,"type":"integer"}]}}}}}},"multipart/form-data":{"schema":{"type":"object","required":["requestId","usage"],"properties":{"requestId":{"format":"uuid","type":"string"},"usage":{"type":"object","required":["promptTokens","completionTokens","costNano","status"],"properties":{"promptTokens":{"minimum":0,"maximum":2147483647,"anyOf":[{"format":"integer","default":0,"type":"string"},{"minimum":0,"maximum":2147483647,"type":"integer"}]},"completionTokens":{"minimum":0,"maximum":2147483647,"anyOf":[{"format":"integer","default":0,"type":"string"},{"minimum":0,"maximum":2147483647,"type":"integer"}]},"costNano":{"minimum":0,"maximum":9007199254740991,"anyOf":[{"format":"integer","default":0,"type":"string"},{"minimum":0,"maximum":9007199254740991,"type":"integer"}]},"estimated":{"type":"boolean"},"streamed":{"type":"boolean"},"status":{"minimum":100,"maximum":599,"anyOf":[{"format":"integer","default":0,"type":"string"},{"minimum":100,"maximum":599,"type":"integer"}]}}}}}},"text/plain":{"schema":{"type":"object","required":["requestId","usage"],"properties":{"requestId":{"format":"uuid","type":"string"},"usage":{"type":"object","required":["promptTokens","completionTokens","costNano","status"],"properties":{"promptTokens":{"minimum":0,"maximum":2147483647,"anyOf":[{"format":"integer","default":0,"type":"string"},{"minimum":0,"maximum":2147483647,"type":"integer"}]},"completionTokens":{"minimum":0,"maximum":2147483647,"anyOf":[{"format":"integer","default":0,"type":"string"},{"minimum":0,"maximum":2147483647,"type":"integer"}]},"costNano":{"minimum":0,"maximum":9007199254740991,"anyOf":[{"format":"integer","default":0,"type":"string"},{"minimum":0,"maximum":9007199254740991,"type":"integer"}]},"estimated":{"type":"boolean"},"streamed":{"type":"boolean"},"status":{"minimum":100,"maximum":599,"anyOf":[{"format":"integer","default":0,"type":"string"},{"minimum":100,"maximum":599,"type":"integer"}]}}}}}}}},"responses":{"200":{}},"tags":["Client Manager / General"],"x-service":"client-manager"}},"/credits/internal/llm/models":{"get":{"operationId":"getCreditsInternalLlmModels","responses":{"200":{}},"tags":["Client Manager / General"],"x-service":"client-manager"}},"/credits/invitations/{token}":{"get":{"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"creditsAmount":{"type":"number"},"expirationDate":{"nullable":true,"anyOf":[{"anyOf":[{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},{"type":"string"}]},{"type":"null"}]},"restrictedEmail":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"restrictedAccountName":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"isClaimed":{"type":"boolean"},"isExpired":{"type":"boolean"}},"required":["creditsAmount","expirationDate","restrictedEmail","restrictedAccountName","isClaimed","isExpired"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"creditsAmount":{"type":"number"},"expirationDate":{"nullable":true,"anyOf":[{"anyOf":[{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},{"type":"string"}]},{"type":"null"}]},"restrictedEmail":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"restrictedAccountName":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"isClaimed":{"type":"boolean"},"isExpired":{"type":"boolean"}},"required":["creditsAmount","expirationDate","restrictedEmail","restrictedAccountName","isClaimed","isExpired"]}},"text/plain":{"schema":{"type":"object","properties":{"creditsAmount":{"type":"number"},"expirationDate":{"nullable":true,"anyOf":[{"anyOf":[{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},{"type":"string"}]},{"type":"null"}]},"restrictedEmail":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"restrictedAccountName":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"isClaimed":{"type":"boolean"},"isExpired":{"type":"boolean"}},"required":["creditsAmount","expirationDate","restrictedEmail","restrictedAccountName","isClaimed","isExpired"]}}}}},"operationId":"getCreditsInvitationsByToken","tags":["Client Manager / Credits"],"summary":"Get invitation by token","parameters":[{"schema":{"type":"string"},"in":"path","name":"token","required":true}],"x-service":"client-manager"}},"/credits/invitations/{token}/claim":{"post":{"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"amount":{"type":"number"}},"required":["message","amount"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"message":{"type":"string"},"amount":{"type":"number"}},"required":["message","amount"]}},"text/plain":{"schema":{"type":"object","properties":{"message":{"type":"string"},"amount":{"type":"number"}},"required":["message","amount"]}}}}},"operationId":"postCreditsInvitationsByTokenClaim","tags":["Client Manager / Credits"],"summary":"Claim a credit invitation","parameters":[{"schema":{"type":"string"},"in":"path","name":"token","required":true}],"x-service":"client-manager"}},"/credits/llm/usage":{"get":{"parameters":[{"schema":{"minimum":1,"maximum":100,"anyOf":[{"format":"integer","default":0,"type":"string"},{"minimum":1,"maximum":100,"type":"integer"}]},"in":"query","name":"limit","required":false},{"schema":{"minimum":0,"anyOf":[{"format":"integer","default":0,"type":"string"},{"minimum":0,"type":"integer"}]},"in":"query","name":"offset","required":false}],"operationId":"getCreditsLlmUsage","tags":["Client Manager / Credits"],"summary":"List LLM inference usage","security":[{"bearerAuth":[]},{"nosanaOAuth":["credits:read"]}],"x-required-scopes":["credits:read"],"responses":{"200":{}},"x-service":"client-manager"}},"/credits/request":{"post":{"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"amount":{"type":"number"}},"required":["message","amount"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"message":{"type":"string"},"amount":{"type":"number"}},"required":["message","amount"]}},"text/plain":{"schema":{"type":"object","properties":{"message":{"type":"string"},"amount":{"type":"number"}},"required":["message","amount"]}}}}},"operationId":"postCreditsRequest","tags":["Client Manager / Credits"],"summary":"Request free credits","x-service":"client-manager"}},"/credits/request/eligibility":{"get":{"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"eligible":{"type":"boolean"},"message":{"type":"string"},"amount":{"type":"number"}},"required":["eligible"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"eligible":{"type":"boolean"},"message":{"type":"string"},"amount":{"type":"number"}},"required":["eligible"]}},"text/plain":{"schema":{"type":"object","properties":{"eligible":{"type":"boolean"},"message":{"type":"string"},"amount":{"type":"number"}},"required":["eligible"]}}}}},"operationId":"getCreditsRequestEligibility","tags":["Client Manager / Credits"],"summary":"Check credit request eligibility","x-service":"client-manager"}},"/credits/spending-history":{"get":{"parameters":[{"schema":{"type":"string"},"in":"query","name":"start_date","required":true},{"schema":{"type":"string"},"in":"query","name":"end_date","required":false},{"schema":{"anyOf":[{"const":"day","type":"string"},{"const":"month","type":"string"}]},"in":"query","name":"group_by","required":false}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"userAddress":{"type":"string"},"startDate":{"type":"string"},"endDate":{"type":"string"},"groupBy":{"type":"string"},"results":{"type":"array","items":{"type":"object","required":["period","total_usd","breakdown"],"properties":{"period":{"type":"string"},"total_usd":{"type":"number"},"breakdown":{"type":"array","items":{"type":"object","required":["market","totalSpent"],"properties":{"market":{"type":"string"},"totalSpent":{"type":"number"}}}},"daily_breakdown":{"type":"object","patternProperties":{"^(.*)$":{"type":"object","patternProperties":{"^(.*)$":{"type":"number"}}}}}}}},"forecast":{"anyOf":[{"type":"number"},{"type":"null"}]},"comparison":{"anyOf":[{"type":"object","required":["prevMonthTotal","pctChange"],"properties":{"prevMonthTotal":{"type":"number"},"pctChange":{"anyOf":[{"type":"number"},{"type":"null"}]}}},{"type":"null"}]},"sameDayComparison":{"anyOf":[{"type":"object","required":["sameDayLastMonthSpent","currentMonthSpent"],"properties":{"sameDayLastMonthSpent":{"type":"number"},"currentMonthSpent":{"type":"number"},"pctChangeSoFar":{"anyOf":[{"type":"number"},{"type":"null"}]}}},{"type":"null"}]},"currentMonth":{"anyOf":[{"type":"object","required":["currentMonthSpent"],"properties":{"currentMonthSpent":{"type":"number"}}},{"type":"null"}]}},"required":["userAddress","startDate","endDate","groupBy","results","forecast","comparison","sameDayComparison","currentMonth"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"userAddress":{"type":"string"},"startDate":{"type":"string"},"endDate":{"type":"string"},"groupBy":{"type":"string"},"results":{"type":"array","items":{"type":"object","required":["period","total_usd","breakdown"],"properties":{"period":{"type":"string"},"total_usd":{"type":"number"},"breakdown":{"type":"array","items":{"type":"object","required":["market","totalSpent"],"properties":{"market":{"type":"string"},"totalSpent":{"type":"number"}}}},"daily_breakdown":{"type":"object","patternProperties":{"^(.*)$":{"type":"object","patternProperties":{"^(.*)$":{"type":"number"}}}}}}}},"forecast":{"anyOf":[{"type":"number"},{"type":"null"}]},"comparison":{"anyOf":[{"type":"object","required":["prevMonthTotal","pctChange"],"properties":{"prevMonthTotal":{"type":"number"},"pctChange":{"anyOf":[{"type":"number"},{"type":"null"}]}}},{"type":"null"}]},"sameDayComparison":{"anyOf":[{"type":"object","required":["sameDayLastMonthSpent","currentMonthSpent"],"properties":{"sameDayLastMonthSpent":{"type":"number"},"currentMonthSpent":{"type":"number"},"pctChangeSoFar":{"anyOf":[{"type":"number"},{"type":"null"}]}}},{"type":"null"}]},"currentMonth":{"anyOf":[{"type":"object","required":["currentMonthSpent"],"properties":{"currentMonthSpent":{"type":"number"}}},{"type":"null"}]}},"required":["userAddress","startDate","endDate","groupBy","results","forecast","comparison","sameDayComparison","currentMonth"]}},"text/plain":{"schema":{"type":"object","properties":{"userAddress":{"type":"string"},"startDate":{"type":"string"},"endDate":{"type":"string"},"groupBy":{"type":"string"},"results":{"type":"array","items":{"type":"object","required":["period","total_usd","breakdown"],"properties":{"period":{"type":"string"},"total_usd":{"type":"number"},"breakdown":{"type":"array","items":{"type":"object","required":["market","totalSpent"],"properties":{"market":{"type":"string"},"totalSpent":{"type":"number"}}}},"daily_breakdown":{"type":"object","patternProperties":{"^(.*)$":{"type":"object","patternProperties":{"^(.*)$":{"type":"number"}}}}}}}},"forecast":{"anyOf":[{"type":"number"},{"type":"null"}]},"comparison":{"anyOf":[{"type":"object","required":["prevMonthTotal","pctChange"],"properties":{"prevMonthTotal":{"type":"number"},"pctChange":{"anyOf":[{"type":"number"},{"type":"null"}]}}},{"type":"null"}]},"sameDayComparison":{"anyOf":[{"type":"object","required":["sameDayLastMonthSpent","currentMonthSpent"],"properties":{"sameDayLastMonthSpent":{"type":"number"},"currentMonthSpent":{"type":"number"},"pctChangeSoFar":{"anyOf":[{"type":"number"},{"type":"null"}]}}},{"type":"null"}]},"currentMonth":{"anyOf":[{"type":"object","required":["currentMonthSpent"],"properties":{"currentMonthSpent":{"type":"number"}}},{"type":"null"}]}},"required":["userAddress","startDate","endDate","groupBy","results","forecast","comparison","sameDayComparison","currentMonth"]}}}}},"operationId":"getCreditsSpending-history","tags":["Client Manager / Credits","Client Manager / mcp"],"summary":"Get credit spending history","description":"Returns spending history for credit users using settled credit charges.","security":[{"bearerAuth":[]},{"nosanaOAuth":["credits:read"]}],"x-required-scopes":["credits:read"],"x-service":"client-manager"}},"/credits/transactions":{"get":{"parameters":[{"schema":{"minimum":1,"maximum":100,"default":10,"anyOf":[{"format":"numeric","default":0,"type":"string"},{"minimum":1,"maximum":100,"default":10,"type":"number"}]},"in":"query","name":"limit","required":true},{"schema":{"minimum":0,"default":0,"anyOf":[{"format":"numeric","default":0,"type":"string"},{"minimum":0,"default":0,"type":"number"}]},"in":"query","name":"offset","required":true}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"transactions":{"type":"array","items":{"type":"object","required":["id","type","amountUsd","createdAt","method"],"properties":{"id":{"type":"string"},"type":{"type":"string"},"amountUsd":{"type":"number"},"createdAt":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]}}}},"total":{"type":"number"}},"required":["transactions","total"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"transactions":{"type":"array","items":{"type":"object","required":["id","type","amountUsd","createdAt","method"],"properties":{"id":{"type":"string"},"type":{"type":"string"},"amountUsd":{"type":"number"},"createdAt":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]}}}},"total":{"type":"number"}},"required":["transactions","total"]}},"text/plain":{"schema":{"type":"object","properties":{"transactions":{"type":"array","items":{"type":"object","required":["id","type","amountUsd","createdAt","method"],"properties":{"id":{"type":"string"},"type":{"type":"string"},"amountUsd":{"type":"number"},"createdAt":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]}}}},"total":{"type":"number"}},"required":["transactions","total"]}}}}},"operationId":"getCreditsTransactions","tags":["Client Manager / Credits","Client Manager / mcp"],"summary":"List credit transactions","description":"Returns credit transaction history for the authenticated user.","security":[{"bearerAuth":[]},{"nosanaOAuth":["credits:read"]}],"x-required-scopes":["credits:read"],"x-service":"client-manager"}},"/deployments":{"get":{"tags":["Deployment Manager / Deployments","Deployment Manager / mcp"],"description":"List all user deployments.","parameters":[{"schema":{"type":"string"},"in":"query","name":"cursor","required":false,"description":"Base64-encoded cursor for keyset pagination"},{"schema":{"default":10,"anyOf":[{"type":"number","enum":[10]},{"type":"number","enum":[20]},{"type":"number","enum":[50]},{"type":"number","enum":[100]},{"type":"string","enum":["10"]},{"type":"string","enum":["20"]},{"type":"string","enum":["50"]},{"type":"string","enum":["100"]}]},"in":"query","name":"limit","required":false,"description":"Number of items per page (10, 20, 50, or 100)"},{"schema":{"default":"desc","anyOf":[{"type":"string","enum":["asc"]},{"type":"string","enum":["desc"]}]},"in":"query","name":"sort_order","required":false,"description":"Sort order: 'asc' (oldest first) or 'desc' (newest first)"},{"schema":{"minLength":1,"maxLength":128,"type":"string"},"in":"query","name":"idempotency_key","required":false,"description":"Exact owner-scoped creation key."},{"schema":{"type":"string"},"in":"query","name":"search","required":false,"description":"Search for partial matches in deployment ID or name (case-insensitive)"},{"schema":{"type":"string"},"in":"query","name":"id","required":false,"description":"Filter by exact deployment ID"},{"schema":{"type":"string"},"in":"query","name":"name","required":false,"description":"Filter by exact deployment name"},{"schema":{"anyOf":[{"anyOf":[{"type":"string","enum":["DRAFT"]},{"type":"string","enum":["ERROR"]},{"type":"string","enum":["STARTING"]},{"type":"string","enum":["RUNNING"]},{"type":"string","enum":["STOPPING"]},{"type":"string","enum":["STOPPED"]},{"type":"string","enum":["INSUFFICIENT_FUNDS"]},{"type":"string","enum":["ARCHIVED"]}]},{"type":"string"}]},"in":"query","name":"status","required":false,"description":"Filter by deployment status. Can be single value or comma-separated list"},{"schema":{"anyOf":[{"anyOf":[{"type":"string","enum":["SIMPLE"]},{"type":"string","enum":["SIMPLE-EXTEND"]},{"type":"string","enum":["SCHEDULED"]},{"type":"string","enum":["INFINITE"]}]},{"type":"string"}]},"in":"query","name":"strategy","required":false,"description":"Filter by deployment strategy. Can be single value or comma-separated list"},{"schema":{"type":"string"},"in":"query","name":"vault","required":false,"description":"Filter by vault public key"},{"schema":{"type":"string"},"in":"query","name":"market","required":false,"description":"Filter by pinned market address. Can be single value or comma-separated list; `none` selects deployments that post across markets"},{"schema":{"type":"string"},"in":"query","name":"gpu","required":false,"description":"Filter by GPU model in the node requirements (`requirements.name`, exact as hosts report it). Can be single value or comma-separated list; `none` selects deployments whose requirements name no GPU"},{"schema":{"format":"date-time","type":"string"},"in":"query","name":"created_after","required":false,"description":"Filter deployments created after this date (ISO 8601 format)"},{"schema":{"format":"date-time","type":"string"},"in":"query","name":"created_before","required":false,"description":"Filter deployments created before this date (ISO 8601 format)"},{"schema":{"minLength":43,"maxLength":44,"type":"string"},"in":"header","name":"x-user-id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true,"description":"Signed authentication message,"},{"schema":{"type":"string"},"in":"header","name":"x-nosana-api","required":false,"description":"Nosana API key"}],"security":[{"Authorization":[]}],"responses":{"200":{"description":"List of deployments with pagination.","content":{"application/json":{"schema":{"type":"object","properties":{"deployments":{"type":"array","items":{"$ref":"#/components/schemas/DeploymentManagerDeployment"}},"pagination":{"type":"object","properties":{"cursor_next":{"description":"Cursor for next page, null if no more pages","anyOf":[{"type":"string"},{"type":"null"}]},"cursor_prev":{"description":"Cursor for previous page, null if on first page","anyOf":[{"type":"string"},{"type":"null"}]},"total_items":{"description":"Total number of items in collection","type":"number"}},"required":["cursor_next","cursor_prev","total_items"]}},"required":["deployments","pagination"]}}}},"401":{"description":"Unauthorized. Invalid or missing authentication.","content":{"application/json":{"schema":{"type":"string","enum":["Unauthorized"]}}}},"500":{"description":"Internal Server Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}}},"operationId":"getDeployments","x-operationId-generated":true,"x-service":"deployment-manager"}},"/deployments/{deployment}":{"get":{"tags":["Deployment Manager / Deployments","Deployment Manager / mcp"],"description":"Get a specific deployment by ID.","parameters":[{"schema":{"$ref":"#/components/schemas/DeploymentManagerPublicKey"},"in":"path","name":"deployment","required":true},{"schema":{"minLength":43,"maxLength":44,"type":"string"},"in":"header","name":"x-user-id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true,"description":"Signed authentication message,"},{"schema":{"type":"string"},"in":"header","name":"x-nosana-api","required":false,"description":"Nosana API key"}],"security":[{"Authorization":[]}],"responses":{"200":{"description":"Gets a deployment by ID.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerDeployment"}}}},"401":{"description":"Unauthorized. Invalid or missing authentication.","content":{"application/json":{"schema":{"type":"string","enum":["Unauthorized"]}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}},"500":{"description":"Internal Server Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}}},"operationId":"getDeploymentsByDeployment","x-operationId-generated":true,"x-service":"deployment-manager"},"delete":{"tags":["Deployment Manager / Deployments","Deployment Manager / mcp"],"description":"Delete a deployment permanently","parameters":[{"schema":{"$ref":"#/components/schemas/DeploymentManagerPublicKey"},"in":"path","name":"deployment","required":true},{"schema":{"minLength":43,"maxLength":44,"type":"string"},"in":"header","name":"x-user-id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true,"description":"Signed authentication message,"},{"schema":{"type":"string"},"in":"header","name":"x-nosana-api","required":false,"description":"Nosana API key"}],"security":[{"Authorization":[]}],"responses":{"204":{"description":"Deployment deleted successfully.","content":{"application/json":{"schema":{"description":"Deployment deleted successfully."}}}},"401":{"description":"Unauthorized. Invalid or missing authentication.","content":{"application/json":{"schema":{"type":"string","enum":["Unauthorized"]}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}},"500":{"description":"Internal Server Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}}},"operationId":"deleteDeploymentsByDeployment","x-operationId-generated":true,"x-service":"deployment-manager"}},"/deployments/{deployment}/archive":{"post":{"tags":["Deployment Manager / Deployments","Deployment Manager / mcp"],"description":"Archive a deployment","parameters":[{"schema":{"$ref":"#/components/schemas/DeploymentManagerPublicKey"},"in":"path","name":"deployment","required":true},{"schema":{"minLength":43,"maxLength":44,"type":"string"},"in":"header","name":"x-user-id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true,"description":"Signed authentication message,"},{"schema":{"type":"string"},"in":"header","name":"x-nosana-api","required":false,"description":"Nosana API key"}],"security":[{"Authorization":[]}],"responses":{"200":{"description":"Deployment archived successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["ARCHIVED"]},"updated_at":{"format":"date-time","type":"string"}},"required":["status","updated_at"]}}}},"401":{"description":"Unauthorized. Invalid or missing authentication.","content":{"application/json":{"schema":{"type":"string","enum":["Unauthorized"]}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}},"500":{"description":"Internal Server Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}}},"operationId":"postDeploymentsByDeploymentArchive","x-operationId-generated":true,"x-service":"deployment-manager"}},"/deployments/{deployment}/create-revision":{"post":{"tags":["Deployment Manager / Deployments","Deployment Manager / mcp"],"description":"Create a new deployment revision.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerJobDefinition"}}}},"parameters":[{"schema":{"$ref":"#/components/schemas/DeploymentManagerPublicKey"},"in":"path","name":"deployment","required":true},{"schema":{"minLength":43,"maxLength":44,"type":"string"},"in":"header","name":"x-user-id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true,"description":"Signed authentication message,"},{"schema":{"type":"string"},"in":"header","name":"x-nosana-api","required":false,"description":"Nosana API key"}],"security":[{"Authorization":[]}],"responses":{"200":{"description":"Deployment CreateRevisioned successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"active_revision":{"minimum":1,"type":"integer"},"endpoints":{"type":"array","items":{"type":"object","properties":{"opId":{"type":"string"},"port":{"anyOf":[{"type":"number"},{"type":"string"}]},"url":{"type":"string"},"online":{"description":"Whether the deployment currently answers here. Per opId: a node opens one load-balanced proxy per op, so every port that op exposes reports the same value.","type":"boolean"}},"required":["opId","port","url","online"]}},"revisions":{"type":"array","items":{"type":"object","properties":{"revision":{"type":"number"},"deployment":{"minLength":43,"maxLength":44,"type":"string"},"ipfs_definition_hash":{"type":"string"},"job_definition":{"$ref":"#/components/schemas/DeploymentManagerJobDefinition"},"created_at":{"format":"date-time","type":"string"}},"required":["revision","deployment","ipfs_definition_hash","job_definition","created_at"]}},"updated_at":{"format":"date-time","type":"string"}},"required":["active_revision","endpoints","revisions","updated_at"]}}}},"401":{"description":"Unauthorized. Invalid or missing authentication.","content":{"application/json":{"schema":{"type":"string","enum":["Unauthorized"]}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}},"500":{"description":"Internal Server Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}}},"operationId":"postDeploymentsByDeploymentCreateRevision","x-operationId-generated":true,"x-service":"deployment-manager"}},"/deployments/{deployment}/duplicate":{"post":{"tags":["Deployment Manager / Deployments","Deployment Manager / mcp"],"description":"Duplicate a deployment. Creates a new DRAFT deployment named `name` (defaulting to \"<source name> (copy)\"), or starts it right away with `autostart`, on the source's market unless `market` is given, with the same vault, replicas, timeout, strategy, confidentiality and SSH keys, and the source's active revision as its first revision. The source is left untouched. The body may be omitted.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"minLength":1,"description":"Name for the new deployment. Defaults to \"<source name> (copy)\".","type":"string"},"market":{"minLength":1,"description":"Market for the new deployment. Defaults to the source deployment's market.","type":"string"},"autostart":{"description":"If true, the new deployment is started immediately after creation instead of being left as a DRAFT.","type":"boolean"}}}}}},"parameters":[{"schema":{"$ref":"#/components/schemas/DeploymentManagerPublicKey"},"in":"path","name":"deployment","required":true},{"schema":{"minLength":43,"maxLength":44,"type":"string"},"in":"header","name":"x-user-id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true,"description":"Signed authentication message,"},{"schema":{"type":"string"},"in":"header","name":"x-nosana-api","required":false,"description":"Nosana API key"}],"security":[{"Authorization":[]}],"responses":{"200":{"description":"Deployment duplicated successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerDeployment"}}}},"401":{"description":"Unauthorized. Invalid or missing authentication.","content":{"application/json":{"schema":{"type":"string","enum":["Unauthorized"]}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}},"500":{"description":"Internal Server Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}}},"operationId":"postDeploymentsByDeploymentDuplicate","x-operationId-generated":true,"x-service":"deployment-manager"}},"/deployments/{deployment}/events":{"get":{"tags":["Deployment Manager / Deployments","Deployment Manager / mcp"],"description":"Get events for a specific deployment.","parameters":[{"schema":{"type":"string"},"in":"query","name":"cursor","required":false,"description":"Base64-encoded cursor for keyset pagination"},{"schema":{"default":10,"anyOf":[{"type":"number","enum":[10]},{"type":"number","enum":[20]},{"type":"number","enum":[50]},{"type":"number","enum":[100]},{"type":"string","enum":["10"]},{"type":"string","enum":["20"]},{"type":"string","enum":["50"]},{"type":"string","enum":["100"]}]},"in":"query","name":"limit","required":false,"description":"Number of items per page (10, 20, 50, or 100)"},{"schema":{"default":"desc","anyOf":[{"type":"string","enum":["asc"]},{"type":"string","enum":["desc"]}]},"in":"query","name":"sort_order","required":false,"description":"Sort order: 'asc' (oldest first) or 'desc' (newest first)"},{"schema":{"anyOf":[{"anyOf":[{"type":"string","enum":["Deployment"]},{"type":"string","enum":["Event"]}]},{"type":"string"}]},"in":"query","name":"category","required":false,"description":"Filter by event category: 'Deployment' or 'Event'. Can be comma-separated list"},{"schema":{"type":"string"},"in":"query","name":"type","required":false,"description":"Filter by event type. Can be single value or comma-separated list"},{"schema":{"format":"date-time","type":"string"},"in":"query","name":"created_after","required":false,"description":"Filter events created after this date (ISO 8601 format)"},{"schema":{"format":"date-time","type":"string"},"in":"query","name":"created_before","required":false,"description":"Filter events created before this date (ISO 8601 format)"},{"schema":{"$ref":"#/components/schemas/DeploymentManagerPublicKey"},"in":"path","name":"deployment","required":true},{"schema":{"minLength":43,"maxLength":44,"type":"string"},"in":"header","name":"x-user-id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true,"description":"Signed authentication message,"},{"schema":{"type":"string"},"in":"header","name":"x-nosana-api","required":false,"description":"Nosana API key"}],"security":[{"Authorization":[]}],"responses":{"200":{"description":"List of events for the deployment with pagination.","content":{"application/json":{"schema":{"type":"object","properties":{"events":{"type":"array","items":{"$ref":"#/components/schemas/DeploymentManagerEvent"}},"pagination":{"type":"object","properties":{"cursor_next":{"description":"Cursor for next page, null if no more pages","anyOf":[{"type":"string"},{"type":"null"}]},"cursor_prev":{"description":"Cursor for previous page, null if on first page","anyOf":[{"type":"string"},{"type":"null"}]},"total_items":{"description":"Total number of items in collection","type":"number"}},"required":["cursor_next","cursor_prev","total_items"]}},"required":["events","pagination"]}}}},"401":{"description":"Unauthorized. Invalid or missing authentication.","content":{"application/json":{"schema":{"type":"string","enum":["Unauthorized"]}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}},"500":{"description":"Internal Server Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}}},"operationId":"getDeploymentsByDeploymentEvents","x-operationId-generated":true,"x-service":"deployment-manager"}},"/deployments/{deployment}/header":{"get":{"tags":["Deployment Manager / Deployments","Deployment Manager / mcp"],"description":"Get header for a specific deployment.","parameters":[{"schema":{"anyOf":[{"type":"string","enum":["true"]},{"type":"string","enum":["false"]}]},"in":"query","name":"includeTime","required":false,"description":"Include a timestamp in the signed message."},{"schema":{"minLength":1,"type":"string"},"in":"query","name":"message","required":false,"description":"Custom message to sign. Defaults to \"DEPLOYMENT_HEADER\"."},{"schema":{"$ref":"#/components/schemas/DeploymentManagerPublicKey"},"in":"path","name":"deployment","required":true},{"schema":{"minLength":43,"maxLength":44,"type":"string"},"in":"header","name":"x-user-id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true,"description":"Signed authentication message,"},{"schema":{"type":"string"},"in":"header","name":"x-nosana-api","required":false,"description":"Nosana API key"}],"security":[{"Authorization":[]}],"responses":{"200":{"description":"Returns authorization header to interact with the vaults jobs.","content":{"application/json":{"schema":{"type":"object","properties":{"header":{"type":"string"}},"required":["header"]}}}},"401":{"description":"Unauthorized. Invalid or missing authentication.","content":{"application/json":{"schema":{"type":"string","enum":["Unauthorized"]}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}},"500":{"description":"Internal Server Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}}},"operationId":"getDeploymentsByDeploymentHeader","x-operationId-generated":true,"x-service":"deployment-manager"}},"/deployments/{deployment}/headers":{"get":{"tags":["Deployment Manager / Deployments"],"description":"Get a timestamped authorization header for each of the deployment's running jobs.","parameters":[{"schema":{"$ref":"#/components/schemas/DeploymentManagerPublicKey"},"in":"path","name":"deployment","required":true},{"schema":{"minLength":43,"maxLength":44,"type":"string"},"in":"header","name":"x-user-id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true,"description":"Signed authentication message,"},{"schema":{"type":"string"},"in":"header","name":"x-nosana-api","required":false,"description":"Nosana API key"}],"security":[{"Authorization":[]}],"responses":{"200":{"description":"One header per running job, keyed by job address.","content":{"application/json":{"schema":{"type":"object","properties":{"headers":{"type":"object","additionalProperties":{"type":"string"}}},"required":["headers"]}}}},"401":{"description":"Unauthorized. Invalid or missing authentication.","content":{"application/json":{"schema":{"type":"string","enum":["Unauthorized"]}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}},"500":{"description":"Internal Server Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}}},"operationId":"getDeploymentsByDeploymentHeaders","x-operationId-generated":true,"x-service":"deployment-manager"}},"/deployments/{deployment}/jobs":{"get":{"tags":["Deployment Manager / Deployments","Deployment Manager / mcp"],"description":"Get jobs for a specific deployment.","parameters":[{"schema":{"type":"string"},"in":"query","name":"cursor","required":false,"description":"Base64-encoded cursor for keyset pagination"},{"schema":{"default":10,"anyOf":[{"type":"number","enum":[10]},{"type":"number","enum":[20]},{"type":"number","enum":[50]},{"type":"number","enum":[100]},{"type":"string","enum":["10"]},{"type":"string","enum":["20"]},{"type":"string","enum":["50"]},{"type":"string","enum":["100"]}]},"in":"query","name":"limit","required":false,"description":"Number of items per page (10, 20, 50, or 100)"},{"schema":{"default":"desc","anyOf":[{"type":"string","enum":["asc"]},{"type":"string","enum":["desc"]}]},"in":"query","name":"sort_order","required":false,"description":"Sort order: 'asc' (oldest first) or 'desc' (newest first)"},{"schema":{"anyOf":[{"anyOf":[{"type":"string","enum":["QUEUED"]},{"type":"string","enum":["RUNNING"]},{"type":"string","enum":["COMPLETED"]},{"type":"string","enum":["STOPPED"]}]},{"type":"string"}]},"in":"query","name":"state","required":false,"description":"Filter by job state. Can be single value or comma-separated list (e.g., 'RUNNING,COMPLETED')"},{"schema":{"type":"string"},"in":"query","name":"job","required":false,"description":"Filter by exact job ID"},{"schema":{"minimum":0,"type":"number"},"in":"query","name":"revision","required":false,"description":"Filter by deployment revision number"},{"schema":{"format":"date-time","type":"string"},"in":"query","name":"created_after","required":false,"description":"Filter jobs created after this date (ISO 8601 format)"},{"schema":{"format":"date-time","type":"string"},"in":"query","name":"created_before","required":false,"description":"Filter jobs created before this date (ISO 8601 format)"},{"schema":{"$ref":"#/components/schemas/DeploymentManagerPublicKey"},"in":"path","name":"deployment","required":true},{"schema":{"minLength":43,"maxLength":44,"type":"string"},"in":"header","name":"x-user-id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true,"description":"Signed authentication message,"},{"schema":{"type":"string"},"in":"header","name":"x-nosana-api","required":false,"description":"Nosana API key"}],"security":[{"Authorization":[]}],"responses":{"200":{"description":"List of jobs for the deployment with pagination.","content":{"application/json":{"schema":{"type":"object","properties":{"jobs":{"type":"array","items":{"$ref":"#/components/schemas/DeploymentManagerJob"}},"pagination":{"type":"object","properties":{"cursor_next":{"description":"Cursor for next page, null if no more pages","anyOf":[{"type":"string"},{"type":"null"}]},"cursor_prev":{"description":"Cursor for previous page, null if on first page","anyOf":[{"type":"string"},{"type":"null"}]},"total_items":{"description":"Total number of items in collection","type":"number"}},"required":["cursor_next","cursor_prev","total_items"]}},"required":["jobs","pagination"]}}}},"401":{"description":"Unauthorized. Invalid or missing authentication.","content":{"application/json":{"schema":{"type":"string","enum":["Unauthorized"]}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}},"500":{"description":"Internal Server Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}}},"operationId":"getDeploymentsByDeploymentJobs","x-operationId-generated":true,"x-service":"deployment-manager"}},"/deployments/{deployment}/jobs/{job}":{"get":{"tags":["Deployment Manager / Deployments","Deployment Manager / mcp"],"description":"Get a specific deployment job by ID.","parameters":[{"schema":{"$ref":"#/components/schemas/DeploymentManagerPublicKey"},"in":"path","name":"deployment","required":true},{"schema":{"$ref":"#/components/schemas/DeploymentManagerPublicKey"},"in":"path","name":"job","required":true},{"schema":{"minLength":43,"maxLength":44,"type":"string"},"in":"header","name":"x-user-id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true,"description":"Signed authentication message,"},{"schema":{"type":"string"},"in":"header","name":"x-nosana-api","required":false,"description":"Nosana API key"}],"security":[{"Authorization":[]}],"responses":{"200":{"description":"Gets a deployment job by ID.","content":{"application/json":{"schema":{"type":"object","properties":{"confidential":{"type":"boolean"},"revision":{"minimum":1,"type":"number"},"market":{"minLength":43,"maxLength":44,"type":"string"},"node":{"minLength":43,"maxLength":44,"type":"string"},"state":{"anyOf":[{"type":"string"},{"type":"number"}]},"jobStatus":{"anyOf":[{"type":"string"},{"type":"null"}]},"jobDefinition":{"$ref":"#/components/schemas/DeploymentManagerJobDefinition"},"jobResult":{"anyOf":[{"$ref":"#/components/schemas/DeploymentManagerJobResults"},{"type":"null"}]},"timeStart":{"minimum":0,"type":"number"},"timeEnd":{"minimum":0,"type":"number"},"listedAt":{"minimum":0,"type":"number"}},"required":["confidential","revision","market","node","state","jobStatus","jobDefinition","jobResult","timeStart","timeEnd","listedAt"]}}}},"401":{"description":"Unauthorized. Invalid or missing authentication.","content":{"application/json":{"schema":{"type":"string","enum":["Unauthorized"]}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}},"500":{"description":"Internal Server Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}}},"operationId":"getDeploymentsByDeploymentJobsByJob","x-operationId-generated":true,"x-service":"deployment-manager"}},"/deployments/{deployment}/revisions":{"get":{"tags":["Deployment Manager / Deployments","Deployment Manager / mcp"],"description":"Get revisions for a specific deployment.","parameters":[{"schema":{"type":"string"},"in":"query","name":"cursor","required":false,"description":"Base64-encoded cursor for keyset pagination"},{"schema":{"default":10,"anyOf":[{"type":"number","enum":[10]},{"type":"number","enum":[20]},{"type":"number","enum":[50]},{"type":"number","enum":[100]},{"type":"string","enum":["10"]},{"type":"string","enum":["20"]},{"type":"string","enum":["50"]},{"type":"string","enum":["100"]}]},"in":"query","name":"limit","required":false,"description":"Number of items per page (10, 20, 50, or 100)"},{"schema":{"default":"desc","anyOf":[{"type":"string","enum":["asc"]},{"type":"string","enum":["desc"]}]},"in":"query","name":"sort_order","required":false,"description":"Sort order: 'asc' (oldest first) or 'desc' (newest first)"},{"schema":{"minimum":0,"type":"number"},"in":"query","name":"revision","required":false,"description":"Filter by exact revision number"},{"schema":{"format":"date-time","type":"string"},"in":"query","name":"created_after","required":false,"description":"Filter revisions created after this date (ISO 8601 format)"},{"schema":{"format":"date-time","type":"string"},"in":"query","name":"created_before","required":false,"description":"Filter revisions created before this date (ISO 8601 format)"},{"schema":{"$ref":"#/components/schemas/DeploymentManagerPublicKey"},"in":"path","name":"deployment","required":true},{"schema":{"minLength":43,"maxLength":44,"type":"string"},"in":"header","name":"x-user-id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true,"description":"Signed authentication message,"},{"schema":{"type":"string"},"in":"header","name":"x-nosana-api","required":false,"description":"Nosana API key"}],"security":[{"Authorization":[]}],"responses":{"200":{"description":"List of revisions for the deployment with pagination.","content":{"application/json":{"schema":{"type":"object","properties":{"revisions":{"type":"array","items":{"$ref":"#/components/schemas/DeploymentManagerRevision"}},"pagination":{"type":"object","properties":{"cursor_next":{"description":"Cursor for next page, null if no more pages","anyOf":[{"type":"string"},{"type":"null"}]},"cursor_prev":{"description":"Cursor for previous page, null if on first page","anyOf":[{"type":"string"},{"type":"null"}]},"total_items":{"description":"Total number of items in collection","type":"number"}},"required":["cursor_next","cursor_prev","total_items"]}},"required":["revisions","pagination"]}}}},"401":{"description":"Unauthorized. Invalid or missing authentication.","content":{"application/json":{"schema":{"type":"string","enum":["Unauthorized"]}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}},"500":{"description":"Internal Server Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}}},"operationId":"getDeploymentsByDeploymentRevisions","x-operationId-generated":true,"x-service":"deployment-manager"}},"/deployments/{deployment}/ssh-keys":{"get":{"tags":["Deployment Manager / Deployments","Deployment Manager / mcp"],"description":"Get the SSH public keys currently granted access to the deployment's jobs.","parameters":[{"schema":{"$ref":"#/components/schemas/DeploymentManagerPublicKey"},"in":"path","name":"deployment","required":true},{"schema":{"minLength":43,"maxLength":44,"type":"string"},"in":"header","name":"x-user-id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true,"description":"Signed authentication message,"},{"schema":{"type":"string"},"in":"header","name":"x-nosana-api","required":false,"description":"Nosana API key"}],"security":[{"Authorization":[]}],"responses":{"200":{"description":"The deployment's SSH public keys (empty when SSH access is not configured).","content":{"application/json":{"schema":{"type":"object","properties":{"public_keys":{"type":"array","items":{"type":"string"}}},"required":["public_keys"]}}}},"401":{"description":"Unauthorized. Invalid or missing authentication.","content":{"application/json":{"schema":{"type":"string","enum":["Unauthorized"]}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}},"500":{"description":"Internal Server Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}}},"operationId":"getDeploymentsByDeploymentSshKeys","x-operationId-generated":true,"x-service":"deployment-manager"},"post":{"tags":["Deployment Manager / Deployments","Deployment Manager / mcp"],"description":"Grant one or more SSH public keys access to a deployment's jobs. Keys already present (same type and material) are left as they are. The set is stored on the deployment — not on a revision, so nothing is redeployed — and injected into every job posted from now on; new keys are also authorized on the node of every job currently running.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"public_keys":{"description":"SSH public keys, each an OpenSSH line. At most 10 keys total on a deployment; a key already present (same type and material) is left as it is.","type":"array","items":{"minLength":1,"description":"An OpenSSH public key line: \"<algorithm> <base64> [comment]\".","type":"string"}}},"required":["public_keys"]}}},"required":true},"parameters":[{"schema":{"$ref":"#/components/schemas/DeploymentManagerPublicKey"},"in":"path","name":"deployment","required":true},{"schema":{"minLength":43,"maxLength":44,"type":"string"},"in":"header","name":"x-user-id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true,"description":"Signed authentication message,"},{"schema":{"type":"string"},"in":"header","name":"x-nosana-api","required":false,"description":"Nosana API key"}],"security":[{"Authorization":[]}],"responses":{"200":{"description":"The deployment's SSH keys after the change. Check `jobs` for nodes that rejected or did not receive the new keys.","content":{"application/json":{"schema":{"type":"object","properties":{"public_keys":{"type":"array","items":{"type":"string"}},"updated_at":{"format":"date-time","type":"string"},"jobs":{"description":"Per running job whose node was contacted to apply the change. Empty when nothing changed or nothing is running.","type":"array","items":{"type":"object","properties":{"job":{"type":"string"},"node":{"type":"string"},"status":{"anyOf":[{"type":"string","enum":["authorized"]},{"type":"string","enum":["revoked"]},{"type":"string","enum":["failed"]}]},"error":{"type":"string"}},"required":["job","node","status"]}}},"required":["public_keys","updated_at","jobs"]}}}},"400":{"description":"Bad Request. A key is not a valid OpenSSH public key, or the set exceeds the limits.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}},"401":{"description":"Unauthorized. Invalid or missing authentication.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}},"500":{"description":"Internal Server Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}}},"operationId":"postDeploymentsByDeploymentSshKeys","x-operationId-generated":true,"x-service":"deployment-manager"},"delete":{"tags":["Deployment Manager / Deployments","Deployment Manager / mcp"],"description":"Revoke one or more SSH public keys from a deployment's jobs. A key is matched by its type and material, so a differing comment still revokes it. The key is removed from the deployment's set (future jobs won't get it) and revoked on the node of every job currently running, so access stops at once rather than only when a job restarts.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"public_keys":{"description":"SSH public keys, each an OpenSSH line. At most 10 keys total on a deployment; a key already present (same type and material) is left as it is.","type":"array","items":{"minLength":1,"description":"An OpenSSH public key line: \"<algorithm> <base64> [comment]\".","type":"string"}}},"required":["public_keys"]}}},"required":true},"parameters":[{"schema":{"$ref":"#/components/schemas/DeploymentManagerPublicKey"},"in":"path","name":"deployment","required":true},{"schema":{"minLength":43,"maxLength":44,"type":"string"},"in":"header","name":"x-user-id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true,"description":"Signed authentication message,"},{"schema":{"type":"string"},"in":"header","name":"x-nosana-api","required":false,"description":"Nosana API key"}],"security":[{"Authorization":[]}],"responses":{"200":{"description":"The deployment's SSH keys after the change. Check `jobs` for nodes that did not apply the revocation.","content":{"application/json":{"schema":{"type":"object","properties":{"public_keys":{"type":"array","items":{"type":"string"}},"updated_at":{"format":"date-time","type":"string"},"jobs":{"description":"Per running job whose node was contacted to apply the change. Empty when nothing changed or nothing is running.","type":"array","items":{"type":"object","properties":{"job":{"type":"string"},"node":{"type":"string"},"status":{"anyOf":[{"type":"string","enum":["authorized"]},{"type":"string","enum":["revoked"]},{"type":"string","enum":["failed"]}]},"error":{"type":"string"}},"required":["job","node","status"]}}},"required":["public_keys","updated_at","jobs"]}}}},"400":{"description":"Bad Request. A key is not a valid OpenSSH public key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}},"401":{"description":"Unauthorized. Invalid or missing authentication.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}},"500":{"description":"Internal Server Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}}},"operationId":"deleteDeploymentsByDeploymentSshKeys","x-operationId-generated":true,"x-service":"deployment-manager"}},"/deployments/{deployment}/start":{"post":{"tags":["Deployment Manager / Deployments","Deployment Manager / mcp"],"description":"Start an existing deployment.","parameters":[{"schema":{"$ref":"#/components/schemas/DeploymentManagerPublicKey"},"in":"path","name":"deployment","required":true},{"schema":{"minLength":43,"maxLength":44,"type":"string"},"in":"header","name":"x-user-id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true,"description":"Signed authentication message,"},{"schema":{"type":"string"},"in":"header","name":"x-nosana-api","required":false,"description":"Nosana API key"}],"security":[{"Authorization":[]}],"responses":{"200":{"description":"Deployment started successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["STARTING"]},"updated_at":{"format":"date-time","type":"string"}},"required":["status","updated_at"]}}}},"401":{"description":"Unauthorized. Invalid or missing authentication.","content":{"application/json":{"schema":{"type":"string","enum":["Unauthorized"]}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}},"500":{"description":"Internal Server Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}}},"operationId":"postDeploymentsByDeploymentStart","x-operationId-generated":true,"x-service":"deployment-manager"}},"/deployments/{deployment}/stop":{"post":{"tags":["Deployment Manager / Deployments","Deployment Manager / mcp"],"description":"Stop a deployment","parameters":[{"schema":{"$ref":"#/components/schemas/DeploymentManagerPublicKey"},"in":"path","name":"deployment","required":true},{"schema":{"minLength":43,"maxLength":44,"type":"string"},"in":"header","name":"x-user-id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true,"description":"Signed authentication message,"},{"schema":{"type":"string"},"in":"header","name":"x-nosana-api","required":false,"description":"Nosana API key"}],"security":[{"Authorization":[]}],"responses":{"200":{"description":"Deployment stopped successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["STOPPING"]},"updated_at":{"format":"date-time","type":"string"}},"required":["status","updated_at"]}}}},"401":{"description":"Unauthorized. Invalid or missing authentication.","content":{"application/json":{"schema":{"type":"string","enum":["Unauthorized"]}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}},"500":{"description":"Internal Server Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}}},"operationId":"postDeploymentsByDeploymentStop","x-operationId-generated":true,"x-service":"deployment-manager"}},"/deployments/{deployment}/stream":{"get":{"tags":["Deployment Manager / Deployments","Deployment Manager / mcp"],"description":"Server-sent stream of a deployment's changes. Each message is one `DeploymentStreamEvent`, discriminated by `type`. The stream starts with the current deployment, its active jobs and its outstanding tasks, then emits live changes. Historical jobs and events remain available through their paginated endpoints.","parameters":[{"schema":{"$ref":"#/components/schemas/DeploymentManagerPublicKey"},"in":"path","name":"deployment","required":true},{"schema":{"minLength":43,"maxLength":44,"type":"string"},"in":"header","name":"x-user-id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true,"description":"Signed authentication message,"},{"schema":{"type":"string"},"in":"header","name":"x-nosana-api","required":false,"description":"Nosana API key"}],"responses":{"200":{"description":"Default Response","content":{"text/event-stream":{"schema":{"$ref":"#/components/schemas/DeploymentManagerDeploymentStreamEvent"}}}}},"operationId":"getDeploymentsByDeploymentStream","x-operationId-generated":true,"x-service":"deployment-manager"}},"/deployments/{deployment}/tasks":{"get":{"tags":["Deployment Manager / Deployments","Deployment Manager / mcp"],"description":"Get scheduled tasks for a specific deployment.","parameters":[{"schema":{"type":"string"},"in":"query","name":"cursor","required":false,"description":"Base64-encoded cursor for keyset pagination"},{"schema":{"default":10,"anyOf":[{"type":"number","enum":[10]},{"type":"number","enum":[20]},{"type":"number","enum":[50]},{"type":"number","enum":[100]},{"type":"string","enum":["10"]},{"type":"string","enum":["20"]},{"type":"string","enum":["50"]},{"type":"string","enum":["100"]}]},"in":"query","name":"limit","required":false,"description":"Number of items per page (10, 20, 50, or 100)"},{"schema":{"default":"desc","anyOf":[{"type":"string","enum":["asc"]},{"type":"string","enum":["desc"]}]},"in":"query","name":"sort_order","required":false,"description":"Sort order: 'asc' (oldest first) or 'desc' (newest first)"},{"schema":{"anyOf":[{"anyOf":[{"type":"string","enum":["LIST"]},{"type":"string","enum":["EXTEND"]},{"type":"string","enum":["STOP"]}]},{"type":"string"}]},"in":"query","name":"task","required":false,"description":"Filter by task type. Can be single value or comma-separated list"},{"schema":{"format":"date-time","type":"string"},"in":"query","name":"due_after","required":false,"description":"Filter tasks due after this date (ISO 8601 format)"},{"schema":{"format":"date-time","type":"string"},"in":"query","name":"due_before","required":false,"description":"Filter tasks due before this date (ISO 8601 format)"},{"schema":{"$ref":"#/components/schemas/DeploymentManagerPublicKey"},"in":"path","name":"deployment","required":true},{"schema":{"minLength":43,"maxLength":44,"type":"string"},"in":"header","name":"x-user-id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true,"description":"Signed authentication message,"},{"schema":{"type":"string"},"in":"header","name":"x-nosana-api","required":false,"description":"Nosana API key"}],"security":[{"Authorization":[]}],"responses":{"200":{"description":"List of scheduled tasks for the deployment with pagination.","content":{"application/json":{"schema":{"type":"object","properties":{"tasks":{"type":"array","items":{"$ref":"#/components/schemas/DeploymentManagerTask"}},"pagination":{"type":"object","properties":{"cursor_next":{"description":"Cursor for next page, null if no more pages","anyOf":[{"type":"string"},{"type":"null"}]},"cursor_prev":{"description":"Cursor for previous page, null if on first page","anyOf":[{"type":"string"},{"type":"null"}]},"total_items":{"description":"Total number of items in collection","type":"number"}},"required":["cursor_next","cursor_prev","total_items"]}},"required":["tasks","pagination"]}}}},"401":{"description":"Unauthorized. Invalid or missing authentication.","content":{"application/json":{"schema":{"type":"string","enum":["Unauthorized"]}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}},"500":{"description":"Internal Server Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}}},"operationId":"getDeploymentsByDeploymentTasks","x-operationId-generated":true,"x-service":"deployment-manager"}},"/deployments/{deployment}/update-active-revision":{"patch":{"tags":["Deployment Manager / Deployments","Deployment Manager / mcp"],"description":"Update deployment active revision.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"active_revision":{"minimum":1,"type":"number"}},"required":["active_revision"]}}},"required":true},"parameters":[{"schema":{"$ref":"#/components/schemas/DeploymentManagerPublicKey"},"in":"path","name":"deployment","required":true},{"schema":{"minLength":43,"maxLength":44,"type":"string"},"in":"header","name":"x-user-id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true,"description":"Signed authentication message,"},{"schema":{"type":"string"},"in":"header","name":"x-nosana-api","required":false,"description":"Nosana API key"}],"security":[{"Authorization":[]}],"responses":{"200":{"description":"Deployment active revision updated successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"active_revision":{"type":"number"},"endpoints":{"type":"array","items":{"$ref":"#/components/schemas/DeploymentManagerEndpoint"}},"updated_at":{"type":"string"}},"required":["active_revision","endpoints","updated_at"]}}}},"400":{"description":"Bad Request. Invalid input data.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}},"500":{"description":"Internal Server Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}}},"operationId":"patchDeploymentsByDeploymentUpdateActiveRevision","x-operationId-generated":true,"x-service":"deployment-manager"}},"/deployments/{deployment}/update-market":{"patch":{"tags":["Deployment Manager / Deployments","Deployment Manager / mcp"],"description":"Update the market of a deployment. A RUNNING deployment's current jobs are stopped and relisted on the new market: SIMPLE and SIMPLE-EXTEND relist the stopped count immediately, INFINITE refills each stopped replica, and SCHEDULED lists on its next scheduled run.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"market":{"minLength":43,"maxLength":44,"type":"string"}},"required":["market"]}}},"required":true},"parameters":[{"schema":{"$ref":"#/components/schemas/DeploymentManagerPublicKey"},"in":"path","name":"deployment","required":true},{"schema":{"minLength":43,"maxLength":44,"type":"string"},"in":"header","name":"x-user-id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true,"description":"Signed authentication message,"},{"schema":{"type":"string"},"in":"header","name":"x-nosana-api","required":false,"description":"Nosana API key"}],"security":[{"Authorization":[]}],"responses":{"200":{"description":"Deployment market updated successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"market":{"minLength":43,"maxLength":44,"type":"string"},"updated_at":{"format":"date-time","type":"string"}},"required":["market","updated_at"]}}}},"401":{"description":"Unauthorized. Invalid or missing authentication.","content":{"application/json":{"schema":{"type":"string","enum":["Unauthorized"]}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}},"500":{"description":"Internal Server Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}}},"operationId":"patchDeploymentsByDeploymentUpdateMarket","x-operationId-generated":true,"x-service":"deployment-manager"}},"/deployments/{deployment}/update-name":{"patch":{"tags":["Deployment Manager / Deployments","Deployment Manager / mcp"],"description":"Update the name of a deployment","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"minLength":1,"type":"string"}},"required":["name"]}}},"required":true},"parameters":[{"schema":{"$ref":"#/components/schemas/DeploymentManagerPublicKey"},"in":"path","name":"deployment","required":true},{"schema":{"minLength":43,"maxLength":44,"type":"string"},"in":"header","name":"x-user-id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true,"description":"Signed authentication message,"},{"schema":{"type":"string"},"in":"header","name":"x-nosana-api","required":false,"description":"Nosana API key"}],"security":[{"Authorization":[]}],"responses":{"200":{"description":"Deployment name updated successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"updated_at":{"format":"date-time","type":"string"}},"required":["name","updated_at"]}}}},"401":{"description":"Unauthorized. Invalid or missing authentication.","content":{"application/json":{"schema":{"type":"string","enum":["Unauthorized"]}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}},"500":{"description":"Internal Server Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}}},"operationId":"patchDeploymentsByDeploymentUpdateName","x-operationId-generated":true,"x-service":"deployment-manager"}},"/deployments/{deployment}/update-replica-count":{"patch":{"tags":["Deployment Manager / Deployments","Deployment Manager / mcp"],"description":"Update the replica count of a deployment","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"replicas":{"minimum":0,"type":"number"}},"required":["replicas"]}}},"required":true},"parameters":[{"schema":{"$ref":"#/components/schemas/DeploymentManagerPublicKey"},"in":"path","name":"deployment","required":true},{"schema":{"minLength":43,"maxLength":44,"type":"string"},"in":"header","name":"x-user-id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true,"description":"Signed authentication message,"},{"schema":{"type":"string"},"in":"header","name":"x-nosana-api","required":false,"description":"Nosana API key"}],"security":[{"Authorization":[]}],"responses":{"200":{"description":"Deployment replica count updated successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"replicas":{"minimum":0,"type":"number"},"updated_at":{"format":"date-time","type":"string"}},"required":["replicas","updated_at"]}}}},"401":{"description":"Unauthorized. Invalid or missing authentication.","content":{"application/json":{"schema":{"type":"string","enum":["Unauthorized"]}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}},"500":{"description":"Internal Server Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}}},"operationId":"patchDeploymentsByDeploymentUpdateReplicaCount","x-operationId-generated":true,"x-service":"deployment-manager"}},"/deployments/{deployment}/update-requirements":{"patch":{"tags":["Deployment Manager / Deployments","Deployment Manager / mcp"],"description":"Replace the node requirements of a deployment, or clear them with null, together with the market that serves them, as on create. Every job listed from now on is reserved on nodes that meet the new requirements. Omit the market (or send null) to post across markets: each job goes to the cheapest PREMIUM market with a node that meets them. Running jobs keep their hosts, unless the market changes to another one: then a RUNNING deployment's jobs are stopped and relisted on it, as with update-market.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"requirements":{"anyOf":[{"minProperties":1,"additionalProperties":{"anyOf":[{"anyOf":[{"type":"number"},{"type":"string"},{"type":"boolean"}]},{"minItems":1,"type":"array","items":{"anyOf":[{"type":"number"},{"type":"string"},{"type":"boolean"}]}}]},"description":"Node requirements as a map of metric key to value: a number is a minimum, a string or boolean an exact match, and a list is any of its values (e.g. `\"name\": [\"NVIDIA GeForce RTX 4090\", \"NVIDIA GeForce RTX 5090\"]`). Keys are validated by the host manager when nodes are reserved.","type":"object"},{"type":"null"}]},"market":{"anyOf":[{"minLength":43,"maxLength":44,"type":"string"},{"type":"null"}]}},"required":["requirements"]}}},"required":true},"parameters":[{"schema":{"$ref":"#/components/schemas/DeploymentManagerPublicKey"},"in":"path","name":"deployment","required":true},{"schema":{"minLength":43,"maxLength":44,"type":"string"},"in":"header","name":"x-user-id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true,"description":"Signed authentication message,"},{"schema":{"type":"string"},"in":"header","name":"x-nosana-api","required":false,"description":"Nosana API key"}],"security":[{"Authorization":[]}],"responses":{"200":{"description":"Deployment requirements updated successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"requirements":{"anyOf":[{"minProperties":1,"additionalProperties":{"anyOf":[{"anyOf":[{"type":"number"},{"type":"string"},{"type":"boolean"}]},{"minItems":1,"type":"array","items":{"anyOf":[{"type":"number"},{"type":"string"},{"type":"boolean"}]}}]},"description":"Node requirements as a map of metric key to value: a number is a minimum, a string or boolean an exact match, and a list is any of its values (e.g. `\"name\": [\"NVIDIA GeForce RTX 4090\", \"NVIDIA GeForce RTX 5090\"]`). Keys are validated by the host manager when nodes are reserved.","type":"object"},{"type":"null"}]},"market":{"anyOf":[{"minLength":43,"maxLength":44,"type":"string"},{"type":"null"}]},"updated_at":{"format":"date-time","type":"string"}},"required":["requirements","market","updated_at"]}}}},"401":{"description":"Unauthorized. Invalid or missing authentication.","content":{"application/json":{"schema":{"type":"string","enum":["Unauthorized"]}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}},"500":{"description":"Internal Server Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}}},"operationId":"patchDeploymentsByDeploymentUpdateRequirements","x-operationId-generated":true,"x-service":"deployment-manager"}},"/deployments/{deployment}/update-schedule":{"patch":{"tags":["Deployment Manager / Deployments","Deployment Manager / mcp"],"description":"Update deployment schedule.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"schedule":{"description":"Cron expression for scheduled deployments","pattern":"^\\s*(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(\\S+)\\s*$","type":"string"}},"required":["schedule"]}}},"required":true},"parameters":[{"schema":{"$ref":"#/components/schemas/DeploymentManagerPublicKey"},"in":"path","name":"deployment","required":true},{"schema":{"minLength":43,"maxLength":44,"type":"string"},"in":"header","name":"x-user-id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true,"description":"Signed authentication message,"},{"schema":{"type":"string"},"in":"header","name":"x-nosana-api","required":false,"description":"Nosana API key"}],"security":[{"Authorization":[]}],"responses":{"200":{"description":"Deployment schedule updated successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"schedule":{"description":"Cron expression for scheduled deployments","pattern":"^\\s*(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(\\S+)\\s*$","type":"string"},"updated_at":{"type":"string"}},"required":["schedule","updated_at"]}}}},"400":{"description":"Bad Request. Invalid input data.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}},"500":{"description":"Internal Server Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}}},"operationId":"patchDeploymentsByDeploymentUpdateSchedule","x-operationId-generated":true,"x-service":"deployment-manager"}},"/deployments/{deployment}/update-startup-timeout":{"patch":{"tags":["Deployment Manager / Deployments","Deployment Manager / mcp"],"description":"Update the startup timeout of an INFINITE deployment.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"startup_timeout":{"minimum":1,"description":"Minutes a job has, from the moment a node starts running it, to open its network tunnel. A job that does not come online in time is stopped and replaced on another node. The new value applies to jobs started after the update. INFINITE deployments only, and the job definition must expose at least one port.","type":"number"}},"required":["startup_timeout"]}}},"required":true},"parameters":[{"schema":{"$ref":"#/components/schemas/DeploymentManagerPublicKey"},"in":"path","name":"deployment","required":true},{"schema":{"minLength":43,"maxLength":44,"type":"string"},"in":"header","name":"x-user-id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true,"description":"Signed authentication message,"},{"schema":{"type":"string"},"in":"header","name":"x-nosana-api","required":false,"description":"Nosana API key"}],"security":[{"Authorization":[]}],"responses":{"200":{"description":"Deployment startup timeout updated successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"startup_timeout":{"type":"number"},"updated_at":{"type":"string"}},"required":["startup_timeout","updated_at"]}}}},"400":{"description":"Bad Request. The deployment is not INFINITE, or its job definition exposes no ports.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}},"401":{"description":"Unauthorized. Invalid or missing authentication.","content":{"application/json":{"schema":{"type":"string","enum":["Unauthorized"]}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}},"500":{"description":"Internal Server Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}}},"operationId":"patchDeploymentsByDeploymentUpdateStartupTimeout","x-operationId-generated":true,"x-service":"deployment-manager"}},"/deployments/{deployment}/update-timeout":{"patch":{"tags":["Deployment Manager / Deployments","Deployment Manager / mcp"],"description":"Update deployment timeout","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"timeout":{"minimum":60,"type":"number"}},"required":["timeout"]}}},"required":true},"parameters":[{"schema":{"$ref":"#/components/schemas/DeploymentManagerPublicKey"},"in":"path","name":"deployment","required":true},{"schema":{"minLength":43,"maxLength":44,"type":"string"},"in":"header","name":"x-user-id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true,"description":"Signed authentication message,"},{"schema":{"type":"string"},"in":"header","name":"x-nosana-api","required":false,"description":"Nosana API key"}],"security":[{"Authorization":[]}],"responses":{"200":{"description":"Deployment timeout updated successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"timeout":{"type":"number"},"updated_at":{"type":"string"}},"required":["timeout","updated_at"]}}}},"401":{"description":"Unauthorized. Invalid or missing authentication.","content":{"application/json":{"schema":{"type":"string","enum":["Unauthorized"]}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}},"500":{"description":"Internal Server Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}}},"operationId":"patchDeploymentsByDeploymentUpdateTimeout","x-operationId-generated":true,"x-service":"deployment-manager"}},"/deployments/create":{"post":{"tags":["Deployment Manager / Deployments","Deployment Manager / mcp"],"description":"Create a new deployment.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerDeploymentCreateBody"}}}},"parameters":[{"schema":{"minLength":43,"maxLength":44,"type":"string"},"in":"header","name":"x-user-id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true,"description":"Signed authentication message,"},{"schema":{"type":"string"},"in":"header","name":"x-nosana-api","required":false,"description":"Nosana API key"}],"security":[{"Authorization":[]}],"responses":{"200":{"description":"Deployment created successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerDeployment"}}}},"400":{"description":"Invalid request body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}},"401":{"description":"Unauthorized. Invalid or missing authentication.","content":{"application/json":{"schema":{"type":"string","enum":["Unauthorized"]}}}},"409":{"description":"A deployment with this creation key already exists.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}},"500":{"description":"Internal Server Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}}},"operationId":"postDeploymentsCreate","x-operationId-generated":true,"x-service":"deployment-manager"}},"/deployments/jobs/{job}/job-definition":{"get":{"tags":["Deployment Manager / Deployments Jobs","Deployment Manager / mcp"],"description":"Returns the job definition for a job.","parameters":[{"schema":{"type":"string"},"in":"header","name":"authorization","required":true,"description":"Signed authentication message,"},{"schema":{"type":"string"},"in":"path","name":"job","required":true}],"security":[{"Authorization":[]}],"responses":{"200":{"description":"Job definition details.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerJobDefinition"}}}},"401":{"description":"Unauthorized. Invalid or missing authentication.","content":{"application/json":{"schema":{"type":"string","enum":["Unauthorized"]}}}},"500":{"description":"Internal Server Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}}},"operationId":"getDeploymentsJobsByJobJobDefinition","x-operationId-generated":true,"x-service":"deployment-manager"}},"/deployments/jobs/{job}/results":{"post":{"tags":["Deployment Manager / Deployments Jobs"],"description":"Post results for your running job.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerJobResults"}}}},"parameters":[{"schema":{"type":"string"},"in":"header","name":"authorization","required":true,"description":"Signed authentication message,"},{"schema":{"type":"string"},"in":"path","name":"job","required":true}],"security":[{"Authorization":[]}],"responses":{"200":{"description":"Job results details.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","enum":["Success"]}},"required":["message"]}}}},"401":{"description":"Unauthorized. Invalid or missing authentication.","content":{"application/json":{"schema":{"type":"string","enum":["Unauthorized"]}}}},"500":{"description":"Internal Server Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}}},"operationId":"postDeploymentsJobsByJobResults","x-operationId-generated":true,"x-service":"deployment-manager"}},"/deployments/validate":{"post":{"tags":["Deployment Manager / Deployments","Deployment Manager / mcp"],"description":"Check a job definition before creating a deployment with it: runs the Nosana Kit's validator, the same check /deployments/create applies to job_definition, and reports every problem without creating anything. Fix what it reports and validate again before creating.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"job_definition":{"$ref":"#/components/schemas/DeploymentManagerJobDefinition"}},"required":["job_definition"]}}},"required":true},"parameters":[{"schema":{"minLength":43,"maxLength":44,"type":"string"},"in":"header","name":"x-user-id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true,"description":"Signed authentication message,"},{"schema":{"type":"string"},"in":"header","name":"x-nosana-api","required":false,"description":"Nosana API key"}],"x-mcp-read-only":true,"responses":{"200":{"description":"Whether the job definition would be accepted, and why not.","content":{"application/json":{"schema":{"type":"object","properties":{"valid":{"type":"boolean"},"errors":{"description":"Why the job definition would be rejected, one entry per problem; empty when valid.","type":"array","items":{"type":"string"}}},"required":["valid","errors"]}}}}},"operationId":"postDeploymentsValidate","x-operationId-generated":true,"x-service":"deployment-manager"}},"/deployments/vaults":{"get":{"tags":["Deployment Manager / Deployments Vaults"],"description":"List all user vaults.","parameters":[{"schema":{"minLength":43,"maxLength":44,"type":"string"},"in":"header","name":"x-user-id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true,"description":"Signed authentication message,"},{"schema":{"type":"string"},"in":"header","name":"x-nosana-api","required":false,"description":"Nosana API key"}],"security":[{"Authorization":[]}],"responses":{"200":{"description":"List of vaults.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerVaults"}}}},"401":{"description":"Unauthorized. Invalid or missing authentication.","content":{"application/json":{"schema":{"type":"string","enum":["Unauthorized"]}}}},"500":{"description":"Internal Server Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}}},"operationId":"getDeploymentsVaults","x-operationId-generated":true,"x-service":"deployment-manager"}},"/deployments/vaults/{vault}/withdraw":{"post":{"tags":["Deployment Manager / Deployments Vaults"],"description":"Withdraw from a vault.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"SOL":{"minimum":0,"type":"number"},"NOS":{"minimum":0,"type":"number"}}}}}},"parameters":[{"schema":{"$ref":"#/components/schemas/DeploymentManagerPublicKey"},"in":"path","name":"vault","required":true},{"schema":{"minLength":43,"maxLength":44,"type":"string"},"in":"header","name":"x-user-id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true,"description":"Signed authentication message,"},{"schema":{"type":"string"},"in":"header","name":"x-nosana-api","required":false,"description":"Nosana API key"}],"security":[{"Authorization":[]}],"responses":{"200":{"description":"Withdrawal successful.","content":{"application/json":{"schema":{"type":"object","properties":{"transaction":{"type":"string"}},"required":["transaction"]}}}},"400":{"description":"Invalid request body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}},"401":{"description":"Unauthorized. Invalid or missing authentication.","content":{"application/json":{"schema":{"type":"string","enum":["Unauthorized"]}}}},"404":{"description":"Vault not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}},"500":{"description":"Internal Server Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}}},"operationId":"postDeploymentsVaultsByVaultWithdraw","x-operationId-generated":true,"x-service":"deployment-manager"}},"/deployments/vaults/create":{"post":{"tags":["Deployment Manager / Deployments Vaults"],"description":"Get or create the caller's shared vault: returns their existing (oldest) vault, creating one only if they have none.","parameters":[{"schema":{"minLength":43,"maxLength":44,"type":"string"},"in":"header","name":"x-user-id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true,"description":"Signed authentication message,"},{"schema":{"type":"string"},"in":"header","name":"x-nosana-api","required":false,"description":"Nosana API key"}],"security":[{"Authorization":[]}],"responses":{"200":{"description":"The caller's shared vault (existing, or newly created).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerVault"}}}},"401":{"description":"Unauthorized. Invalid or missing authentication.","content":{"application/json":{"schema":{"type":"string","enum":["Unauthorized"]}}}},"500":{"description":"Internal Server Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentManagerError"}}}}},"operationId":"postDeploymentsVaultsCreate","x-operationId-generated":true,"x-service":"deployment-manager"}},"/errors/":{"get":{"parameters":[{"schema":{"type":"string"},"in":"header","name":"authorization","required":true},{"schema":{"type":"string"},"in":"query","name":"node","required":false},{"schema":{"type":"string"},"in":"query","name":"since","required":false},{"schema":{"type":"string"},"in":"query","name":"limit","required":false}],"operationId":"getErrors","tags":["Host Manager / Errors"],"summary":"List error logs (admin)","responses":{"200":{}},"x-service":"host-manager"}},"/errors/report":{"post":{"parameters":[{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"]}},"text/plain":{"schema":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"]}}}},"401":{"content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"text/plain":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}}},"operationId":"postErrorsReport","tags":["Host Manager / Errors"],"summary":"Submit error log (SDK)","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["address"],"properties":{"address":{"type":"string"},"error_type":{"type":"string"},"error_name":{"type":"string"},"error_message":{"type":"string"},"error_stack":{"type":"string"}},"additionalProperties":false}},"multipart/form-data":{"schema":{"type":"object","required":["address"],"properties":{"address":{"type":"string"},"error_type":{"type":"string"},"error_name":{"type":"string"},"error_message":{"type":"string"},"error_stack":{"type":"string"}},"additionalProperties":false}},"text/plain":{"schema":{"type":"object","required":["address"],"properties":{"address":{"type":"string"},"error_type":{"type":"string"},"error_name":{"type":"string"},"error_message":{"type":"string"},"error_stack":{"type":"string"}},"additionalProperties":false}}}},"x-service":"host-manager"}},"/jobs/":{"get":{"parameters":[{"schema":{"minimum":1,"maximum":50,"anyOf":[{"format":"numeric","default":0,"type":"string"},{"minimum":1,"maximum":50,"type":"number"}]},"in":"query","name":"limit","required":false},{"schema":{"minimum":0,"anyOf":[{"format":"numeric","default":0,"type":"string"},{"minimum":0,"type":"number"}]},"in":"query","name":"offset","required":false},{"schema":{"anyOf":[{"const":"QUEUED","type":"string"},{"const":"RUNNING","type":"string"},{"const":"COMPLETED","type":"string"},{"const":"STOPPED","type":"string"}]},"in":"query","name":"state","required":false},{"schema":{"type":"string"},"in":"query","name":"market","required":false},{"schema":{"type":"string"},"in":"query","name":"node","required":false},{"schema":{"type":"string"},"in":"query","name":"poster","required":false},{"schema":{"type":"string"},"in":"query","name":"payer","required":false},{"schema":{"minimum":0,"anyOf":[{"format":"numeric","default":0,"type":"string"},{"minimum":0,"type":"number"}]},"in":"query","name":"timeStart","required":false},{"schema":{"minimum":0,"anyOf":[{"format":"numeric","default":0,"type":"string"},{"minimum":0,"type":"number"}]},"in":"query","name":"timeEnd","required":false},{"schema":{"anyOf":[{"const":"project","type":"string"},{"const":"market","type":"string"}]},"in":"query","name":"groupBy","required":false},{"schema":{"anyOf":[{"const":"day","type":"string"},{"const":"week","type":"string"},{"const":"month","type":"string"}]},"in":"query","name":"timeSeriesInterval","required":false},{"schema":{"anyOf":[{"type":"boolean"},{"type":"string"}]},"in":"query","name":"useMultiplier","required":false},{"schema":{"anyOf":[{"type":"boolean"},{"type":"string"}]},"in":"query","name":"skipCache","required":false}],"operationId":"getJobs","summary":"List jobs","description":"List jobs with optional filtering by state, market, node, poster, and payer","tags":["Blockchain Indexer / Jobs"],"responses":{"200":{}},"x-service":"blockchain-indexer"}},"/jobs/{address}":{"get":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"address","required":true}],"responses":{"200":{"allOf":[{"type":"object","required":["id","address","ipfsJob","ipfsResult","market","node","payer","price","project","state","type","jobStatus","timeEnd","timeStart","timeout","usdRewardPerHour","listedAt"],"properties":{"id":{"type":"number"},"address":{"type":"string"},"ipfsJob":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"ipfsResult":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"market":{"type":"string"},"node":{"type":"string"},"payer":{"type":"string"},"price":{"type":"number"},"project":{"type":"string"},"state":{"type":"number"},"type":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"jobStatus":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"timeEnd":{"type":"number"},"timeStart":{"type":"number"},"timeout":{"type":"number"},"usdRewardPerHour":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"listedAt":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]}}},{"type":"object","required":["jobDefinition","jobResult"],"properties":{"jobDefinition":{"nullable":true,"anyOf":[{},{"type":"null"}]},"jobResult":{"nullable":true,"anyOf":[{},{"type":"null"}]}}}],"content":{"application/json":{"schema":{"type":"object"}},"multipart/form-data":{"schema":{"type":"object"}},"text/plain":{"schema":{"type":"object"}}}},"404":{"content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"text/plain":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}}},"operationId":"getJobsByAddress","summary":"Get job by address","description":"Retrieve a job account by its address","tags":["Blockchain Indexer / Jobs","Blockchain Indexer / mcp"],"x-service":"blockchain-indexer"}},"/jobs/{address}/events":{"get":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"address","required":true}],"responses":{"200":{"items":{"type":"object","required":["jobAddress","nodeAddress","marketAddress","runAddress","type","signature","instructionIndex","slot","blockTime","data"],"properties":{"jobAddress":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"nodeAddress":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"marketAddress":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"runAddress":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"type":{"description":"Instruction type (List, Delist, Work, Extend, End, Finish, Complete, ...). \"Work\" isn't always a real on-chain instruction: a job matched instantly against an already-queued node has none, so one is synthesized — see `data.synthetic`.","type":"string"},"signature":{"type":"string"},"instructionIndex":{"type":"number"},"slot":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"blockTime":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"data":{"description":"Typed per-event fields (e.g. Extend -> { timeout }). A synthesized Work event (see `type`) carries { synthetic: true } here instead of real instruction data.","nullable":true,"anyOf":[{},{"type":"null"}]}}},"content":{"application/json":{"schema":{"type":"array","items":{"type":"object","required":["jobAddress","nodeAddress","marketAddress","runAddress","type","signature","instructionIndex","slot","blockTime","data"],"properties":{"jobAddress":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"nodeAddress":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"marketAddress":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"runAddress":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"type":{"description":"Instruction type (List, Delist, Work, Extend, End, Finish, Complete, ...). \"Work\" isn't always a real on-chain instruction: a job matched instantly against an already-queued node has none, so one is synthesized — see `data.synthetic`.","type":"string"},"signature":{"type":"string"},"instructionIndex":{"type":"number"},"slot":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"blockTime":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"data":{"description":"Typed per-event fields (e.g. Extend -> { timeout }). A synthesized Work event (see `type`) carries { synthetic: true } here instead of real instruction data.","nullable":true,"anyOf":[{},{"type":"null"}]}}}}},"multipart/form-data":{"schema":{"type":"array","items":{"type":"object","required":["jobAddress","nodeAddress","marketAddress","runAddress","type","signature","instructionIndex","slot","blockTime","data"],"properties":{"jobAddress":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"nodeAddress":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"marketAddress":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"runAddress":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"type":{"description":"Instruction type (List, Delist, Work, Extend, End, Finish, Complete, ...). \"Work\" isn't always a real on-chain instruction: a job matched instantly against an already-queued node has none, so one is synthesized — see `data.synthetic`.","type":"string"},"signature":{"type":"string"},"instructionIndex":{"type":"number"},"slot":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"blockTime":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"data":{"description":"Typed per-event fields (e.g. Extend -> { timeout }). A synthesized Work event (see `type`) carries { synthetic: true } here instead of real instruction data.","nullable":true,"anyOf":[{},{"type":"null"}]}}}}},"text/plain":{"schema":{"type":"array","items":{"type":"object","required":["jobAddress","nodeAddress","marketAddress","runAddress","type","signature","instructionIndex","slot","blockTime","data"],"properties":{"jobAddress":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"nodeAddress":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"marketAddress":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"runAddress":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"type":{"description":"Instruction type (List, Delist, Work, Extend, End, Finish, Complete, ...). \"Work\" isn't always a real on-chain instruction: a job matched instantly against an already-queued node has none, so one is synthesized — see `data.synthetic`.","type":"string"},"signature":{"type":"string"},"instructionIndex":{"type":"number"},"slot":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"blockTime":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"data":{"description":"Typed per-event fields (e.g. Extend -> { timeout }). A synthesized Work event (see `type`) carries { synthetic: true } here instead of real instruction data.","nullable":true,"anyOf":[{},{"type":"null"}]}}}}}}}},"operationId":"getJobsByAddressEvents","summary":"Get a job's on-chain transaction events","description":"Returns the decoded Nosana Jobs instructions recorded for a job (list, delist, work/pickup, extend, end/stop, finish, complete), oldest first, with typed event data in `data` (e.g. Extend → { timeout } where timeout is the job's new absolute timeout after extending). Events are indexed going forward only, so an older job may return an empty list. \n\nA `Work` event isn't always a real on-chain instruction: a job matched instantly against an already-queued node has no separate Work instruction (the program matches it inside List itself), so one is synthesized so `type === \"Work\"` still marks when the job started running. Synthesized events are flagged with `data.synthetic: true`.","tags":["Blockchain Indexer / Jobs","Blockchain Indexer / mcp"],"x-service":"blockchain-indexer"}},"/jobs/{address}/extend":{"post":{"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"De-duplicates retried requests sharing the same key, making the call safely retryable. Optional here; required on the batch endpoints."},{"name":"address","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"Job address"}],"responses":{"200":{"description":"Job extended and charged to credits. An already-terminal job is an idempotent no-op: `tx` is null and `credits` is omitted (nothing was charged).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientManagerExtendJobWithCreditsResponse"}}}},"400":{"description":"Invalid request (e.g. unknown market). Ordinary error: no `code` field.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientManagerJobError"}}}},"403":{"description":"Caller does not own the job, or the market is not credit-eligible. Ordinary error: no `code` field.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientManagerJobError"}}}},"404":{"description":"Job, credit-job, or user not found — or an Idempotency-Key minted by a different user. Ordinary error: no `code` field.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientManagerJobError"}}}},"409":{"description":"Idempotency control signal — branch on `code` (IDEMPOTENCY_KEY_*), never on the HTTP status. IN_PROGRESS → retry the same key after Retry-After; EXPIRED → mint a fresh key; PAYLOAD_MISMATCH → do not retry.","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds to wait before retrying the same key. Sent only for IDEMPOTENCY_KEY_IN_PROGRESS."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientManagerIdempotencyError"}}}}},"operationId":"postJobsByAddressExtend","tags":["Client Manager / Credits"],"summary":"Extend a job using credits","description":"Extend a job using credits. Supports both JWT tokens (Bearer <jwt>) and API keys (Bearer nos_...). Pass an `Idempotency-Key` header to make the call safely retryable (the extension is applied at most once per key). An already-terminal job is an idempotent no-op: 200 with a null `tx` and no `credits` (nothing is charged).","security":[{"bearerAuth":[]},{"nosanaOAuth":["jobs:write"]}],"x-required-scopes":["jobs:write"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["seconds"],"properties":{"seconds":{"minimum":1,"description":"Number of seconds to extend the job","anyOf":[{"format":"numeric","default":0,"type":"string"},{"minimum":1,"description":"Number of seconds to extend the job","type":"number"}]}}}},"multipart/form-data":{"schema":{"type":"object","required":["seconds"],"properties":{"seconds":{"minimum":1,"description":"Number of seconds to extend the job","anyOf":[{"format":"numeric","default":0,"type":"string"},{"minimum":1,"description":"Number of seconds to extend the job","type":"number"}]}}}},"text/plain":{"schema":{"type":"object","required":["seconds"],"properties":{"seconds":{"minimum":1,"description":"Number of seconds to extend the job","anyOf":[{"format":"numeric","default":0,"type":"string"},{"minimum":1,"description":"Number of seconds to extend the job","type":"number"}]}}}}}},"x-service":"client-manager"}},"/jobs/{address}/stop":{"post":{"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"De-duplicates retried requests sharing the same key, making the call safely retryable. Optional here; required on the batch endpoints."},{"name":"address","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"Job address"}],"responses":{"200":{"description":"Job stopped (or already terminal). `tx` is null and `outcome` is `already_terminal` when the job was already terminal and no transaction was minted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientManagerStopJobWithCreditsResponse"}}}},"403":{"description":"Caller does not own the job, or the market is not credit-eligible. Ordinary error: no `code` field.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientManagerJobError"}}}},"404":{"description":"Job, credit-job, or user not found — or an Idempotency-Key minted by a different user. Ordinary error: no `code` field.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientManagerJobError"}}}},"409":{"description":"Idempotency control signal — branch on `code` (IDEMPOTENCY_KEY_*), never on the HTTP status. IN_PROGRESS → retry the same key after Retry-After; EXPIRED → mint a fresh key; PAYLOAD_MISMATCH → do not retry.","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds to wait before retrying the same key. Sent only for IDEMPOTENCY_KEY_IN_PROGRESS."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientManagerIdempotencyError"}}}}},"operationId":"postJobsByAddressStop","tags":["Client Manager / Credits"],"summary":"Stop a job paid with credits","description":"Stop a job paid with credits. Supports both JWT tokens (Bearer <jwt>) and API keys (Bearer nos_...). Pass an `Idempotency-Key` header to make the call safely retryable: the stop is sent at most once per key and settlement runs exactly once. An already-terminal job returns 200 with `outcome: already_terminal` and a null `tx`.","security":[{"bearerAuth":[]},{"nosanaOAuth":["jobs:write"]}],"x-required-scopes":["jobs:write"],"x-service":"client-manager"}},"/jobs/batch":{"post":{"parameters":[],"responses":{"200":{"items":{"type":"object","required":["id","address","ipfsJob","ipfsResult","market","node","payer","price","project","state","type","jobStatus","timeEnd","timeStart","timeout","usdRewardPerHour","listedAt"],"properties":{"id":{"type":"number"},"address":{"type":"string"},"ipfsJob":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"ipfsResult":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"market":{"type":"string"},"node":{"type":"string"},"payer":{"type":"string"},"price":{"type":"number"},"project":{"type":"string"},"state":{"type":"number"},"type":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"jobStatus":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"timeEnd":{"type":"number"},"timeStart":{"type":"number"},"timeout":{"type":"number"},"usdRewardPerHour":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"listedAt":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]}}},"content":{"application/json":{"schema":{"type":"array","items":{"type":"object","required":["id","address","ipfsJob","ipfsResult","market","node","payer","price","project","state","type","jobStatus","timeEnd","timeStart","timeout","usdRewardPerHour","listedAt"],"properties":{"id":{"type":"number"},"address":{"type":"string"},"ipfsJob":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"ipfsResult":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"market":{"type":"string"},"node":{"type":"string"},"payer":{"type":"string"},"price":{"type":"number"},"project":{"type":"string"},"state":{"type":"number"},"type":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"jobStatus":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"timeEnd":{"type":"number"},"timeStart":{"type":"number"},"timeout":{"type":"number"},"usdRewardPerHour":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"listedAt":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]}}}}},"multipart/form-data":{"schema":{"type":"array","items":{"type":"object","required":["id","address","ipfsJob","ipfsResult","market","node","payer","price","project","state","type","jobStatus","timeEnd","timeStart","timeout","usdRewardPerHour","listedAt"],"properties":{"id":{"type":"number"},"address":{"type":"string"},"ipfsJob":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"ipfsResult":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"market":{"type":"string"},"node":{"type":"string"},"payer":{"type":"string"},"price":{"type":"number"},"project":{"type":"string"},"state":{"type":"number"},"type":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"jobStatus":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"timeEnd":{"type":"number"},"timeStart":{"type":"number"},"timeout":{"type":"number"},"usdRewardPerHour":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"listedAt":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]}}}}},"text/plain":{"schema":{"type":"array","items":{"type":"object","required":["id","address","ipfsJob","ipfsResult","market","node","payer","price","project","state","type","jobStatus","timeEnd","timeStart","timeout","usdRewardPerHour","listedAt"],"properties":{"id":{"type":"number"},"address":{"type":"string"},"ipfsJob":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"ipfsResult":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"market":{"type":"string"},"node":{"type":"string"},"payer":{"type":"string"},"price":{"type":"number"},"project":{"type":"string"},"state":{"type":"number"},"type":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"jobStatus":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"timeEnd":{"type":"number"},"timeStart":{"type":"number"},"timeout":{"type":"number"},"usdRewardPerHour":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"listedAt":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]}}}}}}}},"operationId":"postJobsBatch","summary":"Get jobs by addresses","description":"Retrieve multiple jobs by a list of addresses (full job fields except jobDefinition and jobResult). Maximum of 100 addresses per request.","tags":["Blockchain Indexer / Jobs"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["addresses"],"properties":{"addresses":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"string"}},"limit":{"minimum":1,"maximum":100,"anyOf":[{"format":"numeric","default":0,"type":"string"},{"minimum":1,"maximum":100,"type":"number"}]}},"additionalProperties":false}},"multipart/form-data":{"schema":{"type":"object","required":["addresses"],"properties":{"addresses":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"string"}},"limit":{"minimum":1,"maximum":100,"anyOf":[{"format":"numeric","default":0,"type":"string"},{"minimum":1,"maximum":100,"type":"number"}]}},"additionalProperties":false}},"text/plain":{"schema":{"type":"object","required":["addresses"],"properties":{"addresses":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"string"}},"limit":{"minimum":1,"maximum":100,"anyOf":[{"format":"numeric","default":0,"type":"string"},{"minimum":1,"maximum":100,"type":"number"}]}},"additionalProperties":false}}}},"x-service":"blockchain-indexer"}},"/jobs/count":{"get":{"parameters":[{"schema":{"type":"string"},"in":"query","name":"market","required":false},{"schema":{"type":"string"},"in":"query","name":"node","required":false},{"schema":{"type":"string"},"in":"query","name":"poster","required":false},{"schema":{"type":"string"},"in":"query","name":"payer","required":false}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"total":{"type":"number"},"byState":{"type":"object","required":["QUEUED","RUNNING","COMPLETED","STOPPED"],"properties":{"QUEUED":{"type":"number"},"RUNNING":{"type":"number"},"COMPLETED":{"type":"number"},"STOPPED":{"type":"number"}}}},"required":["total","byState"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"total":{"type":"number"},"byState":{"type":"object","required":["QUEUED","RUNNING","COMPLETED","STOPPED"],"properties":{"QUEUED":{"type":"number"},"RUNNING":{"type":"number"},"COMPLETED":{"type":"number"},"STOPPED":{"type":"number"}}}},"required":["total","byState"]}},"text/plain":{"schema":{"type":"object","properties":{"total":{"type":"number"},"byState":{"type":"object","required":["QUEUED","RUNNING","COMPLETED","STOPPED"],"properties":{"QUEUED":{"type":"number"},"RUNNING":{"type":"number"},"COMPLETED":{"type":"number"},"STOPPED":{"type":"number"}}}},"required":["total","byState"]}}}}},"operationId":"getJobsCount","summary":"Count jobs","description":"Get total job count and counts per state (QUEUED, RUNNING, COMPLETED, STOPPED), with optional filtering by market, node, project, and payer","tags":["Blockchain Indexer / Jobs"],"x-service":"blockchain-indexer"}},"/jobs/list":{"post":{"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"De-duplicates retried requests sharing the same key, making the call safely retryable. Optional here; required on the batch endpoints."}],"responses":{"200":{"description":"Job listed on the market and charged to credits.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientManagerCreateJobWithCreditsResponse"}}}},"400":{"description":"Invalid request (e.g. unknown market). Ordinary error: no `code` field.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientManagerJobError"}}}},"403":{"description":"Caller does not own the job, or the market is not credit-eligible. Ordinary error: no `code` field.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientManagerJobError"}}}},"404":{"description":"Job, credit-job, or user not found — or an Idempotency-Key minted by a different user. Ordinary error: no `code` field.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientManagerJobError"}}}},"409":{"description":"Idempotency control signal — branch on `code` (IDEMPOTENCY_KEY_*), never on the HTTP status. IN_PROGRESS → retry the same key after Retry-After; EXPIRED → mint a fresh key; PAYLOAD_MISMATCH → do not retry.","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds to wait before retrying the same key. Sent only for IDEMPOTENCY_KEY_IN_PROGRESS."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientManagerIdempotencyError"}}}}},"operationId":"postJobsList","tags":["Client Manager / Credits"],"summary":"Create a job using credits","description":"Create a job using credits. Supports both JWT tokens (Bearer <jwt>) and API keys (Bearer nos_...). Pass an `Idempotency-Key` header (e.g. the DM task's stable `taskId:unit:epoch`) to make the call safely retryable: the job is posted at most once per key. Replays return the original result; a key whose transaction is provably dead returns 409 `IDEMPOTENCY_KEY_EXPIRED` (bump the epoch and retry).","security":[{"bearerAuth":[]},{"nosanaOAuth":["jobs:write"]}],"x-required-scopes":["jobs:write"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["ipfsHash","market"],"properties":{"ipfsHash":{"minLength":1,"description":"IPFS hash of the job definition","type":"string"},"market":{"minLength":1,"description":"Market address","type":"string"},"timeout":{"minimum":1,"description":"Job timeout in seconds (default: 3600). Credit-paid jobs must run at least 3600 seconds; a shorter timeout returns 400.","type":"number"},"node":{"minLength":1,"description":"Optional node address","type":"string"}}}},"multipart/form-data":{"schema":{"type":"object","required":["ipfsHash","market"],"properties":{"ipfsHash":{"minLength":1,"description":"IPFS hash of the job definition","type":"string"},"market":{"minLength":1,"description":"Market address","type":"string"},"timeout":{"minimum":1,"description":"Job timeout in seconds (default: 3600). Credit-paid jobs must run at least 3600 seconds; a shorter timeout returns 400.","type":"number"},"node":{"minLength":1,"description":"Optional node address","type":"string"}}}},"text/plain":{"schema":{"type":"object","required":["ipfsHash","market"],"properties":{"ipfsHash":{"minLength":1,"description":"IPFS hash of the job definition","type":"string"},"market":{"minLength":1,"description":"Market address","type":"string"},"timeout":{"minimum":1,"description":"Job timeout in seconds (default: 3600). Credit-paid jobs must run at least 3600 seconds; a shorter timeout returns 400.","type":"number"},"node":{"minLength":1,"description":"Optional node address","type":"string"}}}}}},"x-service":"client-manager"}},"/jobs/long-running":{"get":{"parameters":[{"schema":{"type":"string"},"in":"query","name":"market","required":false},{"schema":{"type":"string"},"in":"query","name":"payer","required":false}],"operationId":"getJobsLong-running","summary":"Get long-running jobs","description":"Returns jobs running longer than their timeout, optionally filtered by market or payer","tags":["Blockchain Indexer / Jobs"],"responses":{"200":{}},"x-service":"blockchain-indexer"}},"/jobs/running":{"get":{"operationId":"getJobsRunning","summary":"Get running jobs count per market","tags":["Blockchain Indexer / Jobs"],"responses":{"200":{}},"x-service":"blockchain-indexer"}},"/jobs/running-nodes":{"get":{"parameters":[{"schema":{"type":"string","error":"Please provide 'market' in query params"},"in":"query","name":"market","required":true}],"operationId":"getJobsRunning-nodes","summary":"Get running nodes for a market","tags":["Blockchain Indexer / Jobs"],"responses":{"200":{}},"x-service":"blockchain-indexer"}},"/jobs/stats":{"get":{"parameters":[{"schema":{"minimum":1,"maximum":50,"anyOf":[{"format":"numeric","default":0,"type":"string"},{"minimum":1,"maximum":50,"type":"number"}]},"in":"query","name":"limit","required":false},{"schema":{"minimum":0,"anyOf":[{"format":"numeric","default":0,"type":"string"},{"minimum":0,"type":"number"}]},"in":"query","name":"offset","required":false},{"schema":{"anyOf":[{"const":"QUEUED","type":"string"},{"const":"RUNNING","type":"string"},{"const":"COMPLETED","type":"string"},{"const":"STOPPED","type":"string"}]},"in":"query","name":"state","required":false},{"schema":{"type":"string"},"in":"query","name":"market","required":false},{"schema":{"type":"string"},"in":"query","name":"node","required":false},{"schema":{"type":"string"},"in":"query","name":"poster","required":false},{"schema":{"type":"string"},"in":"query","name":"payer","required":false},{"schema":{"minimum":0,"anyOf":[{"format":"numeric","default":0,"type":"string"},{"minimum":0,"type":"number"}]},"in":"query","name":"timeStart","required":false},{"schema":{"minimum":0,"anyOf":[{"format":"numeric","default":0,"type":"string"},{"minimum":0,"type":"number"}]},"in":"query","name":"timeEnd","required":false},{"schema":{"anyOf":[{"const":"project","type":"string"},{"const":"market","type":"string"}]},"in":"query","name":"groupBy","required":false},{"schema":{"anyOf":[{"const":"day","type":"string"},{"const":"week","type":"string"},{"const":"month","type":"string"}]},"in":"query","name":"timeSeriesInterval","required":false},{"schema":{"anyOf":[{"type":"boolean"},{"type":"string"}]},"in":"query","name":"useMultiplier","required":false},{"schema":{"anyOf":[{"type":"boolean"},{"type":"string"}]},"in":"query","name":"skipCache","required":false}],"operationId":"getJobsStats","summary":"Get job statistics","description":"Get aggregated job statistics with optional grouping and time series (filter by market, node, poster, payer)","tags":["Blockchain Indexer / Jobs"],"responses":{"200":{}},"x-service":"blockchain-indexer"}},"/jobs/stats/timestamps":{"get":{"parameters":[{"schema":{"type":"string"},"in":"query","name":"period","required":false}],"operationId":"getJobsStatsTimestamps","summary":"Get job timestamps","tags":["Blockchain Indexer / Jobs"],"responses":{"200":{}},"x-service":"blockchain-indexer"}},"/jobs/stats/timestamps-hours":{"get":{"parameters":[{"schema":{"type":"string"},"in":"query","name":"period","required":false}],"operationId":"getJobsStatsTimestamps-hours","summary":"Get GPU compute hours over time","description":"Time series of GPU compute hours (sum of effective completed-job runtime) bucketed by period, mirroring /stats/timestamps but with hours instead of job counts.","tags":["Blockchain Indexer / Jobs"],"responses":{"200":{}},"x-service":"blockchain-indexer"}},"/markets/":{"get":{"parameters":[{"schema":{"type":"string"},"in":"query","name":"filterKey","required":false},{"schema":{"type":"string"},"in":"query","name":"filterValue","required":false},{"schema":{"type":"string"},"in":"query","name":"limit","required":false},{"schema":{"anyOf":[{"const":"PREMIUM","type":"string"},{"const":"COMMUNITY","type":"string"}]},"in":"query","name":"type","required":false}],"operationId":"getMarkets","tags":["Host Manager / Markets","Host Manager / mcp"],"responses":{"200":{}},"x-service":"host-manager"}},"/markets/{id}":{"get":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true},{"schema":{"type":"string"},"in":"query","name":"nodes","required":false}],"operationId":"getMarketsById","tags":["Host Manager / Markets","Host Manager / mcp"],"responses":{"200":{}},"x-service":"host-manager"},"put":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"operationId":"putMarketsById","tags":["Host Manager / Markets"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"type":{"type":"string"},"sft":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"usd_reward_per_hour":{"type":"number"},"nos_reward_per_second":{"type":"number"},"max_usd_uptime_reward_per_day":{"type":"number"},"utilization_target":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"spare_utilization_percent":{"nullable":true,"anyOf":[{"minimum":0,"maximum":100,"anyOf":[{"format":"integer","default":0,"type":"string"},{"minimum":0,"maximum":100,"type":"integer"}]},{"type":"null"}]},"spare_max_timeout_seconds":{"nullable":true,"anyOf":[{"anyOf":[{"format":"integer","default":0,"type":"string"},{"type":"integer"}]},{"type":"null"}]},"job_price":{"type":"number"},"job_timeout":{"type":"number"},"job_expiration":{"type":"number"},"node_access_key":{"type":"string"},"minimum_stake":{"type":"number"},"required_images":{"type":"array","items":{"type":"object","required":["id"],"properties":{"id":{"type":"number"}}}},"required_remote_resources":{"type":"array","items":{"type":"object","required":["id"],"properties":{"id":{"type":"number"}}}},"client":{"type":"boolean"},"metadata":{"type":"array","items":{"type":"object","required":["key","value"],"properties":{"key":{"type":"string"},"value":{"type":"string"}}}}}}},"multipart/form-data":{"schema":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"type":{"type":"string"},"sft":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"usd_reward_per_hour":{"type":"number"},"nos_reward_per_second":{"type":"number"},"max_usd_uptime_reward_per_day":{"type":"number"},"utilization_target":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"spare_utilization_percent":{"nullable":true,"anyOf":[{"minimum":0,"maximum":100,"anyOf":[{"format":"integer","default":0,"type":"string"},{"minimum":0,"maximum":100,"type":"integer"}]},{"type":"null"}]},"spare_max_timeout_seconds":{"nullable":true,"anyOf":[{"anyOf":[{"format":"integer","default":0,"type":"string"},{"type":"integer"}]},{"type":"null"}]},"job_price":{"type":"number"},"job_timeout":{"type":"number"},"job_expiration":{"type":"number"},"node_access_key":{"type":"string"},"minimum_stake":{"type":"number"},"required_images":{"type":"array","items":{"type":"object","required":["id"],"properties":{"id":{"type":"number"}}}},"required_remote_resources":{"type":"array","items":{"type":"object","required":["id"],"properties":{"id":{"type":"number"}}}},"client":{"type":"boolean"},"metadata":{"type":"array","items":{"type":"object","required":["key","value"],"properties":{"key":{"type":"string"},"value":{"type":"string"}}}}}}},"text/plain":{"schema":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"type":{"type":"string"},"sft":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"usd_reward_per_hour":{"type":"number"},"nos_reward_per_second":{"type":"number"},"max_usd_uptime_reward_per_day":{"type":"number"},"utilization_target":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"spare_utilization_percent":{"nullable":true,"anyOf":[{"minimum":0,"maximum":100,"anyOf":[{"format":"integer","default":0,"type":"string"},{"minimum":0,"maximum":100,"type":"integer"}]},{"type":"null"}]},"spare_max_timeout_seconds":{"nullable":true,"anyOf":[{"anyOf":[{"format":"integer","default":0,"type":"string"},{"type":"integer"}]},{"type":"null"}]},"job_price":{"type":"number"},"job_timeout":{"type":"number"},"job_expiration":{"type":"number"},"node_access_key":{"type":"string"},"minimum_stake":{"type":"number"},"required_images":{"type":"array","items":{"type":"object","required":["id"],"properties":{"id":{"type":"number"}}}},"required_remote_resources":{"type":"array","items":{"type":"object","required":["id"],"properties":{"id":{"type":"number"}}}},"client":{"type":"boolean"},"metadata":{"type":"array","items":{"type":"object","required":["key","value"],"properties":{"key":{"type":"string"},"value":{"type":"string"}}}}}}}}},"responses":{"200":{}},"x-service":"host-manager"},"delete":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"operationId":"deleteMarketsById","tags":["Host Manager / Markets"],"responses":{"200":{}},"x-service":"host-manager"}},"/markets/{id}/metadata":{"get":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"operationId":"getMarketsByIdMetadata","tags":["Host Manager / Markets"],"responses":{"200":{}},"x-service":"host-manager"},"post":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"operationId":"postMarketsByIdMetadata","tags":["Host Manager / Markets"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["key","value"],"properties":{"key":{"type":"string"},"value":{"type":"string"}}}},"multipart/form-data":{"schema":{"type":"object","required":["key","value"],"properties":{"key":{"type":"string"},"value":{"type":"string"}}}},"text/plain":{"schema":{"type":"object","required":["key","value"],"properties":{"key":{"type":"string"},"value":{"type":"string"}}}}}},"responses":{"200":{}},"x-service":"host-manager"}},"/markets/{id}/metadata/{metaId}":{"put":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true},{"schema":{"type":"string"},"in":"path","name":"metaId","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"operationId":"putMarketsByIdMetadataByMetaId","tags":["Host Manager / Markets"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["key","value"],"properties":{"key":{"type":"string"},"value":{"type":"string"}}}},"multipart/form-data":{"schema":{"type":"object","required":["key","value"],"properties":{"key":{"type":"string"},"value":{"type":"string"}}}},"text/plain":{"schema":{"type":"object","required":["key","value"],"properties":{"key":{"type":"string"},"value":{"type":"string"}}}}}},"responses":{"200":{}},"x-service":"host-manager"},"delete":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true},{"schema":{"type":"string"},"in":"path","name":"metaId","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"operationId":"deleteMarketsByIdMetadataByMetaId","tags":["Host Manager / Markets"],"responses":{"200":{}},"x-service":"host-manager"}},"/markets/{id}/required-resources":{"get":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"required_images":{"type":"array","items":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"server":{"type":"string"},"username":{"type":"string"},"password":{"type":"string"}}}},"required_remote_resources":{"type":"array","items":{"anyOf":[{"type":"object","required":["type","model"],"properties":{"type":{"const":"Ollama","type":"string"},"model":{"type":"string"}}},{"type":"object","required":["type","url"],"properties":{"type":{"anyOf":[{"const":"S3","type":"string"},{"const":"HF","type":"string"}]},"url":{"type":"string"},"IAM":{"type":"object","required":["access_key_id","secret_access_key"],"properties":{"access_key_id":{"type":"string"},"secret_access_key":{"type":"string"}}}}}]}}},"required":["required_images","required_remote_resources"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"required_images":{"type":"array","items":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"server":{"type":"string"},"username":{"type":"string"},"password":{"type":"string"}}}},"required_remote_resources":{"type":"array","items":{"anyOf":[{"type":"object","required":["type","model"],"properties":{"type":{"const":"Ollama","type":"string"},"model":{"type":"string"}}},{"type":"object","required":["type","url"],"properties":{"type":{"anyOf":[{"const":"S3","type":"string"},{"const":"HF","type":"string"}]},"url":{"type":"string"},"IAM":{"type":"object","required":["access_key_id","secret_access_key"],"properties":{"access_key_id":{"type":"string"},"secret_access_key":{"type":"string"}}}}}]}}},"required":["required_images","required_remote_resources"]}},"text/plain":{"schema":{"type":"object","properties":{"required_images":{"type":"array","items":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"server":{"type":"string"},"username":{"type":"string"},"password":{"type":"string"}}}},"required_remote_resources":{"type":"array","items":{"anyOf":[{"type":"object","required":["type","model"],"properties":{"type":{"const":"Ollama","type":"string"},"model":{"type":"string"}}},{"type":"object","required":["type","url"],"properties":{"type":{"anyOf":[{"const":"S3","type":"string"},{"const":"HF","type":"string"}]},"url":{"type":"string"},"IAM":{"type":"object","required":["access_key_id","secret_access_key"],"properties":{"access_key_id":{"type":"string"},"secret_access_key":{"type":"string"}}}}}]}}},"required":["required_images","required_remote_resources"]}}}},"401":{"content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"text/plain":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}}},"operationId":"getMarketsByIdRequired-resources","tags":["Host Manager / Markets"],"x-service":"host-manager"}},"/markets/{id}/spare-capacity":{"get":{"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"slots":{"type":"number"},"maxTimeoutSeconds":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["slots","maxTimeoutSeconds"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"slots":{"type":"number"},"maxTimeoutSeconds":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["slots","maxTimeoutSeconds"]}},"text/plain":{"schema":{"type":"object","properties":{"slots":{"type":"number"},"maxTimeoutSeconds":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["slots","maxTimeoutSeconds"]}}}}},"operationId":"getMarketsByIdSpare-capacity","tags":["Host Manager / Markets"],"summary":"Available spare capacity slots for a market","parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true}],"x-service":"host-manager"}},"/markets/docker-images":{"get":{"parameters":[{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"operationId":"getMarketsDocker-images","tags":["Host Manager / Markets"],"responses":{"200":{}},"x-service":"host-manager"},"post":{"parameters":[{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"operationId":"postMarketsDocker-images","tags":["Host Manager / Markets"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"server":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"username":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"password":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]}}}},"multipart/form-data":{"schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"server":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"username":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"password":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]}}}},"text/plain":{"schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"server":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"username":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"password":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]}}}}}},"responses":{"200":{}},"x-service":"host-manager"}},"/markets/docker-images/{id}":{"get":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"operationId":"getMarketsDocker-imagesById","tags":["Host Manager / Markets"],"responses":{"200":{}},"x-service":"host-manager"},"put":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"operationId":"putMarketsDocker-imagesById","tags":["Host Manager / Markets"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"server":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"username":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"password":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]}}}},"multipart/form-data":{"schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"server":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"username":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"password":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]}}}},"text/plain":{"schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"server":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"username":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"password":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]}}}}}},"responses":{"200":{}},"x-service":"host-manager"},"delete":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"operationId":"deleteMarketsDocker-imagesById","tags":["Host Manager / Markets"],"responses":{"200":{}},"x-service":"host-manager"}},"/markets/price":{"get":{"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"price":{"type":"number"}},"required":["price"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"price":{"type":"number"}},"required":["price"]}},"text/plain":{"schema":{"type":"object","properties":{"price":{"type":"number"}},"required":["price"]}}}}},"operationId":"getMarketsPrice","tags":["Host Manager / Markets","Host Manager / mcp"],"summary":"Get current NOS token price in USD","x-service":"host-manager"}},"/markets/prices":{"get":{"operationId":"getMarketsPrices","tags":["Host Manager / Markets","Host Manager / mcp"],"responses":{"200":{}},"x-service":"host-manager"}},"/markets/remote-resources":{"get":{"parameters":[{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"operationId":"getMarketsRemote-resources","tags":["Host Manager / Markets"],"responses":{"200":{}},"x-service":"host-manager"},"post":{"parameters":[{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"operationId":"postMarketsRemote-resources","tags":["Host Manager / Markets"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["type","url"],"properties":{"id":{"type":"number"},"type":{"type":"string"},"url":{"type":"string"},"iamAccessKeyId":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"iamSecretAccessKey":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]}}}},"multipart/form-data":{"schema":{"type":"object","required":["type","url"],"properties":{"id":{"type":"number"},"type":{"type":"string"},"url":{"type":"string"},"iamAccessKeyId":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"iamSecretAccessKey":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]}}}},"text/plain":{"schema":{"type":"object","required":["type","url"],"properties":{"id":{"type":"number"},"type":{"type":"string"},"url":{"type":"string"},"iamAccessKeyId":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"iamSecretAccessKey":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]}}}}}},"responses":{"200":{}},"x-service":"host-manager"}},"/markets/remote-resources/{id}":{"get":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"operationId":"getMarketsRemote-resourcesById","tags":["Host Manager / Markets"],"responses":{"200":{}},"x-service":"host-manager"},"put":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"operationId":"putMarketsRemote-resourcesById","tags":["Host Manager / Markets"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["type","url"],"properties":{"id":{"type":"number"},"type":{"type":"string"},"url":{"type":"string"},"iamAccessKeyId":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"iamSecretAccessKey":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]}}}},"multipart/form-data":{"schema":{"type":"object","required":["type","url"],"properties":{"id":{"type":"number"},"type":{"type":"string"},"url":{"type":"string"},"iamAccessKeyId":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"iamSecretAccessKey":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]}}}},"text/plain":{"schema":{"type":"object","required":["type","url"],"properties":{"id":{"type":"number"},"type":{"type":"string"},"url":{"type":"string"},"iamAccessKeyId":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"iamSecretAccessKey":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]}}}}}},"responses":{"200":{}},"x-service":"host-manager"},"delete":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"operationId":"deleteMarketsRemote-resourcesById","tags":["Host Manager / Markets"],"responses":{"200":{}},"x-service":"host-manager"}},"/markets/update-prices":{"post":{"parameters":[{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]}},"text/plain":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]}}}},"401":{"content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"text/plain":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"403":{"content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"text/plain":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}}},"operationId":"postMarketsUpdate-prices","tags":["Host Manager / Markets"],"summary":"Manually trigger market price update (admin)","x-service":"host-manager"}},"/nodes/":{"get":{"parameters":[{"schema":{"type":"string"},"in":"header","name":"authorization","required":true},{"schema":{"anyOf":[{"anyOf":[{"const":"REJECTED","type":"string"},{"const":"ONBOARDED","type":"string"},{"const":"PREMIUM","type":"string"}]},{"type":"array","items":{"anyOf":[{"const":"REJECTED","type":"string"},{"const":"ONBOARDED","type":"string"},{"const":"PREMIUM","type":"string"}]}}]},"in":"query","name":"state","required":false},{"schema":{"anyOf":[{"const":"REJECTED","type":"string"},{"const":"ONBOARDED","type":"string"},{"const":"PREMIUM","type":"string"}]},"in":"query","name":"state_neq","required":false},{"schema":{"type":"array","items":{"anyOf":[{"const":"REJECTED","type":"string"},{"const":"ONBOARDED","type":"string"},{"const":"PREMIUM","type":"string"}]}},"in":"query","name":"state_notIn","required":false},{"schema":{"anyOf":[{"const":"REJECTED","type":"string"},{"const":"ONBOARDED","type":"string"},{"const":"PREMIUM","type":"string"}]},"in":"query","name":"state_gt","required":false},{"schema":{"anyOf":[{"const":"REJECTED","type":"string"},{"const":"ONBOARDED","type":"string"},{"const":"PREMIUM","type":"string"}]},"in":"query","name":"state_lt","required":false},{"schema":{"anyOf":[{"const":"REJECTED","type":"string"},{"const":"ONBOARDED","type":"string"},{"const":"PREMIUM","type":"string"}]},"in":"query","name":"state_gte","required":false},{"schema":{"anyOf":[{"const":"REJECTED","type":"string"},{"const":"ONBOARDED","type":"string"},{"const":"PREMIUM","type":"string"}]},"in":"query","name":"state_lte","required":false},{"schema":{"anyOf":[{"const":"REJECTED","type":"string"},{"const":"ONBOARDED","type":"string"},{"const":"PREMIUM","type":"string"}]},"in":"query","name":"state_like","required":false},{"schema":{"anyOf":[{"const":"REJECTED","type":"string"},{"const":"ONBOARDED","type":"string"},{"const":"PREMIUM","type":"string"}]},"in":"query","name":"state_ilike","required":false},{"schema":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"in":"query","name":"market","required":false},{"schema":{"type":"string"},"in":"query","name":"market_neq","required":false},{"schema":{"type":"array","items":{"type":"string"}},"in":"query","name":"market_notIn","required":false},{"schema":{"type":"string"},"in":"query","name":"market_gt","required":false},{"schema":{"type":"string"},"in":"query","name":"market_lt","required":false},{"schema":{"type":"string"},"in":"query","name":"market_gte","required":false},{"schema":{"type":"string"},"in":"query","name":"market_lte","required":false},{"schema":{"type":"string"},"in":"query","name":"market_like","required":false},{"schema":{"type":"string"},"in":"query","name":"market_ilike","required":false},{"schema":{"anyOf":[{"const":"nodeAddress","type":"string"},{"const":"status","type":"string"},{"const":"marketAddress","type":"string"},{"const":"createdAt","type":"string"}]},"in":"query","name":"orderBy","required":false},{"schema":{"anyOf":[{"const":"asc","type":"string"},{"const":"desc","type":"string"}]},"in":"query","name":"order","required":false},{"schema":{"anyOf":[{"format":"numeric","default":0,"type":"string"},{"type":"number"}]},"in":"query","name":"limit","required":false},{"schema":{"anyOf":[{"format":"numeric","default":0,"type":"string"},{"type":"number"}]},"in":"query","name":"offset","required":false},{"schema":{"type":"string","minLength":1},"in":"query","name":"search","required":false},{"schema":{"anyOf":[{"type":"boolean"},{"type":"string"}]},"in":"query","name":"csv_export","required":false}],"responses":{"200":{"anyOf":[{"type":"object","required":["nodes","total"],"properties":{"nodes":{"type":"array","items":{"type":"object","required":["nodeAddress","email","status","accessKeyMint","marketAddress","assignedMarket","destinedMarket","recommendedMarket","discord","twitter","createdAt","updatedAt","metrics"],"properties":{"nodeAddress":{"type":"string"},"email":{"type":"string"},"status":{"anyOf":[{"const":"REJECTED","type":"string"},{"const":"ONBOARDED","type":"string"},{"const":"PREMIUM","type":"string"}]},"accessKeyMint":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"marketAddress":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"assignedMarket":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"destinedMarket":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"recommendedMarket":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"discord":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"twitter":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"nullable":true,"anyOf":[{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},{"type":"null"}]},"updatedAt":{"nullable":true,"anyOf":[{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},{"type":"null"}]},"metrics":{"type":"object","patternProperties":{"^(.*)$":{}}}}}},"total":{"type":"number"}}},{"type":"string"}],"content":{"application/json":{"schema":{"anyOf":[{"type":"object","required":["nodes","total"],"properties":{"nodes":{"type":"array","items":{"type":"object","required":["nodeAddress","email","status","accessKeyMint","marketAddress","assignedMarket","destinedMarket","recommendedMarket","discord","twitter","createdAt","updatedAt","metrics"],"properties":{"nodeAddress":{"type":"string"},"email":{"type":"string"},"status":{"anyOf":[{"const":"REJECTED","type":"string"},{"const":"ONBOARDED","type":"string"},{"const":"PREMIUM","type":"string"}]},"accessKeyMint":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"marketAddress":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"assignedMarket":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"destinedMarket":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"recommendedMarket":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"discord":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"twitter":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"nullable":true,"anyOf":[{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},{"type":"null"}]},"updatedAt":{"nullable":true,"anyOf":[{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},{"type":"null"}]},"metrics":{"type":"object","patternProperties":{"^(.*)$":{}}}}}},"total":{"type":"number"}}},{"type":"string"}]}},"multipart/form-data":{"schema":{"anyOf":[{"type":"object","required":["nodes","total"],"properties":{"nodes":{"type":"array","items":{"type":"object","required":["nodeAddress","email","status","accessKeyMint","marketAddress","assignedMarket","destinedMarket","recommendedMarket","discord","twitter","createdAt","updatedAt","metrics"],"properties":{"nodeAddress":{"type":"string"},"email":{"type":"string"},"status":{"anyOf":[{"const":"REJECTED","type":"string"},{"const":"ONBOARDED","type":"string"},{"const":"PREMIUM","type":"string"}]},"accessKeyMint":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"marketAddress":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"assignedMarket":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"destinedMarket":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"recommendedMarket":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"discord":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"twitter":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"nullable":true,"anyOf":[{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},{"type":"null"}]},"updatedAt":{"nullable":true,"anyOf":[{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},{"type":"null"}]},"metrics":{"type":"object","patternProperties":{"^(.*)$":{}}}}}},"total":{"type":"number"}}},{"type":"string"}]}},"text/plain":{"schema":{"anyOf":[{"type":"object","required":["nodes","total"],"properties":{"nodes":{"type":"array","items":{"type":"object","required":["nodeAddress","email","status","accessKeyMint","marketAddress","assignedMarket","destinedMarket","recommendedMarket","discord","twitter","createdAt","updatedAt","metrics"],"properties":{"nodeAddress":{"type":"string"},"email":{"type":"string"},"status":{"anyOf":[{"const":"REJECTED","type":"string"},{"const":"ONBOARDED","type":"string"},{"const":"PREMIUM","type":"string"}]},"accessKeyMint":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"marketAddress":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"assignedMarket":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"destinedMarket":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"recommendedMarket":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"discord":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"twitter":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"nullable":true,"anyOf":[{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},{"type":"null"}]},"updatedAt":{"nullable":true,"anyOf":[{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},{"type":"null"}]},"metrics":{"type":"object","patternProperties":{"^(.*)$":{}}}}}},"total":{"type":"number"}}},{"type":"string"}]}}}}},"operationId":"getNodes","tags":["Host Manager / Nodes"],"x-service":"host-manager"}},"/nodes/{id}":{"get":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"nodeAddress":{"type":"string"},"status":{"anyOf":[{"const":"REJECTED","type":"string"},{"const":"ONBOARDED","type":"string"},{"const":"PREMIUM","type":"string"}]},"marketAddress":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["nodeAddress","status","marketAddress"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"nodeAddress":{"type":"string"},"status":{"anyOf":[{"const":"REJECTED","type":"string"},{"const":"ONBOARDED","type":"string"},{"const":"PREMIUM","type":"string"}]},"marketAddress":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["nodeAddress","status","marketAddress"]}},"text/plain":{"schema":{"type":"object","properties":{"nodeAddress":{"type":"string"},"status":{"anyOf":[{"const":"REJECTED","type":"string"},{"const":"ONBOARDED","type":"string"},{"const":"PREMIUM","type":"string"}]},"marketAddress":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["nodeAddress","status","marketAddress"]}}}}},"operationId":"getNodesById","tags":["Host Manager / Nodes"],"x-service":"host-manager"}},"/nodes/{id}/address":{"patch":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"operationId":"patchNodesByIdAddress","tags":["Host Manager / Nodes"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["address","authorization"],"properties":{"address":{"type":"string"},"authorization":{"type":"string"}}}},"multipart/form-data":{"schema":{"type":"object","required":["address","authorization"],"properties":{"address":{"type":"string"},"authorization":{"type":"string"}}}},"text/plain":{"schema":{"type":"object","required":["address","authorization"],"properties":{"address":{"type":"string"},"authorization":{"type":"string"}}}}}},"responses":{"200":{}},"x-service":"host-manager"}},"/nodes/{id}/contact":{"patch":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"operationId":"patchNodesByIdContact","tags":["Host Manager / Nodes"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string"},"discord":{"anyOf":[{"type":"string"},{"type":"null"}]},"twitter":{"anyOf":[{"type":"string"},{"type":"null"}]}}}},"multipart/form-data":{"schema":{"type":"object","properties":{"email":{"type":"string"},"discord":{"anyOf":[{"type":"string"},{"type":"null"}]},"twitter":{"anyOf":[{"type":"string"},{"type":"null"}]}}}},"text/plain":{"schema":{"type":"object","properties":{"email":{"type":"string"},"discord":{"anyOf":[{"type":"string"},{"type":"null"}]},"twitter":{"anyOf":[{"type":"string"},{"type":"null"}]}}}}}},"responses":{"200":{}},"x-service":"host-manager"}},"/nodes/{id}/full":{"get":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"operationId":"getNodesByIdFull","tags":["Host Manager / Nodes"],"responses":{"200":{}},"x-service":"host-manager"}},"/nodes/{id}/info":{"get":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"operationId":"getNodesByIdInfo","tags":["Host Manager / Nodes"],"responses":{"200":{}},"x-service":"host-manager"}},"/nodes/{id}/metrics":{"get":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":false},{"schema":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"in":"query","name":"metrics","required":false}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"nodeAddress":{"type":"string"},"status":{"anyOf":[{"const":"REJECTED","type":"string"},{"const":"ONBOARDED","type":"string"},{"const":"PREMIUM","type":"string"}]},"marketAddress":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"gpus":{"type":"array","items":{"type":"object","required":["nodeAddress","gpu","uuid","deviceId","vramMb","majorArchitecture","minorArchitecture"],"properties":{"nodeAddress":{"type":"string"},"gpu":{"type":"string"},"uuid":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"deviceId":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"vramMb":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"majorArchitecture":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"minorArchitecture":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]}}}},"metrics":{"type":"object","patternProperties":{"^(.*)$":{}}},"lastUpdatedAt":{"nullable":true,"anyOf":[{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},{"type":"null"}]},"email":{"type":"string"},"discord":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"twitter":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"nullable":true,"anyOf":[{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},{"type":"null"}]},"notes":{"type":"array","items":{"type":"object","required":["id","nodeAddress","content","source","createdAt","updatedAt"],"properties":{"id":{"type":"number"},"nodeAddress":{"type":"string"},"content":{"type":"string"},"source":{"anyOf":[{"const":"ADMIN","type":"string"},{"const":"SYSTEM","type":"string"}]},"createdAt":{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},"updatedAt":{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]}}}}},"required":["nodeAddress","status","marketAddress","metrics","lastUpdatedAt"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"nodeAddress":{"type":"string"},"status":{"anyOf":[{"const":"REJECTED","type":"string"},{"const":"ONBOARDED","type":"string"},{"const":"PREMIUM","type":"string"}]},"marketAddress":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"gpus":{"type":"array","items":{"type":"object","required":["nodeAddress","gpu","uuid","deviceId","vramMb","majorArchitecture","minorArchitecture"],"properties":{"nodeAddress":{"type":"string"},"gpu":{"type":"string"},"uuid":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"deviceId":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"vramMb":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"majorArchitecture":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"minorArchitecture":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]}}}},"metrics":{"type":"object","patternProperties":{"^(.*)$":{}}},"lastUpdatedAt":{"nullable":true,"anyOf":[{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},{"type":"null"}]},"email":{"type":"string"},"discord":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"twitter":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"nullable":true,"anyOf":[{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},{"type":"null"}]},"notes":{"type":"array","items":{"type":"object","required":["id","nodeAddress","content","source","createdAt","updatedAt"],"properties":{"id":{"type":"number"},"nodeAddress":{"type":"string"},"content":{"type":"string"},"source":{"anyOf":[{"const":"ADMIN","type":"string"},{"const":"SYSTEM","type":"string"}]},"createdAt":{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},"updatedAt":{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]}}}}},"required":["nodeAddress","status","marketAddress","metrics","lastUpdatedAt"]}},"text/plain":{"schema":{"type":"object","properties":{"nodeAddress":{"type":"string"},"status":{"anyOf":[{"const":"REJECTED","type":"string"},{"const":"ONBOARDED","type":"string"},{"const":"PREMIUM","type":"string"}]},"marketAddress":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"gpus":{"type":"array","items":{"type":"object","required":["nodeAddress","gpu","uuid","deviceId","vramMb","majorArchitecture","minorArchitecture"],"properties":{"nodeAddress":{"type":"string"},"gpu":{"type":"string"},"uuid":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"deviceId":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"vramMb":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"majorArchitecture":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"minorArchitecture":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]}}}},"metrics":{"type":"object","patternProperties":{"^(.*)$":{}}},"lastUpdatedAt":{"nullable":true,"anyOf":[{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},{"type":"null"}]},"email":{"type":"string"},"discord":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"twitter":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"nullable":true,"anyOf":[{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},{"type":"null"}]},"notes":{"type":"array","items":{"type":"object","required":["id","nodeAddress","content","source","createdAt","updatedAt"],"properties":{"id":{"type":"number"},"nodeAddress":{"type":"string"},"content":{"type":"string"},"source":{"anyOf":[{"const":"ADMIN","type":"string"},{"const":"SYSTEM","type":"string"}]},"createdAt":{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},"updatedAt":{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]}}}}},"required":["nodeAddress","status","marketAddress","metrics","lastUpdatedAt"]}}}}},"operationId":"getNodesByIdMetrics","tags":["Host Manager / Nodes","Host Manager / mcp"],"x-service":"host-manager"},"post":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"operationId":"postNodesByIdMetrics","tags":["Host Manager / Nodes"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["metricKey","value"],"properties":{"metricKey":{"type":"string"},"value":{},"instance":{"type":"string"}}}},"multipart/form-data":{"schema":{"type":"object","required":["metricKey","value"],"properties":{"metricKey":{"type":"string"},"value":{},"instance":{"type":"string"}}}},"text/plain":{"schema":{"type":"object","required":["metricKey","value"],"properties":{"metricKey":{"type":"string"},"value":{},"instance":{"type":"string"}}}}}},"responses":{"200":{}},"x-service":"host-manager"}},"/nodes/{id}/notes":{"get":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true},{"schema":{"anyOf":[{"const":"ADMIN","type":"string"},{"const":"SYSTEM","type":"string"}]},"in":"query","name":"source","required":false},{"schema":{"anyOf":[{"format":"numeric","default":0,"type":"string"},{"type":"number"}]},"in":"query","name":"limit","required":false},{"schema":{"anyOf":[{"format":"numeric","default":0,"type":"string"},{"type":"number"}]},"in":"query","name":"offset","required":false}],"operationId":"getNodesByIdNotes","tags":["Host Manager / Nodes"],"responses":{"200":{}},"x-service":"host-manager"},"post":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"operationId":"postNodesByIdNotes","tags":["Host Manager / Nodes"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["content"],"properties":{"content":{"minLength":1,"type":"string"}}}},"multipart/form-data":{"schema":{"type":"object","required":["content"],"properties":{"content":{"minLength":1,"type":"string"}}}},"text/plain":{"schema":{"type":"object","required":["content"],"properties":{"content":{"minLength":1,"type":"string"}}}}}},"responses":{"200":{}},"x-service":"host-manager"}},"/nodes/{id}/notes/{noteId}":{"patch":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true},{"schema":{"type":"string"},"in":"path","name":"noteId","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"operationId":"patchNodesByIdNotesByNoteId","tags":["Host Manager / Nodes"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["content"],"properties":{"content":{"minLength":1,"type":"string"}}}},"multipart/form-data":{"schema":{"type":"object","required":["content"],"properties":{"content":{"minLength":1,"type":"string"}}}},"text/plain":{"schema":{"type":"object","required":["content"],"properties":{"content":{"minLength":1,"type":"string"}}}}}},"responses":{"200":{}},"x-service":"host-manager"},"delete":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true},{"schema":{"type":"string"},"in":"path","name":"noteId","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"operationId":"deleteNodesByIdNotesByNoteId","tags":["Host Manager / Nodes"],"responses":{"200":{}},"x-service":"host-manager"}},"/nodes/{id}/recent-benchmarks":{"get":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"responses":{"200":{"items":{"type":"object","required":["id","nodeAddress","jobDefinition","rawResults","status","createdAt","submittedAt","operations","antiSpoofs","nodeMetrics"],"properties":{"id":{"type":"string"},"nodeAddress":{"type":"string"},"jobDefinition":{"type":"object","properties":{"version":{"type":"string","enum":["0.1"]},"type":{"type":"string","enum":["container"]},"logistics":{"type":"object","properties":{"send":{"type":"object","properties":{"type":{"type":"string","enum":["api","api-listen"],"description":"api        - we receive and send via an endpoint endpoint\napi-listen - we create an endpoint to listen for incoming requests"},"args":{"type":"object","properties":{"endpoint":{"type":"string"}},"required":[],"description":"Make all properties in T optional"}},"required":["type","args"]},"receive":{"type":"object","properties":{"type":{"type":"string","enum":["api","api-listen"],"description":"api        - we receive and send via an endpoint endpoint\napi-listen - we create an endpoint to listen for incoming requests"},"args":{"type":"object","properties":{"endpoint":{"type":"string"}},"required":[],"description":"Make all properties in T optional"}},"required":["type","args"]}},"required":["send","receive"]},"deployment_id":{"type":"string"},"ssh":{"type":"object","properties":{"public_keys":{"type":"array","items":{"type":"string"}}},"required":[]},"meta":{"type":"object","properties":{"trigger":{"type":"string"},"system_resources":{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"oneOf":[{"type":"string"},{"type":"number"}]}}},"required":[],"additionalProperties":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"array","items":{"oneOf":[{"type":"string"},{"type":"number"}]}},{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"array","items":{"oneOf":[{"type":"string"},{"type":"number"}]}}]}}]}},"global":{"type":"object","properties":{"image":{"type":"string"},"gpu":{"type":"boolean"},"entrypoint":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"env":{"type":"object","properties":{},"required":[],"additionalProperties":{"type":"string"}},"work_dir":{"type":"string"},"variables":{"type":"object","properties":{},"required":[],"additionalProperties":{"type":"string"}}},"required":[]},"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["container/run","container/create-volume"]},"id":{"type":"string"},"args":{"oneOf":[{"type":"object","properties":{"image":{"type":"string"},"aliases":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"cmd":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"volumes":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"dest":{"type":"string"}},"required":["name","dest"]}},"expose":{"oneOf":[{"type":"number"},{"type":"string"},{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"port":{"type":"number"},"type":{"type":"string","enum":["api","web","websocket","webapi","none"]},"health_checks":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["http"]},"path":{"type":"string"},"method":{"type":"string","enum":["GET","POST","PUT","DELETE"]},"expected_status":{"type":"number"},"headers":{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"type":"string"}},"body":{},"continuous":{"type":"boolean"}},"required":["type","path","method","expected_status","continuous"]},{"type":"object","properties":{"type":{"type":"string","enum":["websocket"]},"expected_response":{"type":"string"},"continuous":{"type":"boolean"}},"required":["type","expected_response","continuous"]}]}}},"required":["port"]},{"type":"array","items":{"oneOf":[{"type":"number"},{"type":"string"},{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"port":{"type":"number"},"type":{"type":"string","enum":["api","web","websocket","webapi","none"]},"health_checks":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["http"]},"path":{"type":"string"},"method":{"type":"string","enum":["GET","POST","PUT","DELETE"]},"expected_status":{"type":"number"},"headers":{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"type":"string"}},"body":{},"continuous":{"type":"boolean"}},"required":["type","path","method","expected_status","continuous"]},{"type":"object","properties":{"type":{"type":"string","enum":["websocket"]},"expected_response":{"type":"string"},"continuous":{"type":"boolean"}},"required":["type","expected_response","continuous"]}]}}},"required":["port"]}]}}]},"gpu":{"type":"boolean"},"work_dir":{"type":"string"},"entrypoint":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"env":{"type":"object","properties":{},"required":[],"additionalProperties":{"type":"string"}},"restart_policy":{"oneOf":[{"type":"object","properties":{"policy":{"type":"string","enum":["on-failure"]},"restart_tries":{"type":"number"}},"required":["policy"]},{"type":"string","enum":["on-failure","no","always","unless-stopped"]}]},"private":{"type":"boolean"},"resources":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"files":{"type":"array","items":{"type":"string"}},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"bucket":{"type":"string"},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target","bucket"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"buckets":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"files":{"type":"array","items":{"type":"string"}}},"required":["url"]}},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target","buckets"]},{"type":"object","properties":{"type":{"type":"string","enum":["HF"]},"target":{"type":"string"},"repo":{"type":"string"},"revision":{"type":"string"},"files":{"type":"array","items":{"type":"string"}},"accessToken":{"type":"string"}},"required":["type","target","repo"]},{"type":"object","properties":{"type":{"type":"string","enum":["Ollama"]},"model":{"type":"string"},"target":{"type":"string"}},"required":["type","model"]},{"type":"string","enum":["__remove-if-empty__"]}]}},"authentication":{"type":"object","properties":{"docker":{"type":"object","properties":{"username":{"type":"string"},"password":{"type":"string"},"email":{"type":"string"},"server":{"type":"string"}},"required":[]}},"required":[]}},"required":["image"]},{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}]},"results":{"type":"object","properties":{},"required":[],"additionalProperties":{"oneOf":[{"type":"string"},{"type":"object","properties":{"regex":{"type":"string"},"logType":{"type":"array","items":{"type":"string","enum":["stdin","stdout","stderr","nodeerr"]}}},"required":["regex","logType"]}]}},"execution":{"type":"object","properties":{"group":{"type":"string"},"timeout":{"type":"number"},"depends_on":{"type":"array","items":{"type":"string"}},"stop_if_dependent_stops":{"type":"boolean"}},"required":[]}},"required":["type","id","args"]}}},"required":["version","type","ops"]},"rawResults":{"nullable":true,"anyOf":[{},{"type":"null"}]},"status":{"type":"string"},"createdAt":{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},"submittedAt":{"nullable":true,"anyOf":[{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},{"type":"null"}]},"operations":{"type":"array","items":{"type":"object","required":["benchmarkId","operationId"],"properties":{"benchmarkId":{"type":"string"},"operationId":{"type":"number"}}}},"antiSpoofs":{"type":"array","items":{"type":"object","required":["benchmarkId","seed","gpuType","gpuUUID","prediction","verified","seedAt","predictedAt","seedRef"],"properties":{"benchmarkId":{"type":"string"},"seed":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"gpuType":{"type":"string"},"gpuUUID":{"type":"string"},"prediction":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"verified":{"type":"boolean"},"seedAt":{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},"predictedAt":{"nullable":true,"anyOf":[{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},{"type":"null"}]},"seedRef":{"nullable":true,"anyOf":[{"type":"object","required":["seed","gpuType","prediction","maximumDurationSeconds"],"properties":{"seed":{"type":"number"},"gpuType":{"type":"string"},"prediction":{"type":"number"},"maximumDurationSeconds":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]}}},{"type":"null"}]}}}},"nodeMetrics":{"type":"array","items":{"type":"object","required":["nodeAddress","benchmarkId","metricKey","instance","value","isValid","createdAt"],"properties":{"nodeAddress":{"type":"string"},"benchmarkId":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"metricKey":{"type":"string"},"instance":{"type":"string"},"value":{},"isValid":{"type":"boolean"},"createdAt":{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]}}}}}},"content":{"application/json":{"schema":{"type":"array","items":{"type":"object","required":["id","nodeAddress","jobDefinition","rawResults","status","createdAt","submittedAt","operations","antiSpoofs","nodeMetrics"],"properties":{"id":{"type":"string"},"nodeAddress":{"type":"string"},"jobDefinition":{"type":"object","properties":{"version":{"type":"string","enum":["0.1"]},"type":{"type":"string","enum":["container"]},"logistics":{"type":"object","properties":{"send":{"type":"object","properties":{"type":{"type":"string","enum":["api","api-listen"],"description":"api        - we receive and send via an endpoint endpoint\napi-listen - we create an endpoint to listen for incoming requests"},"args":{"type":"object","properties":{"endpoint":{"type":"string"}},"required":[],"description":"Make all properties in T optional"}},"required":["type","args"]},"receive":{"type":"object","properties":{"type":{"type":"string","enum":["api","api-listen"],"description":"api        - we receive and send via an endpoint endpoint\napi-listen - we create an endpoint to listen for incoming requests"},"args":{"type":"object","properties":{"endpoint":{"type":"string"}},"required":[],"description":"Make all properties in T optional"}},"required":["type","args"]}},"required":["send","receive"]},"deployment_id":{"type":"string"},"ssh":{"type":"object","properties":{"public_keys":{"type":"array","items":{"type":"string"}}},"required":[]},"meta":{"type":"object","properties":{"trigger":{"type":"string"},"system_resources":{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"oneOf":[{"type":"string"},{"type":"number"}]}}},"required":[],"additionalProperties":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"array","items":{"oneOf":[{"type":"string"},{"type":"number"}]}},{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"array","items":{"oneOf":[{"type":"string"},{"type":"number"}]}}]}}]}},"global":{"type":"object","properties":{"image":{"type":"string"},"gpu":{"type":"boolean"},"entrypoint":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"env":{"type":"object","properties":{},"required":[],"additionalProperties":{"type":"string"}},"work_dir":{"type":"string"},"variables":{"type":"object","properties":{},"required":[],"additionalProperties":{"type":"string"}}},"required":[]},"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["container/run","container/create-volume"]},"id":{"type":"string"},"args":{"oneOf":[{"type":"object","properties":{"image":{"type":"string"},"aliases":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"cmd":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"volumes":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"dest":{"type":"string"}},"required":["name","dest"]}},"expose":{"oneOf":[{"type":"number"},{"type":"string"},{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"port":{"type":"number"},"type":{"type":"string","enum":["api","web","websocket","webapi","none"]},"health_checks":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["http"]},"path":{"type":"string"},"method":{"type":"string","enum":["GET","POST","PUT","DELETE"]},"expected_status":{"type":"number"},"headers":{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"type":"string"}},"body":{},"continuous":{"type":"boolean"}},"required":["type","path","method","expected_status","continuous"]},{"type":"object","properties":{"type":{"type":"string","enum":["websocket"]},"expected_response":{"type":"string"},"continuous":{"type":"boolean"}},"required":["type","expected_response","continuous"]}]}}},"required":["port"]},{"type":"array","items":{"oneOf":[{"type":"number"},{"type":"string"},{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"port":{"type":"number"},"type":{"type":"string","enum":["api","web","websocket","webapi","none"]},"health_checks":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["http"]},"path":{"type":"string"},"method":{"type":"string","enum":["GET","POST","PUT","DELETE"]},"expected_status":{"type":"number"},"headers":{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"type":"string"}},"body":{},"continuous":{"type":"boolean"}},"required":["type","path","method","expected_status","continuous"]},{"type":"object","properties":{"type":{"type":"string","enum":["websocket"]},"expected_response":{"type":"string"},"continuous":{"type":"boolean"}},"required":["type","expected_response","continuous"]}]}}},"required":["port"]}]}}]},"gpu":{"type":"boolean"},"work_dir":{"type":"string"},"entrypoint":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"env":{"type":"object","properties":{},"required":[],"additionalProperties":{"type":"string"}},"restart_policy":{"oneOf":[{"type":"object","properties":{"policy":{"type":"string","enum":["on-failure"]},"restart_tries":{"type":"number"}},"required":["policy"]},{"type":"string","enum":["on-failure","no","always","unless-stopped"]}]},"private":{"type":"boolean"},"resources":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"files":{"type":"array","items":{"type":"string"}},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"bucket":{"type":"string"},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target","bucket"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"buckets":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"files":{"type":"array","items":{"type":"string"}}},"required":["url"]}},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target","buckets"]},{"type":"object","properties":{"type":{"type":"string","enum":["HF"]},"target":{"type":"string"},"repo":{"type":"string"},"revision":{"type":"string"},"files":{"type":"array","items":{"type":"string"}},"accessToken":{"type":"string"}},"required":["type","target","repo"]},{"type":"object","properties":{"type":{"type":"string","enum":["Ollama"]},"model":{"type":"string"},"target":{"type":"string"}},"required":["type","model"]},{"type":"string","enum":["__remove-if-empty__"]}]}},"authentication":{"type":"object","properties":{"docker":{"type":"object","properties":{"username":{"type":"string"},"password":{"type":"string"},"email":{"type":"string"},"server":{"type":"string"}},"required":[]}},"required":[]}},"required":["image"]},{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}]},"results":{"type":"object","properties":{},"required":[],"additionalProperties":{"oneOf":[{"type":"string"},{"type":"object","properties":{"regex":{"type":"string"},"logType":{"type":"array","items":{"type":"string","enum":["stdin","stdout","stderr","nodeerr"]}}},"required":["regex","logType"]}]}},"execution":{"type":"object","properties":{"group":{"type":"string"},"timeout":{"type":"number"},"depends_on":{"type":"array","items":{"type":"string"}},"stop_if_dependent_stops":{"type":"boolean"}},"required":[]}},"required":["type","id","args"]}}},"required":["version","type","ops"]},"rawResults":{"nullable":true,"anyOf":[{},{"type":"null"}]},"status":{"type":"string"},"createdAt":{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},"submittedAt":{"nullable":true,"anyOf":[{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},{"type":"null"}]},"operations":{"type":"array","items":{"type":"object","required":["benchmarkId","operationId"],"properties":{"benchmarkId":{"type":"string"},"operationId":{"type":"number"}}}},"antiSpoofs":{"type":"array","items":{"type":"object","required":["benchmarkId","seed","gpuType","gpuUUID","prediction","verified","seedAt","predictedAt","seedRef"],"properties":{"benchmarkId":{"type":"string"},"seed":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"gpuType":{"type":"string"},"gpuUUID":{"type":"string"},"prediction":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"verified":{"type":"boolean"},"seedAt":{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},"predictedAt":{"nullable":true,"anyOf":[{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},{"type":"null"}]},"seedRef":{"nullable":true,"anyOf":[{"type":"object","required":["seed","gpuType","prediction","maximumDurationSeconds"],"properties":{"seed":{"type":"number"},"gpuType":{"type":"string"},"prediction":{"type":"number"},"maximumDurationSeconds":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]}}},{"type":"null"}]}}}},"nodeMetrics":{"type":"array","items":{"type":"object","required":["nodeAddress","benchmarkId","metricKey","instance","value","isValid","createdAt"],"properties":{"nodeAddress":{"type":"string"},"benchmarkId":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"metricKey":{"type":"string"},"instance":{"type":"string"},"value":{},"isValid":{"type":"boolean"},"createdAt":{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]}}}}}}}},"multipart/form-data":{"schema":{"type":"array","items":{"type":"object","required":["id","nodeAddress","jobDefinition","rawResults","status","createdAt","submittedAt","operations","antiSpoofs","nodeMetrics"],"properties":{"id":{"type":"string"},"nodeAddress":{"type":"string"},"jobDefinition":{"type":"object","properties":{"version":{"type":"string","enum":["0.1"]},"type":{"type":"string","enum":["container"]},"logistics":{"type":"object","properties":{"send":{"type":"object","properties":{"type":{"type":"string","enum":["api","api-listen"],"description":"api        - we receive and send via an endpoint endpoint\napi-listen - we create an endpoint to listen for incoming requests"},"args":{"type":"object","properties":{"endpoint":{"type":"string"}},"required":[],"description":"Make all properties in T optional"}},"required":["type","args"]},"receive":{"type":"object","properties":{"type":{"type":"string","enum":["api","api-listen"],"description":"api        - we receive and send via an endpoint endpoint\napi-listen - we create an endpoint to listen for incoming requests"},"args":{"type":"object","properties":{"endpoint":{"type":"string"}},"required":[],"description":"Make all properties in T optional"}},"required":["type","args"]}},"required":["send","receive"]},"deployment_id":{"type":"string"},"ssh":{"type":"object","properties":{"public_keys":{"type":"array","items":{"type":"string"}}},"required":[]},"meta":{"type":"object","properties":{"trigger":{"type":"string"},"system_resources":{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"oneOf":[{"type":"string"},{"type":"number"}]}}},"required":[],"additionalProperties":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"array","items":{"oneOf":[{"type":"string"},{"type":"number"}]}},{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"array","items":{"oneOf":[{"type":"string"},{"type":"number"}]}}]}}]}},"global":{"type":"object","properties":{"image":{"type":"string"},"gpu":{"type":"boolean"},"entrypoint":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"env":{"type":"object","properties":{},"required":[],"additionalProperties":{"type":"string"}},"work_dir":{"type":"string"},"variables":{"type":"object","properties":{},"required":[],"additionalProperties":{"type":"string"}}},"required":[]},"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["container/run","container/create-volume"]},"id":{"type":"string"},"args":{"oneOf":[{"type":"object","properties":{"image":{"type":"string"},"aliases":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"cmd":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"volumes":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"dest":{"type":"string"}},"required":["name","dest"]}},"expose":{"oneOf":[{"type":"number"},{"type":"string"},{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"port":{"type":"number"},"type":{"type":"string","enum":["api","web","websocket","webapi","none"]},"health_checks":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["http"]},"path":{"type":"string"},"method":{"type":"string","enum":["GET","POST","PUT","DELETE"]},"expected_status":{"type":"number"},"headers":{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"type":"string"}},"body":{},"continuous":{"type":"boolean"}},"required":["type","path","method","expected_status","continuous"]},{"type":"object","properties":{"type":{"type":"string","enum":["websocket"]},"expected_response":{"type":"string"},"continuous":{"type":"boolean"}},"required":["type","expected_response","continuous"]}]}}},"required":["port"]},{"type":"array","items":{"oneOf":[{"type":"number"},{"type":"string"},{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"port":{"type":"number"},"type":{"type":"string","enum":["api","web","websocket","webapi","none"]},"health_checks":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["http"]},"path":{"type":"string"},"method":{"type":"string","enum":["GET","POST","PUT","DELETE"]},"expected_status":{"type":"number"},"headers":{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"type":"string"}},"body":{},"continuous":{"type":"boolean"}},"required":["type","path","method","expected_status","continuous"]},{"type":"object","properties":{"type":{"type":"string","enum":["websocket"]},"expected_response":{"type":"string"},"continuous":{"type":"boolean"}},"required":["type","expected_response","continuous"]}]}}},"required":["port"]}]}}]},"gpu":{"type":"boolean"},"work_dir":{"type":"string"},"entrypoint":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"env":{"type":"object","properties":{},"required":[],"additionalProperties":{"type":"string"}},"restart_policy":{"oneOf":[{"type":"object","properties":{"policy":{"type":"string","enum":["on-failure"]},"restart_tries":{"type":"number"}},"required":["policy"]},{"type":"string","enum":["on-failure","no","always","unless-stopped"]}]},"private":{"type":"boolean"},"resources":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"files":{"type":"array","items":{"type":"string"}},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"bucket":{"type":"string"},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target","bucket"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"buckets":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"files":{"type":"array","items":{"type":"string"}}},"required":["url"]}},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target","buckets"]},{"type":"object","properties":{"type":{"type":"string","enum":["HF"]},"target":{"type":"string"},"repo":{"type":"string"},"revision":{"type":"string"},"files":{"type":"array","items":{"type":"string"}},"accessToken":{"type":"string"}},"required":["type","target","repo"]},{"type":"object","properties":{"type":{"type":"string","enum":["Ollama"]},"model":{"type":"string"},"target":{"type":"string"}},"required":["type","model"]},{"type":"string","enum":["__remove-if-empty__"]}]}},"authentication":{"type":"object","properties":{"docker":{"type":"object","properties":{"username":{"type":"string"},"password":{"type":"string"},"email":{"type":"string"},"server":{"type":"string"}},"required":[]}},"required":[]}},"required":["image"]},{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}]},"results":{"type":"object","properties":{},"required":[],"additionalProperties":{"oneOf":[{"type":"string"},{"type":"object","properties":{"regex":{"type":"string"},"logType":{"type":"array","items":{"type":"string","enum":["stdin","stdout","stderr","nodeerr"]}}},"required":["regex","logType"]}]}},"execution":{"type":"object","properties":{"group":{"type":"string"},"timeout":{"type":"number"},"depends_on":{"type":"array","items":{"type":"string"}},"stop_if_dependent_stops":{"type":"boolean"}},"required":[]}},"required":["type","id","args"]}}},"required":["version","type","ops"]},"rawResults":{"nullable":true,"anyOf":[{},{"type":"null"}]},"status":{"type":"string"},"createdAt":{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},"submittedAt":{"nullable":true,"anyOf":[{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},{"type":"null"}]},"operations":{"type":"array","items":{"type":"object","required":["benchmarkId","operationId"],"properties":{"benchmarkId":{"type":"string"},"operationId":{"type":"number"}}}},"antiSpoofs":{"type":"array","items":{"type":"object","required":["benchmarkId","seed","gpuType","gpuUUID","prediction","verified","seedAt","predictedAt","seedRef"],"properties":{"benchmarkId":{"type":"string"},"seed":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"gpuType":{"type":"string"},"gpuUUID":{"type":"string"},"prediction":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"verified":{"type":"boolean"},"seedAt":{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},"predictedAt":{"nullable":true,"anyOf":[{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},{"type":"null"}]},"seedRef":{"nullable":true,"anyOf":[{"type":"object","required":["seed","gpuType","prediction","maximumDurationSeconds"],"properties":{"seed":{"type":"number"},"gpuType":{"type":"string"},"prediction":{"type":"number"},"maximumDurationSeconds":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]}}},{"type":"null"}]}}}},"nodeMetrics":{"type":"array","items":{"type":"object","required":["nodeAddress","benchmarkId","metricKey","instance","value","isValid","createdAt"],"properties":{"nodeAddress":{"type":"string"},"benchmarkId":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"metricKey":{"type":"string"},"instance":{"type":"string"},"value":{},"isValid":{"type":"boolean"},"createdAt":{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]}}}}}}}},"text/plain":{"schema":{"type":"array","items":{"type":"object","required":["id","nodeAddress","jobDefinition","rawResults","status","createdAt","submittedAt","operations","antiSpoofs","nodeMetrics"],"properties":{"id":{"type":"string"},"nodeAddress":{"type":"string"},"jobDefinition":{"type":"object","properties":{"version":{"type":"string","enum":["0.1"]},"type":{"type":"string","enum":["container"]},"logistics":{"type":"object","properties":{"send":{"type":"object","properties":{"type":{"type":"string","enum":["api","api-listen"],"description":"api        - we receive and send via an endpoint endpoint\napi-listen - we create an endpoint to listen for incoming requests"},"args":{"type":"object","properties":{"endpoint":{"type":"string"}},"required":[],"description":"Make all properties in T optional"}},"required":["type","args"]},"receive":{"type":"object","properties":{"type":{"type":"string","enum":["api","api-listen"],"description":"api        - we receive and send via an endpoint endpoint\napi-listen - we create an endpoint to listen for incoming requests"},"args":{"type":"object","properties":{"endpoint":{"type":"string"}},"required":[],"description":"Make all properties in T optional"}},"required":["type","args"]}},"required":["send","receive"]},"deployment_id":{"type":"string"},"ssh":{"type":"object","properties":{"public_keys":{"type":"array","items":{"type":"string"}}},"required":[]},"meta":{"type":"object","properties":{"trigger":{"type":"string"},"system_resources":{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"oneOf":[{"type":"string"},{"type":"number"}]}}},"required":[],"additionalProperties":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"array","items":{"oneOf":[{"type":"string"},{"type":"number"}]}},{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"array","items":{"oneOf":[{"type":"string"},{"type":"number"}]}}]}}]}},"global":{"type":"object","properties":{"image":{"type":"string"},"gpu":{"type":"boolean"},"entrypoint":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"env":{"type":"object","properties":{},"required":[],"additionalProperties":{"type":"string"}},"work_dir":{"type":"string"},"variables":{"type":"object","properties":{},"required":[],"additionalProperties":{"type":"string"}}},"required":[]},"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["container/run","container/create-volume"]},"id":{"type":"string"},"args":{"oneOf":[{"type":"object","properties":{"image":{"type":"string"},"aliases":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"cmd":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"volumes":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"dest":{"type":"string"}},"required":["name","dest"]}},"expose":{"oneOf":[{"type":"number"},{"type":"string"},{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"port":{"type":"number"},"type":{"type":"string","enum":["api","web","websocket","webapi","none"]},"health_checks":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["http"]},"path":{"type":"string"},"method":{"type":"string","enum":["GET","POST","PUT","DELETE"]},"expected_status":{"type":"number"},"headers":{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"type":"string"}},"body":{},"continuous":{"type":"boolean"}},"required":["type","path","method","expected_status","continuous"]},{"type":"object","properties":{"type":{"type":"string","enum":["websocket"]},"expected_response":{"type":"string"},"continuous":{"type":"boolean"}},"required":["type","expected_response","continuous"]}]}}},"required":["port"]},{"type":"array","items":{"oneOf":[{"type":"number"},{"type":"string"},{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"port":{"type":"number"},"type":{"type":"string","enum":["api","web","websocket","webapi","none"]},"health_checks":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["http"]},"path":{"type":"string"},"method":{"type":"string","enum":["GET","POST","PUT","DELETE"]},"expected_status":{"type":"number"},"headers":{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"type":"string"}},"body":{},"continuous":{"type":"boolean"}},"required":["type","path","method","expected_status","continuous"]},{"type":"object","properties":{"type":{"type":"string","enum":["websocket"]},"expected_response":{"type":"string"},"continuous":{"type":"boolean"}},"required":["type","expected_response","continuous"]}]}}},"required":["port"]}]}}]},"gpu":{"type":"boolean"},"work_dir":{"type":"string"},"entrypoint":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"env":{"type":"object","properties":{},"required":[],"additionalProperties":{"type":"string"}},"restart_policy":{"oneOf":[{"type":"object","properties":{"policy":{"type":"string","enum":["on-failure"]},"restart_tries":{"type":"number"}},"required":["policy"]},{"type":"string","enum":["on-failure","no","always","unless-stopped"]}]},"private":{"type":"boolean"},"resources":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"files":{"type":"array","items":{"type":"string"}},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"bucket":{"type":"string"},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target","bucket"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"buckets":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"files":{"type":"array","items":{"type":"string"}}},"required":["url"]}},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target","buckets"]},{"type":"object","properties":{"type":{"type":"string","enum":["HF"]},"target":{"type":"string"},"repo":{"type":"string"},"revision":{"type":"string"},"files":{"type":"array","items":{"type":"string"}},"accessToken":{"type":"string"}},"required":["type","target","repo"]},{"type":"object","properties":{"type":{"type":"string","enum":["Ollama"]},"model":{"type":"string"},"target":{"type":"string"}},"required":["type","model"]},{"type":"string","enum":["__remove-if-empty__"]}]}},"authentication":{"type":"object","properties":{"docker":{"type":"object","properties":{"username":{"type":"string"},"password":{"type":"string"},"email":{"type":"string"},"server":{"type":"string"}},"required":[]}},"required":[]}},"required":["image"]},{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}]},"results":{"type":"object","properties":{},"required":[],"additionalProperties":{"oneOf":[{"type":"string"},{"type":"object","properties":{"regex":{"type":"string"},"logType":{"type":"array","items":{"type":"string","enum":["stdin","stdout","stderr","nodeerr"]}}},"required":["regex","logType"]}]}},"execution":{"type":"object","properties":{"group":{"type":"string"},"timeout":{"type":"number"},"depends_on":{"type":"array","items":{"type":"string"}},"stop_if_dependent_stops":{"type":"boolean"}},"required":[]}},"required":["type","id","args"]}}},"required":["version","type","ops"]},"rawResults":{"nullable":true,"anyOf":[{},{"type":"null"}]},"status":{"type":"string"},"createdAt":{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},"submittedAt":{"nullable":true,"anyOf":[{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},{"type":"null"}]},"operations":{"type":"array","items":{"type":"object","required":["benchmarkId","operationId"],"properties":{"benchmarkId":{"type":"string"},"operationId":{"type":"number"}}}},"antiSpoofs":{"type":"array","items":{"type":"object","required":["benchmarkId","seed","gpuType","gpuUUID","prediction","verified","seedAt","predictedAt","seedRef"],"properties":{"benchmarkId":{"type":"string"},"seed":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"gpuType":{"type":"string"},"gpuUUID":{"type":"string"},"prediction":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"verified":{"type":"boolean"},"seedAt":{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},"predictedAt":{"nullable":true,"anyOf":[{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},{"type":"null"}]},"seedRef":{"nullable":true,"anyOf":[{"type":"object","required":["seed","gpuType","prediction","maximumDurationSeconds"],"properties":{"seed":{"type":"number"},"gpuType":{"type":"string"},"prediction":{"type":"number"},"maximumDurationSeconds":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]}}},{"type":"null"}]}}}},"nodeMetrics":{"type":"array","items":{"type":"object","required":["nodeAddress","benchmarkId","metricKey","instance","value","isValid","createdAt"],"properties":{"nodeAddress":{"type":"string"},"benchmarkId":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"metricKey":{"type":"string"},"instance":{"type":"string"},"value":{},"isValid":{"type":"boolean"},"createdAt":{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]}}}}}}}}}}},"operationId":"getNodesByIdRecent-benchmarks","tags":["Host Manager / Nodes"],"x-service":"host-manager"}},"/nodes/{id}/rewards":{"get":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"claimableUptimeNosRewards":{"type":"number"},"claimableUptimeUsdRewards":{"type":"number"},"totalClaimedUptimeNosRewards":{"type":"number"},"totalClaimedUptimeUsdRewards":{"type":"number"}},"required":["claimableUptimeNosRewards","claimableUptimeUsdRewards","totalClaimedUptimeNosRewards","totalClaimedUptimeUsdRewards"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"claimableUptimeNosRewards":{"type":"number"},"claimableUptimeUsdRewards":{"type":"number"},"totalClaimedUptimeNosRewards":{"type":"number"},"totalClaimedUptimeUsdRewards":{"type":"number"}},"required":["claimableUptimeNosRewards","claimableUptimeUsdRewards","totalClaimedUptimeNosRewards","totalClaimedUptimeUsdRewards"]}},"text/plain":{"schema":{"type":"object","properties":{"claimableUptimeNosRewards":{"type":"number"},"claimableUptimeUsdRewards":{"type":"number"},"totalClaimedUptimeNosRewards":{"type":"number"},"totalClaimedUptimeUsdRewards":{"type":"number"}},"required":["claimableUptimeNosRewards","claimableUptimeUsdRewards","totalClaimedUptimeNosRewards","totalClaimedUptimeUsdRewards"]}}}}},"operationId":"getNodesByIdRewards","tags":["Host Manager / Nodes"],"x-service":"host-manager"}},"/nodes/access-key/submit":{"post":{"parameters":[{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"status":{"anyOf":[{"const":"confirmed","type":"string"},{"const":"failed","type":"string"},{"const":"unknown","type":"string"}]},"signature":{"type":"string"},"market":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"reason":{"type":"string"}},"required":["status"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"status":{"anyOf":[{"const":"confirmed","type":"string"},{"const":"failed","type":"string"},{"const":"unknown","type":"string"}]},"signature":{"type":"string"},"market":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"reason":{"type":"string"}},"required":["status"]}},"text/plain":{"schema":{"type":"object","properties":{"status":{"anyOf":[{"const":"confirmed","type":"string"},{"const":"failed","type":"string"},{"const":"unknown","type":"string"}]},"signature":{"type":"string"},"market":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"reason":{"type":"string"}},"required":["status"]}}}}},"operationId":"postNodesAccess-keySubmit","tags":["Host Manager / Nodes"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["signedTx"],"properties":{"signedTx":{"minLength":1,"maxLength":2048,"type":"string"}}}},"multipart/form-data":{"schema":{"type":"object","required":["signedTx"],"properties":{"signedTx":{"minLength":1,"maxLength":2048,"type":"string"}}}},"text/plain":{"schema":{"type":"object","required":["signedTx"],"properties":{"signedTx":{"minLength":1,"maxLength":2048,"type":"string"}}}}}},"x-service":"host-manager"}},"/nodes/assign-node":{"post":{"parameters":[{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"operationId":"postNodesAssign-node","tags":["Host Manager / Nodes"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["address","market"],"properties":{"address":{"type":"string"},"market":{"type":"string"}}}},"multipart/form-data":{"schema":{"type":"object","required":["address","market"],"properties":{"address":{"type":"string"},"market":{"type":"string"}}}},"text/plain":{"schema":{"type":"object","required":["address","market"],"properties":{"address":{"type":"string"},"market":{"type":"string"}}}}}},"responses":{"200":{}},"x-service":"host-manager"}},"/nodes/available-gpus":{"get":{"operationId":"getNodesAvailable-gpus","tags":["Host Manager / Nodes","Host Manager / mcp"],"responses":{"200":{}},"x-service":"host-manager"}},"/nodes/ban":{"post":{"parameters":[{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"operationId":"postNodesBan","tags":["Host Manager / Nodes"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["address"],"properties":{"address":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}}}},"multipart/form-data":{"schema":{"type":"object","required":["address"],"properties":{"address":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}}}},"text/plain":{"schema":{"type":"object","required":["address"],"properties":{"address":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}}}}}},"responses":{"200":{}},"x-service":"host-manager"}},"/nodes/demote":{"post":{"parameters":[{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"operationId":"postNodesDemote","tags":["Host Manager / Nodes"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["address"],"properties":{"address":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}}}},"multipart/form-data":{"schema":{"type":"object","required":["address"],"properties":{"address":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}}}},"text/plain":{"schema":{"type":"object","required":["address"],"properties":{"address":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}}}}}},"responses":{"200":{}},"x-service":"host-manager"}},"/nodes/heartbeat":{"post":{"parameters":[{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"maxHeartbeatsPerDay":{"type":"number"}},"required":["success","maxHeartbeatsPerDay"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"maxHeartbeatsPerDay":{"type":"number"}},"required":["success","maxHeartbeatsPerDay"]}},"text/plain":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"maxHeartbeatsPerDay":{"type":"number"}},"required":["success","maxHeartbeatsPerDay"]}}}},"401":{"content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"text/plain":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"403":{"content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"text/plain":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}}},"operationId":"postNodesHeartbeat","tags":["Host Manager / Heartbeats"],"x-service":"host-manager"}},"/nodes/heartbeats/aggregate-historical":{"post":{"parameters":[{"schema":{"type":"string"},"in":"header","name":"authorization","required":true},{"schema":{"anyOf":[{"format":"numeric","default":0,"type":"string"},{"type":"number"}]},"in":"query","name":"batchHours","required":false}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"message":{"type":"string"},"hasMore":{"type":"boolean"},"nextStartTime":{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]}},"required":["success","message","hasMore"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"message":{"type":"string"},"hasMore":{"type":"boolean"},"nextStartTime":{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]}},"required":["success","message","hasMore"]}},"text/plain":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"message":{"type":"string"},"hasMore":{"type":"boolean"},"nextStartTime":{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]}},"required":["success","message","hasMore"]}}}},"401":{"content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"text/plain":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"403":{"content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"text/plain":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}}},"operationId":"postNodesHeartbeatsAggregate-historical","tags":["Host Manager / Heartbeats"],"x-service":"host-manager"}},"/nodes/heartbeats/next-max":{"get":{"parameters":[{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"next":{"type":"string"},"current":{"type":"string"}},"required":["next","current"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"next":{"type":"string"},"current":{"type":"string"}},"required":["next","current"]}},"text/plain":{"schema":{"type":"object","properties":{"next":{"type":"string"},"current":{"type":"string"}},"required":["next","current"]}}}},"401":{"content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"text/plain":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"403":{"content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"text/plain":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}}},"operationId":"getNodesHeartbeatsNext-max","tags":["Host Manager / Heartbeats"],"x-service":"host-manager"},"post":{"parameters":[{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"]}},"text/plain":{"schema":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"]}}}},"401":{"content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"text/plain":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"403":{"content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"text/plain":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}}},"operationId":"postNodesHeartbeatsNext-max","tags":["Host Manager / Heartbeats"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["value"],"properties":{"value":{"type":"string"}}}},"multipart/form-data":{"schema":{"type":"object","required":["value"],"properties":{"value":{"type":"string"}}}},"text/plain":{"schema":{"type":"object","required":["value"],"properties":{"value":{"type":"string"}}}}}},"x-service":"host-manager"}},"/nodes/heartbeats/uptime-reward-threshold-percentage":{"get":{"parameters":[{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}},"multipart/form-data":{"schema":{"type":"string"}},"text/plain":{"schema":{"type":"string"}}}},"401":{"content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"text/plain":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"403":{"content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"text/plain":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}}},"operationId":"getNodesHeartbeatsUptime-reward-threshold-percentage","tags":["Host Manager / Heartbeats"],"x-service":"host-manager"},"post":{"parameters":[{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"]}},"text/plain":{"schema":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"]}}}},"401":{"content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"text/plain":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"403":{"content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"text/plain":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}}},"operationId":"postNodesHeartbeatsUptime-reward-threshold-percentage","tags":["Host Manager / Heartbeats"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["value"],"properties":{"value":{"type":"string"}}}},"multipart/form-data":{"schema":{"type":"object","required":["value"],"properties":{"value":{"type":"string"}}}},"text/plain":{"schema":{"type":"object","required":["value"],"properties":{"value":{"type":"string"}}}}}},"x-service":"host-manager"}},"/nodes/heartbeats/uptime/{node}":{"get":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"node","required":true},{"schema":{"type":"string"},"in":"query","name":"startDate","required":false},{"schema":{"type":"string"},"in":"query","name":"endDate","required":false}],"responses":{"200":{"items":{"type":"object","required":["dayStart","uptimePercentage"],"properties":{"dayStart":{"type":"string"},"uptimePercentage":{"type":"number"}}},"content":{"application/json":{"schema":{"type":"array","items":{"type":"object","required":["dayStart","uptimePercentage"],"properties":{"dayStart":{"type":"string"},"uptimePercentage":{"type":"number"}}}}},"multipart/form-data":{"schema":{"type":"array","items":{"type":"object","required":["dayStart","uptimePercentage"],"properties":{"dayStart":{"type":"string"},"uptimePercentage":{"type":"number"}}}}},"text/plain":{"schema":{"type":"array","items":{"type":"object","required":["dayStart","uptimePercentage"],"properties":{"dayStart":{"type":"string"},"uptimePercentage":{"type":"number"}}}}}}}},"operationId":"getNodesHeartbeatsUptimeByNode","tags":["Host Manager / Heartbeats"],"x-service":"host-manager"}},"/nodes/invalidate-metrics":{"post":{"parameters":[{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"operationId":"postNodesInvalidate-metrics","tags":["Host Manager / Nodes"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["address"],"properties":{"address":{"type":"string"}}}},"multipart/form-data":{"schema":{"type":"object","required":["address"],"properties":{"address":{"type":"string"}}}},"text/plain":{"schema":{"type":"object","required":["address"],"properties":{"address":{"type":"string"}}}}}},"responses":{"200":{}},"x-service":"host-manager"}},"/nodes/kick-from-queue":{"post":{"parameters":[{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"operationId":"postNodesKick-from-queue","tags":["Host Manager / Nodes"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["address"],"properties":{"address":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}}}},"multipart/form-data":{"schema":{"type":"object","required":["address"],"properties":{"address":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}}}},"text/plain":{"schema":{"type":"object","required":["address"],"properties":{"address":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}}}}}},"responses":{"200":{}},"x-service":"host-manager"}},"/nodes/market-relation":{"get":{"parameters":[{"schema":{"type":"string"},"in":"query","name":"market","required":false}],"operationId":"getNodesMarket-relation","tags":["Host Manager / Nodes"],"responses":{"200":{}},"x-service":"host-manager"}},"/nodes/minimum-required-version":{"get":{"parameters":[{"schema":{"type":"string"},"in":"query","name":"isNext","required":false}],"operationId":"getNodesMinimum-required-version","tags":["Host Manager / Nodes"],"responses":{"200":{}},"x-service":"host-manager"},"put":{"parameters":[{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"operationId":"putNodesMinimum-required-version","tags":["Host Manager / Nodes"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["version"],"properties":{"version":{"type":"string"},"isNext":{"type":"boolean"}}}},"multipart/form-data":{"schema":{"type":"object","required":["version"],"properties":{"version":{"type":"string"},"isNext":{"type":"boolean"}}}},"text/plain":{"schema":{"type":"object","required":["version"],"properties":{"version":{"type":"string"},"isNext":{"type":"boolean"}}}}}},"responses":{"200":{}},"x-service":"host-manager"}},"/nodes/move-market":{"post":{"parameters":[{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"operationId":"postNodesMove-market","tags":["Host Manager / Nodes"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["address"],"properties":{"address":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}}}},"multipart/form-data":{"schema":{"type":"object","required":["address"],"properties":{"address":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}}}},"text/plain":{"schema":{"type":"object","required":["address"],"properties":{"address":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}}}}}},"responses":{"200":{}},"x-service":"host-manager"}},"/nodes/payment":{"post":{"parameters":[{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"message":{"type":"string"},"claimableAmount":{"type":"number"},"transactionSignature":{"type":"string"},"daysProcessed":{"type":"number"}},"required":["success","message","claimableAmount"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"message":{"type":"string"},"claimableAmount":{"type":"number"},"transactionSignature":{"type":"string"},"daysProcessed":{"type":"number"}},"required":["success","message","claimableAmount"]}},"text/plain":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"message":{"type":"string"},"claimableAmount":{"type":"number"},"transactionSignature":{"type":"string"},"daysProcessed":{"type":"number"}},"required":["success","message","claimableAmount"]}}}},"401":{"content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"text/plain":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"403":{"content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"text/plain":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}}},"operationId":"postNodesPayment","tags":["Host Manager / Heartbeats"],"x-service":"host-manager"}},"/nodes/promote":{"post":{"parameters":[{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"operationId":"postNodesPromote","tags":["Host Manager / Nodes"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["address"],"properties":{"address":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}}}},"multipart/form-data":{"schema":{"type":"object","required":["address"],"properties":{"address":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}}}},"text/plain":{"schema":{"type":"object","required":["address"],"properties":{"address":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}}}}}},"responses":{"200":{}},"x-service":"host-manager"}},"/nodes/queued-nodes":{"get":{"parameters":[{"schema":{"type":"string"},"in":"query","name":"marketAddress","required":false}],"operationId":"getNodesQueued-nodes","tags":["Host Manager / Nodes","Host Manager / mcp"],"responses":{"200":{}},"x-service":"host-manager"}},"/nodes/register":{"post":{"parameters":[{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"status":{"const":"registered","type":"string"},"nodeAddress":{"type":"string"}},"required":["status","nodeAddress"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"status":{"const":"registered","type":"string"},"nodeAddress":{"type":"string"}},"required":["status","nodeAddress"]}},"text/plain":{"schema":{"type":"object","properties":{"status":{"const":"registered","type":"string"},"nodeAddress":{"type":"string"}},"required":["status","nodeAddress"]}}}}},"operationId":"postNodesRegister","tags":["Host Manager / Nodes"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["email"],"properties":{"email":{"type":"string"},"discord":{"type":"string"},"twitter":{"type":"string"}}}},"multipart/form-data":{"schema":{"type":"object","required":["email"],"properties":{"email":{"type":"string"},"discord":{"type":"string"},"twitter":{"type":"string"}}}},"text/plain":{"schema":{"type":"object","required":["email"],"properties":{"email":{"type":"string"},"discord":{"type":"string"},"twitter":{"type":"string"}}}}}},"x-service":"host-manager"}},"/nodes/remove-market-assignment":{"post":{"parameters":[{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"operationId":"postNodesRemove-market-assignment","tags":["Host Manager / Nodes"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["address"],"properties":{"address":{"type":"string"}}}},"multipart/form-data":{"schema":{"type":"object","required":["address"],"properties":{"address":{"type":"string"}}}},"text/plain":{"schema":{"type":"object","required":["address"],"properties":{"address":{"type":"string"}}}}}},"responses":{"200":{}},"x-service":"host-manager"}},"/nodes/request-market":{"get":{"parameters":[{"schema":{"type":"string"},"in":"header","name":"authorization","required":true},{"schema":{"type":"string"},"in":"query","name":"market","required":false},{"schema":{"type":"string"},"in":"query","name":"session","required":false}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"benchmarkId":{"type":"string"},"jobDefinition":{"type":"object","properties":{"version":{"type":"string","enum":["0.1"]},"type":{"type":"string","enum":["container"]},"logistics":{"type":"object","properties":{"send":{"type":"object","properties":{"type":{"type":"string","enum":["api","api-listen"],"description":"api        - we receive and send via an endpoint endpoint\napi-listen - we create an endpoint to listen for incoming requests"},"args":{"type":"object","properties":{"endpoint":{"type":"string"}},"required":[],"description":"Make all properties in T optional"}},"required":["type","args"]},"receive":{"type":"object","properties":{"type":{"type":"string","enum":["api","api-listen"],"description":"api        - we receive and send via an endpoint endpoint\napi-listen - we create an endpoint to listen for incoming requests"},"args":{"type":"object","properties":{"endpoint":{"type":"string"}},"required":[],"description":"Make all properties in T optional"}},"required":["type","args"]}},"required":["send","receive"]},"deployment_id":{"type":"string"},"ssh":{"type":"object","properties":{"public_keys":{"type":"array","items":{"type":"string"}}},"required":[]},"meta":{"type":"object","properties":{"trigger":{"type":"string"},"system_resources":{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"oneOf":[{"type":"string"},{"type":"number"}]}}},"required":[],"additionalProperties":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"array","items":{"oneOf":[{"type":"string"},{"type":"number"}]}},{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"array","items":{"oneOf":[{"type":"string"},{"type":"number"}]}}]}}]}},"global":{"type":"object","properties":{"image":{"type":"string"},"gpu":{"type":"boolean"},"entrypoint":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"env":{"type":"object","properties":{},"required":[],"additionalProperties":{"type":"string"}},"work_dir":{"type":"string"},"variables":{"type":"object","properties":{},"required":[],"additionalProperties":{"type":"string"}}},"required":[]},"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["container/run","container/create-volume"]},"id":{"type":"string"},"args":{"oneOf":[{"type":"object","properties":{"image":{"type":"string"},"aliases":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"cmd":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"volumes":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"dest":{"type":"string"}},"required":["name","dest"]}},"expose":{"oneOf":[{"type":"number"},{"type":"string"},{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"port":{"type":"number"},"type":{"type":"string","enum":["api","web","websocket","webapi","none"]},"health_checks":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["http"]},"path":{"type":"string"},"method":{"type":"string","enum":["GET","POST","PUT","DELETE"]},"expected_status":{"type":"number"},"headers":{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"type":"string"}},"body":{},"continuous":{"type":"boolean"}},"required":["type","path","method","expected_status","continuous"]},{"type":"object","properties":{"type":{"type":"string","enum":["websocket"]},"expected_response":{"type":"string"},"continuous":{"type":"boolean"}},"required":["type","expected_response","continuous"]}]}}},"required":["port"]},{"type":"array","items":{"oneOf":[{"type":"number"},{"type":"string"},{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"port":{"type":"number"},"type":{"type":"string","enum":["api","web","websocket","webapi","none"]},"health_checks":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["http"]},"path":{"type":"string"},"method":{"type":"string","enum":["GET","POST","PUT","DELETE"]},"expected_status":{"type":"number"},"headers":{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"type":"string"}},"body":{},"continuous":{"type":"boolean"}},"required":["type","path","method","expected_status","continuous"]},{"type":"object","properties":{"type":{"type":"string","enum":["websocket"]},"expected_response":{"type":"string"},"continuous":{"type":"boolean"}},"required":["type","expected_response","continuous"]}]}}},"required":["port"]}]}}]},"gpu":{"type":"boolean"},"work_dir":{"type":"string"},"entrypoint":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"env":{"type":"object","properties":{},"required":[],"additionalProperties":{"type":"string"}},"restart_policy":{"oneOf":[{"type":"object","properties":{"policy":{"type":"string","enum":["on-failure"]},"restart_tries":{"type":"number"}},"required":["policy"]},{"type":"string","enum":["on-failure","no","always","unless-stopped"]}]},"private":{"type":"boolean"},"resources":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"files":{"type":"array","items":{"type":"string"}},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"bucket":{"type":"string"},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target","bucket"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"buckets":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"files":{"type":"array","items":{"type":"string"}}},"required":["url"]}},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target","buckets"]},{"type":"object","properties":{"type":{"type":"string","enum":["HF"]},"target":{"type":"string"},"repo":{"type":"string"},"revision":{"type":"string"},"files":{"type":"array","items":{"type":"string"}},"accessToken":{"type":"string"}},"required":["type","target","repo"]},{"type":"object","properties":{"type":{"type":"string","enum":["Ollama"]},"model":{"type":"string"},"target":{"type":"string"}},"required":["type","model"]},{"type":"string","enum":["__remove-if-empty__"]}]}},"authentication":{"type":"object","properties":{"docker":{"type":"object","properties":{"username":{"type":"string"},"password":{"type":"string"},"email":{"type":"string"},"server":{"type":"string"}},"required":[]}},"required":[]}},"required":["image"]},{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}]},"results":{"type":"object","properties":{},"required":[],"additionalProperties":{"oneOf":[{"type":"string"},{"type":"object","properties":{"regex":{"type":"string"},"logType":{"type":"array","items":{"type":"string","enum":["stdin","stdout","stderr","nodeerr"]}}},"required":["regex","logType"]}]}},"execution":{"type":"object","properties":{"group":{"type":"string"},"timeout":{"type":"number"},"depends_on":{"type":"array","items":{"type":"string"}},"stop_if_dependent_stops":{"type":"boolean"}},"required":[]}},"required":["type","id","args"]}}},"required":["version","type","ops"]},"market":{"type":"object","required":["address"],"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"accessKeyTx":{"type":"string"}}},"feedbackReport":{"type":"object","required":["marketAddress","passed","metrics"],"properties":{"marketAddress":{"type":"string"},"marketName":{"type":"string"},"passed":{"type":"boolean"},"metrics":{"type":"array","items":{"type":"object","required":["metricKey","ruleDescription","passed","isOptional"],"properties":{"metricKey":{"type":"string"},"measuredValue":{"anyOf":[{"type":"number"},{"type":"string"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"anyOf":[{"type":"number"},{"type":"string"},{"type":"boolean"},{"type":"null"}]}}]},"ruleDescription":{"type":"string"},"passed":{"type":"boolean"},"failureMessage":{"type":"string"},"isOptional":{"type":"boolean"}}}}}},"nextTestAt":{"type":"string"},"status":{"type":"string"},"session":{"type":"string"}}}},"multipart/form-data":{"schema":{"type":"object","properties":{"benchmarkId":{"type":"string"},"jobDefinition":{"type":"object","properties":{"version":{"type":"string","enum":["0.1"]},"type":{"type":"string","enum":["container"]},"logistics":{"type":"object","properties":{"send":{"type":"object","properties":{"type":{"type":"string","enum":["api","api-listen"],"description":"api        - we receive and send via an endpoint endpoint\napi-listen - we create an endpoint to listen for incoming requests"},"args":{"type":"object","properties":{"endpoint":{"type":"string"}},"required":[],"description":"Make all properties in T optional"}},"required":["type","args"]},"receive":{"type":"object","properties":{"type":{"type":"string","enum":["api","api-listen"],"description":"api        - we receive and send via an endpoint endpoint\napi-listen - we create an endpoint to listen for incoming requests"},"args":{"type":"object","properties":{"endpoint":{"type":"string"}},"required":[],"description":"Make all properties in T optional"}},"required":["type","args"]}},"required":["send","receive"]},"deployment_id":{"type":"string"},"ssh":{"type":"object","properties":{"public_keys":{"type":"array","items":{"type":"string"}}},"required":[]},"meta":{"type":"object","properties":{"trigger":{"type":"string"},"system_resources":{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"oneOf":[{"type":"string"},{"type":"number"}]}}},"required":[],"additionalProperties":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"array","items":{"oneOf":[{"type":"string"},{"type":"number"}]}},{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"array","items":{"oneOf":[{"type":"string"},{"type":"number"}]}}]}}]}},"global":{"type":"object","properties":{"image":{"type":"string"},"gpu":{"type":"boolean"},"entrypoint":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"env":{"type":"object","properties":{},"required":[],"additionalProperties":{"type":"string"}},"work_dir":{"type":"string"},"variables":{"type":"object","properties":{},"required":[],"additionalProperties":{"type":"string"}}},"required":[]},"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["container/run","container/create-volume"]},"id":{"type":"string"},"args":{"oneOf":[{"type":"object","properties":{"image":{"type":"string"},"aliases":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"cmd":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"volumes":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"dest":{"type":"string"}},"required":["name","dest"]}},"expose":{"oneOf":[{"type":"number"},{"type":"string"},{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"port":{"type":"number"},"type":{"type":"string","enum":["api","web","websocket","webapi","none"]},"health_checks":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["http"]},"path":{"type":"string"},"method":{"type":"string","enum":["GET","POST","PUT","DELETE"]},"expected_status":{"type":"number"},"headers":{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"type":"string"}},"body":{},"continuous":{"type":"boolean"}},"required":["type","path","method","expected_status","continuous"]},{"type":"object","properties":{"type":{"type":"string","enum":["websocket"]},"expected_response":{"type":"string"},"continuous":{"type":"boolean"}},"required":["type","expected_response","continuous"]}]}}},"required":["port"]},{"type":"array","items":{"oneOf":[{"type":"number"},{"type":"string"},{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"port":{"type":"number"},"type":{"type":"string","enum":["api","web","websocket","webapi","none"]},"health_checks":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["http"]},"path":{"type":"string"},"method":{"type":"string","enum":["GET","POST","PUT","DELETE"]},"expected_status":{"type":"number"},"headers":{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"type":"string"}},"body":{},"continuous":{"type":"boolean"}},"required":["type","path","method","expected_status","continuous"]},{"type":"object","properties":{"type":{"type":"string","enum":["websocket"]},"expected_response":{"type":"string"},"continuous":{"type":"boolean"}},"required":["type","expected_response","continuous"]}]}}},"required":["port"]}]}}]},"gpu":{"type":"boolean"},"work_dir":{"type":"string"},"entrypoint":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"env":{"type":"object","properties":{},"required":[],"additionalProperties":{"type":"string"}},"restart_policy":{"oneOf":[{"type":"object","properties":{"policy":{"type":"string","enum":["on-failure"]},"restart_tries":{"type":"number"}},"required":["policy"]},{"type":"string","enum":["on-failure","no","always","unless-stopped"]}]},"private":{"type":"boolean"},"resources":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"files":{"type":"array","items":{"type":"string"}},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"bucket":{"type":"string"},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target","bucket"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"buckets":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"files":{"type":"array","items":{"type":"string"}}},"required":["url"]}},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target","buckets"]},{"type":"object","properties":{"type":{"type":"string","enum":["HF"]},"target":{"type":"string"},"repo":{"type":"string"},"revision":{"type":"string"},"files":{"type":"array","items":{"type":"string"}},"accessToken":{"type":"string"}},"required":["type","target","repo"]},{"type":"object","properties":{"type":{"type":"string","enum":["Ollama"]},"model":{"type":"string"},"target":{"type":"string"}},"required":["type","model"]},{"type":"string","enum":["__remove-if-empty__"]}]}},"authentication":{"type":"object","properties":{"docker":{"type":"object","properties":{"username":{"type":"string"},"password":{"type":"string"},"email":{"type":"string"},"server":{"type":"string"}},"required":[]}},"required":[]}},"required":["image"]},{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}]},"results":{"type":"object","properties":{},"required":[],"additionalProperties":{"oneOf":[{"type":"string"},{"type":"object","properties":{"regex":{"type":"string"},"logType":{"type":"array","items":{"type":"string","enum":["stdin","stdout","stderr","nodeerr"]}}},"required":["regex","logType"]}]}},"execution":{"type":"object","properties":{"group":{"type":"string"},"timeout":{"type":"number"},"depends_on":{"type":"array","items":{"type":"string"}},"stop_if_dependent_stops":{"type":"boolean"}},"required":[]}},"required":["type","id","args"]}}},"required":["version","type","ops"]},"market":{"type":"object","required":["address"],"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"accessKeyTx":{"type":"string"}}},"feedbackReport":{"type":"object","required":["marketAddress","passed","metrics"],"properties":{"marketAddress":{"type":"string"},"marketName":{"type":"string"},"passed":{"type":"boolean"},"metrics":{"type":"array","items":{"type":"object","required":["metricKey","ruleDescription","passed","isOptional"],"properties":{"metricKey":{"type":"string"},"measuredValue":{"anyOf":[{"type":"number"},{"type":"string"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"anyOf":[{"type":"number"},{"type":"string"},{"type":"boolean"},{"type":"null"}]}}]},"ruleDescription":{"type":"string"},"passed":{"type":"boolean"},"failureMessage":{"type":"string"},"isOptional":{"type":"boolean"}}}}}},"nextTestAt":{"type":"string"},"status":{"type":"string"},"session":{"type":"string"}}}},"text/plain":{"schema":{"type":"object","properties":{"benchmarkId":{"type":"string"},"jobDefinition":{"type":"object","properties":{"version":{"type":"string","enum":["0.1"]},"type":{"type":"string","enum":["container"]},"logistics":{"type":"object","properties":{"send":{"type":"object","properties":{"type":{"type":"string","enum":["api","api-listen"],"description":"api        - we receive and send via an endpoint endpoint\napi-listen - we create an endpoint to listen for incoming requests"},"args":{"type":"object","properties":{"endpoint":{"type":"string"}},"required":[],"description":"Make all properties in T optional"}},"required":["type","args"]},"receive":{"type":"object","properties":{"type":{"type":"string","enum":["api","api-listen"],"description":"api        - we receive and send via an endpoint endpoint\napi-listen - we create an endpoint to listen for incoming requests"},"args":{"type":"object","properties":{"endpoint":{"type":"string"}},"required":[],"description":"Make all properties in T optional"}},"required":["type","args"]}},"required":["send","receive"]},"deployment_id":{"type":"string"},"ssh":{"type":"object","properties":{"public_keys":{"type":"array","items":{"type":"string"}}},"required":[]},"meta":{"type":"object","properties":{"trigger":{"type":"string"},"system_resources":{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"oneOf":[{"type":"string"},{"type":"number"}]}}},"required":[],"additionalProperties":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"array","items":{"oneOf":[{"type":"string"},{"type":"number"}]}},{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"array","items":{"oneOf":[{"type":"string"},{"type":"number"}]}}]}}]}},"global":{"type":"object","properties":{"image":{"type":"string"},"gpu":{"type":"boolean"},"entrypoint":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"env":{"type":"object","properties":{},"required":[],"additionalProperties":{"type":"string"}},"work_dir":{"type":"string"},"variables":{"type":"object","properties":{},"required":[],"additionalProperties":{"type":"string"}}},"required":[]},"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["container/run","container/create-volume"]},"id":{"type":"string"},"args":{"oneOf":[{"type":"object","properties":{"image":{"type":"string"},"aliases":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"cmd":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"volumes":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"dest":{"type":"string"}},"required":["name","dest"]}},"expose":{"oneOf":[{"type":"number"},{"type":"string"},{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"port":{"type":"number"},"type":{"type":"string","enum":["api","web","websocket","webapi","none"]},"health_checks":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["http"]},"path":{"type":"string"},"method":{"type":"string","enum":["GET","POST","PUT","DELETE"]},"expected_status":{"type":"number"},"headers":{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"type":"string"}},"body":{},"continuous":{"type":"boolean"}},"required":["type","path","method","expected_status","continuous"]},{"type":"object","properties":{"type":{"type":"string","enum":["websocket"]},"expected_response":{"type":"string"},"continuous":{"type":"boolean"}},"required":["type","expected_response","continuous"]}]}}},"required":["port"]},{"type":"array","items":{"oneOf":[{"type":"number"},{"type":"string"},{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"port":{"type":"number"},"type":{"type":"string","enum":["api","web","websocket","webapi","none"]},"health_checks":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["http"]},"path":{"type":"string"},"method":{"type":"string","enum":["GET","POST","PUT","DELETE"]},"expected_status":{"type":"number"},"headers":{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"type":"string"}},"body":{},"continuous":{"type":"boolean"}},"required":["type","path","method","expected_status","continuous"]},{"type":"object","properties":{"type":{"type":"string","enum":["websocket"]},"expected_response":{"type":"string"},"continuous":{"type":"boolean"}},"required":["type","expected_response","continuous"]}]}}},"required":["port"]}]}}]},"gpu":{"type":"boolean"},"work_dir":{"type":"string"},"entrypoint":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"env":{"type":"object","properties":{},"required":[],"additionalProperties":{"type":"string"}},"restart_policy":{"oneOf":[{"type":"object","properties":{"policy":{"type":"string","enum":["on-failure"]},"restart_tries":{"type":"number"}},"required":["policy"]},{"type":"string","enum":["on-failure","no","always","unless-stopped"]}]},"private":{"type":"boolean"},"resources":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"files":{"type":"array","items":{"type":"string"}},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"bucket":{"type":"string"},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target","bucket"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"buckets":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"files":{"type":"array","items":{"type":"string"}}},"required":["url"]}},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target","buckets"]},{"type":"object","properties":{"type":{"type":"string","enum":["HF"]},"target":{"type":"string"},"repo":{"type":"string"},"revision":{"type":"string"},"files":{"type":"array","items":{"type":"string"}},"accessToken":{"type":"string"}},"required":["type","target","repo"]},{"type":"object","properties":{"type":{"type":"string","enum":["Ollama"]},"model":{"type":"string"},"target":{"type":"string"}},"required":["type","model"]},{"type":"string","enum":["__remove-if-empty__"]}]}},"authentication":{"type":"object","properties":{"docker":{"type":"object","properties":{"username":{"type":"string"},"password":{"type":"string"},"email":{"type":"string"},"server":{"type":"string"}},"required":[]}},"required":[]}},"required":["image"]},{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}]},"results":{"type":"object","properties":{},"required":[],"additionalProperties":{"oneOf":[{"type":"string"},{"type":"object","properties":{"regex":{"type":"string"},"logType":{"type":"array","items":{"type":"string","enum":["stdin","stdout","stderr","nodeerr"]}}},"required":["regex","logType"]}]}},"execution":{"type":"object","properties":{"group":{"type":"string"},"timeout":{"type":"number"},"depends_on":{"type":"array","items":{"type":"string"}},"stop_if_dependent_stops":{"type":"boolean"}},"required":[]}},"required":["type","id","args"]}}},"required":["version","type","ops"]},"market":{"type":"object","required":["address"],"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"accessKeyTx":{"type":"string"}}},"feedbackReport":{"type":"object","required":["marketAddress","passed","metrics"],"properties":{"marketAddress":{"type":"string"},"marketName":{"type":"string"},"passed":{"type":"boolean"},"metrics":{"type":"array","items":{"type":"object","required":["metricKey","ruleDescription","passed","isOptional"],"properties":{"metricKey":{"type":"string"},"measuredValue":{"anyOf":[{"type":"number"},{"type":"string"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"anyOf":[{"type":"number"},{"type":"string"},{"type":"boolean"},{"type":"null"}]}}]},"ruleDescription":{"type":"string"},"passed":{"type":"boolean"},"failureMessage":{"type":"string"},"isOptional":{"type":"boolean"}}}}}},"nextTestAt":{"type":"string"},"status":{"type":"string"},"session":{"type":"string"}}}}}}},"operationId":"getNodesRequest-market","tags":["Host Manager / Nodes"],"x-service":"host-manager"}},"/nodes/rewards":{"get":{"parameters":[{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"claimableUptimeNosRewards":{"type":"number"},"claimableUptimeUsdRewards":{"type":"number"},"totalClaimedUptimeNosRewards":{"type":"number"},"totalClaimedUptimeUsdRewards":{"type":"number"}},"required":["claimableUptimeNosRewards","claimableUptimeUsdRewards","totalClaimedUptimeNosRewards","totalClaimedUptimeUsdRewards"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"claimableUptimeNosRewards":{"type":"number"},"claimableUptimeUsdRewards":{"type":"number"},"totalClaimedUptimeNosRewards":{"type":"number"},"totalClaimedUptimeUsdRewards":{"type":"number"}},"required":["claimableUptimeNosRewards","claimableUptimeUsdRewards","totalClaimedUptimeNosRewards","totalClaimedUptimeUsdRewards"]}},"text/plain":{"schema":{"type":"object","properties":{"claimableUptimeNosRewards":{"type":"number"},"claimableUptimeUsdRewards":{"type":"number"},"totalClaimedUptimeNosRewards":{"type":"number"},"totalClaimedUptimeUsdRewards":{"type":"number"}},"required":["claimableUptimeNosRewards","claimableUptimeUsdRewards","totalClaimedUptimeNosRewards","totalClaimedUptimeUsdRewards"]}}}}},"operationId":"getNodesRewards","tags":["Host Manager / Nodes"],"x-service":"host-manager"}},"/nodes/sync-node":{"post":{"parameters":[{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"operationId":"postNodesSync-node","tags":["Host Manager / Nodes"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["address"],"properties":{"address":{"type":"string"}}}},"multipart/form-data":{"schema":{"type":"object","required":["address"],"properties":{"address":{"type":"string"}}}},"text/plain":{"schema":{"type":"object","required":["address"],"properties":{"address":{"type":"string"}}}}}},"responses":{"200":{}},"x-service":"host-manager"}},"/nodes/unban":{"post":{"parameters":[{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"operationId":"postNodesUnban","tags":["Host Manager / Nodes"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["address"],"properties":{"address":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}}}},"multipart/form-data":{"schema":{"type":"object","required":["address"],"properties":{"address":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}}}},"text/plain":{"schema":{"type":"object","required":["address"],"properties":{"address":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}}}}}},"responses":{"200":{}},"x-service":"host-manager"}},"/nodes/with-access":{"get":{"parameters":[{"schema":{"type":"string"},"in":"query","name":"marketAddress","required":false}],"operationId":"getNodesWith-access","tags":["Host Manager / Nodes"],"responses":{"200":{}},"x-service":"host-manager"}},"/public/knowledge/search":{"get":{"operationId":"search_knowledge_base","tags":["Nosa / mcp"],"summary":"Search Nosana's knowledge base","description":"Search Nosana's documentation, SDK reference, program interfaces, past support cases and blog. Call this for how-to questions, troubleshooting and facts about Nosana. To find or deploy a template, use the template tools instead: they list the whole catalogue with ids and VRAM requirements.\nStart broad: omit source_kind so every source is searched. Only if the results are irrelevant or too noisy, call again with source_kind narrowed to the sources that fit the question.\nEach result is prefixed with its source_kind:\n- markdown — official Nosana documentation and the template catalogue\n- tsdoc — SDK and library API reference\n- idl — on-chain program interface definitions\n- discord-qa — past community support cases. These open with a STATUS line: 'resolved' cases contain the fix that worked, so ground your answer in it; 'pending' cases are known open issues already reported to the team, so say that instead of improvising a fix.\n- manual — internal knowledge notes added by the team.\n- blog — Nosana blog posts, each chunk headed with the post title and its published date. Newer posts can change what older ones said, so compare dates; where search_blog_graph is offered, it shows whole posts.\nResults carrying a URL may be cited and linked. Results marked as an internal source have no public page: use them as context only and never fabricate a link to them.","parameters":[{"name":"query","in":"query","required":true,"description":"Natural-language search query. For a problem report, include the error names verbatim.","schema":{"type":"string","minLength":1}},{"name":"source_kind","in":"query","required":false,"description":"Optional. Restrict the search to these sources. Omit on the first attempt; use it to narrow a broad search that came back unhelpful.","style":"form","explode":true,"schema":{"type":"array","maxItems":8,"items":{"type":"string","enum":["markdown","tsdoc","idl","discord-qa","manual","blog"]}}},{"name":"k","in":"query","required":false,"description":"How many results, 1 to 12; 6 when omitted.","schema":{"type":"integer","minimum":1,"maximum":12}}],"responses":{"200":{"description":"The matching passages, numbered, each with its source and link.","content":{"text/plain":{"schema":{"type":"string"}}}},"429":{"description":"Too many requests; retry after the number of seconds in Retry-After."},"502":{"description":"The knowledge base is not reachable right now."}},"x-service":"sean-chat-backend"},"servers":[{"url":"https://sean-chat-backend.k8s.prd.nosana.com"}]},"/public/official-links":{"get":{"operationId":"get_official_links","tags":["Nosa / mcp"],"summary":"Official Nosana links","description":"Fetch a formatted list of all official Nosana links, including website, social media, docs, dashboards, and token details. Call this when the user asks for official links, socials, token contract, dashboard URLs, or general contact info. CRITICAL: Do not output the entire list to the user unless they explicitly ask for all links. Extract and return ONLY the specific link(s) the user requested.","responses":{"200":{"description":"The official links, as markdown.","content":{"application/json":{"schema":{"type":"object","properties":{"markdown":{"type":"string"}},"required":["markdown"]}}}},"429":{"description":"Too many requests; retry after the number of seconds in Retry-After."}},"x-service":"sean-chat-backend"},"servers":[{"url":"https://sean-chat-backend.k8s.prd.nosana.com"}]},"/rpc":{"get":{"parameters":[{"schema":{"type":"string"},"in":"header","name":"authorization","required":true}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"anyOf":[{"type":"string"},{"type":"undefined"}]}},"required":["url"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"url":{"anyOf":[{"type":"string"},{"type":"undefined"}]}},"required":["url"]}},"text/plain":{"schema":{"type":"object","properties":{"url":{"anyOf":[{"type":"string"},{"type":"undefined"}]}},"required":["url"]}}}}},"operationId":"getRpc","tags":["Host Manager / Nodes"],"x-service":"host-manager"}},"/stats/":{"get":{"operationId":"getStats","tags":["Blockchain Indexer / Stats"],"description":"Get the latest statistics","responses":{"200":{}},"x-service":"blockchain-indexer"}},"/stats/earning-history":{"get":{"parameters":[{"schema":{"type":"string"},"in":"query","name":"address","required":true},{"schema":{"type":"string"},"in":"query","name":"start_date","required":true},{"schema":{"type":"string"},"in":"query","name":"end_date","required":false},{"schema":{"anyOf":[{"const":"day","type":"string"},{"const":"month","type":"string"}]},"in":"query","name":"group_by","required":false}],"operationId":"getStatsEarning-history","tags":["Blockchain Indexer / Stats"],"description":"Flexible endpoint to retrieve earning history of node with custom date ranges and grouping options.","responses":{"200":{}},"x-service":"blockchain-indexer"}},"/stats/nodes-country":{"get":{"responses":{"200":{"items":{"type":"object","required":["country","total","active","offline"],"properties":{"country":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"total":{"type":"number"},"active":{"type":"number"},"offline":{"type":"number"}}},"content":{"application/json":{"schema":{"type":"array","items":{"type":"object","required":["country","total","active","offline"],"properties":{"country":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"total":{"type":"number"},"active":{"type":"number"},"offline":{"type":"number"}}}}},"multipart/form-data":{"schema":{"type":"array","items":{"type":"object","required":["country","total","active","offline"],"properties":{"country":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"total":{"type":"number"},"active":{"type":"number"},"offline":{"type":"number"}}}}},"text/plain":{"schema":{"type":"array","items":{"type":"object","required":["country","total","active","offline"],"properties":{"country":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"total":{"type":"number"},"active":{"type":"number"},"offline":{"type":"number"}}}}}}}},"operationId":"getStatsNodes-country","tags":["Host Manager / Stats"],"x-service":"host-manager"}},"/stats/price":{"get":{"parameters":[{"schema":{"type":"string"},"in":"query","name":"timestamp","required":false},{"schema":{"type":"string"},"in":"query","name":"date","required":false},{"schema":{"type":"string"},"in":"query","name":"maxAgeMinutes","required":false}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"price":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["price"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"price":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["price"]}},"text/plain":{"schema":{"type":"object","properties":{"price":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["price"]}}}}},"operationId":"getStatsPrice","summary":"Get NOS price for a date or timestamp","description":"Returns the NOS price (USD). Defaults to current time when neither timestamp nor date is provided. Query: timestamp (Unix seconds), date (YYYY-MM-DD), or omit for now; optional maxAgeMinutes for cache tolerance.","tags":["Blockchain Indexer / Stats"],"x-service":"blockchain-indexer"}},"/stats/spending-history":{"get":{"parameters":[{"schema":{"type":"string"},"in":"query","name":"address","required":true},{"schema":{"type":"string"},"in":"query","name":"start_date","required":true},{"schema":{"type":"string"},"in":"query","name":"end_date","required":false},{"schema":{"anyOf":[{"const":"day","type":"string"},{"const":"month","type":"string"}]},"in":"query","name":"group_by","required":false}],"operationId":"getStatsSpending-history","tags":["Blockchain Indexer / Stats"],"description":"Flexible endpoint to retrieve spending history with custom date ranges and grouping options.","responses":{"200":{}},"x-service":"blockchain-indexer"}},"/templates/":{"get":{"responses":{"200":{"items":{"type":"object","required":["id","name","jobDefinition","icon","readme","category","vram_requirement","cuda_requirement","is_variant_template","parent_template_id","variants"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"jobDefinition":{},"icon":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"readme":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"category":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"vram_requirement":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"cuda_requirement":{"nullable":true,"anyOf":[{"type":"array","items":{"type":"number"}},{"type":"null"}]},"is_variant_template":{"nullable":true,"anyOf":[{"type":"boolean"},{"type":"null"}]},"parent_template_id":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"variants":{}},"additionalProperties":false},"content":{"application/json":{"schema":{"type":"array","items":{"type":"object","required":["id","name","jobDefinition","icon","readme","category","vram_requirement","cuda_requirement","is_variant_template","parent_template_id","variants"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"jobDefinition":{},"icon":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"readme":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"category":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"vram_requirement":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"cuda_requirement":{"nullable":true,"anyOf":[{"type":"array","items":{"type":"number"}},{"type":"null"}]},"is_variant_template":{"nullable":true,"anyOf":[{"type":"boolean"},{"type":"null"}]},"parent_template_id":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"variants":{}}}}},"multipart/form-data":{"schema":{"type":"array","items":{"type":"object","required":["id","name","jobDefinition","icon","readme","category","vram_requirement","cuda_requirement","is_variant_template","parent_template_id","variants"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"jobDefinition":{},"icon":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"readme":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"category":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"vram_requirement":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"cuda_requirement":{"nullable":true,"anyOf":[{"type":"array","items":{"type":"number"}},{"type":"null"}]},"is_variant_template":{"nullable":true,"anyOf":[{"type":"boolean"},{"type":"null"}]},"parent_template_id":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"variants":{}}}}},"text/plain":{"schema":{"type":"array","items":{"type":"object","required":["id","name","jobDefinition","icon","readme","category","vram_requirement","cuda_requirement","is_variant_template","parent_template_id","variants"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"jobDefinition":{},"icon":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"readme":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"category":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"vram_requirement":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"cuda_requirement":{"nullable":true,"anyOf":[{"type":"array","items":{"type":"number"}},{"type":"null"}]},"is_variant_template":{"nullable":true,"anyOf":[{"type":"boolean"},{"type":"null"}]},"parent_template_id":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"variants":{}}}}}}}},"operationId":"getTemplates","tags":["Client Manager / Templates"],"summary":"List all templates","x-service":"client-manager"}},"/templates/{id}":{"get":{"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"jobDefinition":{},"icon":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"readme":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"category":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"vram_requirement":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"cuda_requirement":{"nullable":true,"anyOf":[{"type":"array","items":{"type":"number"}},{"type":"null"}]},"is_variant_template":{"nullable":true,"anyOf":[{"type":"boolean"},{"type":"null"}]},"parent_template_id":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"variants":{}},"required":["id","name","jobDefinition","icon","readme","category","vram_requirement","cuda_requirement","is_variant_template","parent_template_id","variants"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"jobDefinition":{},"icon":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"readme":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"category":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"vram_requirement":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"cuda_requirement":{"nullable":true,"anyOf":[{"type":"array","items":{"type":"number"}},{"type":"null"}]},"is_variant_template":{"nullable":true,"anyOf":[{"type":"boolean"},{"type":"null"}]},"parent_template_id":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"variants":{}},"required":["id","name","jobDefinition","icon","readme","category","vram_requirement","cuda_requirement","is_variant_template","parent_template_id","variants"]}},"text/plain":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"jobDefinition":{},"icon":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"readme":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"category":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"vram_requirement":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"cuda_requirement":{"nullable":true,"anyOf":[{"type":"array","items":{"type":"number"}},{"type":"null"}]},"is_variant_template":{"nullable":true,"anyOf":[{"type":"boolean"},{"type":"null"}]},"parent_template_id":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"variants":{}},"required":["id","name","jobDefinition","icon","readme","category","vram_requirement","cuda_requirement","is_variant_template","parent_template_id","variants"]}}}}},"operationId":"getTemplatesById","tags":["Client Manager / Templates","Client Manager / mcp"],"summary":"Get template by ID","description":"One template in full: its job definition, readme and variants.","parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true}],"x-service":"client-manager"}},"/templates/{id}/{variantId}":{"get":{"responses":{"200":{"content":{"application/json":{"schema":{}},"multipart/form-data":{"schema":{}},"text/plain":{"schema":{}}}}},"operationId":"getTemplatesByIdByVariantId","tags":["Client Manager / Templates","Client Manager / mcp"],"summary":"Get template variant","parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true},{"schema":{"type":"string"},"in":"path","name":"variantId","required":true}],"x-service":"client-manager"}},"/templates/grouped":{"get":{"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","patternProperties":{"^(.*)$":{"type":"array","items":{"type":"object","required":["id","name","jobDefinition","icon","readme","category","vram_requirement","cuda_requirement","is_variant_template","parent_template_id","variants"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"jobDefinition":{},"icon":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"readme":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"category":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"vram_requirement":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"cuda_requirement":{"nullable":true,"anyOf":[{"type":"array","items":{"type":"number"}},{"type":"null"}]},"is_variant_template":{"nullable":true,"anyOf":[{"type":"boolean"},{"type":"null"}]},"parent_template_id":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"variants":{}},"additionalProperties":false}}}}},"multipart/form-data":{"schema":{"type":"object","patternProperties":{"^(.*)$":{"type":"array","items":{"type":"object","required":["id","name","jobDefinition","icon","readme","category","vram_requirement","cuda_requirement","is_variant_template","parent_template_id","variants"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"jobDefinition":{},"icon":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"readme":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"category":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"vram_requirement":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"cuda_requirement":{"nullable":true,"anyOf":[{"type":"array","items":{"type":"number"}},{"type":"null"}]},"is_variant_template":{"nullable":true,"anyOf":[{"type":"boolean"},{"type":"null"}]},"parent_template_id":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"variants":{}},"additionalProperties":false}}}}},"text/plain":{"schema":{"type":"object","patternProperties":{"^(.*)$":{"type":"array","items":{"type":"object","required":["id","name","jobDefinition","icon","readme","category","vram_requirement","cuda_requirement","is_variant_template","parent_template_id","variants"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"jobDefinition":{},"icon":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"readme":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"category":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"vram_requirement":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"cuda_requirement":{"nullable":true,"anyOf":[{"type":"array","items":{"type":"number"}},{"type":"null"}]},"is_variant_template":{"nullable":true,"anyOf":[{"type":"boolean"},{"type":"null"}]},"parent_template_id":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"variants":{}},"additionalProperties":false}}}}}}}},"operationId":"getTemplatesGrouped","tags":["Client Manager / Templates"],"summary":"Get templates grouped by category","x-service":"client-manager"}},"/templates/summary":{"get":{"responses":{"200":{"items":{"type":"object","required":["id","name","category","vram_requirement","parent_template_id","description"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"category":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"vram_requirement":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"parent_template_id":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"description":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]}}},"content":{"application/json":{"schema":{"type":"array","items":{"type":"object","required":["id","name","category","vram_requirement","parent_template_id","description"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"category":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"vram_requirement":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"parent_template_id":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"description":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]}}}}},"multipart/form-data":{"schema":{"type":"array","items":{"type":"object","required":["id","name","category","vram_requirement","parent_template_id","description"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"category":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"vram_requirement":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"parent_template_id":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"description":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]}}}}},"text/plain":{"schema":{"type":"array","items":{"type":"object","required":["id","name","category","vram_requirement","parent_template_id","description"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"category":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"vram_requirement":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"parent_template_id":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"description":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]}}}}}}}},"operationId":"getTemplatesSummary","tags":["Client Manager / Templates","Client Manager / mcp"],"summary":"List templates in brief","description":"Every template's id, name, category, VRAM requirement in MB, parent template and a one-line description, without job definitions. A variant is its own template, with its parent's id in parent_template_id and its parent's description. Choose from this list, then get the chosen template by id for its job definition.","x-service":"client-manager"}},"/jobs/templates/":{"get":{"responses":{"200":{"items":{"type":"object","required":["id","name","jobDefinition","icon","readme","category","vram_requirement","cuda_requirement","is_variant_template","parent_template_id","variants"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"jobDefinition":{},"icon":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"readme":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"category":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"vram_requirement":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"cuda_requirement":{"nullable":true,"anyOf":[{"type":"array","items":{"type":"number"}},{"type":"null"}]},"is_variant_template":{"nullable":true,"anyOf":[{"type":"boolean"},{"type":"null"}]},"parent_template_id":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"variants":{}},"additionalProperties":false},"content":{"application/json":{"schema":{"type":"array","items":{"type":"object","required":["id","name","jobDefinition","icon","readme","category","vram_requirement","cuda_requirement","is_variant_template","parent_template_id","variants"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"jobDefinition":{},"icon":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"readme":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"category":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"vram_requirement":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"cuda_requirement":{"nullable":true,"anyOf":[{"type":"array","items":{"type":"number"}},{"type":"null"}]},"is_variant_template":{"nullable":true,"anyOf":[{"type":"boolean"},{"type":"null"}]},"parent_template_id":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"variants":{}}}}},"multipart/form-data":{"schema":{"type":"array","items":{"type":"object","required":["id","name","jobDefinition","icon","readme","category","vram_requirement","cuda_requirement","is_variant_template","parent_template_id","variants"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"jobDefinition":{},"icon":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"readme":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"category":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"vram_requirement":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"cuda_requirement":{"nullable":true,"anyOf":[{"type":"array","items":{"type":"number"}},{"type":"null"}]},"is_variant_template":{"nullable":true,"anyOf":[{"type":"boolean"},{"type":"null"}]},"parent_template_id":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"variants":{}}}}},"text/plain":{"schema":{"type":"array","items":{"type":"object","required":["id","name","jobDefinition","icon","readme","category","vram_requirement","cuda_requirement","is_variant_template","parent_template_id","variants"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"jobDefinition":{},"icon":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"readme":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"category":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"vram_requirement":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"cuda_requirement":{"nullable":true,"anyOf":[{"type":"array","items":{"type":"number"}},{"type":"null"}]},"is_variant_template":{"nullable":true,"anyOf":[{"type":"boolean"},{"type":"null"}]},"parent_template_id":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"variants":{}}}}}}}},"operationId":"getJobsTemplates","tags":["Client Manager / Templates"],"summary":"List all templates","x-operationId-generated":true,"x-service":"client-manager","x-alias-of":"/templates/","description":"Alias of `/templates/`; new callers should use that path."}},"/jobs/templates/{id}":{"get":{"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"jobDefinition":{},"icon":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"readme":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"category":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"vram_requirement":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"cuda_requirement":{"nullable":true,"anyOf":[{"type":"array","items":{"type":"number"}},{"type":"null"}]},"is_variant_template":{"nullable":true,"anyOf":[{"type":"boolean"},{"type":"null"}]},"parent_template_id":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"variants":{}},"required":["id","name","jobDefinition","icon","readme","category","vram_requirement","cuda_requirement","is_variant_template","parent_template_id","variants"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"jobDefinition":{},"icon":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"readme":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"category":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"vram_requirement":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"cuda_requirement":{"nullable":true,"anyOf":[{"type":"array","items":{"type":"number"}},{"type":"null"}]},"is_variant_template":{"nullable":true,"anyOf":[{"type":"boolean"},{"type":"null"}]},"parent_template_id":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"variants":{}},"required":["id","name","jobDefinition","icon","readme","category","vram_requirement","cuda_requirement","is_variant_template","parent_template_id","variants"]}},"text/plain":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"jobDefinition":{},"icon":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"readme":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"category":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"vram_requirement":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"cuda_requirement":{"nullable":true,"anyOf":[{"type":"array","items":{"type":"number"}},{"type":"null"}]},"is_variant_template":{"nullable":true,"anyOf":[{"type":"boolean"},{"type":"null"}]},"parent_template_id":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"variants":{}},"required":["id","name","jobDefinition","icon","readme","category","vram_requirement","cuda_requirement","is_variant_template","parent_template_id","variants"]}}}}},"operationId":"getJobsTemplatesById","tags":["Client Manager / Templates","Client Manager / mcp"],"summary":"Get template by ID","description":"One template in full: its job definition, readme and variants.\n\nAlias of `/templates/{id}`; new callers should use that path.","parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true}],"x-operationId-generated":true,"x-service":"client-manager","x-alias-of":"/templates/{id}"}},"/jobs/templates/{id}/{variantId}":{"get":{"responses":{"200":{"content":{"application/json":{"schema":{}},"multipart/form-data":{"schema":{}},"text/plain":{"schema":{}}}}},"operationId":"getJobsTemplatesByIdByVariantId","tags":["Client Manager / Templates","Client Manager / mcp"],"summary":"Get template variant","parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true},{"schema":{"type":"string"},"in":"path","name":"variantId","required":true}],"x-operationId-generated":true,"x-service":"client-manager","x-alias-of":"/templates/{id}/{variantId}","description":"Alias of `/templates/{id}/{variantId}`; new callers should use that path."}},"/jobs/templates/grouped":{"get":{"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","patternProperties":{"^(.*)$":{"type":"array","items":{"type":"object","required":["id","name","jobDefinition","icon","readme","category","vram_requirement","cuda_requirement","is_variant_template","parent_template_id","variants"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"jobDefinition":{},"icon":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"readme":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"category":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"vram_requirement":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"cuda_requirement":{"nullable":true,"anyOf":[{"type":"array","items":{"type":"number"}},{"type":"null"}]},"is_variant_template":{"nullable":true,"anyOf":[{"type":"boolean"},{"type":"null"}]},"parent_template_id":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"variants":{}},"additionalProperties":false}}}}},"multipart/form-data":{"schema":{"type":"object","patternProperties":{"^(.*)$":{"type":"array","items":{"type":"object","required":["id","name","jobDefinition","icon","readme","category","vram_requirement","cuda_requirement","is_variant_template","parent_template_id","variants"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"jobDefinition":{},"icon":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"readme":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"category":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"vram_requirement":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"cuda_requirement":{"nullable":true,"anyOf":[{"type":"array","items":{"type":"number"}},{"type":"null"}]},"is_variant_template":{"nullable":true,"anyOf":[{"type":"boolean"},{"type":"null"}]},"parent_template_id":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"variants":{}},"additionalProperties":false}}}}},"text/plain":{"schema":{"type":"object","patternProperties":{"^(.*)$":{"type":"array","items":{"type":"object","required":["id","name","jobDefinition","icon","readme","category","vram_requirement","cuda_requirement","is_variant_template","parent_template_id","variants"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"jobDefinition":{},"icon":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"readme":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"category":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"vram_requirement":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"cuda_requirement":{"nullable":true,"anyOf":[{"type":"array","items":{"type":"number"}},{"type":"null"}]},"is_variant_template":{"nullable":true,"anyOf":[{"type":"boolean"},{"type":"null"}]},"parent_template_id":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"variants":{}},"additionalProperties":false}}}}}}}},"operationId":"getJobsTemplatesGrouped","tags":["Client Manager / Templates"],"summary":"Get templates grouped by category","x-operationId-generated":true,"x-service":"client-manager","x-alias-of":"/templates/grouped","description":"Alias of `/templates/grouped`; new callers should use that path."}},"/jobs/templates/summary":{"get":{"responses":{"200":{"items":{"type":"object","required":["id","name","category","vram_requirement","parent_template_id","description"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"category":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"vram_requirement":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"parent_template_id":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"description":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]}}},"content":{"application/json":{"schema":{"type":"array","items":{"type":"object","required":["id","name","category","vram_requirement","parent_template_id","description"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"category":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"vram_requirement":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"parent_template_id":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"description":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]}}}}},"multipart/form-data":{"schema":{"type":"array","items":{"type":"object","required":["id","name","category","vram_requirement","parent_template_id","description"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"category":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"vram_requirement":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"parent_template_id":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"description":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]}}}}},"text/plain":{"schema":{"type":"array","items":{"type":"object","required":["id","name","category","vram_requirement","parent_template_id","description"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"category":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"vram_requirement":{"nullable":true,"anyOf":[{"type":"number"},{"type":"null"}]},"parent_template_id":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"description":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]}}}}}}}},"operationId":"getJobsTemplatesSummary","tags":["Client Manager / Templates","Client Manager / mcp"],"summary":"List templates in brief","description":"Every template's id, name, category, VRAM requirement in MB, parent template and a one-line description, without job definitions. A variant is its own template, with its parent's id in parent_template_id and its parent's description. Choose from this list, then get the chosen template by id for its job definition.\n\nAlias of `/templates/summary`; new callers should use that path.","x-operationId-generated":true,"x-service":"client-manager","x-alias-of":"/templates/summary"}}},"components":{"schemas":{"DeploymentManagerHeaders":{"description":"Headers for deployment routes","type":"object","properties":{"x-user-id":{"minLength":43,"maxLength":44,"type":"string"},"authorization":{"description":"Signed authentication message,","type":"string"},"x-nosana-api":{"description":"Nosana API key","type":"string"}},"required":["x-user-id","authorization"],"title":"Headers"},"DeploymentManagerHostHeaders":{"description":"Headers for deployment routes","type":"object","properties":{"authorization":{"description":"Signed authentication message,","type":"string"}},"required":["authorization"],"title":"HostHeaders"},"DeploymentManagerDeployment":{"allOf":[{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"vault":{"minLength":43,"maxLength":44,"type":"string"},"market":{"anyOf":[{"minLength":43,"maxLength":44,"type":"string"},{"type":"null"}]},"requirements":{"anyOf":[{"minProperties":1,"additionalProperties":{"anyOf":[{"anyOf":[{"type":"number"},{"type":"string"},{"type":"boolean"}]},{"minItems":1,"type":"array","items":{"anyOf":[{"type":"number"},{"type":"string"},{"type":"boolean"}]}}]},"description":"Node requirements as a map of metric key to value: a number is a minimum, a string or boolean an exact match, and a list is any of its values (e.g. `\"name\": [\"NVIDIA GeForce RTX 4090\", \"NVIDIA GeForce RTX 5090\"]`). Keys are validated by the host manager when nodes are reserved.","type":"object"},{"type":"null"}]},"owner":{"minLength":43,"maxLength":44,"type":"string"},"status":{"anyOf":[{"type":"string","enum":["DRAFT"]},{"type":"string","enum":["ERROR"]},{"type":"string","enum":["STARTING"]},{"type":"string","enum":["RUNNING"]},{"type":"string","enum":["STOPPING"]},{"type":"string","enum":["STOPPED"]},{"type":"string","enum":["INSUFFICIENT_FUNDS"]},{"type":"string","enum":["ARCHIVED"]}]},"replicas":{"minimum":0,"type":"number"},"timeout":{"minimum":1,"type":"number"},"endpoints":{"type":"array","items":{"type":"object","properties":{"opId":{"type":"string"},"port":{"anyOf":[{"type":"number"},{"type":"string"}]},"url":{"type":"string"},"online":{"description":"Whether the deployment currently answers here. Per opId: a node opens one load-balanced proxy per op, so every port that op exposes reports the same value.","type":"boolean"}},"required":["opId","port","url","online"]}},"confidential":{"type":"boolean"},"active_revision":{"minimum":0,"type":"number"},"active_jobs":{"minimum":0,"type":"number"},"created_at":{"format":"date-time","type":"string"},"updated_at":{"format":"date-time","type":"string"}},"required":["id","name","vault","market","requirements","owner","status","replicas","timeout","endpoints","confidential","active_revision","active_jobs","created_at","updated_at"]},{"anyOf":[{"type":"object","properties":{"strategy":{"anyOf":[{"type":"string","enum":["SIMPLE"]},{"type":"string","enum":["SIMPLE-EXTEND"]}]}},"required":["strategy"]},{"type":"object","properties":{"strategy":{"type":"string","enum":["SCHEDULED"]},"schedule":{"description":"Cron expression for scheduled deployments","pattern":"^\\s*(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(\\S+)\\s*$","type":"string"}},"required":["strategy","schedule"]},{"type":"object","properties":{"timeout":{"minimum":60,"type":"number"},"strategy":{"type":"string","enum":["INFINITE"]},"rotation_time":{"type":"number"},"startup_timeout":{"minimum":1,"type":"number"}},"required":["timeout","strategy","rotation_time"]}]}],"title":"Deployment"},"DeploymentManagerDeployments":{"type":"array","items":{"$ref":"#/components/schemas/DeploymentManagerDeployment"},"title":"Deployments"},"DeploymentManagerDeploymentStatus":{"anyOf":[{"type":"string","enum":["DRAFT"]},{"type":"string","enum":["ERROR"]},{"type":"string","enum":["STARTING"]},{"type":"string","enum":["RUNNING"]},{"type":"string","enum":["STOPPING"]},{"type":"string","enum":["STOPPED"]},{"type":"string","enum":["INSUFFICIENT_FUNDS"]},{"type":"string","enum":["ARCHIVED"]}],"title":"DeploymentStatus"},"DeploymentManagerDeploymentStreamEvent":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["deployment"]},"status":{"anyOf":[{"type":"string","enum":["DRAFT"]},{"type":"string","enum":["ERROR"]},{"type":"string","enum":["STARTING"]},{"type":"string","enum":["RUNNING"]},{"type":"string","enum":["STOPPING"]},{"type":"string","enum":["STOPPED"]},{"type":"string","enum":["INSUFFICIENT_FUNDS"]},{"type":"string","enum":["ARCHIVED"]}]},"replicas":{"minimum":0,"type":"number"},"active_revision":{"minimum":1,"type":"number"}},"required":["type","status","replicas","active_revision"]},{"type":"object","properties":{"type":{"type":"string","enum":["job"]},"job":{"minLength":43,"maxLength":44,"type":"string"},"state":{"anyOf":[{"type":"string","enum":["QUEUED"]},{"type":"string","enum":["RUNNING"]},{"type":"string","enum":["COMPLETED"]},{"type":"string","enum":["STOPPED"]}]},"node":{"anyOf":[{"minLength":43,"maxLength":44,"type":"string"},{"type":"null"}]},"timeStart":{"minimum":0,"type":"number"},"timeEnd":{"minimum":0,"type":"number"},"revision":{"minimum":1,"type":"number"},"created_at":{"format":"date-time","type":"string"}},"required":["type","job","state","node","timeStart","timeEnd","revision","created_at"]},{"type":"object","properties":{"type":{"type":"string","enum":["jobs"]},"jobs":{"type":"array","items":{"minLength":43,"maxLength":44,"type":"string"}}},"required":["type","jobs"]},{"type":"object","properties":{"type":{"type":"string","enum":["event"]},"category":{"anyOf":[{"type":"string","enum":["Deployment"]},{"type":"string","enum":["Event"]}]},"event":{"type":"string"},"message":{"type":"string"},"tx":{"anyOf":[{"type":"string"},{"type":"null"}]},"created_at":{"format":"date-time","type":"string"}},"required":["type","category","event","message","tx","created_at"]},{"type":"object","properties":{"type":{"type":"string","enum":["task"]},"id":{"type":"string"},"task":{"anyOf":[{"type":"string","enum":["LIST"]},{"type":"string","enum":["EXTEND"]},{"type":"string","enum":["STOP"]}]},"status":{"anyOf":[{"type":"string","enum":["PENDING"]},{"type":"string","enum":["PROCESSING"]}]},"attempts":{"minimum":0,"type":"number"},"due_at":{"format":"date-time","type":"string"},"job":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["type","id","task","status","attempts","due_at","job"]},{"type":"object","properties":{"type":{"type":"string","enum":["endpoint"]},"opId":{"type":"string"},"port":{"anyOf":[{"type":"number"},{"type":"string"}]},"url":{"type":"string"},"online":{"description":"Whether the deployment currently answers here. Per opId: a node opens one load-balanced proxy per op, so every port that op exposes reports the same value.","type":"boolean"}},"required":["type","opId","port","url","online"]},{"type":"object","properties":{"type":{"type":"string","enum":["task"]},"id":{"type":"string"},"task":{"anyOf":[{"type":"string","enum":["LIST"]},{"type":"string","enum":["EXTEND"]},{"type":"string","enum":["STOP"]}]},"status":{"type":"string","enum":["DONE"]}},"required":["type","id","task","status"]}],"title":"DeploymentStreamEvent"},"DeploymentManagerDeploymentStrategy":{"anyOf":[{"type":"string","enum":["SIMPLE"]},{"type":"string","enum":["SIMPLE-EXTEND"]},{"type":"string","enum":["SCHEDULED"]},{"type":"string","enum":["INFINITE"]}],"title":"DeploymentStrategy"},"DeploymentManagerDeploymentCreateBody":{"allOf":[{"type":"object","properties":{"idempotency_key":{"minLength":1,"maxLength":128,"pattern":"^[a-zA-Z0-9:/_.-]+$","description":"Optional owner-scoped create key. A duplicate returns 409; omit for independent creates. Deleting the deployment releases the key.","type":"string"},"name":{"type":"string"},"market":{"description":"Market to post every job in. Omit to post across markets: each job goes to the cheapest PREMIUM market with a node that meets `requirements`.","minLength":43,"maxLength":44,"type":"string"},"requirements":{"minProperties":1,"additionalProperties":{"anyOf":[{"anyOf":[{"type":"number"},{"type":"string"},{"type":"boolean"}]},{"minItems":1,"type":"array","items":{"anyOf":[{"type":"number"},{"type":"string"},{"type":"boolean"}]}}]},"description":"Node requirements as a map of metric key to value: a number is a minimum, a string or boolean an exact match, and a list is any of its values (e.g. `\"name\": [\"NVIDIA GeForce RTX 4090\", \"NVIDIA GeForce RTX 5090\"]`). Keys are validated by the host manager when nodes are reserved.","type":"object"},"replicas":{"minimum":1,"type":"number"},"timeout":{"minimum":1,"description":"Timeout in minutes, must be at least 1 minute.","type":"number"},"confidential":{"type":"boolean"},"autostart":{"description":"If true, the deployment is started immediately after creation instead of being left as a DRAFT.","type":"boolean"},"ssh_public_keys":{"description":"SSH public keys, each an OpenSSH line. At most 10 keys total on a deployment; a key already present (same type and material) is left as it is.","type":"array","items":{"minLength":1,"description":"An OpenSSH public key line: \"<algorithm> <base64> [comment]\".","type":"string"}},"job_definition":{"$ref":"#/components/schemas/DeploymentManagerJobDefinition"}},"required":["name","replicas","timeout","job_definition"]},{"anyOf":[{"type":"object","properties":{"vault":{"minLength":43,"maxLength":44,"type":"string"},"new_vault":{"not":{}}}},{"type":"object","properties":{"new_vault":{"description":"If true, a brand-new vault is created for this deployment instead of reusing the owner's shared (oldest) vault.","type":"boolean"},"vault":{"not":{}}}}]},{"anyOf":[{"type":"object","properties":{"strategy":{"anyOf":[{"type":"string","enum":["SIMPLE"]},{"type":"string","enum":["SIMPLE-EXTEND"]}]}},"required":["strategy"]},{"type":"object","properties":{"strategy":{"type":"string","enum":["SCHEDULED"]},"schedule":{"description":"Cron expression for scheduled deployments","pattern":"^\\s*(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(\\S+)\\s*$","type":"string"}},"required":["strategy","schedule"]},{"type":"object","properties":{"timeout":{"minimum":60,"description":"Timeout in minutes, must be at least 60 minute.","type":"number"},"strategy":{"type":"string","enum":["INFINITE"]},"rotation_time":{"description":"Rotation time in seconds. Must be at least 10 minutes less than timeout to allow for proper rotation.","type":"number"},"startup_timeout":{"minimum":1,"description":"Minutes a job has, from the moment a node starts running it, to open its network tunnel. A job that does not come online in time is stopped and replaced on another node. Must cover the image pull and any operations that run before the exposed one. Requires the job definition to expose at least one port.","type":"number"}},"required":["timeout","strategy"]}]}],"title":"DeploymentCreateBody"},"DeploymentManagerEndpoint":{"type":"object","properties":{"opId":{"type":"string"},"port":{"anyOf":[{"type":"number"},{"type":"string"}]},"url":{"type":"string"},"online":{"description":"Whether the deployment currently answers here. Per opId: a node opens one load-balanced proxy per op, so every port that op exposes reports the same value.","type":"boolean"}},"required":["opId","port","url","online"],"title":"Endpoint"},"DeploymentManagerError":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"title":"Error"},"DeploymentManagerEvent":{"type":"object","properties":{"category":{"anyOf":[{"type":"string","enum":["Deployment"]},{"type":"string","enum":["Event"]}]},"deploymentId":{"minLength":43,"maxLength":44,"type":"string"},"type":{"type":"string"},"message":{"type":"string"},"tx":{"type":"string"},"created_at":{"format":"date-time","type":"string"}},"required":["category","deploymentId","type","message","created_at"],"title":"Event"},"DeploymentManagerJob":{"type":"object","properties":{"tx":{"type":"string"},"deployment":{"minLength":43,"maxLength":44,"type":"string"},"job":{"minLength":43,"maxLength":44,"type":"string"},"market":{"type":"string"},"node":{"anyOf":[{"minLength":43,"maxLength":44,"type":"string"},{"type":"null"}]},"revision":{"minimum":1,"type":"number"},"state":{"anyOf":[{"type":"string","enum":["QUEUED"]},{"type":"string","enum":["RUNNING"]},{"type":"string","enum":["COMPLETED"]},{"type":"string","enum":["STOPPED"]}]},"time_start":{"minimum":0,"type":"number"},"created_at":{"format":"date-time","type":"string"},"updated_at":{"format":"date-time","type":"string"}},"required":["tx","deployment","job","market","node","revision","state","time_start","created_at","updated_at"],"title":"Job"},"DeploymentManagerPublicKey":{"minLength":43,"maxLength":44,"type":"string","title":"PublicKey"},"DeploymentManagerTask":{"type":"object","properties":{"task":{"anyOf":[{"type":"string","enum":["LIST"]},{"type":"string","enum":["EXTEND"]},{"type":"string","enum":["STOP"]}]},"deploymentId":{"minLength":43,"maxLength":44,"type":"string"},"tx":{"type":"string"},"job":{"type":"string"},"limit":{"type":"number"},"active_revision":{"type":"number"},"due_at":{"format":"date-time","type":"string"},"created_at":{"format":"date-time","type":"string"}},"required":["task","deploymentId","due_at","created_at"],"title":"Task"},"DeploymentManagerVault":{"type":"object","properties":{"vault":{"minLength":43,"maxLength":44,"type":"string"},"owner":{"minLength":43,"maxLength":44,"type":"string"},"created_at":{"format":"date-time","type":"string"}},"required":["vault","owner","created_at"],"title":"Vault"},"DeploymentManagerVaults":{"type":"array","items":{"type":"object","properties":{"vault":{"minLength":43,"maxLength":44,"type":"string"},"owner":{"minLength":43,"maxLength":44,"type":"string"},"created_at":{"format":"date-time","type":"string"}},"required":["vault","owner","created_at"]},"title":"Vaults"},"DeploymentManagerRevision":{"type":"object","properties":{"revision":{"type":"number"},"deployment":{"minLength":43,"maxLength":44,"type":"string"},"ipfs_definition_hash":{"type":"string"},"job_definition":{"$ref":"#/components/schemas/DeploymentManagerJobDefinition"},"created_at":{"format":"date-time","type":"string"}},"required":["revision","deployment","ipfs_definition_hash","job_definition","created_at"],"title":"Revision"},"DeploymentManagerJobDefinition":{"type":"object","properties":{"version":{"type":"string","enum":["0.1"]},"type":{"type":"string","enum":["container"]},"logistics":{"type":"object","properties":{"send":{"type":"object","properties":{"type":{"type":"string","enum":["api","api-listen"],"description":"api        - we receive and send via an endpoint endpoint\napi-listen - we create an endpoint to listen for incoming requests"},"args":{"type":"object","properties":{"endpoint":{"type":"string"}},"required":[],"description":"Make all properties in T optional"}},"required":["type","args"]},"receive":{"type":"object","properties":{"type":{"type":"string","enum":["api","api-listen"],"description":"api        - we receive and send via an endpoint endpoint\napi-listen - we create an endpoint to listen for incoming requests"},"args":{"type":"object","properties":{"endpoint":{"type":"string"}},"required":[],"description":"Make all properties in T optional"}},"required":["type","args"]}},"required":["send","receive"]},"deployment_id":{"type":"string"},"ssh":{"type":"object","properties":{"public_keys":{"type":"array","items":{"type":"string"}}},"required":[]},"meta":{"type":"object","properties":{"trigger":{"type":"string"},"system_resources":{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"oneOf":[{"type":"string"},{"type":"number"}]}}},"required":[],"additionalProperties":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"array","items":{"oneOf":[{"type":"string"},{"type":"number"}]}},{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"array","items":{"oneOf":[{"type":"string"},{"type":"number"}]}}]}}]}},"global":{"type":"object","properties":{"image":{"type":"string"},"gpu":{"type":"boolean"},"entrypoint":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"env":{"type":"object","properties":{},"required":[],"additionalProperties":{"type":"string"}},"work_dir":{"type":"string"},"variables":{"type":"object","properties":{},"required":[],"additionalProperties":{"type":"string"}}},"required":[]},"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["container/run","container/create-volume"]},"id":{"type":"string"},"args":{"oneOf":[{"type":"object","properties":{"image":{"type":"string"},"aliases":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"cmd":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"volumes":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"dest":{"type":"string"}},"required":["name","dest"]}},"expose":{"oneOf":[{"type":"number"},{"type":"string"},{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"port":{"type":"number"},"type":{"type":"string","enum":["api","web","websocket","webapi","none"]},"health_checks":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["http"]},"path":{"type":"string"},"method":{"type":"string","enum":["GET","POST","PUT","DELETE"]},"expected_status":{"type":"number"},"headers":{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"type":"string"}},"body":{},"continuous":{"type":"boolean"}},"required":["type","path","method","expected_status","continuous"]},{"type":"object","properties":{"type":{"type":"string","enum":["websocket"]},"expected_response":{"type":"string"},"continuous":{"type":"boolean"}},"required":["type","expected_response","continuous"]}]}}},"required":["port"]},{"type":"array","items":{"oneOf":[{"type":"number"},{"type":"string"},{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"port":{"type":"number"},"type":{"type":"string","enum":["api","web","websocket","webapi","none"]},"health_checks":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["http"]},"path":{"type":"string"},"method":{"type":"string","enum":["GET","POST","PUT","DELETE"]},"expected_status":{"type":"number"},"headers":{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"type":"string"}},"body":{},"continuous":{"type":"boolean"}},"required":["type","path","method","expected_status","continuous"]},{"type":"object","properties":{"type":{"type":"string","enum":["websocket"]},"expected_response":{"type":"string"},"continuous":{"type":"boolean"}},"required":["type","expected_response","continuous"]}]}}},"required":["port"]}]}}]},"gpu":{"type":"boolean"},"work_dir":{"type":"string"},"entrypoint":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"env":{"type":"object","properties":{},"required":[],"additionalProperties":{"type":"string"}},"restart_policy":{"oneOf":[{"type":"object","properties":{"policy":{"type":"string","enum":["on-failure"]},"restart_tries":{"type":"number"}},"required":["policy"]},{"type":"string","enum":["on-failure","no","always","unless-stopped"]}]},"private":{"type":"boolean"},"resources":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"__spread__":{"type":"string"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"files":{"type":"array","items":{"type":"string"}},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"bucket":{"type":"string"},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target","bucket"]},{"type":"object","properties":{"type":{"type":"string","enum":["S3"]},"target":{"type":"string"},"buckets":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"files":{"type":"array","items":{"type":"string"}}},"required":["url"]}},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"IAM":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]}},"required":["type","target","buckets"]},{"type":"object","properties":{"type":{"type":"string","enum":["HF"]},"target":{"type":"string"},"repo":{"type":"string"},"revision":{"type":"string"},"files":{"type":"array","items":{"type":"string"}},"accessToken":{"type":"string"}},"required":["type","target","repo"]},{"type":"object","properties":{"type":{"type":"string","enum":["Ollama"]},"model":{"type":"string"},"target":{"type":"string"}},"required":["type","model"]},{"type":"string","enum":["__remove-if-empty__"]}]}},"authentication":{"type":"object","properties":{"docker":{"type":"object","properties":{"username":{"type":"string"},"password":{"type":"string"},"email":{"type":"string"},"server":{"type":"string"}},"required":[]}},"required":[]}},"required":["image"]},{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}]},"results":{"type":"object","properties":{},"required":[],"additionalProperties":{"oneOf":[{"type":"string"},{"type":"object","properties":{"regex":{"type":"string"},"logType":{"type":"array","items":{"type":"string","enum":["stdin","stdout","stderr","nodeerr"]}}},"required":["regex","logType"]}]}},"execution":{"type":"object","properties":{"group":{"type":"string"},"timeout":{"type":"number"},"depends_on":{"type":"array","items":{"type":"string"}},"stop_if_dependent_stops":{"type":"boolean"}},"required":[]}},"required":["type","id","args"]}}},"required":["version","type","ops"],"title":"JobDefinition"},"DeploymentManagerJobResults":{"type":"object","properties":{"status":{"type":"string"},"startTime":{"type":"number"},"endTime":{"type":"number","nullable":true},"errors":{"type":"array","items":{}},"opStates":{"type":"array","items":{"type":"object","properties":{"providerId":{"type":"string","nullable":true},"operationId":{"type":"string","nullable":true},"group":{"type":"string","nullable":true},"status":{"type":"string","nullable":true},"startTime":{"type":"number","nullable":true},"endTime":{"type":"number","nullable":true},"exitCode":{"type":"number","nullable":true},"logs":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["stdin","stdout","stderr","nodeerr"]},"log":{"type":"string"},"timestamp":{"type":"string"}},"required":["type"]}},"results":{"type":"object","properties":{},"required":[],"additionalProperties":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"error":{"type":"object","properties":{"event":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"}},"required":["event","message"]},"diagnostics":{"type":"object","properties":{"reason":{"type":"object","properties":{"hostShutDown":{"type":"boolean"},"jobStopped":{"type":"boolean"},"jobExpired":{"type":"boolean"},"reason":{"type":"string"}},"required":["hostShutDown","jobStopped","jobExpired"]},"state":{"type":"object","properties":{"Status":{"type":"string"},"Running":{"type":"boolean"},"Paused":{"type":"boolean"},"Restarting":{"type":"boolean"},"OOMKilled":{"type":"boolean"},"Dead":{"type":"boolean"},"Pid":{"type":"number"},"ExitCode":{"type":"number"},"Error":{"type":"string"},"StartedAt":{"type":"string"},"FinishedAt":{"type":"string"},"Health":{"type":"object","properties":{"Status":{"type":"string"},"FailingStreak":{"type":"number"},"Log":{"type":"array","items":{"type":"object","properties":{"Start":{"type":"string"},"End":{"type":"string"},"ExitCode":{"type":"number"},"Output":{"type":"string"}},"required":["Start","End","ExitCode","Output"]},"nullable":true}},"required":["Status","FailingStreak","Log"]},"RestartCount":{"type":"number"}},"required":["Status","Running","Paused","Restarting","OOMKilled","Dead","Pid","ExitCode","Error","StartedAt","FinishedAt","RestartCount"]}},"required":["reason"]}},"required":["providerId","operationId","group","status","startTime","endTime","exitCode","logs","diagnostics"]}},"secrets":{"type":"object","properties":{"urlmode":{"type":"string","enum":["private","public"]}},"required":[],"additionalProperties":{"oneOf":[{"type":"object","properties":{},"required":[],"additionalProperties":{"type":"object","properties":{"opID":{"type":"string"},"port":{"oneOf":[{"type":"string"},{"type":"number"}]},"url":{"type":"string"},"status":{"type":"string","enum":["ONLINE","OFFLINE","UNKNOWN"]}},"required":["opID","port","url","status"]}},{"type":"string","enum":["private","public"]}]}}},"required":["status","startTime","endTime","opStates"],"title":"JobResults"},"ClientManagerIdempotencyCode":{"$id":"IdempotencyCode","type":"string","enum":["IDEMPOTENCY_KEY_PAYLOAD_MISMATCH","IDEMPOTENCY_KEY_EXPIRED","IDEMPOTENCY_KEY_IN_PROGRESS"],"description":"Machine-readable idempotency control code. Branch on this, not the HTTP status alone. IN_PROGRESS → retry the SAME key; EXPIRED → mint a fresh key and re-post; PAYLOAD_MISMATCH → key reused with a different payload, do not retry."},"ClientManagerIdempotencyError":{"$id":"IdempotencyError","type":"object","required":["message"],"properties":{"code":{"$ref":"#/components/schemas/ClientManagerIdempotencyCode"},"message":{"type":"string"},"retryAfter":{"type":"integer","description":"Seconds to wait before retrying the SAME key. Present for IDEMPOTENCY_KEY_IN_PROGRESS; mirrors the Retry-After header."}},"description":"Idempotency control response. Branch on `code`, never on the HTTP status."},"ClientManagerJobError":{"$id":"JobError","type":"object","required":["message"],"properties":{"message":{"type":"string"}},"description":"Ordinary business error. Has no `code` field (unlike IdempotencyError)."},"ClientManagerCreateJobWithCreditsResponse":{"type":"object","required":["tx","job","run","credits"],"properties":{"tx":{"type":"string"},"job":{"type":"string"},"run":{"type":"string"},"credits":{"type":"object","required":["costUSD","creditsUsed","reservationId","project"],"properties":{"costUSD":{"type":"number"},"creditsUsed":{"type":"number"},"reservationId":{"type":"string"},"project":{"type":"string"}}}},"$id":"#/components/schemas/ClientManagerCreateJobWithCreditsResponse","additionalProperties":false},"ClientManagerExtendJobWithCreditsResponse":{"type":"object","required":["tx","job"],"properties":{"tx":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"job":{"type":"string"},"credits":{"type":"object","required":["costUSD","creditsUsed","reservationId"],"properties":{"costUSD":{"type":"number"},"creditsUsed":{"type":"number"},"reservationId":{"type":"string"}}}},"$id":"#/components/schemas/ClientManagerExtendJobWithCreditsResponse","additionalProperties":false},"ClientManagerStopJobWithCreditsResponse":{"type":"object","required":["tx","job","delisted"],"properties":{"tx":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"job":{"type":"string"},"delisted":{"type":"boolean"},"outcome":{"anyOf":[{"const":"delisted","type":"string"},{"const":"ended","type":"string"},{"const":"already_terminal","type":"string"}]}},"$id":"#/components/schemas/ClientManagerStopJobWithCreditsResponse","additionalProperties":false},"ClientManagerJobsBatchResponse":{"type":"object","required":["items"],"properties":{"items":{"type":"array","items":{"type":"object","required":["index","status"],"properties":{"index":{"type":"number"},"status":{"anyOf":[{"const":"confirmed","type":"string"},{"const":"expired","type":"string"}]},"job":{"type":"string"},"run":{"type":"string"},"tx":{"description":"On-chain transaction signature (base58).","type":"string"}}}}},"$id":"#/components/schemas/ClientManagerJobsBatchResponse","additionalProperties":false},"ClientManagerJobDefinition":{"type":"object","properties":{"version":{"const":"0.1"},"type":{"const":"container"},"logistics":{"$ref":"#/components/schemas/ClientManagerLogistics"},"deployment_id":{"type":"string"},"ssh":{"$ref":"#/components/schemas/ClientManagerSSH"},"meta":{"$ref":"#/components/schemas/ClientManagerMeta"},"global":{"$ref":"#/components/schemas/ClientManagerGlobal"},"ops":{"$ref":"#/components/schemas/ClientManagerOps"}},"required":["version","type","ops"]},"ClientManagerLogistics":{"type":"object","properties":{"send":{"$ref":"#/components/schemas/ClientManagerLogistic"},"receive":{"$ref":"#/components/schemas/ClientManagerLogistic"}},"required":["send","receive"]},"ClientManagerLogistic":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/ClientManagerLogisticType"},"args":{"$ref":"#/components/schemas/ClientManagerPartial__type"}},"required":["type","args"]},"ClientManagerLogisticType":{"oneOf":[{"const":"api"},{"const":"api-listen"}],"description":"api        - we receive and send via an endpoint endpoint\napi-listen - we create an endpoint to listen for incoming requests"},"ClientManagerPartial__type":{"type":"object","properties":{"endpoint":{"type":"string"}},"required":[],"description":"Make all properties in T optional"},"ClientManagerSSH":{"type":"object","properties":{"public_keys":{"type":"array","items":{"type":"string"}}},"required":[]},"ClientManagerMeta":{"type":"object","properties":{"trigger":{"type":"string"},"system_resources":{"$ref":"#/components/schemas/ClientManagerRecordstringstringnumber"}},"required":[],"additionalProperties":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"array","items":{"oneOf":[{"type":"string"},{"type":"number"}]}},{"$ref":"#/components/schemas/ClientManagerRecordstringstringnumber_stringnumber_"}]}},"ClientManagerRecordstringstringnumber":{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"oneOf":[{"type":"string"},{"type":"number"}]}},"ClientManagerRecordstringstringnumber_stringnumber_":{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"array","items":{"oneOf":[{"type":"string"},{"type":"number"}]}}]}},"ClientManagerGlobal":{"type":"object","properties":{"image":{"type":"string"},"gpu":{"type":"boolean"},"entrypoint":{"oneOf":[{"type":"string"},{"$ref":"#/components/schemas/ClientManagerCMDArray"}]},"env":{"$ref":"#/components/schemas/ClientManagerEnv"},"work_dir":{"type":"string"},"variables":{"$ref":"#/components/schemas/ClientManagerVariables"}},"required":[]},"ClientManagerCMDArray":{"type":"array","items":{"type":"string"}},"ClientManagerEnv":{"type":"object","properties":{},"required":[],"additionalProperties":{"type":"string"}},"ClientManagerVariables":{"type":"object","properties":{},"required":[],"additionalProperties":{"type":"string"}},"ClientManagerOps":{"type":"array","items":{"$ref":"#/components/schemas/ClientManagerOperationkeyofOperationArgsMap"}},"ClientManagerOperationkeyofOperationArgsMap":{"type":"object","properties":{"type":{"oneOf":[{"const":"container/run"},{"const":"container/create-volume"}]},"id":{"$ref":"#/components/schemas/ClientManagerOperationId"},"args":{"oneOf":[{"$ref":"#/components/schemas/ClientManagerContainerRun"},{"$ref":"#/components/schemas/ClientManagerContainerCreateVolume"}]},"results":{"$ref":"#/components/schemas/ClientManagerOperationResults"},"execution":{"$ref":"#/components/schemas/ClientManagerExecution"}},"required":["type","id","args"]},"ClientManagerOperationId":{"type":"string"},"ClientManagerContainerRun":{"type":"object","properties":{"image":{"type":"string"},"aliases":{"oneOf":[{"type":"string"},{"$ref":"#/components/schemas/ClientManagerAliases"}]},"cmd":{"oneOf":[{"type":"string"},{"$ref":"#/components/schemas/ClientManagerCMDArray"}]},"volumes":{"type":"array","items":{"$ref":"#/components/schemas/ClientManagerVolume"}},"expose":{"oneOf":[{"type":"number"},{"$ref":"#/components/schemas/ClientManagerLiteralString"},{"type":"object","properties":{"__spread__":{"$ref":"#/components/schemas/ClientManagerLiteralString"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"$ref":"#/components/schemas/ClientManagerExposedPort"},{"$ref":"#/components/schemas/ClientManagerUniqueExposedPorts"}]},"gpu":{"type":"boolean"},"work_dir":{"type":"string"},"entrypoint":{"oneOf":[{"type":"string"},{"$ref":"#/components/schemas/ClientManagerCMDArray"}]},"env":{"$ref":"#/components/schemas/ClientManagerEnv"},"restart_policy":{"oneOf":[{"const":"on-failure"},{"const":"no"},{"const":"always"},{"const":"unless-stopped"},{"type":"object","properties":{"policy":{"const":"on-failure"},"restart_tries":{"type":"number"}},"required":["policy"]}]},"private":{"type":"boolean"},"resources":{"$ref":"#/components/schemas/ClientManagerResources"},"authentication":{"$ref":"#/components/schemas/ClientManagerAuthentication"}},"required":["image"]},"ClientManagerAliases":{"type":"array","items":{"type":"string"}},"ClientManagerVolume":{"type":"object","properties":{"name":{"type":"string"},"dest":{"type":"string"}},"required":["name","dest"]},"ClientManagerLiteralString":{"type":"string"},"ClientManagerExposedPort":{"type":"object","properties":{"port":{"type":"number"},"type":{"oneOf":[{"const":"api"},{"const":"web"},{"const":"websocket"},{"const":"webapi"},{"const":"none"}]},"health_checks":{"type":"array","items":{"$ref":"#/components/schemas/ClientManagerHealthCheck"}}},"required":["port"]},"ClientManagerHealthCheck":{"oneOf":[{"$ref":"#/components/schemas/ClientManagerHttpHealthCheck"},{"$ref":"#/components/schemas/ClientManagerWebSocketHealthCheck"}]},"ClientManagerHttpHealthCheck":{"type":"object","properties":{"type":{"const":"http"},"path":{"type":"string"},"method":{"oneOf":[{"const":"GET"},{"const":"POST"},{"const":"PUT"},{"const":"DELETE"}]},"expected_status":{"type":"number"},"headers":{"$ref":"#/components/schemas/ClientManagerRecordstringstring"},"body":{},"continuous":{"type":"boolean"}},"required":["type","path","method","expected_status","continuous"]},"ClientManagerRecordstringstring":{"type":"object","properties":{},"required":[],"description":"Construct a type with a set of properties K of type T","additionalProperties":{"type":"string"}},"ClientManagerWebSocketHealthCheck":{"type":"object","properties":{"type":{"const":"websocket"},"expected_response":{"type":"string"},"continuous":{"type":"boolean"}},"required":["type","expected_response","continuous"]},"ClientManagerUniqueExposedPorts":{"type":"array","items":{"$ref":"#/components/schemas/ClientManagerExposeBase"}},"ClientManagerExposeBase":{"oneOf":[{"type":"number"},{"$ref":"#/components/schemas/ClientManagerLiteralString"},{"type":"object","properties":{"__spread__":{"$ref":"#/components/schemas/ClientManagerLiteralString"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"$ref":"#/components/schemas/ClientManagerExposedPort"}]},"ClientManagerResources":{"type":"array","items":{"oneOf":[{"const":"__remove-if-empty__"},{"type":"object","properties":{"__spread__":{"$ref":"#/components/schemas/ClientManagerLiteralString"},"chunked":{"type":"boolean"}},"required":["__spread__"]},{"$ref":"#/components/schemas/ClientManagerS3Base"},{"$ref":"#/components/schemas/ClientManagerS3WithBucket"},{"$ref":"#/components/schemas/ClientManagerS3WithBuckets"},{"$ref":"#/components/schemas/ClientManagerHFResource"},{"$ref":"#/components/schemas/ClientManagerOllamaResource"}]}},"ClientManagerS3Base":{"type":"object","properties":{"type":{"const":"S3"},"target":{"type":"string"},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"files":{"type":"array","items":{"type":"string"}},"IAM":{"$ref":"#/components/schemas/ClientManagerS3Auth"}},"required":["type","target"]},"ClientManagerS3Auth":{"type":"object","properties":{"REGION":{"type":"string"},"ACCESS_KEY_ID":{"type":"string"},"SECRET_ACCESS_KEY":{"type":"string"}},"required":["REGION","ACCESS_KEY_ID","SECRET_ACCESS_KEY"]},"ClientManagerS3WithBucket":{"type":"object","properties":{"type":{"const":"S3"},"target":{"type":"string"},"bucket":{"type":"string"},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"IAM":{"$ref":"#/components/schemas/ClientManagerS3Auth"}},"required":["type","target","bucket"]},"ClientManagerS3WithBuckets":{"type":"object","properties":{"type":{"const":"S3"},"target":{"type":"string"},"buckets":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"files":{"type":"array","items":{"type":"string"}}},"required":["url"]}},"url":{"type":"string"},"allowWrite":{"type":"boolean"},"IAM":{"$ref":"#/components/schemas/ClientManagerS3Auth"}},"required":["type","target","buckets"]},"ClientManagerHFResource":{"type":"object","properties":{"type":{"const":"HF"},"target":{"type":"string"},"repo":{"type":"string"},"revision":{"type":"string"},"files":{"type":"array","items":{"type":"string"}},"accessToken":{"type":"string"}},"required":["type","target","repo"]},"ClientManagerOllamaResource":{"type":"object","properties":{"type":{"const":"Ollama"},"model":{"type":"string"},"target":{"type":"string"}},"required":["type","model"]},"ClientManagerAuthentication":{"type":"object","properties":{"docker":{"$ref":"#/components/schemas/ClientManagerDockerAuth"}},"required":[]},"ClientManagerDockerAuth":{"type":"object","properties":{"username":{"type":"string"},"password":{"type":"string"},"email":{"type":"string"},"server":{"type":"string"}},"required":[]},"ClientManagerContainerCreateVolume":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]},"ClientManagerOperationResults":{"type":"object","properties":{},"required":[],"additionalProperties":{"oneOf":[{"type":"string"},{"$ref":"#/components/schemas/ClientManagerOperationResult"}]}},"ClientManagerOperationResult":{"type":"object","properties":{"regex":{"type":"string"},"logType":{"$ref":"#/components/schemas/ClientManagerLogTypeTuple"}},"required":["regex","logType"]},"ClientManagerLogTypeTuple":{"type":"array","items":{"$ref":"#/components/schemas/ClientManagerStdOption"}},"ClientManagerStdOption":{"oneOf":[{"const":"stdin"},{"const":"stdout"},{"const":"stderr"},{"const":"nodeerr"}]},"ClientManagerExecution":{"type":"object","properties":{"group":{"type":"string"},"timeout":{"type":"number"},"depends_on":{"type":"array","items":{"type":"string"}},"stop_if_dependent_stops":{"type":"boolean"}},"required":[]},"ClientManagerFlowState":{"type":"object","properties":{"status":{"type":"string"},"startTime":{"type":"number"},"endTime":{"oneOf":[{"type":"null"},{"type":"number"}]},"errors":{"type":"array","items":{}},"opStates":{"type":"array","items":{"$ref":"#/components/schemas/ClientManagerOpState"}},"secrets":{"$ref":"#/components/schemas/ClientManagerFlowSecrets"}},"required":["status","startTime","endTime","opStates"]},"ClientManagerOpState":{"type":"object","properties":{"providerId":{"oneOf":[{"type":"null"},{"type":"string"}]},"operationId":{"oneOf":[{"type":"null"},{"type":"string"}]},"group":{"oneOf":[{"type":"null"},{"type":"string"}]},"status":{"oneOf":[{"type":"null"},{"type":"string"}]},"startTime":{"oneOf":[{"type":"null"},{"type":"number"}]},"endTime":{"oneOf":[{"type":"null"},{"type":"number"}]},"exitCode":{"oneOf":[{"type":"null"},{"type":"number"}]},"logs":{"type":"array","items":{"$ref":"#/components/schemas/ClientManagerLog"}},"results":{"type":"object","properties":{},"required":[],"additionalProperties":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"error":{"type":"object","properties":{"event":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"}},"required":["event","message"]},"diagnostics":{"type":"object","properties":{"reason":{"$ref":"#/components/schemas/ClientManagerDiagnosticsReason"},"state":{"$ref":"#/components/schemas/ClientManagerDiagnosticsState"}},"required":["reason"]}},"required":["providerId","operationId","group","status","startTime","endTime","exitCode","logs","diagnostics"]},"ClientManagerLog":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/ClientManagerStdOption"},"log":{"type":"string"},"timestamp":{"type":"string"}},"required":["type","timestamp"]},"ClientManagerDiagnosticsReason":{"type":"object","properties":{"hostShutDown":{"type":"boolean"},"jobStopped":{"type":"boolean"},"jobExpired":{"type":"boolean"},"reason":{"type":"string"}},"required":["hostShutDown","jobStopped","jobExpired"]},"ClientManagerDiagnosticsState":{"type":"object","properties":{"Status":{"type":"string"},"Running":{"type":"boolean"},"Paused":{"type":"boolean"},"Restarting":{"type":"boolean"},"OOMKilled":{"type":"boolean"},"Dead":{"type":"boolean"},"Pid":{"type":"number"},"ExitCode":{"type":"number"},"Error":{"type":"string"},"StartedAt":{"type":"string"},"FinishedAt":{"type":"string"},"Health":{"type":"object","properties":{"Status":{"type":"string"},"FailingStreak":{"type":"number"},"Log":{"oneOf":[{"type":"null"},{"type":"array","items":{"type":"object","properties":{"Start":{"type":"string"},"End":{"type":"string"},"ExitCode":{"type":"number"},"Output":{"type":"string"}},"required":["Start","End","ExitCode","Output"]}}]}},"required":["Status","FailingStreak","Log"]},"RestartCount":{"type":"number"}},"required":["Status","Running","Paused","Restarting","OOMKilled","Dead","Pid","ExitCode","Error","StartedAt","FinishedAt","RestartCount"]},"ClientManagerFlowSecrets":{"type":"object","properties":{"urlmode":{"oneOf":[{"const":"private"},{"const":"public"}]}},"required":[],"additionalProperties":{"oneOf":[{"const":"private"},{"const":"public"},{"$ref":"#/components/schemas/ClientManagerJobExposeSecrets"}]}},"ClientManagerJobExposeSecrets":{"type":"object","properties":{},"required":[],"additionalProperties":{"$ref":"#/components/schemas/ClientManagerEndpointSecret"}},"ClientManagerEndpointSecret":{"type":"object","properties":{"opID":{"type":"string"},"port":{"oneOf":[{"type":"string"},{"type":"number"}]},"url":{"type":"string"},"status":{"$ref":"#/components/schemas/ClientManagerEndpointStatus"}},"required":["opID","port","url","status"]},"ClientManagerEndpointStatus":{"oneOf":[{"const":"ONLINE"},{"const":"OFFLINE"},{"const":"UNKNOWN"}]},"ClientManagerAddress":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$","description":"A Solana address in base58."},"ClientManagerNodeError":{"description":"The node answers failures with a sentence or with `{ error }`.","oneOf":[{"type":"string"},{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}}]},"ClientManagerNodeInfo":{"type":"object","required":["state","info","resources"],"additionalProperties":true,"properties":{"state":{"type":"string","description":"What the node is doing right now, as classified by its monitor."},"info":{"type":"object","additionalProperties":true,"properties":{"gpus":{"type":"object","additionalProperties":true,"properties":{"devices":{"type":"array","items":{"type":"object","additionalProperties":true,"properties":{"index":{"type":"integer"},"name":{"type":"string"},"uuid":{"type":"string"},"memory":{},"network_architecture":{}}}}}},"network":{"type":"object","additionalProperties":true,"description":"Network details with the IP address redacted."}}},"resources":{"type":"object","required":["images","volumes"],"properties":{"images":{"type":"array","items":{"type":"string"}},"volumes":{"type":"array","items":{"type":"string"}}}}}},"ClientManagerOpStateSummary":{"type":"object","description":"An operation's state as the info stream sends it: `OpState` without its logs and provider handle.","properties":{"operationId":{"oneOf":[{"type":"string"},{"type":"null"}]},"group":{"oneOf":[{"type":"string"},{"type":"null"}]},"status":{"oneOf":[{"type":"string"},{"type":"null"}]},"startTime":{"oneOf":[{"type":"integer"},{"type":"null"}]},"endTime":{"oneOf":[{"type":"integer"},{"type":"null"}]},"exitCode":{"oneOf":[{"type":"integer"},{"type":"null"}]},"results":{"type":"object","additionalProperties":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"error":{"type":"object","required":["event","message"],"properties":{"event":{"type":"string"},"message":{"type":"string"},"code":{"type":"integer"}}},"diagnostics":{"type":"object","required":["reason"],"properties":{"reason":{"$ref":"#/components/schemas/ClientManagerDiagnosticsReason"},"state":{"$ref":"#/components/schemas/ClientManagerDiagnosticsState"}}}}},"ClientManagerOperationStatuses":{"type":"object","description":"Status per operation, keyed by operation id.","additionalProperties":{"oneOf":[{"type":"string"},{"type":"null"}]}},"ClientManagerJobInfo":{"type":"object","description":"One frame of the job info stream: the flow without logs, plus task status.","required":["status","startTime","endTime","errors","opStates","operations"],"properties":{"status":{"type":"string"},"startTime":{"type":"integer"},"endTime":{"oneOf":[{"type":"integer"},{"type":"null"}]},"errors":{"type":"array","items":{}},"opStates":{"type":"array","items":{"$ref":"#/components/schemas/ClientManagerOpStateSummary"}},"secrets":{"$ref":"#/components/schemas/ClientManagerFlowSecrets"},"operations":{"oneOf":[{"type":"object","required":["all","currentGroupStatus"],"properties":{"all":{"oneOf":[{"$ref":"#/components/schemas/ClientManagerOperationStatuses"},{"type":"null"}]},"currentGroup":{"type":"string"},"currentGroupStatus":{"oneOf":[{"$ref":"#/components/schemas/ClientManagerOperationStatuses"},{"type":"null"}]}}},{"type":"null"}]}}},"ClientManagerJobEndpoints":{"type":"object","required":["urls","status"],"properties":{"urls":{"$ref":"#/components/schemas/ClientManagerJobExposeSecrets"},"status":{"type":"string","enum":["ONLINE","OFFLINE"]}}},"ClientManagerTaskStat":{"type":"object","required":["opId","timestamp","cpu","memory","disk","network"],"properties":{"opId":{"type":"string"},"timestamp":{"type":"integer","description":"Unix milliseconds."},"cpu":{"type":"object","required":["cpu_percent"],"properties":{"cpu_percent":{"type":"number"}}},"memory":{"type":"object","required":["memory_usage","memory_limit","memory_percent"],"properties":{"memory_usage":{"type":"number"},"memory_limit":{"type":"number"},"memory_percent":{"type":"number"}}},"disk":{"type":"object","required":["read","write"],"properties":{"read":{"type":"number"},"write":{"type":"number"}}},"network":{"type":"object","required":["received","sent"],"properties":{"received":{"type":"number"},"sent":{"type":"number"}}}}},"ClientManagerTaskLog":{"type":"object","required":["opId","group","type","timestamp","message"],"properties":{"opId":{"type":"string"},"group":{"type":"string"},"type":{"type":"string"},"timestamp":{"type":"integer"},"message":{}}},"ClientManagerActionResult":{"type":"object","required":["message"],"properties":{"message":{"type":"string"}}},"ClientManagerSshPublicKey":{"type":"string","maxLength":8192,"description":"One OpenSSH `authorized_keys` line: algorithm, base64 key material and an optional comment."},"ClientManagerSshAuthorizationRequest":{"type":"object","required":["sshPublicKey"],"properties":{"sshPublicKey":{"$ref":"#/components/schemas/ClientManagerSshPublicKey"},"expiresAt":{"type":"string","format":"date-time","description":"Omit for access until the key is revoked or the job ends."}}},"ClientManagerSshAuthorization":{"type":"object","required":["job","sshUser","authorized"],"properties":{"job":{"$ref":"#/components/schemas/ClientManagerAddress"},"sshUser":{"type":"string","description":"Always `nosana`; the hostname identifies the job and operation."},"authorized":{"type":"boolean","const":true},"expiresAt":{"type":"string","format":"date-time"}}},"ClientManagerSshAuthorizedKey":{"type":"object","required":["sshPublicKey"],"properties":{"sshPublicKey":{"$ref":"#/components/schemas/ClientManagerSshPublicKey"},"expiresAt":{"type":"string","format":"date-time","description":"Absent for permanent keys."}}},"ClientManagerSshKeys":{"type":"object","required":["job","sshUser","keys"],"properties":{"job":{"$ref":"#/components/schemas/ClientManagerAddress"},"sshUser":{"type":"string"},"keys":{"type":"array","items":{"$ref":"#/components/schemas/ClientManagerSshAuthorizedKey"}}}},"ClientManagerSshRevocationRequest":{"type":"object","required":["sshPublicKey"],"properties":{"sshPublicKey":{"$ref":"#/components/schemas/ClientManagerSshPublicKey"}}},"ClientManagerSshRevocation":{"type":"object","required":["job","sshUser","revoked"],"properties":{"job":{"$ref":"#/components/schemas/ClientManagerAddress"},"sshUser":{"type":"string"},"revoked":{"type":"boolean","const":true}}}},"securitySchemes":{"Authorization":{"type":"apiKey","in":"header","name":"Authorization"},"bearerAuth":{"type":"http","scheme":"bearer","description":"A Nosana API key (`Authorization: Bearer nos_...`). The key's own scopes must cover the operation's `x-required-scopes`."},"nosanaOAuth":{"type":"oauth2","description":"An OAuth 2.1 access token obtained on a user's behalf.","flows":{"authorizationCode":{"authorizationUrl":"https://api.nosana.com/auth/oauth/auth","tokenUrl":"https://api.nosana.com/auth/oauth/token","scopes":{"credits:read":"View your credit balance, transactions and spending history","jobs:read":"Read the status, results and endpoints of jobs you have run","jobs:write":"Create, extend and stop jobs (this spends your credits)","deployments:read":"View your deployments","deployments:write":"Create, update and delete your deployments (this spends your credits)","wallet:sign":"Sign messages with your Nosana wallet key"}}}}}},"x-source-specs":{"deployment-manager":"0.0.0","client-manager":"1.0.0","host-manager":"0.0.0","blockchain-indexer":"1.0.0","sean-chat-backend":"1.0.0"}}