{"openapi":"3.1.0","info":{"title":"KmerHosting API","version":"v1","description":"KmerHosting API contract. Authenticated account and service operations use api.kmerhosting.com. Public domain availability search remains unauthenticated on domain.kmerhosting.com and is documented here with operation-level servers. Customer ordering and management for Domains, Email Hosting and Shared Hosting are centralized in the KmerHosting Dashboard at dash.kmerhosting.com."},"servers":[{"url":"https://api.kmerhosting.com","description":"Production"}],"security":[{"bearerAuth":[]}],"tags":[{"name":"Account"},{"name":"Services"},{"name":"Domains"},{"name":"Domain Search","description":"Public, read-only availability and pricing search served from domain.kmerhosting.com. No account or API key is required."},{"name":"Email Hosting"},{"name":"Shared Hosting"},{"name":"LXC"},{"name":"KVM"},{"name":"ConvertSuite"}],"paths":{"/health":{"get":{"security":[],"summary":"API health","responses":{"200":{"description":"Healthy"}},"operationId":"get_health"}},"/api/domain-search":{"get":{"servers":[{"url":"https://domain.kmerhosting.com","description":"Public domain search service"}],"security":[],"tags":["Domain Search"],"summary":"Check public domain availability","description":"Unauthenticated public search served from domain.kmerhosting.com. Send one domain with `domain` or `q`, or up to 20 domains with repeated `domain`/`domains` parameters or a comma-separated `domains` value. The allowance is 20 requests per client IP in a rolling 60-second window; one bulk request counts as one request. The legacy Domain web portal UI may redirect users to the Dashboard, but this API endpoint remains stable.","parameters":[{"in":"query","name":"domain","description":"A domain to check. Repeat this parameter for a bulk search.","schema":{"type":"string","minLength":3,"maxLength":253,"examples":["example.com"]}},{"in":"query","name":"domains","description":"Comma-, whitespace- or newline-separated domains. Repeat this parameter when useful.","schema":{"type":"string","minLength":3,"maxLength":5099,"examples":["example.com,example.org,example.cm"]}},{"in":"query","name":"q","description":"Alias for `domain` for simple integrations.","schema":{"type":"string","minLength":3,"maxLength":253,"examples":["example.com"]}}],"responses":{"200":{"description":"Availability results and current customer pricing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicDomainSearchResponse"}}}},"400":{"description":"No valid domain was supplied.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicDomainSearchError"}}}},"429":{"description":"The public IP allowance was exceeded. Retry after the supplied delay.","headers":{"Retry-After":{"schema":{"type":"integer"}},"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicDomainSearchError"}}}},"502":{"description":"The registrar service is temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicDomainSearchError"}}}}},"operationId":"get_api_domain_search"},"post":{"servers":[{"url":"https://domain.kmerhosting.com","description":"Public domain search service"}],"security":[],"tags":["Domain Search"],"summary":"Check public domain availability in bulk","description":"Unauthenticated public search served from domain.kmerhosting.com. Send an array of up to 20 domains, or one scalar `domain`, `domainName` or `q` value. One bulk request counts as one request against the client IP allowance. The legacy Domain web portal UI may redirect users to the Dashboard, but this API endpoint remains stable.","requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","required":["domains"],"additionalProperties":false,"properties":{"domains":{"type":"array","minItems":1,"maxItems":20,"uniqueItems":true,"items":{"type":"string","minLength":3,"maxLength":253}}}},{"type":"object","required":["domain"],"additionalProperties":false,"properties":{"domain":{"type":"string","minLength":3,"maxLength":253}}},{"type":"object","required":["domainName"],"additionalProperties":false,"properties":{"domainName":{"type":"string","minLength":3,"maxLength":253}}},{"type":"object","required":["q"],"additionalProperties":false,"properties":{"q":{"type":"string","minLength":3,"maxLength":253}}}]}}}},"responses":{"200":{"description":"Availability results and current customer pricing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicDomainSearchResponse"}}}},"400":{"description":"No valid domain was supplied.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicDomainSearchError"}}}},"429":{"description":"The public IP allowance was exceeded. Retry after the supplied delay.","headers":{"Retry-After":{"schema":{"type":"integer"}},"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicDomainSearchError"}}}},"502":{"description":"The registrar service is temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicDomainSearchError"}}}}},"operationId":"post_api_domain_search"}},"/api/domain/domain-search-fast":{"get":{"servers":[{"url":"https://domain.kmerhosting.com","description":"Public domain search service"}],"security":[],"tags":["Domain Search"],"summary":"Check public domain availability","description":"Unauthenticated public search served from domain.kmerhosting.com. Send one domain with `domain` or `q`, or up to 20 domains with repeated `domain`/`domains` parameters or a comma-separated `domains` value. The allowance is 20 requests per client IP in a rolling 60-second window; one bulk request counts as one request. The legacy Domain web portal UI may redirect users to the Dashboard, but this API endpoint remains stable.","parameters":[{"in":"query","name":"domain","description":"A domain to check. Repeat this parameter for a bulk search.","schema":{"type":"string","minLength":3,"maxLength":253,"examples":["example.com"]}},{"in":"query","name":"domains","description":"Comma-, whitespace- or newline-separated domains. Repeat this parameter when useful.","schema":{"type":"string","minLength":3,"maxLength":5099,"examples":["example.com,example.org,example.cm"]}},{"in":"query","name":"q","description":"Alias for `domain` for simple integrations.","schema":{"type":"string","minLength":3,"maxLength":253,"examples":["example.com"]}}],"responses":{"200":{"description":"Availability results and current customer pricing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicDomainSearchResponse"}}}},"400":{"description":"No valid domain was supplied.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicDomainSearchError"}}}},"429":{"description":"The public IP allowance was exceeded. Retry after the supplied delay.","headers":{"Retry-After":{"schema":{"type":"integer"}},"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicDomainSearchError"}}}},"502":{"description":"The registrar service is temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicDomainSearchError"}}}}},"operationId":"get_api_domain_domain_search_fast"},"post":{"servers":[{"url":"https://domain.kmerhosting.com","description":"Public domain search service"}],"security":[],"tags":["Domain Search"],"summary":"Check public domain availability in bulk","description":"Unauthenticated public search served from domain.kmerhosting.com. Send an array of up to 20 domains, or one scalar `domain`, `domainName` or `q` value. One bulk request counts as one request against the client IP allowance. The legacy Domain web portal UI may redirect users to the Dashboard, but this API endpoint remains stable.","requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","required":["domains"],"additionalProperties":false,"properties":{"domains":{"type":"array","minItems":1,"maxItems":20,"uniqueItems":true,"items":{"type":"string","minLength":3,"maxLength":253}}}},{"type":"object","required":["domain"],"additionalProperties":false,"properties":{"domain":{"type":"string","minLength":3,"maxLength":253}}},{"type":"object","required":["domainName"],"additionalProperties":false,"properties":{"domainName":{"type":"string","minLength":3,"maxLength":253}}},{"type":"object","required":["q"],"additionalProperties":false,"properties":{"q":{"type":"string","minLength":3,"maxLength":253}}}]}}}},"responses":{"200":{"description":"Availability results and current customer pricing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicDomainSearchResponse"}}}},"400":{"description":"No valid domain was supplied.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicDomainSearchError"}}}},"429":{"description":"The public IP allowance was exceeded. Retry after the supplied delay.","headers":{"Retry-After":{"schema":{"type":"integer"}},"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicDomainSearchError"}}}},"502":{"description":"The registrar service is temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicDomainSearchError"}}}}},"operationId":"post_api_domain_domain_search_fast"}},"/v1/account":{"get":{"tags":["Account"],"summary":"Get the authenticated account","description":"Requires `account:read`.","responses":{"200":{"description":"Account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"$ref":"#/components/responses/Error"}},"operationId":"get_v1_account"}},"/v1/account/api-usage":{"get":{"tags":["Account"],"summary":"List API request activity","description":"Requires `account:usage:read`. Includes product and non-product operations, status, route, operation id and client IPv4.","responses":{"200":{"description":"API usage","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}},"operationId":"get_v1_account_api_usage"}},"/v1/convertsuite/tools":{"get":{"tags":["ConvertSuite"],"summary":"List ConvertSuite tools","description":"Requires `convertsuite:read`. Available to API-key and OAuth credentials with the ConvertSuite capability.","responses":{"200":{"description":"ConvertSuite tools","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"}},"operationId":"get_v1_convertsuite_tools"}},"/v1/convertsuite/prepare-upload":{"post":{"tags":["ConvertSuite"],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"summary":"Prepare a ConvertSuite processing job","description":"Requires the `convertsuite:process` scope and a unique `Idempotency-Key` header.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["tool","files"],"additionalProperties":false,"properties":{"tool":{"type":"string","description":"Tool ID returned by /v1/convertsuite/tools."},"options":{"type":"object","additionalProperties":true},"files":{"type":"array","minItems":1,"maxItems":10,"items":{"type":"object","required":["originalName","mimeType","sizeBytes"],"additionalProperties":false,"properties":{"originalName":{"type":"string","minLength":1,"maxLength":255},"mimeType":{"type":"string","minLength":1,"maxLength":160},"sizeBytes":{"type":"integer","minimum":1,"maximum":52428800},"checksum":{"type":["string","null"],"maxLength":128}}}}}}}}},"responses":{"200":{"description":"One operation is reserved for each successful REST processing call; polling, starting and cancelling a job do not reserve additional operations.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"201":{"description":"One operation is reserved for each successful REST processing call; polling, starting and cancelling a job do not reserve additional operations.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"202":{"description":"One operation is reserved for each successful REST processing call; polling, starting and cancelling a job do not reserve additional operations.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"operationId":"post_v1_convertsuite_prepare_upload"}},"/v1/convertsuite/jobs/{jobId}":{"get":{"tags":["ConvertSuite"],"summary":"Get a ConvertSuite job","description":"Requires `convertsuite:read`. The response includes signed upload/download URLs where applicable.","parameters":[{"in":"path","required":true,"schema":{"type":"string","format":"uuid"},"name":"jobId"}],"responses":{"200":{"description":"ConvertSuite job","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"$ref":"#/components/responses/Error"}},"operationId":"get_v1_convertsuite_jobs_jobId"}},"/v1/convertsuite/jobs/{jobId}/start":{"post":{"tags":["ConvertSuite"],"parameters":[{"in":"path","required":true,"schema":{"type":"string","format":"uuid"},"name":"jobId"},{"$ref":"#/components/parameters/IdempotencyKey"}],"summary":"Start a ConvertSuite job","description":"Requires the `convertsuite:process` scope and a unique `Idempotency-Key` header.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false}}}},"responses":{"200":{"description":"Job started","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"201":{"description":"Job started","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"202":{"description":"Job started","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"operationId":"post_v1_convertsuite_jobs_jobId_start"}},"/v1/convertsuite/jobs/{jobId}/cancel":{"post":{"tags":["ConvertSuite"],"parameters":[{"in":"path","required":true,"schema":{"type":"string","format":"uuid"},"name":"jobId"},{"$ref":"#/components/parameters/IdempotencyKey"}],"summary":"Cancel a ConvertSuite job","description":"Requires the `convertsuite:process` scope and a unique `Idempotency-Key` header.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false}}}},"responses":{"200":{"description":"Job cancelled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"201":{"description":"Job cancelled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"202":{"description":"Job cancelled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"operationId":"post_v1_convertsuite_jobs_jobId_cancel"}},"/v1/services":{"get":{"tags":["Services"],"summary":"List all customer services","description":"Requires `services:read`.","responses":{"200":{"description":"Services","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}},"operationId":"get_v1_services"}},"/v1/services/{serviceId}":{"get":{"tags":["Services"],"summary":"Get one customer service","description":"Requires `services:read`.","parameters":[{"in":"path","required":true,"schema":{"type":"string","format":"uuid"},"name":"serviceId"}],"responses":{"200":{"description":"Service","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"$ref":"#/components/responses/Error"}},"operationId":"get_v1_services_serviceId"}},"/v1/domains":{"get":{"tags":["Domains"],"summary":"List owned domains","description":"Requires `domains:read`.","responses":{"200":{"description":"Domains","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}},"operationId":"get_v1_domains"}},"/v1/domains/{domainId}":{"get":{"tags":["Domains"],"summary":"Get an owned domain","description":"Requires `domains:read`.","parameters":[{"in":"path","required":true,"schema":{"type":"string","format":"uuid"},"name":"domainId"}],"responses":{"200":{"description":"Domain","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"$ref":"#/components/responses/Error"}},"operationId":"get_v1_domains_domainId"}},"/v1/domains/{domainId}/auto-renew":{"put":{"tags":["Domains"],"parameters":[{"in":"path","required":true,"schema":{"type":"string","format":"uuid"},"name":"domainId"},{"$ref":"#/components/parameters/IdempotencyKey"}],"summary":"Set domain auto-renew","description":"Requires the `domains:write` scope and a unique `Idempotency-Key` header.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["enabled"],"properties":{"enabled":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"201":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"operationId":"put_v1_domains_domainId_auto_renew"}},"/v1/domains/{domainId}/nameservers":{"put":{"tags":["Domains"],"parameters":[{"in":"path","required":true,"schema":{"type":"string","format":"uuid"},"name":"domainId"},{"$ref":"#/components/parameters/IdempotencyKey"}],"summary":"Queue a nameserver update","description":"Requires the `domains:write` scope and a unique `Idempotency-Key` header.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["nameServers"],"properties":{"nameServers":{"type":"array","minItems":2,"maxItems":13,"items":{"type":"string","minLength":1}}}}}}},"responses":{"200":{"description":"Queued","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"201":{"description":"Queued","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"202":{"description":"Queued","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"operationId":"put_v1_domains_domainId_nameservers"}},"/v1/domains/{domainId}/dns":{"get":{"tags":["Domains"],"summary":"List DNS records","description":"Requires `domains:read`.","parameters":[{"in":"path","required":true,"schema":{"type":"string","format":"uuid"},"name":"domainId"}],"responses":{"200":{"description":"DNS records","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}},"operationId":"get_v1_domains_domainId_dns"},"post":{"tags":["Domains"],"parameters":[{"in":"path","required":true,"schema":{"type":"string","format":"uuid"},"name":"domainId"},{"$ref":"#/components/parameters/IdempotencyKey"}],"summary":"Queue a DNS record creation","description":"Requires the `domains:dns:write` scope and a unique `Idempotency-Key` header.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["type"],"anyOf":[{"required":["content"]},{"required":["contents"]}],"properties":{"name":{"type":"string","default":"@"},"type":{"type":"string","enum":["A","AAAA","CNAME","MX","TXT","NS","SRV","CAA"]},"content":{"type":"string"},"contents":{"type":"array","minItems":1,"items":{"type":"string"}},"ttl":{"type":"integer","minimum":1,"maximum":86400,"default":3600},"priority":{"type":["integer","null"]}}}}}},"responses":{"200":{"description":"Queued","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"201":{"description":"Queued","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"202":{"description":"Queued","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"operationId":"post_v1_domains_domainId_dns"}},"/v1/domains/{domainId}/dns/{recordId}":{"put":{"tags":["Domains"],"parameters":[{"in":"path","required":true,"schema":{"type":"string","format":"uuid"},"name":"domainId"},{"in":"path","required":true,"schema":{"type":"string","format":"uuid"},"name":"recordId"},{"$ref":"#/components/parameters/IdempotencyKey"}],"summary":"Queue a DNS record update","description":"Requires the `domains:dns:write` scope and a unique `Idempotency-Key` header.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","minProperties":1,"properties":{"name":{"type":"string"},"type":{"type":"string","enum":["A","AAAA","CNAME","MX","TXT","NS","SRV","CAA"]},"content":{"type":"string"},"contents":{"type":"array","minItems":1,"items":{"type":"string"}},"ttl":{"type":"integer","minimum":1,"maximum":86400},"priority":{"type":["integer","null"]}}}}}},"responses":{"200":{"description":"Queued","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"201":{"description":"Queued","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"202":{"description":"Queued","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"operationId":"put_v1_domains_domainId_dns_recordId"},"delete":{"tags":["Domains"],"parameters":[{"in":"path","required":true,"schema":{"type":"string","format":"uuid"},"name":"domainId"},{"in":"path","required":true,"schema":{"type":"string","format":"uuid"},"name":"recordId"},{"$ref":"#/components/parameters/IdempotencyKey"}],"summary":"Queue DNS record deletion","description":"Requires `domains:dns:write` and a unique `Idempotency-Key` header.","responses":{"200":{"description":"Queued","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"409":{"$ref":"#/components/responses/Error"}},"operationId":"delete_v1_domains_domainId_dns_recordId"}},"/v1/email/services":{"get":{"tags":["Email Hosting"],"summary":"List owned email hosting services","description":"Requires `email:read`.","responses":{"200":{"description":"Email services","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}},"operationId":"get_v1_email_services"}},"/v1/email/services/{serviceId}/provision":{"post":{"tags":["Email Hosting"],"parameters":[{"in":"path","required":true,"schema":{"type":"string","format":"uuid"},"name":"serviceId"},{"$ref":"#/components/parameters/IdempotencyKey"}],"summary":"Provision an owned email service","description":"Requires the `email:write` scope and a unique `Idempotency-Key` header.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false}}}},"responses":{"200":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"201":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"operationId":"post_v1_email_services_serviceId_provision"}},"/v1/email/services/{serviceId}/dns/sync":{"post":{"tags":["Email Hosting"],"parameters":[{"in":"path","required":true,"schema":{"type":"string","format":"uuid"},"name":"serviceId"},{"$ref":"#/components/parameters/IdempotencyKey"}],"summary":"Synchronize email service DNS","description":"Requires the `email:write` scope and a unique `Idempotency-Key` header.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false}}}},"responses":{"200":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"201":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"operationId":"post_v1_email_services_serviceId_dns_sync"}},"/v1/hosting/services":{"get":{"tags":["Shared Hosting"],"summary":"List owned shared-hosting services","description":"Requires `hosting:read`.","responses":{"200":{"description":"Shared hosting services","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}},"operationId":"get_v1_hosting_services"}},"/v1/hosting/services/{serviceId}/stats":{"get":{"tags":["Shared Hosting"],"summary":"Get provider-neutral service statistics","description":"Requires `hosting:read`. DirectAdmin and cPanel are selected automatically.","parameters":[{"in":"path","required":true,"schema":{"type":"string","format":"uuid"},"name":"serviceId"}],"responses":{"200":{"description":"Hosting statistics","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}},"operationId":"get_v1_hosting_services_serviceId_stats"}},"/v1/hosting/services/{serviceId}/panel-access":{"post":{"tags":["Shared Hosting"],"parameters":[{"in":"path","required":true,"schema":{"type":"string","format":"uuid"},"name":"serviceId"},{"$ref":"#/components/parameters/IdempotencyKey"}],"summary":"Create a temporary hosting panel link","description":"Requires the `hosting:panel:access` scope and a unique `Idempotency-Key` header. For Free Hosting, successful panel or File Manager link creation records qualifying activity. An inactivity-suspended Free Hosting service can be automatically reactivated before its deletion deadline; other suspended or terminated services remain unavailable.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"target":{"type":"string","enum":["panel","filemanager"],"default":"panel"}}}}}},"responses":{"200":{"description":"Panel access link","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"201":{"description":"Panel access link","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"202":{"description":"Panel access link","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"operationId":"post_v1_hosting_services_serviceId_panel_access"}},"/v1/lxc/instances":{"get":{"tags":["LXC"],"summary":"List owned LXC instances","description":"Requires `lxc:read`.","responses":{"200":{"description":"LXC instances","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}},"operationId":"get_v1_lxc_instances"}},"/v1/lxc/instances/{serviceId}":{"get":{"tags":["LXC"],"summary":"Get LXC instance details","description":"Requires `lxc:read`.","parameters":[{"in":"path","required":true,"schema":{"type":"string","format":"uuid"},"name":"serviceId"}],"responses":{"200":{"description":"LXC instance","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}},"operationId":"get_v1_lxc_instances_serviceId"}},"/v1/lxc/instances/{serviceId}/metrics":{"get":{"tags":["LXC"],"summary":"Get LXC metrics for the last 24 hours","description":"Requires `lxc:read`.","parameters":[{"in":"path","required":true,"schema":{"type":"string","format":"uuid"},"name":"serviceId"}],"responses":{"200":{"description":"LXC metrics","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}},"operationId":"get_v1_lxc_instances_serviceId_metrics"}},"/v1/lxc/instances/{serviceId}/actions":{"post":{"tags":["LXC"],"parameters":[{"in":"path","required":true,"schema":{"type":"string","format":"uuid"},"name":"serviceId"},{"$ref":"#/components/parameters/IdempotencyKey"}],"summary":"Control an LXC instance","description":"Requires the `lxc:power:write` scope and a unique `Idempotency-Key` header.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["action"],"properties":{"action":{"type":"string","enum":["start","restart","freeze","stop"]}}}}}},"responses":{"200":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"201":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"operationId":"post_v1_lxc_instances_serviceId_actions"}},"/v1/lxc/instances/{serviceId}/snapshots":{"get":{"tags":["LXC"],"summary":"List LXC snapshots","description":"Requires `lxc:read`.","parameters":[{"in":"path","required":true,"schema":{"type":"string","format":"uuid"},"name":"serviceId"}],"responses":{"200":{"description":"LXC snapshots","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}},"operationId":"get_v1_lxc_instances_serviceId_snapshots"},"post":{"tags":["LXC"],"parameters":[{"in":"path","required":true,"schema":{"type":"string","format":"uuid"},"name":"serviceId"},{"$ref":"#/components/parameters/IdempotencyKey"}],"summary":"Create, delete or restore an LXC snapshot","description":"Requires the `lxc:snapshots:write` scope and a unique `Idempotency-Key` header.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["action","name"],"properties":{"action":{"type":"string","enum":["create","delete","restore"]},"name":{"type":"string","pattern":"^[a-z0-9][a-z0-9-]{0,47}$"}}}}}},"responses":{"200":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"201":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"operationId":"post_v1_lxc_instances_serviceId_snapshots"}},"/v1/lxc/instances/{serviceId}/password":{"post":{"tags":["LXC"],"parameters":[{"in":"path","required":true,"schema":{"type":"string","format":"uuid"},"name":"serviceId"},{"$ref":"#/components/parameters/IdempotencyKey"}],"summary":"Change the LXC root password","description":"Requires the `lxc:credentials:write` scope and a unique `Idempotency-Key` header.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["password"],"additionalProperties":false,"properties":{"password":{"type":"string","minLength":10,"maxLength":128,"writeOnly":true}}}}}},"responses":{"200":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"201":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"operationId":"post_v1_lxc_instances_serviceId_password"}},"/v1/lxc/instances/{serviceId}/reinstall":{"post":{"tags":["LXC"],"parameters":[{"in":"path","required":true,"schema":{"type":"string","format":"uuid"},"name":"serviceId"},{"$ref":"#/components/parameters/IdempotencyKey"}],"summary":"Erase and reinstall an LXC instance","description":"Requires the `lxc:reinstall` scope and a unique `Idempotency-Key` header.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["distribution"],"additionalProperties":false,"properties":{"distribution":{"type":"string","minLength":1,"maxLength":80}}}}}},"responses":{"200":{"description":"Reinstallation queued","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"201":{"description":"Reinstallation queued","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"202":{"description":"Reinstallation queued","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"operationId":"post_v1_lxc_instances_serviceId_reinstall"}},"/v1/lxc/instances/{serviceId}/terminal-ticket":{"post":{"tags":["LXC"],"parameters":[{"in":"path","required":true,"schema":{"type":"string","format":"uuid"},"name":"serviceId"},{"$ref":"#/components/parameters/IdempotencyKey"}],"summary":"Create a short-lived LXC terminal ticket","description":"Requires the `lxc:terminal:access` scope and a unique `Idempotency-Key` header.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false}}}},"responses":{"200":{"description":"Terminal ticket valid for 60 seconds","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"201":{"description":"Terminal ticket valid for 60 seconds","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"202":{"description":"Terminal ticket valid for 60 seconds","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"operationId":"post_v1_lxc_instances_serviceId_terminal_ticket"}},"/v1/lxc/instances/{serviceId}/auto-renew":{"put":{"tags":["LXC"],"parameters":[{"in":"path","required":true,"schema":{"type":"string","format":"uuid"},"name":"serviceId"},{"$ref":"#/components/parameters/IdempotencyKey"}],"summary":"Set LXC auto-renew","description":"Requires the `lxc:subscription:write` scope and a unique `Idempotency-Key` header.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["enabled"],"additionalProperties":false,"properties":{"enabled":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"201":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"operationId":"put_v1_lxc_instances_serviceId_auto_renew"}},"/v1/lxc/instances/{serviceId}/billing-period":{"put":{"tags":["LXC"],"parameters":[{"in":"path","required":true,"schema":{"type":"string","format":"uuid"},"name":"serviceId"},{"$ref":"#/components/parameters/IdempotencyKey"}],"summary":"Set the LXC billing period","description":"Requires the `lxc:subscription:write` scope and a unique `Idempotency-Key` header.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["billingMonths"],"additionalProperties":false,"properties":{"billingMonths":{"type":"integer","enum":[1,3,6,12]}}}}}},"responses":{"200":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"201":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"operationId":"put_v1_lxc_instances_serviceId_billing_period"}},"/v1/kvm/instances":{"get":{"tags":["KVM"],"summary":"List owned KVM instances","description":"Requires `kvm:read`.","responses":{"200":{"description":"KVM instances","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}},"operationId":"get_v1_kvm_instances"}},"/v1/kvm/instances/{serviceId}":{"get":{"tags":["KVM"],"summary":"Get KVM details","description":"Requires `kvm:read`.","parameters":[{"in":"path","required":true,"schema":{"type":"string","format":"uuid"},"name":"serviceId"}],"responses":{"200":{"description":"KVM details","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}},"operationId":"get_v1_kvm_instances_serviceId"}},"/v1/kvm/instances/{serviceId}/actions":{"post":{"tags":["KVM"],"parameters":[{"in":"path","required":true,"schema":{"type":"string","format":"uuid"},"name":"serviceId"},{"$ref":"#/components/parameters/IdempotencyKey"}],"summary":"Control a KVM instance","description":"Requires the `kvm:power:write` scope and a unique `Idempotency-Key` header.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["action"],"properties":{"action":{"type":"string","enum":["start","stop","shutdown","restart"]}}}}}},"responses":{"200":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"201":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"operationId":"post_v1_kvm_instances_serviceId_actions"}},"/v1/kvm/instances/{serviceId}/auto-renew":{"put":{"tags":["KVM"],"parameters":[{"in":"path","required":true,"schema":{"type":"string","format":"uuid"},"name":"serviceId"},{"$ref":"#/components/parameters/IdempotencyKey"}],"summary":"Set KVM auto-renew","description":"Requires the `kvm:subscription:write` scope and a unique `Idempotency-Key` header.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["enabled"],"properties":{"enabled":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"201":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"operationId":"put_v1_kvm_instances_serviceId_auto_renew"}},"/v1/kvm/instances/{serviceId}/password":{"post":{"tags":["KVM"],"parameters":[{"in":"path","required":true,"schema":{"type":"string","format":"uuid"},"name":"serviceId"},{"$ref":"#/components/parameters/IdempotencyKey"}],"summary":"Reset the KVM root password","description":"Requires the `kvm:credentials:write` scope and a unique `Idempotency-Key` header.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["password"],"properties":{"password":{"type":"string","minLength":8,"maxLength":128,"writeOnly":true}}}}}},"responses":{"200":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"201":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"operationId":"post_v1_kvm_instances_serviceId_password"}},"/v1/kvm/instances/{serviceId}/renew":{"post":{"tags":["KVM"],"parameters":[{"in":"path","required":true,"schema":{"type":"string","format":"uuid"},"name":"serviceId"},{"$ref":"#/components/parameters/IdempotencyKey"}],"summary":"Renew a KVM instance","description":"Requires the `kvm:subscription:write` scope and a unique `Idempotency-Key` header.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"billingMonths":{"type":"integer","enum":[1,3,6,12]}}}}}},"responses":{"200":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"201":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"operationId":"post_v1_kvm_instances_serviceId_renew"}},"/v1/kvm/instances/{serviceId}/cancel":{"post":{"tags":["KVM"],"parameters":[{"in":"path","required":true,"schema":{"type":"string","format":"uuid"},"name":"serviceId"},{"$ref":"#/components/parameters/IdempotencyKey"}],"summary":"Schedule KVM cancellation","description":"Requires the `kvm:subscription:write` scope and a unique `Idempotency-Key` header.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false}}}},"responses":{"200":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"201":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"operationId":"post_v1_kvm_instances_serviceId_cancel"}},"/v1/kvm/instances/{serviceId}/keep-service":{"post":{"tags":["KVM"],"parameters":[{"in":"path","required":true,"schema":{"type":"string","format":"uuid"},"name":"serviceId"},{"$ref":"#/components/parameters/IdempotencyKey"}],"summary":"Keep a KVM service and revoke cancellation","description":"Requires the `kvm:subscription:write` scope and a unique `Idempotency-Key` header.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false}}}},"responses":{"200":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"201":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"operationId":"post_v1_kvm_instances_serviceId_keep_service"}},"/v1/kvm/instances/{serviceId}/snapshots":{"get":{"tags":["KVM"],"summary":"List KVM snapshots","description":"Requires `kvm:read`.","parameters":[{"in":"path","required":true,"schema":{"type":"string","format":"uuid"},"name":"serviceId"}],"responses":{"200":{"description":"Snapshots","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}},"operationId":"get_v1_kvm_instances_serviceId_snapshots"},"post":{"tags":["KVM"],"parameters":[{"in":"path","required":true,"schema":{"type":"string","format":"uuid"},"name":"serviceId"},{"$ref":"#/components/parameters/IdempotencyKey"}],"summary":"Create a KVM snapshot","description":"Requires the `kvm:snapshots:write` scope and a unique `Idempotency-Key` header.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[A-Za-z0-9 -]+$"},"description":{"type":"string","maxLength":255}}}}}},"responses":{"200":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"201":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"operationId":"post_v1_kvm_instances_serviceId_snapshots"}},"/v1/kvm/instances/{serviceId}/snapshots/{snapshotId}":{"patch":{"tags":["KVM"],"parameters":[{"in":"path","required":true,"schema":{"type":"string","format":"uuid"},"name":"serviceId"},{"in":"path","name":"snapshotId","required":true,"schema":{"type":"string","maxLength":160}},{"$ref":"#/components/parameters/IdempotencyKey"}],"summary":"Update a KVM snapshot","description":"Requires the `kvm:snapshots:write` scope and a unique `Idempotency-Key` header.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","minProperties":1,"properties":{"name":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[A-Za-z0-9 -]+$"},"description":{"type":"string","maxLength":255}}}}}},"responses":{"200":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"201":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"operationId":"patch_v1_kvm_instances_serviceId_snapshots_snapshotId"},"delete":{"tags":["KVM"],"parameters":[{"in":"path","required":true,"schema":{"type":"string","format":"uuid"},"name":"serviceId"},{"in":"path","name":"snapshotId","required":true,"schema":{"type":"string","maxLength":160}},{"$ref":"#/components/parameters/IdempotencyKey"}],"summary":"Delete a KVM snapshot","description":"Requires `kvm:snapshots:write` and a unique `Idempotency-Key` header.","responses":{"200":{"description":"Snapshot deleted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"409":{"$ref":"#/components/responses/Error"}},"operationId":"delete_v1_kvm_instances_serviceId_snapshots_snapshotId"}},"/v1/kvm/instances/{serviceId}/snapshots/rollback":{"post":{"tags":["KVM"],"parameters":[{"in":"path","required":true,"schema":{"type":"string","format":"uuid"},"name":"serviceId"},{"$ref":"#/components/parameters/IdempotencyKey"}],"summary":"Rollback a KVM snapshot","description":"Requires the `kvm:snapshots:write` scope and a unique `Idempotency-Key` header.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["snapshotId"],"properties":{"snapshotId":{"type":"string","maxLength":160}}}}}},"responses":{"200":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"201":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}},"operationId":"post_v1_kvm_instances_serviceId_snapshots_rollback"}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"KMERHOSTING_API_KEY or OAuth access token","description":"`Authorization: Bearer kh_live_...` or a user-scoped `kh_oauth_...` token."}},"parameters":{"IdempotencyKey":{"in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string","minLength":8,"maxLength":128,"pattern":"^[A-Za-z0-9._:-]+$"}}},"schemas":{"Envelope":{"type":"object","required":["data","request_id"],"properties":{"data":{},"request_id":{"type":"string","format":"uuid"}}},"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string","format":"uuid"}}}}},"PublicDomainSearchError":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string","examples":["search_rate_limited"]},"message":{"type":"string"}}},"PublicDomainProviderAttribute":{"type":"object","required":["key","options","isRequired"],"properties":{"key":{"type":"string"},"type":{"type":"string"},"options":{"type":"array","items":{"type":"string"}},"isRequired":{"type":"boolean"},"description":{"type":"string"}}},"PublicDomainCatalogPrice":{"type":"object","required":["tld","registration_price_usd","renewal_price_usd","transfer_price_usd"],"properties":{"tld":{"type":"string","examples":[".com"]},"popular":{"type":"boolean"},"is_promo":{"type":"boolean"},"registration_price_usd":{"type":["number","null"]},"renewal_price_usd":{"type":["number","null"]},"transfer_price_usd":{"type":["number","null"]},"restore_price_usd":{"type":["number","null"]},"min_years":{"type":"integer"},"max_years":{"type":"integer"},"registration_periods":{"type":"array","items":{"type":"integer"}},"renewal_periods":{"type":"array","items":{"type":"integer"}},"transfer_periods":{"type":"array","items":{"type":"integer"}},"supports_privacy":{"type":"boolean"},"provider_attributes":{"type":"array","items":{"$ref":"#/components/schemas/PublicDomainProviderAttribute"}}}},"PublicDomainRegistrarResult":{"type":"object","required":["domainName","available","isAvailable","status","availabilitySource"],"properties":{"domainName":{"type":"string"},"available":{"type":"boolean"},"isAvailable":{"type":"boolean"},"status":{"type":"string","enum":["available","unavailable","unknown","unsupported"]},"isPremium":{"type":"boolean"},"customerPriceUsd":{"type":["number","null"]},"availabilitySource":{"type":"string","enum":["ote","production"]},"error":{"type":["string","null"]}}},"PublicDomainSearchResult":{"type":"object","required":["domainName","registrar","price"],"properties":{"domainName":{"type":"string"},"registrar":{"$ref":"#/components/schemas/PublicDomainRegistrarResult"},"price":{"anyOf":[{"$ref":"#/components/schemas/PublicDomainCatalogPrice"},{"type":"null"}]}}},"PublicDomainSearchResponse":{"type":"object","required":["results","bulkSearch","availabilitySource","registrarEnvironment","requested","accepted","invalid","unsupported","generatedAt"],"properties":{"results":{"type":"array","maxItems":20,"items":{"$ref":"#/components/schemas/PublicDomainSearchResult"}},"bulkSearch":{"type":"boolean"},"availabilitySource":{"type":"string","enum":["ote","production"]},"registrarEnvironment":{"type":"string","enum":["ote","production"]},"requested":{"type":"integer"},"accepted":{"type":"integer","maximum":20},"invalid":{"type":"array","items":{"type":"string"}},"unsupported":{"type":"integer"},"generatedAt":{"type":"string","format":"date-time"}}}},"responses":{"Error":{"description":"API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}