{"components":{"schemas":{"AcceptInviteInputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["/api/v1/schemas/AcceptInviteInputBody.json"],"format":"uri","readOnly":true,"type":"string"},"display_name":{"maxLength":255,"type":"string"},"password":{"maxLength":72,"minLength":8,"type":"string"},"token":{"type":"string"}},"required":["token"],"type":"object"},"AccountEmailView":{"additionalProperties":false,"properties":{"email":{"type":"string"},"id":{"type":"string"},"is_primary":{"type":"boolean"},"verified_at":{"format":"date-time","type":"string"}},"required":["id","email","is_primary"],"type":"object"},"AddMemberInputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["/api/v1/schemas/AddMemberInputBody.json"],"format":"uri","readOnly":true,"type":"string"},"email":{"format":"email","maxLength":255,"type":"string"},"role":{"enum":["owner","admin","member"],"type":"string"}},"required":["email"],"type":"object"},"AddMemberOutputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["/api/v1/schemas/AddMemberOutputBody.json"],"format":"uri","readOnly":true,"type":"string"},"invited":{"description":"An invite email was sent (pending account).","type":"boolean"},"member":{"$ref":"#/components/schemas/MemberJSONView"}},"required":["member","invited"],"type":"object"},"ApiKeyView":{"additionalProperties":false,"properties":{"created_at":{"format":"date-time","type":"string"},"expires_at":{"format":"date-time","type":"string"},"id":{"type":"string"},"last_used_at":{"format":"date-time","type":"string"},"name":{"type":"string"},"prefix":{"description":"Leading characters of the key, for identification.","type":"string"},"revoked_at":{"format":"date-time","type":"string"}},"required":["id","name","prefix","created_at"],"type":"object"},"AuthTokens":{"additionalProperties":false,"properties":{"access_expires_at":{"format":"date-time","type":"string"},"access_token":{"type":"string"},"refresh_expires_at":{"format":"date-time","type":"string"},"refresh_token":{"type":"string"}},"required":["access_token","access_expires_at","refresh_token","refresh_expires_at"],"type":"object"},"BackfillVMIDInputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["/api/v1/schemas/BackfillVMIDInputBody.json"],"format":"uri","readOnly":true,"type":"string"},"vmid":{"format":"int64","minimum":1,"type":"integer"}},"required":["vmid"],"type":"object"},"CreateAPIKeyInputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["/api/v1/schemas/CreateAPIKeyInputBody.json"],"format":"uri","readOnly":true,"type":"string"},"expires_in_days":{"description":"Days until the key expires; omit or 0 for no expiry.","format":"int64","maximum":3650,"minimum":0,"type":"integer"},"name":{"description":"Human label for the key.","maxLength":255,"type":"string"}},"required":["name"],"type":"object"},"CreateAPIKeyOutputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["/api/v1/schemas/CreateAPIKeyOutputBody.json"],"format":"uri","readOnly":true,"type":"string"},"key":{"$ref":"#/components/schemas/ApiKeyView"},"token":{"description":"Plaintext API key — shown once, store it securely.","type":"string"}},"required":["token","key"],"type":"object"},"CreateOrgInputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["/api/v1/schemas/CreateOrgInputBody.json"],"format":"uri","readOnly":true,"type":"string"},"name":{"maxLength":255,"type":"string"}},"required":["name"],"type":"object"},"CreatePoolInputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["/api/v1/schemas/CreatePoolInputBody.json"],"format":"uri","readOnly":true,"type":"string"},"datacenter_id":{"format":"uuid","type":"string"},"desired_count":{"format":"int64","minimum":0,"type":"integer"},"metadata":{},"name":{"maxLength":255,"type":"string"},"slot_id":{"format":"uuid","type":"string"}},"required":["datacenter_id","slot_id","name","desired_count"],"type":"object"},"DatacenterBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["/api/v1/schemas/DatacenterBody.json"],"format":"uri","readOnly":true,"type":"string"},"cpu_overcommit_ratio":{"exclusiveMinimum":0,"format":"double","maximum":64,"type":"number"},"insecure_skip_verify":{"type":"boolean"},"name":{"maxLength":255,"type":"string"},"token":{"maxLength":512,"type":"string"},"url":{"maxLength":255,"type":"string"}},"required":["name","url"],"type":"object"},"DatacenterListOutputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["/api/v1/schemas/DatacenterListOutputBody.json"],"format":"uri","readOnly":true,"type":"string"},"items":{"items":{"$ref":"#/components/schemas/DatacenterView"},"type":["array","null"]}},"required":["items"],"type":"object"},"DatacenterView":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["/api/v1/schemas/DatacenterView.json"],"format":"uri","readOnly":true,"type":"string"},"cpu_overcommit_ratio":{"description":"Default vCPU sold per physical core, stamped onto hypervisors as they are discovered here. 1.0 is no overcommit. Changing it does not re-rate existing hypervisors.","format":"double","type":"number"},"created_at":{"format":"date-time","type":"string"},"has_token":{"description":"Whether a Proxmox API token is configured (the token itself is never returned).","type":"boolean"},"id":{"type":"string"},"insecure_skip_verify":{"description":"Whether TLS verification is disabled for this cluster (self-signed certs).","type":"boolean"},"name":{"type":"string"},"updated_at":{"format":"date-time","type":"string"},"url":{"type":"string"}},"required":["id","name","url","has_token","insecure_skip_verify","cpu_overcommit_ratio","created_at","updated_at"],"type":"object"},"DiscoverInputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["/api/v1/schemas/DiscoverInputBody.json"],"format":"uri","readOnly":true,"type":"string"},"async":{"type":"boolean"}},"type":"object"},"DiscoverOutputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["/api/v1/schemas/DiscoverOutputBody.json"],"format":"uri","readOnly":true,"type":"string"},"items":{"items":{"$ref":"#/components/schemas/HypervisorView"},"type":["array","null"]},"queued":{"type":"boolean"}},"required":["queued","items"],"type":"object"},"ErrorDetail":{"additionalProperties":false,"properties":{"location":{"description":"Where the error occurred, e.g. 'body.items[3].tags' or 'path.thing-id'","type":"string"},"message":{"description":"Error message text","type":"string"},"value":{"description":"The value at the given location"}},"type":"object"},"ErrorModel":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["/api/v1/schemas/ErrorModel.json"],"format":"uri","readOnly":true,"type":"string"},"detail":{"description":"A human-readable explanation specific to this occurrence of the problem.","examples":["Property foo is required but is missing."],"type":"string"},"errors":{"description":"Optional list of individual error details","items":{"$ref":"#/components/schemas/ErrorDetail"},"type":["array","null"]},"instance":{"description":"A URI reference that identifies the specific occurrence of the problem.","examples":["https://example.com/error-log/abc123"],"format":"uri","type":"string"},"status":{"description":"HTTP status code","examples":[400],"format":"int64","type":"integer"},"title":{"description":"A short, human-readable summary of the problem type. This value should not change between occurrences of the error.","examples":["Bad Request"],"type":"string"},"type":{"default":"about:blank","description":"A URI reference to human-readable documentation for the error.","examples":["https://example.com/errors/example"],"format":"uri","type":"string"}},"type":"object"},"FleetPlacementListOutputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["/api/v1/schemas/FleetPlacementListOutputBody.json"],"format":"uri","readOnly":true,"type":"string"},"items":{"items":{"$ref":"#/components/schemas/FleetPlacementView"},"type":["array","null"]}},"required":["items"],"type":"object"},"FleetPlacementView":{"additionalProperties":false,"properties":{"created_at":{"format":"date-time","type":"string"},"disk_gb":{"format":"int64","type":"integer"},"hypervisor_id":{"type":"string"},"hypervisor_name":{"type":"string"},"id":{"type":"string"},"pool_id":{"type":"string"},"pool_name":{"type":"string"},"ram_gb":{"format":"int64","type":"integer"},"slot_name":{"type":"string"},"vcpu":{"format":"int64","type":"integer"},"vmid":{"format":"int64","type":"integer"}},"required":["id","pool_id","pool_name","hypervisor_id","hypervisor_name","slot_name","vcpu","ram_gb","disk_gb","created_at"],"type":"object"},"HealthOutputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["/api/v1/schemas/HealthOutputBody.json"],"format":"uri","readOnly":true,"type":"string"},"status":{"examples":["ok"],"type":"string"}},"required":["status"],"type":"object"},"HypervisorBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["/api/v1/schemas/HypervisorBody.json"],"format":"uri","readOnly":true,"type":"string"},"cpu_overcommit_ratio":{"exclusiveMinimum":0,"format":"double","maximum":64,"type":"number"},"cpu_reserved":{"format":"int64","minimum":0,"type":"integer"},"cpu_total":{"format":"int64","minimum":0,"type":"integer"},"datacenter_id":{"format":"uuid","type":"string"},"disk_gb_reserved":{"format":"int64","minimum":0,"type":"integer"},"disk_gb_total":{"format":"int64","minimum":0,"type":"integer"},"name":{"maxLength":255,"type":"string"},"ram_gb_reserved":{"format":"int64","minimum":0,"type":"integer"},"ram_gb_total":{"format":"int64","minimum":0,"type":"integer"},"schedulable":{"type":"boolean"}},"required":["datacenter_id","name","cpu_total","cpu_reserved","ram_gb_total","ram_gb_reserved","disk_gb_total","disk_gb_reserved"],"type":"object"},"HypervisorListOutputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["/api/v1/schemas/HypervisorListOutputBody.json"],"format":"uri","readOnly":true,"type":"string"},"items":{"items":{"$ref":"#/components/schemas/HypervisorView"},"type":["array","null"]}},"required":["items"],"type":"object"},"HypervisorView":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["/api/v1/schemas/HypervisorView.json"],"format":"uri","readOnly":true,"type":"string"},"cpu_bookable":{"description":"cpu_effective_total minus reserved, existing-guest, and Waggle-committed vCPU.","format":"int64","type":"integer"},"cpu_effective_total":{"description":"Schedulable vCPU pool: cpu_total x cpu_overcommit_ratio, rounded down.","format":"int64","type":"integer"},"cpu_overcommit_ratio":{"description":"vCPU sold per physical core on this node. 1.0 is no overcommit.","format":"double","type":"number"},"cpu_reserved":{"format":"int64","type":"integer"},"cpu_total":{"description":"Physical cores on the node.","format":"int64","type":"integer"},"cpu_used":{"description":"vCPU allocated to existing guests (from discovery).","format":"int64","type":"integer"},"created_at":{"format":"date-time","type":"string"},"datacenter_id":{"type":"string"},"disk_gb_bookable":{"format":"int64","type":"integer"},"disk_gb_reserved":{"format":"int64","type":"integer"},"disk_gb_total":{"format":"int64","type":"integer"},"disk_gb_used":{"description":"Disk (GB) allocated to existing guests (from discovery).","format":"int64","type":"integer"},"id":{"type":"string"},"last_synced_at":{"format":"date-time","type":"string"},"name":{"type":"string"},"ram_gb_bookable":{"format":"int64","type":"integer"},"ram_gb_reserved":{"format":"int64","type":"integer"},"ram_gb_total":{"format":"int64","type":"integer"},"ram_gb_used":{"description":"RAM (GB) allocated to existing guests (from discovery).","format":"int64","type":"integer"},"schedulable":{"description":"When false, placement excludes this hypervisor.","type":"boolean"},"updated_at":{"format":"date-time","type":"string"}},"required":["id","datacenter_id","name","cpu_total","cpu_reserved","cpu_used","cpu_overcommit_ratio","cpu_effective_total","cpu_bookable","ram_gb_total","ram_gb_reserved","ram_gb_used","ram_gb_bookable","disk_gb_total","disk_gb_reserved","disk_gb_used","disk_gb_bookable","schedulable","created_at","updated_at"],"type":"object"},"ListAPIKeysOutputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["/api/v1/schemas/ListAPIKeysOutputBody.json"],"format":"uri","readOnly":true,"type":"string"},"items":{"items":{"$ref":"#/components/schemas/ApiKeyView"},"type":["array","null"]}},"required":["items"],"type":"object"},"LoginInputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["/api/v1/schemas/LoginInputBody.json"],"format":"uri","readOnly":true,"type":"string"},"email":{"format":"email","maxLength":255,"type":"string"},"organization_id":{"type":"string"},"password":{"maxLength":128,"type":"string"}},"required":["email","password"],"type":"object"},"LoginOutputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["/api/v1/schemas/LoginOutputBody.json"],"format":"uri","readOnly":true,"type":"string"},"account_id":{"type":"string"},"memberships":{"items":{"$ref":"#/components/schemas/MembershipView"},"type":["array","null"]},"organization":{"$ref":"#/components/schemas/OrgView"},"tokens":{"$ref":"#/components/schemas/AuthTokens"}},"type":"object"},"LogoutInputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["/api/v1/schemas/LogoutInputBody.json"],"format":"uri","readOnly":true,"type":"string"},"refresh_token":{"type":"string"}},"required":["refresh_token"],"type":"object"},"MeOutputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["/api/v1/schemas/MeOutputBody.json"],"format":"uri","readOnly":true,"type":"string"},"account_id":{"type":"string"},"current_organization":{"$ref":"#/components/schemas/OrgView"},"display_name":{"type":"string"},"emails":{"items":{"$ref":"#/components/schemas/AccountEmailView"},"type":["array","null"]},"last_login_at":{"format":"date-time","type":"string"},"memberships":{"items":{"$ref":"#/components/schemas/MembershipView"},"type":["array","null"]}},"required":["account_id","display_name","emails","memberships"],"type":"object"},"MemberJSONView":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["/api/v1/schemas/MemberJSONView.json"],"format":"uri","readOnly":true,"type":"string"},"account_id":{"type":"string"},"created_at":{"format":"date-time","type":"string"},"display_name":{"type":"string"},"email":{"type":"string"},"is_active":{"type":"boolean"},"last_login_at":{"format":"date-time","type":"string"},"pending":{"description":"Invited but hasn't accepted (no password set yet).","type":"boolean"},"role":{"type":"string"},"user_id":{"type":"string"}},"required":["user_id","account_id","display_name","email","role","is_active","pending","created_at"],"type":"object"},"MemberListOutputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["/api/v1/schemas/MemberListOutputBody.json"],"format":"uri","readOnly":true,"type":"string"},"items":{"items":{"$ref":"#/components/schemas/MemberJSONView"},"type":["array","null"]}},"required":["items"],"type":"object"},"MembershipView":{"additionalProperties":false,"properties":{"organization_id":{"type":"string"},"organization_name":{"type":"string"},"organization_slug":{"type":"string"}},"required":["organization_id","organization_name","organization_slug"],"type":"object"},"OrgFullView":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["/api/v1/schemas/OrgFullView.json"],"format":"uri","readOnly":true,"type":"string"},"created_at":{"format":"date-time","type":"string"},"domain":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"},"role":{"description":"The calling account's role in this organization.","type":"string"},"slug":{"type":"string"},"status":{"type":"string"}},"required":["id","name","slug","status","role","created_at"],"type":"object"},"OrgListOutputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["/api/v1/schemas/OrgListOutputBody.json"],"format":"uri","readOnly":true,"type":"string"},"items":{"items":{"$ref":"#/components/schemas/OrgFullView"},"type":["array","null"]}},"required":["items"],"type":"object"},"OrgView":{"additionalProperties":false,"properties":{"id":{"type":"string"},"slug":{"type":"string"},"status":{"type":"string"}},"required":["id","slug","status"],"type":"object"},"PlacementListOutputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["/api/v1/schemas/PlacementListOutputBody.json"],"format":"uri","readOnly":true,"type":"string"},"items":{"items":{"$ref":"#/components/schemas/PlacementView"},"type":["array","null"]}},"required":["items"],"type":"object"},"PlacementView":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["/api/v1/schemas/PlacementView.json"],"format":"uri","readOnly":true,"type":"string"},"created_at":{"format":"date-time","type":"string"},"hypervisor_id":{"type":"string"},"hypervisor_name":{"type":"string"},"id":{"type":"string"},"pool_id":{"type":"string"},"vmid":{"format":"int64","type":"integer"}},"required":["id","pool_id","hypervisor_id","hypervisor_name","created_at"],"type":"object"},"PoolListOutputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["/api/v1/schemas/PoolListOutputBody.json"],"format":"uri","readOnly":true,"type":"string"},"items":{"items":{"$ref":"#/components/schemas/PoolView"},"type":["array","null"]}},"required":["items"],"type":"object"},"PoolView":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["/api/v1/schemas/PoolView.json"],"format":"uri","readOnly":true,"type":"string"},"created_at":{"format":"date-time","type":"string"},"datacenter_id":{"type":"string"},"desired_count":{"format":"int64","type":"integer"},"id":{"type":"string"},"metadata":{},"name":{"type":"string"},"slot_id":{"type":"string"},"updated_at":{"format":"date-time","type":"string"}},"required":["id","datacenter_id","slot_id","name","desired_count","created_at","updated_at"],"type":"object"},"RefreshInputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["/api/v1/schemas/RefreshInputBody.json"],"format":"uri","readOnly":true,"type":"string"},"refresh_token":{"type":"string"}},"required":["refresh_token"],"type":"object"},"RefreshOutputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["/api/v1/schemas/RefreshOutputBody.json"],"format":"uri","readOnly":true,"type":"string"},"access_expires_at":{"format":"date-time","type":"string"},"access_token":{"type":"string"},"refresh_expires_at":{"format":"date-time","type":"string"},"refresh_token":{"type":"string"}},"required":["access_token","access_expires_at","refresh_token","refresh_expires_at"],"type":"object"},"ResizePoolInputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["/api/v1/schemas/ResizePoolInputBody.json"],"format":"uri","readOnly":true,"type":"string"},"desired_count":{"format":"int64","minimum":0,"type":"integer"}},"required":["desired_count"],"type":"object"},"SignupInputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["/api/v1/schemas/SignupInputBody.json"],"format":"uri","readOnly":true,"type":"string"},"display_name":{"maxLength":255,"type":"string"},"email":{"format":"email","maxLength":255,"type":"string"},"organization_name":{"maxLength":255,"type":"string"},"password":{"maxLength":72,"minLength":8,"type":"string"}},"required":["email","password","organization_name"],"type":"object"},"SignupOutputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["/api/v1/schemas/SignupOutputBody.json"],"format":"uri","readOnly":true,"type":"string"},"access_expires_at":{"format":"date-time","type":"string"},"access_token":{"type":"string"},"account_id":{"type":"string"},"organization":{"$ref":"#/components/schemas/OrgView"},"refresh_expires_at":{"format":"date-time","type":"string"},"refresh_token":{"type":"string"}},"required":["account_id","organization","access_token","access_expires_at","refresh_token","refresh_expires_at"],"type":"object"},"SlotBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["/api/v1/schemas/SlotBody.json"],"format":"uri","readOnly":true,"type":"string"},"disk_gb":{"format":"int64","minimum":1,"type":"integer"},"name":{"maxLength":255,"type":"string"},"ram_gb":{"format":"int64","minimum":1,"type":"integer"},"vcpu":{"format":"int64","minimum":1,"type":"integer"}},"required":["name","vcpu","ram_gb","disk_gb"],"type":"object"},"SlotListOutputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["/api/v1/schemas/SlotListOutputBody.json"],"format":"uri","readOnly":true,"type":"string"},"items":{"items":{"$ref":"#/components/schemas/SlotView"},"type":["array","null"]}},"required":["items"],"type":"object"},"SlotView":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["/api/v1/schemas/SlotView.json"],"format":"uri","readOnly":true,"type":"string"},"created_at":{"format":"date-time","type":"string"},"disk_gb":{"format":"int64","type":"integer"},"id":{"type":"string"},"name":{"type":"string"},"ram_gb":{"format":"int64","type":"integer"},"updated_at":{"format":"date-time","type":"string"},"vcpu":{"format":"int64","type":"integer"}},"required":["id","name","vcpu","ram_gb","disk_gb","created_at","updated_at"],"type":"object"},"SwitchOrgInputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["/api/v1/schemas/SwitchOrgInputBody.json"],"format":"uri","readOnly":true,"type":"string"},"organization_id":{"format":"uuid","type":"string"}},"required":["organization_id"],"type":"object"},"UpdateMemberInputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["/api/v1/schemas/UpdateMemberInputBody.json"],"format":"uri","readOnly":true,"type":"string"},"role":{"enum":["owner","admin","member"],"type":"string"}},"required":["role"],"type":"object"},"UpdateOrgInputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["/api/v1/schemas/UpdateOrgInputBody.json"],"format":"uri","readOnly":true,"type":"string"},"name":{"maxLength":255,"type":"string"}},"required":["name"],"type":"object"},"VerifyEmailInputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["/api/v1/schemas/VerifyEmailInputBody.json"],"format":"uri","readOnly":true,"type":"string"},"token":{"type":"string"}},"required":["token"],"type":"object"},"VersionOutputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["/api/v1/schemas/VersionOutputBody.json"],"format":"uri","readOnly":true,"type":"string"},"commit":{"examples":["abc1234"],"type":"string"},"date":{"examples":["2026-06-25T01:17:56Z"],"type":"string"},"version":{"examples":["v0.1.15"],"type":"string"}},"required":["version","commit","date"],"type":"object"}},"securitySchemes":{"bearer":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},"info":{"description":"Waggle API.","title":"Waggle","version":"0.2.8"},"openapi":"3.1.0","paths":{"/api-keys":{"get":{"operationId":"list-api-keys","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListAPIKeysOutputBody"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"bearer":[]}],"summary":"List the organization's API keys (secrets are never returned).","tags":["api-keys"]},"post":{"operationId":"create-api-key","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAPIKeyInputBody"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAPIKeyOutputBody"}}},"description":"Created"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"bearer":[]}],"summary":"Mint an organization API key for automation (e.g. Terraform). The plaintext token is returned once.","tags":["api-keys"]}},"/api-keys/{id}":{"delete":{"operationId":"revoke-api-key","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"bearer":[]}],"summary":"Revoke an organization API key. Idempotent from the caller's view.","tags":["api-keys"]}},"/auth/accept-invite":{"post":{"operationId":"auth-accept-invite","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcceptInviteInputBody"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginOutputBody"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"summary":"Accept an organization invite: set a password (if new) and sign in to the org.","tags":["auth"]}},"/auth/login":{"post":{"operationId":"auth-login","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginInputBody"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginOutputBody"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"summary":"Exchange credentials for an access + refresh token. Returns membership list when no organization_id is given and multiple memberships exist.","tags":["auth"]}},"/auth/logout":{"post":{"operationId":"auth-logout","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LogoutInputBody"}}},"required":true},"responses":{"204":{"description":"No Content"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"summary":"Revoke the supplied refresh token's session. Idempotent.","tags":["auth"]}},"/auth/me":{"get":{"operationId":"auth-me","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeOutputBody"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"bearer":[]}],"summary":"Return the authenticated account, its verified-or-pending emails, and its org memberships.","tags":["auth"]}},"/auth/refresh":{"post":{"operationId":"auth-refresh","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefreshInputBody"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefreshOutputBody"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"summary":"Rotate a refresh token, returning a new access + refresh pair.","tags":["auth"]}},"/auth/signup":{"post":{"operationId":"auth-signup","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupInputBody"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupOutputBody"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"summary":"Create an account, organization, and first user; enqueue tenant provisioning.","tags":["auth"]}},"/auth/switch":{"post":{"operationId":"auth-switch-org","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwitchOrgInputBody"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginOutputBody"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"bearer":[]}],"summary":"Issue a new token pair scoped to another organization the account belongs to.","tags":["auth"]}},"/auth/verify-email":{"post":{"operationId":"auth-verify-email","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyEmailInputBody"}}},"required":true},"responses":{"204":{"description":"No Content"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"summary":"Consume a verification token to mark an email address verified. Idempotent.","tags":["auth"]}},"/datacenters":{"get":{"operationId":"list-datacenters","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DatacenterListOutputBody"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"bearer":[]}],"summary":"List datacenters in the caller's tenant.","tags":["datacenters"]},"post":{"operationId":"create-datacenter","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DatacenterBody"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DatacenterView"}}},"description":"Created"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"bearer":[]}],"summary":"Create a datacenter in the caller's tenant.","tags":["datacenters"]}},"/datacenters/{id}":{"delete":{"operationId":"delete-datacenter","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"bearer":[]}],"summary":"Delete a datacenter.","tags":["datacenters"]},"get":{"operationId":"get-datacenter","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DatacenterView"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"bearer":[]}],"summary":"Fetch a datacenter by ID.","tags":["datacenters"]},"put":{"operationId":"update-datacenter","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DatacenterBody"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DatacenterView"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"bearer":[]}],"summary":"Update a datacenter.","tags":["datacenters"]}},"/datacenters/{id}/discover":{"post":{"operationId":"discover-hypervisors","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscoverInputBody"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscoverOutputBody"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"bearer":[]}],"summary":"Discover hypervisors from the datacenter's Proxmox cluster and upsert them (preserving reserved capacity and schedulable). Set async to run in the background.","tags":["datacenters"]}},"/health":{"get":{"operationId":"health","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthOutputBody"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"summary":"Health check","tags":["system"]}},"/hypervisors":{"get":{"operationId":"list-hypervisors","parameters":[{"explode":false,"in":"query","name":"datacenter_id","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HypervisorListOutputBody"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"bearer":[]}],"summary":"List hypervisors in the caller's tenant.","tags":["hypervisors"]},"post":{"operationId":"create-hypervisor","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HypervisorBody"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HypervisorView"}}},"description":"Created"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"bearer":[]}],"summary":"Create a hypervisor in the caller's tenant.","tags":["hypervisors"]}},"/hypervisors/{id}":{"delete":{"operationId":"delete-hypervisor","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"bearer":[]}],"summary":"Delete a hypervisor.","tags":["hypervisors"]},"get":{"operationId":"get-hypervisor","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HypervisorView"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"bearer":[]}],"summary":"Fetch a hypervisor by ID.","tags":["hypervisors"]},"put":{"operationId":"update-hypervisor","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HypervisorBody"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HypervisorView"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"bearer":[]}],"summary":"Update a hypervisor.","tags":["hypervisors"]}},"/organizations":{"get":{"operationId":"list-orgs","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgListOutputBody"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"bearer":[]}],"summary":"List the organizations the caller belongs to (with their role).","tags":["organizations"]},"post":{"operationId":"create-org","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateOrgInputBody"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgFullView"}}},"description":"Created"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"bearer":[]}],"summary":"Create an organization (you become its owner) and enqueue tenant provisioning.","tags":["organizations"]}},"/organizations/{id}":{"delete":{"operationId":"delete-org","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"bearer":[]}],"summary":"Delete an organization and enqueue tenant teardown (owner only).","tags":["organizations"]},"get":{"operationId":"get-org","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgFullView"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"bearer":[]}],"summary":"Get an organization the caller belongs to.","tags":["organizations"]},"patch":{"operationId":"update-org","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateOrgInputBody"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgFullView"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"bearer":[]}],"summary":"Rename an organization (admin or owner).","tags":["organizations"]}},"/organizations/{id}/members":{"get":{"operationId":"list-members","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberListOutputBody"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"bearer":[]}],"summary":"List an organization's members.","tags":["organizations"]},"post":{"operationId":"add-member","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddMemberInputBody"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddMemberOutputBody"}}},"description":"Created"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"bearer":[]}],"summary":"Add or invite a member by email (admin+; owner required to grant owner). Unknown emails get an invite link.","tags":["organizations"]}},"/organizations/{id}/members/{userId}":{"delete":{"operationId":"remove-member","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}},{"in":"path","name":"userId","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"bearer":[]}],"summary":"Remove a member (admin+; owner required to remove owners; never the last owner).","tags":["organizations"]},"patch":{"operationId":"update-member","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}},{"in":"path","name":"userId","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateMemberInputBody"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberJSONView"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"bearer":[]}],"summary":"Change a member's role (admin+; owner required to touch owners).","tags":["organizations"]}},"/placements":{"get":{"operationId":"list-placements","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FleetPlacementListOutputBody"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"bearer":[]}],"summary":"List all placements in the tenant with pool, slot, and hypervisor context (fleet overview).","tags":["placements"]}},"/placements/{id}":{"delete":{"operationId":"delete-placement","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"bearer":[]}],"summary":"Remove a placement. The pool's desired_count is not adjusted; resize the pool to re-fill the vacancy.","tags":["placements"]},"get":{"operationId":"get-placement","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlacementView"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"bearer":[]}],"summary":"Fetch a single placement with its pool, hypervisor, and vmid.","tags":["placements"]},"patch":{"operationId":"backfill-placement-vmid","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BackfillVMIDInputBody"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlacementView"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"bearer":[]}],"summary":"Attach the externally-assigned Proxmox vmid to a placement.","tags":["placements"]}},"/pools":{"get":{"operationId":"list-pools","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PoolListOutputBody"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"bearer":[]}],"summary":"List node pools in the caller's tenant.","tags":["pools"]},"post":{"operationId":"create-pool","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePoolInputBody"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PoolView"}}},"description":"Created"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"bearer":[]}],"summary":"Create a node pool and place its VMs across hypervisors (anti-affinity spread, all-or-nothing). Placements are available at GET /pools/{id}/placements.","tags":["pools"]}},"/pools/{id}":{"delete":{"operationId":"delete-pool","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"bearer":[]}],"summary":"Delete a pool and release all its placements.","tags":["pools"]},"get":{"operationId":"get-pool","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PoolView"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"bearer":[]}],"summary":"Fetch a pool. Its placements are available at GET /pools/{id}/placements.","tags":["pools"]},"patch":{"operationId":"resize-pool","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResizePoolInputBody"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PoolView"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"bearer":[]}],"summary":"Resize a pool's desired count. Grow places new VMs (all-or-nothing); shrink removes newest placements (LIFO). Placements are available at GET /pools/{id}/placements.","tags":["pools"]}},"/pools/{id}/placements":{"get":{"operationId":"list-pool-placements","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlacementListOutputBody"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"bearer":[]}],"summary":"List a pool's placements (hypervisor + optional vmid).","tags":["pools"]}},"/slots":{"get":{"operationId":"list-slots","parameters":[{"description":"Filter to the slot with this exact (unique) name.","explode":false,"in":"query","name":"name","schema":{"description":"Filter to the slot with this exact (unique) name.","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlotListOutputBody"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"bearer":[]}],"summary":"List slots in the caller's tenant.","tags":["slots"]},"post":{"operationId":"create-slot","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlotBody"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlotView"}}},"description":"Created"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"bearer":[]}],"summary":"Create a slot (t-shirt-size VM template) in the caller's tenant.","tags":["slots"]}},"/slots/{id}":{"delete":{"operationId":"delete-slot","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"bearer":[]}],"summary":"Delete a slot.","tags":["slots"]},"get":{"operationId":"get-slot","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlotView"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"bearer":[]}],"summary":"Fetch a slot by ID.","tags":["slots"]},"put":{"operationId":"update-slot","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlotBody"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlotView"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"bearer":[]}],"summary":"Update a slot.","tags":["slots"]}},"/version":{"get":{"operationId":"version","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VersionOutputBody"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"summary":"Server version","tags":["system"]}}},"servers":[{"url":"/api/v1"}]}