{"openapi":"3.0.3","info":{"title":"DevStorage Public API","description":"Customer-facing REST API for programmatic domain, handle, DNS and order management.\n\nAll responses use the envelope `{ success, data?, message?, errors?, meta? }`.\n\nAuthentication: send your API token in the `X-API-Token` header or as `Authorization: Token dsr_...`.\n\n## Organizations\n\nResources belong to an organization, not to a person. Your token is bound to one organization and every call acts inside it — see the security scheme for details.\n\n## Scope of this API\n\nCovered: domains, handles, domain DNS, Premium DNS zones, e-mail, cloud servers and their project resources, webspaces, SSL certificates, orders, account, tokens and webhooks. Not exposed: Microsoft licences and monitoring. Webmail single sign-on is portal-only.\n\nAlso includes **Cloud Servers** (`/servers`), **Webspaces** (`/webspaces`) and **SSL Certificates** (`/ssl-certificates`).","version":"1.0.0","contact":{"name":"DevStorage Support","url":"https://cloud.devstorage.eu"}},"servers":[{"url":"http://localhost:3000/api/public/v1","description":"Local development"},{"url":"https://cloud.devstorage.eu/api/public/v1","description":"Production"}],"tags":[{"name":"Account","description":"Authenticated account profile"},{"name":"Tokens","description":"API token metadata (creation via web portal only)"},{"name":"Domains","description":"Domain availability, registration, transfer and lifecycle"},{"name":"Handles","description":"DENIC-conform contact handles (registrant/admin/tech/zone)"},{"name":"DNS","description":"Nameserver and DNS record management per domain"},{"name":"Orders","description":"Order history"},{"name":"Servers","description":"Cloud servers (VPS) — packages, lifecycle, power, console"},{"name":"Server Project","description":"Project-scoped compute resources (IPs, firewalls, volumes, …)"},{"name":"Webspaces","description":"Managed web hosting (Plesk) — packages, provisioning, mail, FTP, DB"},{"name":"SSL Certificates","description":"DV SSL certificates — product catalog, issuance, DCV validation, download, renewal and revocation"},{"name":"Project Volumes","description":"Block storage volumes in the compute project."},{"name":"Project Static IPs","description":"Static IP addresses in the compute project."},{"name":"Project Firewalls","description":"Firewalls in the compute project."},{"name":"Project Private Networks","description":"Private networks in the compute project."},{"name":"Project BGP Sessions","description":"BGP sessions in the compute project."},{"name":"Project Snapshots","description":"Server snapshots in the compute project."},{"name":"Project Backups","description":"Server backups in the compute project."},{"name":"Project DDoS Incidents","description":"Read-only DDoS incident history."},{"name":"Webhooks","description":"Outbound webhooks. The signing secret is returned in clear text exactly once — when the endpoint is created and when the secret is rotated."},{"name":"Premium DNS","description":"Standalone DNS zones. Zones linked to a domain you hold are managed through the `/dns/{id}/records` endpoints instead."},{"name":"E-Mail","description":"Mail subscriptions, mailboxes and aliases. Webmail single sign-on is portal-only and deliberately not exposed to API tokens."}],"security":[{"ApiTokenAuth":[]}],"paths":{"/account":{"get":{"tags":["Account"],"summary":"Get authenticated account","operationId":"getAccount","responses":{"200":{"description":"Account profile","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Account"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}},"description":"Returns the authenticated account.\n\n`effectiveOrganization` is the organization **this token** acts in — the only one that matters for API calls. It is derived from the token's fixed binding, not from anything you send.\n\n`organizations` lists every organization the account belongs to; a token still only reaches the one it is bound to.\n\n`activeOrganizationId` reflects the last organization chosen in the web portal and is irrelevant to token calls — do not branch on it."}},"/tokens":{"get":{"tags":["Tokens"],"summary":"List API tokens of this organization","description":"Lists the API tokens of the **organization this token is bound to** — not just the ones you created. A token belongs to the organization, so colleagues in the same organization see it here and can revoke it.\n\n### How the organization is determined\n\nNot by anything you send. Each token carries a fixed `organizationId`, chosen when it was created in the web portal. On every request the API resolves that binding and re-checks that the token's owner is still a member:\n\n| Situation | Result |\n|---|---|\n| Token bound, owner still a member | Request runs in that organization |\n| Token has no binding (issued before organizations) | `401 TOKEN_ORG_MISSING` — create a new token |\n| Owner lost membership | `401 TOKEN_ORG_MEMBERSHIP_REVOKED` — takes effect immediately, no rotation needed |\n\nThere is no per-request override: no header, no query parameter, and switching organizations in the web portal does not move existing tokens. A script therefore always acts in the organization its token was created in. To act elsewhere, create a token there.\n\nCall `GET /account` and read `effectiveOrganization` to see which organization the current token acts in.\n\nOnly masked previews are returned; the full token value is shown exactly once at creation and cannot be read back.","operationId":"listTokens","responses":{"200":{"description":"Token list","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ApiToken"}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/domains/check":{"get":{"tags":["Domains"],"summary":"Check domain availability","operationId":"checkDomainAvailability","parameters":[{"name":"domain","in":"query","required":true,"schema":{"type":"string","example":"example.de"},"description":"Full domain name to check"}],"responses":{"200":{"description":"Availability result","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/DomainAvailability"}}}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/domains/check/bulk":{"post":{"tags":["Domains"],"summary":"Bulk domain availability check","operationId":"checkDomainAvailabilityBulk","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["domains"],"properties":{"domains":{"type":"array","items":{"type":"string"},"example":["example.de","example.com"]}}}}}},"responses":{"200":{"description":"Map of domain name to availability result","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/DomainAvailability"}}}}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/domains":{"get":{"tags":["Domains"],"summary":"List domains","operationId":"listDomains","parameters":[{"$ref":"#/components/parameters/Page"},{"$ref":"#/components/parameters/Limit"},{"name":"search","in":"query","schema":{"type":"string"},"description":"Filter by domain name substring"},{"name":"status","in":"query","schema":{"$ref":"#/components/schemas/DomainStatus"},"description":"Filter by domain status"},{"name":"expiringWithinDays","in":"query","schema":{"type":"integer","minimum":1},"description":"Only domains expiring within N days (sorted by expiry ascending)"}],"responses":{"200":{"description":"Paginated domain list","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Domain"}},"meta":{"$ref":"#/components/schemas/PaginationMeta"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}},"post":{"tags":["Domains"],"summary":"Register a domain","description":"Requires legal consent confirmations. May return `pendingAdminApproval` instead of a domain when manual approval is required.","operationId":"registerDomain","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterDomainRequest"}}}},"responses":{"201":{"description":"Domain registration initiated","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"oneOf":[{"$ref":"#/components/schemas/Domain"},{"$ref":"#/components/schemas/RegisterPendingAdminResponse"}]}}}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/InsufficientCredits"}}}},"/domains/transfer-in":{"post":{"tags":["Domains"],"summary":"Initiate inbound domain transfer","operationId":"initiateTransferIn","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransferInRequest"}}}},"responses":{"201":{"description":"Transfer initiated","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Domain"}}}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/InsufficientCredits"},"409":{"$ref":"#/components/responses/Conflict"}}}},"/domains/{id}":{"get":{"tags":["Domains"],"summary":"Get domain details","operationId":"getDomain","parameters":[{"$ref":"#/components/parameters/DomainId"}],"responses":{"200":{"description":"Domain with handles and nameservers","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/DomainDetail"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}}},"put":{"tags":["Domains"],"summary":"Update domain settings","description":"Update auto-renew, transfer lock, contact handles and/or nameservers.","operationId":"updateDomain","parameters":[{"$ref":"#/components/parameters/DomainId"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDomainRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/EmptySuccess"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"}}}},"/domains/{id}/renew":{"post":{"tags":["Domains"],"summary":"Renew domain","operationId":"renewDomain","parameters":[{"$ref":"#/components/parameters/DomainId"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"years":{"type":"integer","minimum":1,"maximum":10,"default":1}}}}}},"responses":{"200":{"$ref":"#/components/responses/EmptySuccess"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/InsufficientCredits"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/domains/{id}/transfer-in/retry":{"post":{"tags":["Domains"],"summary":"Retry failed inbound transfer","description":"Only available for domains in `ERROR` status after a failed transfer-in.","operationId":"retryTransferIn","parameters":[{"$ref":"#/components/parameters/DomainId"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["authCode"],"properties":{"authCode":{"type":"string"},"nameservers":{"type":"array","items":{"type":"string"}}}}}}},"responses":{"200":{"$ref":"#/components/responses/EmptySuccess"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/domains/{id}/transfer-out":{"post":{"tags":["Domains"],"summary":"Initiate outbound transfer","description":"Generates an auth code, disables auto-renew and schedules termination at period end.","operationId":"initiateTransferOut","parameters":[{"$ref":"#/components/parameters/DomainId"}],"responses":{"200":{"description":"Transfer-out started","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"object","properties":{"autoRenew":{"type":"boolean","example":false}}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/domains/{id}/transfer-out/cancel":{"post":{"tags":["Domains"],"summary":"Cancel outbound transfer","description":"Rotates auth code, revokes scheduled termination and reactivates the domain where possible.","operationId":"cancelTransferOut","parameters":[{"$ref":"#/components/parameters/DomainId"}],"responses":{"200":{"$ref":"#/components/responses/EmptySuccess"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/handles":{"get":{"tags":["Handles"],"summary":"List handles","operationId":"listHandles","responses":{"200":{"description":"Handle list","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Handle"}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}},"post":{"tags":["Handles"],"summary":"Create handle","operationId":"createHandle","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateHandleRequest"}}}},"responses":{"201":{"description":"Handle created","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Handle"}}}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/handles/{id}":{"get":{"tags":["Handles"],"summary":"Get handle","operationId":"getHandle","parameters":[{"$ref":"#/components/parameters/HandleId"}],"responses":{"200":{"description":"Handle details","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Handle"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}}},"put":{"tags":["Handles"],"summary":"Update handle","operationId":"updateHandle","parameters":[{"$ref":"#/components/parameters/HandleId"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateHandleRequest"}}}},"responses":{"200":{"description":"Handle updated","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Handle"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}}},"delete":{"tags":["Handles"],"summary":"Delete handle","operationId":"deleteHandle","parameters":[{"$ref":"#/components/parameters/HandleId"}],"responses":{"200":{"$ref":"#/components/responses/EmptySuccess"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/dns/{id}/nameservers":{"get":{"tags":["DNS"],"summary":"Get nameservers","operationId":"getNameservers","parameters":[{"$ref":"#/components/parameters/DomainId"}],"responses":{"200":{"description":"Current nameservers","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/NameserverResponse"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}}},"put":{"tags":["DNS"],"summary":"Update nameservers","operationId":"updateNameservers","parameters":[{"$ref":"#/components/parameters/DomainId"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["nameservers"],"properties":{"nameservers":{"type":"array","minItems":2,"items":{"type":"string"},"example":["ns1.example.net","ns2.example.net"]}}}}}},"responses":{"200":{"description":"Nameservers updated","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"object","properties":{"nameservers":{"type":"array","items":{"type":"string"}}}}}}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/dns/{id}/registrar-hosted-dns":{"post":{"tags":["DNS"],"summary":"Switch to registrar-hosted DNS","description":"Sets up the DNS zone at the registrar and switches nameservers to the portal default configuration.","operationId":"switchToRegistrarHostedDns","parameters":[{"$ref":"#/components/parameters/DomainId"}],"responses":{"200":{"description":"DNS zone configured","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/NameserverResponse"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"501":{"$ref":"#/components/responses/NotImplemented"}}}},"/dns/{id}/records":{"get":{"tags":["DNS"],"summary":"List DNS records","operationId":"listDnsRecords","parameters":[{"$ref":"#/components/parameters/DomainId"},{"name":"reconcile","in":"query","schema":{"type":"boolean"},"description":"When true, synchronizes with the registrar before returning records"}],"responses":{"200":{"description":"DNS record list","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/DnsRecord"}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}}},"post":{"tags":["DNS"],"summary":"Add DNS record","operationId":"addDnsRecord","parameters":[{"$ref":"#/components/parameters/DomainId"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DnsRecordInput"}}}},"responses":{"201":{"description":"Record created","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/DnsRecord"}}}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/dns/{id}/records/sync":{"post":{"tags":["DNS"],"summary":"Synchronize DNS records","description":"Reconciles local records with the registrar and returns the updated list.","operationId":"syncDnsRecords","parameters":[{"$ref":"#/components/parameters/DomainId"}],"responses":{"200":{"description":"Synchronized records","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/DnsRecord"}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/dns/{id}/records/{recordId}":{"put":{"tags":["DNS"],"summary":"Update DNS record","operationId":"updateDnsRecord","parameters":[{"$ref":"#/components/parameters/DomainId"},{"$ref":"#/components/parameters/RecordId"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DnsRecordInput"}}}},"responses":{"200":{"description":"Record updated","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/DnsRecord"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}}},"delete":{"tags":["DNS"],"summary":"Delete DNS record","operationId":"deleteDnsRecord","parameters":[{"$ref":"#/components/parameters/DomainId"},{"$ref":"#/components/parameters/RecordId"}],"responses":{"200":{"$ref":"#/components/responses/EmptySuccess"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/orders":{"get":{"tags":["Orders"],"summary":"List orders","operationId":"listOrders","parameters":[{"$ref":"#/components/parameters/Page"},{"$ref":"#/components/parameters/Limit"},{"name":"status","in":"query","schema":{"$ref":"#/components/schemas/OrderStatus"}},{"name":"type","in":"query","schema":{"$ref":"#/components/schemas/OrderType"}}],"responses":{"200":{"description":"Paginated order list","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Order"}},"meta":{"$ref":"#/components/schemas/PaginationMeta"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/orders/{id}":{"get":{"tags":["Orders"],"summary":"Get order","operationId":"getOrder","parameters":[{"$ref":"#/components/parameters/OrderId"}],"responses":{"200":{"description":"Order details","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Order"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/servers/packages":{"get":{"tags":["Servers"],"summary":"List server packages","operationId":"listServerPackages","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/VpsPackage"}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/servers/shop-options":{"get":{"tags":["Servers"],"summary":"Shop configuration (terms, addons)","operationId":"getServerShopOptions","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"object"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/servers/quote":{"post":{"tags":["Servers"],"summary":"Quote server order","operationId":"quoteServerOrder","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"object"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/servers/price-preview":{"post":{"tags":["Servers"],"summary":"Preview order price","operationId":"previewServerOrderPrice","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"object"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/servers/installers":{"get":{"tags":["Servers"],"summary":"OS installers for package","parameters":[{"name":"packageId","in":"query","required":true,"schema":{"type":"string","format":"uuid"}}],"operationId":"listServerInstallers","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"array","items":{"type":"object"}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/servers/locations":{"get":{"tags":["Servers"],"summary":"Available locations for package","parameters":[{"name":"packageId","in":"query","required":true,"schema":{"type":"string","format":"uuid"}}],"operationId":"listServerLocations","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"array","items":{"type":"object"}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/servers":{"get":{"tags":["Servers"],"summary":"List my servers","operationId":"listServers","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/VpsServer"}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}},"post":{"tags":["Servers"],"summary":"Create server","operationId":"createServer","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/VpsServer"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/BadRequest"}}}},"/servers/{id}":{"get":{"tags":["Servers"],"summary":"Get server details","operationId":"getServer","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Server ID"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/VpsServer"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/servers/{id}/os-installers":{"get":{"tags":["Servers"],"summary":"OS installers for existing server","operationId":"listServerOsInstallers","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Server ID"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"array","items":{"type":"object"}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/servers/{id}/start":{"post":{"tags":["Servers"],"summary":"Start server","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Server ID"}],"responses":{"$ref":"#/components/responses/EmptySuccess"}}},"/servers/{id}/shutdown":{"post":{"tags":["Servers"],"summary":"Graceful shutdown","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Server ID"}],"responses":{"$ref":"#/components/responses/EmptySuccess"}}},"/servers/{id}/stop":{"post":{"tags":["Servers"],"summary":"Force stop","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Server ID"}],"responses":{"$ref":"#/components/responses/EmptySuccess"}}},"/servers/{id}/restart":{"post":{"tags":["Servers"],"summary":"Restart server","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Server ID"}],"responses":{"$ref":"#/components/responses/EmptySuccess"}}},"/servers/{id}/upgrade-options":{"get":{"tags":["Servers"],"summary":"List upgrade options","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Server ID"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"array","items":{"type":"object"}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/servers/{id}/upgrade":{"post":{"tags":["Servers"],"summary":"Upgrade server package","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Server ID"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"$ref":"#/components/responses/EmptySuccess"}}},"/servers/{id}/cancellation-options":{"get":{"tags":["Servers"],"summary":"Cancellation date options","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Server ID"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"object"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/servers/{id}/cancel":{"post":{"tags":["Servers"],"summary":"Request cancellation","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Server ID"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"$ref":"#/components/responses/EmptySuccess"}}},"/servers/{id}/revoke-cancel":{"post":{"tags":["Servers"],"summary":"Revoke pending cancellation","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Server ID"}],"responses":{"$ref":"#/components/responses/EmptySuccess"}}},"/servers/{id}/vnc":{"get":{"tags":["Servers"],"summary":"VNC console URL","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Server ID"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"object"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/servers/{id}/graphs":{"get":{"tags":["Servers"],"summary":"Performance graphs","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Server ID"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"object"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/servers/{id}/reinstall":{"post":{"tags":["Servers"],"summary":"Reinstall OS","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Server ID"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"$ref":"#/components/responses/EmptySuccess"}}},"/servers/{id}/reinstall-iso":{"post":{"tags":["Servers"],"summary":"Reinstall from ISO","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Server ID"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"$ref":"#/components/responses/EmptySuccess"}}},"/servers/{id}/tasks":{"get":{"tags":["Servers"],"summary":"List server tasks","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Server ID"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"array","items":{"type":"object"}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/servers/{id}/backup-toggle":{"post":{"tags":["Servers"],"summary":"Toggle backup addon","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Server ID"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"$ref":"#/components/responses/EmptySuccess"}}},"/servers/{id}/vnc-toggle":{"post":{"tags":["Servers"],"summary":"Toggle VNC access","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Server ID"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"$ref":"#/components/responses/EmptySuccess"}}},"/servers/{id}/rescue-toggle":{"post":{"tags":["Servers"],"summary":"Toggle rescue mode","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Server ID"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"$ref":"#/components/responses/EmptySuccess"}}},"/servers/me/project/tasks":{"get":{"tags":["Server Project"],"summary":"List project tasks","operationId":"listProjectTasks","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"array","items":{"type":"object"}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/servers/me/project/volume-zones":{"get":{"tags":["Server Project"],"summary":"List volume zones","operationId":"listVolumeZones","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"array","items":{"type":"object"}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/servers/me/project/iso-images/files":{"post":{"tags":["Server Project"],"summary":"Upload ISO file","requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"object"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/servers/me/project/iso-images":{"get":{"tags":["Server Project"],"summary":"List ISO images","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"array","items":{"type":"object"}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}},"post":{"tags":["Server Project"],"summary":"Create ISO image reference","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"object"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/BadRequest"}}}},"/servers/me/project/iso-images/{name}":{"get":{"tags":["Server Project"],"summary":"Get ISO image","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"},"description":"ISO name"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"object"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}},"delete":{"tags":["Server Project"],"summary":"Delete ISO image","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"},"description":"ISO name"}],"responses":{"$ref":"#/components/responses/EmptySuccess"}}},"/servers/me/project/ssh-keys":{"get":{"tags":["Server Project"],"summary":"List SSH keys","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"array","items":{"type":"object"}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}},"post":{"tags":["Server Project"],"summary":"Create SSH key","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"object"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/BadRequest"}}}},"/servers/me/project/ssh-keys/{id}":{"get":{"tags":["Server Project"],"summary":"Get SSH key","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"object"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}},"put":{"tags":["Server Project"],"summary":"Update SSH key","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"$ref":"#/components/responses/EmptySuccess"}},"delete":{"tags":["Server Project"],"summary":"Delete SSH key","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"$ref":"#/components/responses/EmptySuccess"}}},"/servers/me/project/snapshots/{name}/rollback":{"post":{"tags":["Server Project"],"summary":"Rollback snapshot","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"},"description":"Snapshot name"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"$ref":"#/components/responses/EmptySuccess"}}},"/servers/me/project/static-ips":{"get":{"tags":["Project Static IPs"],"summary":"List static IPs in the project","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ProjectStaticIp"}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}},"post":{"tags":["Project Static IPs"],"summary":"Create a static IP","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectStaticIpCreate"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProjectStaticIp"}}}]}}}},"400":{"description":"Validation error"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/servers/me/project/static-ips/{name}":{"get":{"tags":["Project Static IPs"],"summary":"Get a static IP","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"},"description":"Resource name inside the project."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProjectStaticIp"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"description":"Not found"}}},"put":{"tags":["Project Static IPs"],"summary":"Update static IP metadata","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"},"description":"Resource name inside the project."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectUpdate"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProjectStaticIp"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}},"delete":{"tags":["Project Static IPs"],"summary":"Delete a static IP","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"},"description":"Resource name inside the project."}],"responses":{"200":{"$ref":"#/components/responses/EmptySuccess"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/servers/me/project/static-ips/{name}/attach":{"post":{"tags":["Project Static IPs"],"summary":"Attach the static IP to a server","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"},"description":"Resource name inside the project."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectAttach"}}}},"responses":{"200":{"$ref":"#/components/responses/EmptySuccess"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/servers/me/project/static-ips/{name}/detach":{"post":{"tags":["Project Static IPs"],"summary":"Detach the static IP from a server","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"},"description":"Resource name inside the project."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectAttach"}}}},"responses":{"200":{"$ref":"#/components/responses/EmptySuccess"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/servers/me/project/firewalls":{"get":{"tags":["Project Firewalls"],"summary":"List firewalls in the project","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ProjectFirewall"}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}},"post":{"tags":["Project Firewalls"],"summary":"Create a firewall","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectFirewallCreate"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProjectFirewall"}}}]}}}},"400":{"description":"Validation error"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/servers/me/project/firewalls/{name}":{"get":{"tags":["Project Firewalls"],"summary":"Get a firewall","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"},"description":"Resource name inside the project."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProjectFirewall"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"description":"Not found"}}},"put":{"tags":["Project Firewalls"],"summary":"Update firewall metadata","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"},"description":"Resource name inside the project."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectUpdate"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProjectFirewall"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}},"delete":{"tags":["Project Firewalls"],"summary":"Delete a firewall","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"},"description":"Resource name inside the project."}],"responses":{"200":{"$ref":"#/components/responses/EmptySuccess"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/servers/me/project/firewalls/{name}/attach":{"post":{"tags":["Project Firewalls"],"summary":"Attach the firewall to a server","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"},"description":"Resource name inside the project."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectAttach"}}}},"responses":{"200":{"$ref":"#/components/responses/EmptySuccess"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/servers/me/project/firewalls/{name}/detach":{"post":{"tags":["Project Firewalls"],"summary":"Detach the firewall from a server","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"},"description":"Resource name inside the project."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectAttach"}}}},"responses":{"200":{"$ref":"#/components/responses/EmptySuccess"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/servers/me/project/volumes":{"get":{"tags":["Project Volumes"],"summary":"List volumes in the project","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ProjectVolume"}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}},"post":{"tags":["Project Volumes"],"summary":"Create a volume","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectVolumeCreate"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProjectVolume"}}}]}}}},"400":{"description":"Validation error"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/servers/me/project/volumes/{name}":{"get":{"tags":["Project Volumes"],"summary":"Get a volume","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"},"description":"Resource name inside the project."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProjectVolume"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"description":"Not found"}}},"put":{"tags":["Project Volumes"],"summary":"Update volume metadata","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"},"description":"Resource name inside the project."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectUpdate"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProjectVolume"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}},"delete":{"tags":["Project Volumes"],"summary":"Delete a volume","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"},"description":"Resource name inside the project."}],"responses":{"200":{"$ref":"#/components/responses/EmptySuccess"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/servers/me/project/volumes/{name}/attach":{"post":{"tags":["Project Volumes"],"summary":"Attach the volume to a server","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"},"description":"Resource name inside the project."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectAttach"}}}},"responses":{"200":{"$ref":"#/components/responses/EmptySuccess"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/servers/me/project/volumes/{name}/detach":{"post":{"tags":["Project Volumes"],"summary":"Detach the volume from a server","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"},"description":"Resource name inside the project."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectAttach"}}}},"responses":{"200":{"$ref":"#/components/responses/EmptySuccess"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/servers/me/project/bgp-sessions":{"get":{"tags":["Project BGP Sessions"],"summary":"List BGP sessions in the project","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ProjectBgpSession"}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}},"post":{"tags":["Project BGP Sessions"],"summary":"Create a BGP session","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectBgpSessionCreate"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProjectBgpSession"}}}]}}}},"400":{"description":"Validation error"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/servers/me/project/bgp-sessions/{name}":{"get":{"tags":["Project BGP Sessions"],"summary":"Get a BGP session","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"},"description":"Resource name inside the project."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProjectBgpSession"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"description":"Not found"}}},"put":{"tags":["Project BGP Sessions"],"summary":"Update BGP session metadata","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"},"description":"Resource name inside the project."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectUpdate"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProjectBgpSession"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}},"delete":{"tags":["Project BGP Sessions"],"summary":"Delete a BGP session","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"},"description":"Resource name inside the project."}],"responses":{"200":{"$ref":"#/components/responses/EmptySuccess"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/servers/me/project/bgp-sessions/{name}/attach":{"post":{"tags":["Project BGP Sessions"],"summary":"Attach the BGP session to a server","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"},"description":"Resource name inside the project."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectAttach"}}}},"responses":{"200":{"$ref":"#/components/responses/EmptySuccess"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/servers/me/project/bgp-sessions/{name}/detach":{"post":{"tags":["Project BGP Sessions"],"summary":"Detach the BGP session from a server","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"},"description":"Resource name inside the project."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectAttach"}}}},"responses":{"200":{"$ref":"#/components/responses/EmptySuccess"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/servers/me/project/snapshots":{"get":{"tags":["Project Snapshots"],"summary":"List snapshots in the project","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ProjectSnapshot"}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}},"post":{"tags":["Project Snapshots"],"summary":"Create a snapshot","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectSnapshotCreate"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProjectSnapshot"}}}]}}}},"400":{"description":"Validation error"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/servers/me/project/snapshots/{name}":{"get":{"tags":["Project Snapshots"],"summary":"Get a snapshot","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"},"description":"Resource name inside the project."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProjectSnapshot"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"description":"Not found"}}},"put":{"tags":["Project Snapshots"],"summary":"Update snapshot metadata","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"},"description":"Resource name inside the project."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectUpdate"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProjectSnapshot"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}},"delete":{"tags":["Project Snapshots"],"summary":"Delete a snapshot","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"},"description":"Resource name inside the project."}],"responses":{"200":{"$ref":"#/components/responses/EmptySuccess"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/servers/me/project/private-networks":{"get":{"tags":["Project Private Networks"],"summary":"List private networks in the project","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ProjectPrivateNetwork"}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}},"post":{"tags":["Project Private Networks"],"summary":"Create a private network","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectPrivateNetworkCreate"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProjectPrivateNetwork"}}}]}}}},"400":{"description":"Validation error"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/servers/me/project/private-networks/{name}":{"get":{"tags":["Project Private Networks"],"summary":"Get a private network","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"},"description":"Resource name inside the project."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProjectPrivateNetwork"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"description":"Not found"}}},"put":{"tags":["Project Private Networks"],"summary":"Update private network metadata","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"},"description":"Resource name inside the project."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectUpdate"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProjectPrivateNetwork"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}},"delete":{"tags":["Project Private Networks"],"summary":"Delete a private network","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"},"description":"Resource name inside the project."}],"responses":{"200":{"$ref":"#/components/responses/EmptySuccess"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/servers/me/project/private-networks/{name}/attach":{"post":{"tags":["Project Private Networks"],"summary":"Attach the private network to a server","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"},"description":"Resource name inside the project."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectAttach"}}}},"responses":{"200":{"$ref":"#/components/responses/EmptySuccess"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/servers/me/project/private-networks/{name}/detach":{"post":{"tags":["Project Private Networks"],"summary":"Detach the private network from a server","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"},"description":"Resource name inside the project."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectAttach"}}}},"responses":{"200":{"$ref":"#/components/responses/EmptySuccess"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/servers/me/project/backups":{"get":{"tags":["Project Backups"],"summary":"List backups in the project","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ProjectBackup"}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}},"post":{"tags":["Project Backups"],"summary":"Create a backup","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectBackupCreate"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProjectBackup"}}}]}}}},"400":{"description":"Validation error"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/servers/me/project/backups/{name}":{"get":{"tags":["Project Backups"],"summary":"Get a backup","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"},"description":"Resource name inside the project."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProjectBackup"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"description":"Not found"}}},"put":{"tags":["Project Backups"],"summary":"Update backup metadata","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"},"description":"Resource name inside the project."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectUpdate"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProjectBackup"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}},"delete":{"tags":["Project Backups"],"summary":"Delete a backup","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"},"description":"Resource name inside the project."}],"responses":{"200":{"$ref":"#/components/responses/EmptySuccess"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/webspaces/packages":{"get":{"tags":["Webspaces"],"summary":"List webspace packages","operationId":"listWebspacePackages","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/WebspacePackage"}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/webspaces":{"get":{"tags":["Webspaces"],"summary":"List my webspaces","operationId":"listWebspaces","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/WebspaceListResponse"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}},"post":{"tags":["Webspaces"],"summary":"Create webspace","operationId":"createWebspace","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["packageId","domainName"],"properties":{"packageId":{"type":"string","format":"uuid"},"domainName":{"type":"string"}}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Webspace"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/BadRequest"}}}},"/webspaces/{id}/cancellation-options":{"get":{"tags":["Webspaces"],"summary":"Cancellation options","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Server ID"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"object"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/webspaces/{id}/cancel":{"post":{"tags":["Webspaces"],"summary":"Request cancellation","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Server ID"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"$ref":"#/components/responses/EmptySuccess"}}},"/webspaces/{id}/revoke-cancel":{"post":{"tags":["Webspaces"],"summary":"Revoke cancellation","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Server ID"}],"responses":{"$ref":"#/components/responses/EmptySuccess"}}},"/webspaces/{id}/upgrade":{"post":{"tags":["Webspaces"],"summary":"Upgrade package","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Server ID"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"$ref":"#/components/responses/EmptySuccess"}}},"/webspaces/{id}/plesk-login":{"get":{"tags":["Webspaces"],"summary":"Plesk SSO login URL","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Server ID"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"object"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/webspaces/{id}/storage":{"get":{"tags":["Webspaces"],"summary":"Storage usage stats","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Server ID"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"object","properties":{"usedMb":{"type":"number","nullable":true},"limitMb":{"type":"number"}}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/webspaces/{id}/ftp-users":{"get":{"tags":["Webspaces"],"summary":"List FTP users","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Server ID"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"array","items":{"type":"object"}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}},"post":{"tags":["Webspaces"],"summary":"Create FTP user","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Server ID"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"object"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/BadRequest"}}}},"/webspaces/{id}/ftp-users/{ftpUserId}":{"delete":{"tags":["Webspaces"],"summary":"Delete FTP user","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Server ID"},{"name":"ftpUserId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"$ref":"#/components/responses/EmptySuccess"}}},"/webspaces/{id}/ftp-users/{ftpUserId}/password":{"patch":{"tags":["Webspaces"],"summary":"Reset FTP password","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Server ID"},{"name":"ftpUserId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"$ref":"#/components/responses/EmptySuccess"}}},"/webspaces/{id}/databases":{"get":{"tags":["Webspaces"],"summary":"List databases","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Server ID"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"array","items":{"type":"object"}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}},"post":{"tags":["Webspaces"],"summary":"Create database","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Server ID"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"object"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/BadRequest"}}}},"/webspaces/{id}/databases/{dbId}":{"delete":{"tags":["Webspaces"],"summary":"Delete database","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Server ID"},{"name":"dbId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"$ref":"#/components/responses/EmptySuccess"}}},"/webspaces/{id}/subdomains":{"get":{"tags":["Webspaces"],"summary":"List subdomains","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Server ID"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"array","items":{"type":"object"}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}},"post":{"tags":["Webspaces"],"summary":"Create subdomain","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Server ID"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"object"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/BadRequest"}}}},"/webspaces/{id}/subdomains/{subdomainId}":{"delete":{"tags":["Webspaces"],"summary":"Delete subdomain","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Server ID"},{"name":"subdomainId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"$ref":"#/components/responses/EmptySuccess"}}},"/webspaces/{id}/mailboxes":{"get":{"tags":["Webspaces"],"summary":"List mailboxes","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Server ID"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"array","items":{"type":"object"}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}},"post":{"tags":["Webspaces"],"summary":"Create mailbox","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Server ID"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"object"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/BadRequest"}}}},"/webspaces/{id}/mailboxes/{mailName}":{"delete":{"tags":["Webspaces"],"summary":"Delete mailbox","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Server ID"},{"name":"mailName","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"$ref":"#/components/responses/EmptySuccess"}}},"/webspaces/{id}/mailboxes/{mailName}/password":{"patch":{"tags":["Webspaces"],"summary":"Reset mailbox password","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Server ID"},{"name":"mailName","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"$ref":"#/components/responses/EmptySuccess"}}},"/ssl-certificates/products":{"get":{"tags":["SSL Certificates"],"summary":"List SSL products","description":"Active certificate products with customer pricing (gross/net, VAT).","operationId":"listSslProducts","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/SslProduct"}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/ssl-certificates/dcv-emails":{"get":{"tags":["SSL Certificates"],"summary":"List DCV approver email addresses","operationId":"listSslDcvEmails","parameters":[{"name":"domain","in":"query","required":true,"schema":{"type":"string"}},{"name":"productKey","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"array","items":{"type":"string"}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/ssl-certificates":{"get":{"tags":["SSL Certificates"],"summary":"List my SSL certificates","operationId":"listSslCertificates","parameters":[{"name":"page","in":"query","schema":{"type":"integer","default":1}},{"name":"limit","in":"query","schema":{"type":"integer","default":20}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/SslCertificate"}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}},"post":{"tags":["SSL Certificates"],"summary":"Request SSL certificate","description":"Issues a DV certificate. Requires completed onboarding. Billed from wallet or postpaid invoice.","operationId":"requestSslCertificate","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SslCertificateRequest"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/SslCertificate"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/BadRequest"}}}},"/ssl-certificates/{id}":{"get":{"tags":["SSL Certificates"],"summary":"Get SSL certificate","operationId":"getSslCertificate","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"SSL certificate ID"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/SslCertificate"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/ssl-certificates/{id}/download":{"get":{"tags":["SSL Certificates"],"summary":"Download certificate file","operationId":"downloadSslCertificate","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"SSL certificate ID"},{"name":"format","in":"query","schema":{"type":"string","enum":["CRT","CA_BUNDLE","PKCS7","ZIP","KEY"],"default":"CRT"}}],"responses":{"200":{"description":"Certificate file (binary)"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/BadRequest"}}}},"/ssl-certificates/{id}/sync":{"post":{"tags":["SSL Certificates"],"summary":"Sync certificate status from CA","description":"Refreshes validation/issuance status and DCV challenge details.","operationId":"syncSslCertificate","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"SSL certificate ID"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/SslCertificate"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/ssl-certificates/{id}/resend-dcv":{"post":{"tags":["SSL Certificates"],"summary":"Resend DCV validation","operationId":"resendSslDcv","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"SSL certificate ID"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"dcv":{"type":"array","items":{"$ref":"#/components/schemas/SslDcvInput"}}}}}}},"responses":{"$ref":"#/components/responses/EmptySuccess"}}},"/ssl-certificates/{id}/renew-price":{"get":{"tags":["SSL Certificates"],"summary":"Get renewal price","operationId":"getSslRenewPrice","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"SSL certificate ID"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"object","properties":{"price":{"type":"number"},"currency":{"type":"string"},"months":{"type":"integer"}}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/ssl-certificates/{id}/renew":{"post":{"tags":["SSL Certificates"],"summary":"Renew SSL certificate","operationId":"renewSslCertificate","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"SSL certificate ID"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/SslCertificate"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/ssl-certificates/{id}/revoke":{"post":{"tags":["SSL Certificates"],"summary":"Revoke SSL certificate","operationId":"revokeSslCertificate","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"SSL certificate ID"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SslRevokeRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/SslCertificate"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/servers/me/project/ddos-incidents":{"get":{"tags":["Project DDoS Incidents"],"summary":"List DDoS incidents for the project","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ProjectDdosIncident"}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/servers/me/project/ddos-incidents/{id}":{"get":{"tags":["Project DDoS Incidents"],"summary":"Get a DDoS incident","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProjectDdosIncident"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"description":"Not found"}}}},"/webhooks/events":{"get":{"tags":["Webhooks"],"summary":"List subscribable event types","description":"Use one of these values in `events`, or `\"*\"` to subscribe to everything.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"array","items":{"type":"string"}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/webhooks":{"get":{"tags":["Webhooks"],"summary":"List webhook endpoints","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/WebhookEndpoint"}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}},"post":{"tags":["Webhooks"],"summary":"Create a webhook endpoint","description":"The response carries `secret` in clear text. It is shown only here — store it now, it cannot be read back later.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointCreate"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/WebhookEndpointWithSecret"}}}]}}}},"400":{"description":"Invalid URL or no valid event type subscribed"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/webhooks/{id}":{"get":{"tags":["Webhooks"],"summary":"Get a webhook endpoint","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Webhook endpoint id."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/WebhookEndpoint"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"description":"Not found"}}},"put":{"tags":["Webhooks"],"summary":"Update a webhook endpoint","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Webhook endpoint id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointUpdate"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/WebhookEndpoint"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"description":"Not found"}}},"delete":{"tags":["Webhooks"],"summary":"Delete a webhook endpoint","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Webhook endpoint id."}],"responses":{"200":{"$ref":"#/components/responses/EmptySuccess"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"description":"Not found"}}}},"/webhooks/{id}/rotate-secret":{"post":{"tags":["Webhooks"],"summary":"Rotate the signing secret","description":"Returns the new secret in clear text once. The previous secret stops validating immediately.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Webhook endpoint id."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/WebhookEndpointWithSecret"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"description":"Not found"}}}},"/webhooks/{id}/deliveries":{"get":{"tags":["Webhooks"],"summary":"List recent deliveries","description":"Most recent first, capped at 100 entries.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Webhook endpoint id."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/WebhookDelivery"}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"description":"Not found"}}}},"/webhooks/{id}/deliveries/{deliveryId}/redeliver":{"post":{"tags":["Webhooks"],"summary":"Queue a delivery for another attempt","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Webhook endpoint id."},{"name":"deliveryId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/WebhookDelivery"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"description":"Not found"}}}},"/dns-zones/product-settings":{"get":{"tags":["Premium DNS"],"summary":"Get pricing and product settings for standalone zones","description":"What a standalone zone costs per month. Zones linked to a domain you hold are free.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/DnsProductSettings"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/dns-zones":{"get":{"tags":["Premium DNS"],"summary":"List DNS zones","parameters":[{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"name","in":"query","schema":{"type":"string"},"description":"Exact zone name."},{"name":"search","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/DnsZone"}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}},"post":{"tags":["Premium DNS"],"summary":"Create a standalone DNS zone","description":"Chargeable. Requires completed onboarding and an enabled DNS product.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DnsZoneCreate"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/DnsZone"}}}]}}}},"400":{"description":"Validation error"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"description":"Insufficient credit"}}}},"/dns-zones/{id}":{"get":{"tags":["Premium DNS"],"summary":"Get a DNS zone","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"DNS zone id."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/DnsZone"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"description":"Not found"}}},"delete":{"tags":["Premium DNS"],"summary":"Delete a DNS zone","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"DNS zone id."}],"responses":{"200":{"$ref":"#/components/responses/EmptySuccess"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"description":"Not found"}}}},"/dns-zones/{id}/premium-info":{"get":{"tags":["Premium DNS"],"summary":"Get premium/DNSSEC status of a zone","description":"Returns `null` for zones whose provider exposes no premium information.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"DNS zone id."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"allOf":[{"$ref":"#/components/schemas/DnsZonePremiumInfo"}],"nullable":true}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/dns-zones/{id}/premium-dnssec":{"put":{"tags":["Premium DNS"],"summary":"Enable or disable DNSSEC","description":"Only for zones carried as PREMIUM; anything else returns 400. Responds with the refreshed zone info.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"DNS zone id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DnsZoneDnssecUpdate"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/DnsZonePremiumInfo"}}}]}}}},"400":{"description":"Zone is not PREMIUM, or DNSSEC is unavailable for its provider"},"401":{"$ref":"#/components/responses/Unauthorized"},"503":{"description":"DNSSEC function not available"}}}},"/dns-zones/{id}/disconnect-provider":{"post":{"tags":["Premium DNS"],"summary":"Disconnect an external DNS provider from the zone","description":"Drops the local zone so the domain falls back to registrar DNS. The zone at the external provider is left untouched. Only for domain-linked zones — delete standalone zones instead.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"DNS zone id."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"object","properties":{"disconnected":{"type":"boolean"}}}}}]}}}},"400":{"description":"Zone has no external provider, or is standalone"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/dns-zones/domain/{domainId}/ensure":{"post":{"tags":["Premium DNS"],"summary":"Ensure a zone exists for a domain you hold","description":"Creates the domain-linked zone if it does not exist yet, and returns it either way.","parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/DnsZone"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/dns-zones/{id}/records":{"get":{"tags":["Premium DNS"],"summary":"List records in a zone","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"DNS zone id."},{"name":"reconcile","in":"query","schema":{"type":"string","enum":["1","true"]},"description":"Fetch live from the provider instead of the local copy."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/DnsRecord"}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}},"post":{"tags":["Premium DNS"],"summary":"Add a record","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"DNS zone id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DnsRecordWrite"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/DnsRecord"}}}]}}}},"400":{"description":"Validation error"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"description":"Insufficient credit"}}}},"/dns-zones/{id}/records/{recordId}":{"put":{"tags":["Premium DNS"],"summary":"Update a record","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"DNS zone id."},{"name":"recordId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DnsRecordWrite"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/DnsRecord"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}},"delete":{"tags":["Premium DNS"],"summary":"Delete a record","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"DNS zone id."},{"name":"recordId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"$ref":"#/components/responses/EmptySuccess"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"description":"Not found"}}}},"/dns-zones/{id}/zonefile/export":{"get":{"tags":["Premium DNS"],"summary":"Export the zone as a zonefile","description":"Unlike every other endpoint here, this returns the raw BIND-style zonefile as a file download (`text/plain`, `Content-Disposition: attachment`) — not the JSON envelope.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"DNS zone id."}],"responses":{"200":{"description":"The zonefile","content":{"text/plain":{"schema":{"type":"string"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"description":"Not found"}}}},"/dns-zones/{id}/zonefile/import/preview":{"post":{"tags":["Premium DNS"],"summary":"Preview a zonefile import","description":"Returns what would change. Writes nothing. `mode` is ignored here.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"DNS zone id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DnsZonefileImport"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/DnsZonefileImportPreview"}}}]}}}},"400":{"description":"Missing or unparsable zonefile"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/dns-zones/{id}/zonefile/import":{"post":{"tags":["Premium DNS"],"summary":"Import a zonefile","description":"`merge` keeps existing records and skips duplicates; `replace` deletes every record in the zone first. Individual records that fail are reported in `failures` — the import itself still returns 200.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"DNS zone id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DnsZonefileImport"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/DnsZonefileImportResult"}}}]}}}},"400":{"description":"Missing zonefile, or invalid mode"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/dns-zones/{id}/monitor":{"get":{"tags":["Premium DNS"],"summary":"Get DNS monitoring state for the zone","description":"The stored result of the last run. Triggers no lookups.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"DNS zone id."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/DnsMonitorState"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/dns-zones/{id}/monitor/run":{"post":{"tags":["Premium DNS"],"summary":"Run a monitoring check now","description":"Rate-limited to one run per minute per zone.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"DNS zone id."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/DnsMonitorRun"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"description":"Ran less than a minute ago"}}}},"/dns-zones/{id}/monitor/settings":{"put":{"tags":["Premium DNS"],"summary":"Update monitoring settings","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"DNS zone id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DnsMonitorSettings"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/DnsMonitorSettingsState"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/email/packages":{"get":{"tags":["E-Mail"],"summary":"List available mail packages","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/EmailPackage"}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/email":{"get":{"tags":["E-Mail"],"summary":"List your mail subscriptions","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/EmailSubscription"}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}},"post":{"tags":["E-Mail"],"summary":"Order a mail package for a domain","description":"Chargeable. Requires completed onboarding and an enabled e-mail product.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailSubscriptionCreate"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/EmailSubscription"}}}]}}}},"400":{"description":"Validation error"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"description":"Insufficient credit"}}}},"/email/{id}":{"get":{"tags":["E-Mail"],"summary":"Get a subscription","description":"Includes mailboxes and aliases, and live storage usage when available.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"E-mail subscription id."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/EmailSubscription"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"description":"Not found"}}}},"/email/{id}/change-plan":{"post":{"tags":["E-Mail"],"summary":"Change the package","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"E-mail subscription id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailChangePlan"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/EmailSubscription"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/email/{id}/cancel":{"post":{"tags":["E-Mail"],"summary":"Request cancellation","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"E-mail subscription id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailCancelRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/EmailSubscription"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/email/{id}/revoke-cancel":{"post":{"tags":["E-Mail"],"summary":"Revoke a pending cancellation","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"E-mail subscription id."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/EmailSubscription"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/email/{id}/dns":{"get":{"tags":["E-Mail"],"summary":"Get the required DNS records and their status","description":"Returns the records the domain needs for mail delivery, plus the last check result. `mode` is `MANAGED` when the zone runs on our nameservers — only then can `/dns/apply` write them for you.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"E-mail subscription id."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/EmailDnsStatus"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/email/{id}/dns/apply":{"post":{"tags":["E-Mail"],"summary":"Apply the required DNS records automatically","description":"Only for zones under our management (`mode: MANAGED`); returns 400 otherwise.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"E-mail subscription id."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/EmailDnsApplyResult"}}}]}}}},"400":{"description":"Domain is not managed by us — add the records manually"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/email/{id}/dns/verify":{"post":{"tags":["E-Mail"],"summary":"Re-check the DNS records now","description":"Resolves MX, SPF, DKIM and DMARC live and updates the stored status.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"E-mail subscription id."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/EmailDnsVerifyResult"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/email/{id}/mailboxes":{"get":{"tags":["E-Mail"],"summary":"List mailboxes","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"E-mail subscription id."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/EmailMailbox"}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}},"post":{"tags":["E-Mail"],"summary":"Create a mailbox","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"E-mail subscription id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailMailboxCreate"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/EmailMailbox"}}}]}}}},"400":{"description":"Validation error"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"description":"Insufficient credit"}}}},"/email/{id}/mailboxes/{mid}":{"patch":{"tags":["E-Mail"],"summary":"Update a mailbox","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"E-mail subscription id."},{"name":"mid","in":"path","required":true,"schema":{"type":"string"},"description":"Mailbox id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailMailboxUpdate"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/EmailMailbox"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}},"delete":{"tags":["E-Mail"],"summary":"Delete a mailbox","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"E-mail subscription id."},{"name":"mid","in":"path","required":true,"schema":{"type":"string"},"description":"Mailbox id."}],"responses":{"200":{"$ref":"#/components/responses/EmptySuccess"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"description":"Not found"}}}},"/email/{id}/mailboxes/{mid}/password":{"post":{"tags":["E-Mail"],"summary":"Set the mailbox password","description":"The password is write-only; it is never returned by any endpoint.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"E-mail subscription id."},{"name":"mid","in":"path","required":true,"schema":{"type":"string"},"description":"Mailbox id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailMailboxPassword"}}}},"responses":{"200":{"$ref":"#/components/responses/EmptySuccess"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"description":"Not found"}}}},"/email/{id}/mailboxes/{mid}/migration":{"get":{"tags":["E-Mail"],"summary":"List IMAP migration jobs for the mailbox","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"E-mail subscription id."},{"name":"mid","in":"path","required":true,"schema":{"type":"string"},"description":"Mailbox id."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/EmailMigrationJob"}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}},"post":{"tags":["E-Mail"],"summary":"Start an IMAP migration into the mailbox","description":"Runs in the background. Poll the GET endpoint for `running`, `success` and `exitStatus`.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"E-mail subscription id."},{"name":"mid","in":"path","required":true,"schema":{"type":"string"},"description":"Mailbox id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailMigrationStart"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/EmailMigrationJob"}}}}]}}}},"400":{"description":"Validation error"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"description":"Insufficient credit"}}}},"/email/{id}/mailboxes/{mid}/migration/{jobId}":{"delete":{"tags":["E-Mail"],"summary":"Cancel a migration job","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"E-mail subscription id."},{"name":"mid","in":"path","required":true,"schema":{"type":"string"},"description":"Mailbox id."},{"name":"jobId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"$ref":"#/components/responses/EmptySuccess"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"description":"Not found"}}}},"/email/{id}/aliases":{"get":{"tags":["E-Mail"],"summary":"List aliases","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"E-mail subscription id."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/EmailAlias"}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}},"post":{"tags":["E-Mail"],"summary":"Create an alias","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"E-mail subscription id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailAliasWrite"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/EmailAlias"}}}]}}}},"400":{"description":"Validation error"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"description":"Insufficient credit"}}}},"/email/{id}/aliases/{aid}":{"patch":{"tags":["E-Mail"],"summary":"Update an alias","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"E-mail subscription id."},{"name":"aid","in":"path","required":true,"schema":{"type":"string"},"description":"Alias id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailAliasWrite"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/EmailAlias"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}},"delete":{"tags":["E-Mail"],"summary":"Delete an alias","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"E-mail subscription id."},{"name":"aid","in":"path","required":true,"schema":{"type":"string"},"description":"Alias id."}],"responses":{"200":{"$ref":"#/components/responses/EmptySuccess"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"description":"Not found"}}}},"/email/{id}/catch-all":{"get":{"tags":["E-Mail"],"summary":"Get the catch-all target","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"E-mail subscription id."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/EmailCatchAllStatus"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}},"put":{"tags":["E-Mail"],"summary":"Set or clear the catch-all target","description":"The target must be a mailbox of this subscription. Send `target: null` to switch the catch-all off.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"E-mail subscription id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailCatchAll"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/EmailCatchAllStatus"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"description":"Target mailbox does not exist in this package"}}}},"/email/{id}/spam-policy":{"get":{"tags":["E-Mail"],"summary":"Get the allow and block lists","description":"Senders are matched as a full address (`spam@example.com`) or a whole domain (`example.com`).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"E-mail subscription id."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/EmailSpamPolicies"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}},"post":{"tags":["E-Mail"],"summary":"Add a sender to the allow or block list","description":"Returns both lists in their new state. A sender already on the requested list yields 409.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"E-mail subscription id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailSpamPolicyWrite"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/EmailSpamPolicies"}}}]}}}},"400":{"description":"Validation error"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"description":"Insufficient credit"},"409":{"description":"Sender is already on that list"}}}},"/email/{id}/spam-policy/{prefid}":{"delete":{"tags":["E-Mail"],"summary":"Remove a sender from the allow or block list","description":"Returns both lists in their new state.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"E-mail subscription id."},{"name":"prefid","in":"path","required":true,"schema":{"type":"string"},"description":"Entry id from the allow/block list."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/EmailSpamPolicies"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"description":"Not found"}}}},"/email/{id}/blacklist":{"get":{"tags":["E-Mail"],"summary":"Get the blacklist status of the mail domain","description":"Returns the stored result of the last check. Never triggers a lookup — use `/blacklist/check` for that.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"E-mail subscription id."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/EmailBlacklistStatus"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/email/{id}/blacklist/check":{"post":{"tags":["E-Mail"],"summary":"Re-run the blacklist check now","description":"Queries the DNSBLs live for the domain and its MX addresses, then stores the result.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"E-mail subscription id."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/EmailBlacklistStatus"}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}}}},"components":{"securitySchemes":{"ApiTokenAuth":{"type":"apiKey","in":"header","name":"X-API-Token","description":"API token (`dsr_...`). Alternative: `Authorization: Token dsr_...`\n\n**Every token is bound to exactly one organization**, chosen when the token is created. All reads and writes act inside that organization — there is no way to switch it per request, and switching organizations in the web portal has no effect on tokens. To act in another organization, create a token there.\n\nA token stops working if its owner loses membership in the bound organization."}},"parameters":{"Page":{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1}},"Limit":{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},"DomainId":{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Domain ID"},"HandleId":{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Handle ID"},"RecordId":{"name":"recordId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"DNS record ID"},"OrderId":{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Order ID"}},"responses":{"BadRequest":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"Unauthorized":{"description":"Missing or invalid API token.\n\n`errors.code` distinguishes the organization-related cases:\n- `TOKEN_ORG_MISSING` — the token is not bound to an organization (legacy token issued before organizations; create a new one).\n- `TOKEN_ORG_MEMBERSHIP_REVOKED` — the token owner is no longer a member of the bound organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"NotFound":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"Conflict":{"description":"Conflict with current resource state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"InsufficientCredits":{"description":"Insufficient prepaid balance or postpaid limit exceeded","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiError"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/InsufficientCreditsPayload"}}}]}}}},"NotImplemented":{"description":"Operation not supported for this registrar","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"EmptySuccess":{"description":"Operation completed","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiSuccess"},{"type":"object","properties":{"data":{"nullable":true}}}]}}}}},"schemas":{"ApiSuccess":{"type":"object","required":["success"],"properties":{"success":{"type":"boolean","enum":[true]},"message":{"type":"string"},"meta":{"$ref":"#/components/schemas/PaginationMeta"}}},"ApiError":{"type":"object","required":["success"],"properties":{"success":{"type":"boolean","enum":[false]},"message":{"type":"string"},"errors":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}}}},"PaginationMeta":{"type":"object","properties":{"total":{"type":"integer"},"page":{"type":"integer"},"limit":{"type":"integer"},"totalPages":{"type":"integer"},"capped":{"type":"boolean"}}},"Account":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"email":{"type":"string","format":"email"},"firstName":{"type":"string"},"lastName":{"type":"string"},"company":{"type":"string","nullable":true},"phone":{"type":"string","nullable":true},"role":{"type":"string","enum":["USER","ADMIN"]},"emailVerified":{"type":"boolean"},"isBusinessCustomer":{"type":"boolean"},"billingCountry":{"type":"string"},"vatId":{"type":"string","nullable":true},"createdAt":{"type":"string","format":"date-time"},"_count":{"type":"object","properties":{"domains":{"type":"integer"},"handles":{"type":"integer"},"apiTokens":{"type":"integer"}}},"organizations":{"type":"array","description":"All organizations this account belongs to.","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"role":{"type":"string","enum":["OWNER","ADMIN","MEMBER"]},"billing":{"type":"boolean","description":"May view the wallet and manage payment."}}}},"effectiveOrganization":{"type":"object","nullable":true,"description":"The organization this API token acts in. Present only for token-authenticated calls.","properties":{"id":{"type":"string"},"name":{"type":"string","nullable":true},"role":{"type":"string","enum":["OWNER","ADMIN","MEMBER"]},"billing":{"type":"boolean"}}},"activeOrganizationId":{"type":"string","nullable":true,"description":"Last organization chosen in the web portal. Not authoritative for API calls."}}},"ApiToken":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"description":{"type":"string","nullable":true},"active":{"type":"boolean"},"tokenPreview":{"type":"string","example":"dsr_abcd...wxyz"},"lastUsedAt":{"type":"string","format":"date-time","nullable":true},"expiresAt":{"type":"string","format":"date-time","nullable":true},"createdAt":{"type":"string","format":"date-time"}}},"DomainAvailability":{"type":"object","properties":{"domain":{"type":"string"},"available":{"type":"boolean"},"price":{"type":"number","nullable":true},"currency":{"type":"string","example":"EUR"},"premium":{"type":"boolean"}}},"DomainStatus":{"type":"string","enum":["ACTIVE","PENDING","EXPIRED","TRANSFER_IN","TRANSFER_OUT","PENDING_DELETE","REDEMPTION","DELETED","ERROR"]},"Domain":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"tld":{"type":"string"},"status":{"$ref":"#/components/schemas/DomainStatus"},"displayStatus":{"type":"string","example":"ACTIVE"},"registeredAt":{"type":"string","format":"date-time","nullable":true},"expiresAt":{"type":"string","format":"date-time","nullable":true},"autoRenew":{"type":"boolean"},"privacyProtect":{"type":"boolean"},"transferLocked":{"type":"boolean"},"registryLabel":{"type":"string","example":"DENIC"},"canRenewOneYearInApp":{"type":"boolean"},"canCancelTransferIn":{"type":"boolean"},"registrantId":{"type":"string","format":"uuid","nullable":true},"adminId":{"type":"string","format":"uuid","nullable":true},"techId":{"type":"string","format":"uuid","nullable":true},"zoneId":{"type":"string","format":"uuid","nullable":true},"createdAt":{"type":"string","format":"date-time"}}},"HandleSummary":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","enum":["PERSON","ORG"]},"firstName":{"type":"string"},"lastName":{"type":"string"},"company":{"type":"string","nullable":true},"email":{"type":"string","format":"email"},"phone":{"type":"string"},"street":{"type":"string"},"zip":{"type":"string"},"city":{"type":"string"},"state":{"type":"string","nullable":true},"country":{"type":"string"}}},"DomainDetail":{"allOf":[{"$ref":"#/components/schemas/Domain"},{"type":"object","properties":{"nameservers":{"type":"array","items":{"type":"string"}},"registrant":{"$ref":"#/components/schemas/HandleSummary","nullable":true},"admin":{"$ref":"#/components/schemas/HandleSummary","nullable":true},"tech":{"$ref":"#/components/schemas/HandleSummary","nullable":true},"zone":{"$ref":"#/components/schemas/HandleSummary","nullable":true},"dnsRecords":{"type":"array","items":{"$ref":"#/components/schemas/DnsRecord"}}}}]},"DomainOrderLegalConsent":{"type":"object","required":["acceptDevstorageTerms","acceptRegistrarTerms","confirmWhoisAccuracy"],"properties":{"acceptDevstorageTerms":{"type":"boolean"},"acceptRegistrarTerms":{"type":"boolean"},"confirmWhoisAccuracy":{"type":"boolean"}}},"RegisterDomainRequest":{"type":"object","required":["domain","registrantId","legalConsent"],"properties":{"domain":{"type":"string","example":"example.de"},"years":{"type":"integer","minimum":1,"maximum":10,"default":1},"registrantId":{"type":"string","format":"uuid"},"adminId":{"type":"string","format":"uuid"},"techId":{"type":"string","format":"uuid"},"nameservers":{"type":"array","items":{"type":"string"}},"autoRenew":{"type":"boolean","default":true},"privacyProtect":{"type":"boolean","default":false},"legalConsent":{"$ref":"#/components/schemas/DomainOrderLegalConsent"}}},"RegisterPendingAdminResponse":{"type":"object","required":["pendingAdminApproval","orderId"],"properties":{"pendingAdminApproval":{"type":"boolean","enum":[true]},"orderId":{"type":"string","format":"uuid"}}},"TransferInRequest":{"type":"object","required":["domain","authCode","registrantId","legalConsent"],"properties":{"domain":{"type":"string"},"authCode":{"type":"string"},"registrantId":{"type":"string","format":"uuid"},"adminId":{"type":"string","format":"uuid"},"techId":{"type":"string","format":"uuid"},"nameservers":{"type":"array","items":{"type":"string"}},"legalConsent":{"$ref":"#/components/schemas/DomainOrderLegalConsent"}}},"UpdateDomainRequest":{"type":"object","properties":{"autoRenew":{"type":"boolean"},"transferLocked":{"type":"boolean"},"registrantId":{"type":"string","format":"uuid"},"adminId":{"type":"string","format":"uuid","nullable":true},"techId":{"type":"string","format":"uuid","nullable":true},"zoneId":{"type":"string","format":"uuid","nullable":true},"nameservers":{"type":"array","items":{"type":"string"}}}},"Handle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","enum":["PERSON","ORG"]},"salutation":{"type":"string","enum":["MR","MRS"],"nullable":true},"firstName":{"type":"string"},"lastName":{"type":"string"},"company":{"type":"string","nullable":true},"email":{"type":"string","format":"email"},"phone":{"type":"string"},"street":{"type":"string"},"zip":{"type":"string"},"city":{"type":"string"},"state":{"type":"string","nullable":true},"country":{"type":"string","default":"DE"},"userId":{"type":"string","format":"uuid"},"createdAt":{"type":"string","format":"date-time"}}},"CreateHandleRequest":{"type":"object","required":["type","firstName","lastName","email","phone","street","zip","city","state"],"properties":{"type":{"type":"string","enum":["PERSON","ORG"]},"salutation":{"type":"string","enum":["MR","MRS"]},"firstName":{"type":"string"},"lastName":{"type":"string"},"company":{"type":"string"},"email":{"type":"string","format":"email"},"phone":{"type":"string"},"street":{"type":"string"},"zip":{"type":"string"},"city":{"type":"string"},"state":{"type":"string","description":"Bundesland / state (required)"},"country":{"type":"string","default":"DE"}}},"UpdateHandleRequest":{"type":"object","properties":{"type":{"type":"string","enum":["PERSON","ORG"]},"salutation":{"type":"string","enum":["MR","MRS"]},"firstName":{"type":"string"},"lastName":{"type":"string"},"company":{"type":"string"},"email":{"type":"string","format":"email"},"phone":{"type":"string"},"street":{"type":"string"},"zip":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"},"country":{"type":"string"}}},"NameserverResponse":{"type":"object","properties":{"nameservers":{"type":"array","items":{"type":"string"}},"dnsEditable":{"type":"boolean"}}},"DnsType":{"type":"string","enum":["A","AAAA","CNAME","MX","TXT","NS","SRV","CAA","PTR"]},"DnsRecord":{"type":"object","properties":{"id":{"type":"string"},"dnsZoneId":{"type":"string"},"type":{"type":"string","description":"A, AAAA, CNAME, MX, TXT, NS, SRV, CAA …"},"name":{"type":"string"},"value":{"type":"string"},"ttl":{"type":"integer"},"priority":{"type":"integer","nullable":true},"proxied":{"type":"boolean","nullable":true,"description":"Cloudflare proxy state; null for providers without it."},"createdAt":{"type":"string","format":"date-time"}}},"DnsRecordInput":{"type":"object","required":["type","name","value"],"properties":{"type":{"$ref":"#/components/schemas/DnsType"},"name":{"type":"string","example":"@"},"value":{"type":"string","example":"203.0.113.10"},"ttl":{"type":"integer","default":3600},"priority":{"type":"integer","description":"Required for MX/SRV records"}}},"OrderType":{"type":"string","enum":["REGISTER","TRANSFER_IN","TRANSFER_OUT","RENEW","DELETE","WEBSPACE_CREATE","WEBSPACE_RENEW"]},"OrderStatus":{"type":"string","enum":["PENDING","PENDING_ADMIN_APPROVAL","PROCESSING","COMPLETED","FAILED","CANCELLED"]},"Order":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"$ref":"#/components/schemas/OrderType"},"status":{"$ref":"#/components/schemas/OrderStatus"},"userId":{"type":"string","format":"uuid"},"domainName":{"type":"string"},"tld":{"type":"string"},"years":{"type":"integer"},"price":{"type":"number"},"currency":{"type":"string","default":"EUR"},"createdAt":{"type":"string","format":"date-time"},"details":{"type":"string","nullable":true}}},"InsufficientCreditsPayload":{"type":"object","properties":{"requiredAmount":{"type":"number"},"availableBalance":{"type":"number"},"shortfall":{"type":"number"},"minTopUpEur":{"type":"number"},"suggestedTopUpAmount":{"type":"number"}}},"VpsPackage":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"netMonthlyPrice":{"type":"number"},"currency":{"type":"string","example":"EUR"},"cores":{"type":"integer"},"memoryMb":{"type":"integer"},"diskGb":{"type":"integer"},"active":{"type":"boolean"}}},"VpsServer":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"label":{"type":"string"},"hostname":{"type":"string","nullable":true},"status":{"type":"string"},"displayStatus":{"type":"string"},"ipv4":{"type":"string","nullable":true},"ipv6":{"type":"string","nullable":true},"autoRenew":{"type":"boolean"},"nextBillingAt":{"type":"string","format":"date-time"},"package":{"$ref":"#/components/schemas/VpsPackage"},"createdAt":{"type":"string","format":"date-time"}}},"WebspacePackage":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"storageMb":{"type":"integer"},"maxDomains":{"type":"integer"},"maxDatabases":{"type":"integer"},"maxMailboxes":{"type":"integer"},"netMonthlyPrice":{"type":"number"},"currency":{"type":"string","example":"EUR"}}},"Webspace":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"domainName":{"type":"string"},"status":{"type":"string"},"displayStatus":{"type":"string"},"autoRenew":{"type":"boolean"},"nextBillingAt":{"type":"string","format":"date-time"},"package":{"$ref":"#/components/schemas/WebspacePackage","nullable":true},"createdAt":{"type":"string","format":"date-time"}}},"WebspaceListResponse":{"type":"object","properties":{"account":{"type":"object","nullable":true,"properties":{"panelUrl":{"type":"string"},"login":{"type":"string"}}},"webspaces":{"type":"array","items":{"$ref":"#/components/schemas/Webspace"}}}},"SslDcvInput":{"type":"object","required":["commonName","method"],"properties":{"commonName":{"type":"string","example":"example.com"},"method":{"type":"string","enum":["DNS","EMAIL","FILE"]},"email":{"type":"string","format":"email","description":"Required when method is EMAIL"}}},"SslProduct":{"type":"object","properties":{"key":{"type":"string"},"displayName":{"type":"string"},"caBrand":{"type":"string"},"certificateType":{"type":"string","enum":["SINGLE_DOMAIN","MULTI_DOMAIN","WILDCARD"]},"validationType":{"type":"string","example":"DV"},"includedDomains":{"type":"integer"},"maxDomains":{"type":"integer","nullable":true},"periods":{"type":"array","items":{"type":"integer"},"description":"Available term lengths in months"},"price":{"type":"number","description":"Gross price (incl. VAT when applicable)"},"priceNet":{"type":"number"},"vatRate":{"type":"number","nullable":true},"currency":{"type":"string","example":"EUR"}}},"SslCertificate":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"commonName":{"type":"string"},"san":{"type":"array","items":{"type":"string"}},"status":{"type":"string","enum":["PENDING_VALIDATION","PROCESSING","ACTIVE","EXPIRED","REVOKED","FAILED"]},"validationType":{"type":"string"},"productKey":{"type":"string"},"productName":{"type":"string"},"caBrand":{"type":"string"},"certificateType":{"type":"string"},"autoRenew":{"type":"boolean"},"expiryDate":{"type":"string","format":"date-time","nullable":true},"startDate":{"type":"string","format":"date-time","nullable":true},"fingerprint":{"type":"string","nullable":true},"dcv":{"type":"array","items":{"$ref":"#/components/schemas/SslDcvInput"}},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}}},"SslCertificateRequest":{"type":"object","required":["productKey","commonName"],"properties":{"productKey":{"type":"string"},"commonName":{"type":"string","example":"example.com"},"san":{"type":"array","items":{"type":"string"}},"dcv":{"type":"array","items":{"$ref":"#/components/schemas/SslDcvInput"}},"autoRenew":{"type":"boolean","default":true},"csr":{"type":"string","description":"Optional PEM CSR; if omitted a key pair is generated server-side"},"periodMonths":{"type":"integer","description":"Term in months (must match product periods)"}}},"SslRevokeRequest":{"type":"object","properties":{"reason":{"type":"string","maxLength":255,"default":"unspecified"}}},"ProjectVolume":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string","nullable":true},"labels":{"type":"object","additionalProperties":{"type":"string"}},"annotations":{"type":"object","additionalProperties":{"type":"string"}},"phase":{"type":"string","nullable":true},"attachedToServerIds":{"type":"array","items":{"type":"string"},"description":"Panel server ids this resource is currently attached to."},"zone":{"type":"string"},"size":{"type":"integer","description":"Size in GB."},"class":{"type":"string","enum":["slow","fast"]},"state":{"type":"string","nullable":true},"mountPoint":{"type":"string","nullable":true}}},"ProjectVolumeCreate":{"type":"object","required":["zone","size","class"],"properties":{"name":{"type":"string","description":"Optional; generated when omitted."},"description":{"type":"string","nullable":true},"labels":{"type":"object","additionalProperties":{"type":"string"}},"annotations":{"type":"object","additionalProperties":{"type":"string"}},"zone":{"type":"string"},"size":{"type":"integer","minimum":10,"description":"Whole GB, at least 10."},"class":{"type":"string","enum":["slow","fast"]}}},"ProjectStaticIp":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string","nullable":true},"labels":{"type":"object","additionalProperties":{"type":"string"}},"annotations":{"type":"object","additionalProperties":{"type":"string"}},"phase":{"type":"string","nullable":true},"attachedToServerIds":{"type":"array","items":{"type":"string"},"description":"Panel server ids this resource is currently attached to."},"zone":{"type":"string"},"addressFamily":{"type":"string"},"address":{"type":"string","nullable":true},"subnet":{"type":"string","nullable":true},"gateway":{"type":"string","nullable":true},"reverseDns":{"type":"string","nullable":true,"description":"Read-only here — rDNS is a PTR record in the DNS API, not writable on compute."},"mtu":{"type":"integer","nullable":true}}},"ProjectStaticIpCreate":{"type":"object","required":["zone"],"properties":{"name":{"type":"string","description":"Optional; generated when omitted."},"description":{"type":"string","nullable":true},"labels":{"type":"object","additionalProperties":{"type":"string"}},"annotations":{"type":"object","additionalProperties":{"type":"string"}},"zone":{"type":"string"},"addressFamily":{"type":"string"}}},"ProjectFirewall":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string","nullable":true},"labels":{"type":"object","additionalProperties":{"type":"string"}},"annotations":{"type":"object","additionalProperties":{"type":"string"}},"phase":{"type":"string","nullable":true},"attachedToServerIds":{"type":"array","items":{"type":"string"},"description":"Panel server ids this resource is currently attached to."},"ruleCounts":{"type":"object","properties":{"ingressAllow":{"type":"integer"},"ingressDeny":{"type":"integer"},"egressAllow":{"type":"integer"},"egressDeny":{"type":"integer"}}}}},"ProjectFirewallCreate":{"type":"object","properties":{"name":{"type":"string","description":"Optional; generated when omitted."},"description":{"type":"string","nullable":true},"labels":{"type":"object","additionalProperties":{"type":"string"}},"annotations":{"type":"object","additionalProperties":{"type":"string"}}}},"ProjectPrivateNetwork":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string","nullable":true},"labels":{"type":"object","additionalProperties":{"type":"string"}},"annotations":{"type":"object","additionalProperties":{"type":"string"}},"phase":{"type":"string","nullable":true},"attachedToServerIds":{"type":"array","items":{"type":"string"},"description":"Panel server ids this resource is currently attached to."},"zone":{"type":"string"},"subnets":{"type":"array","items":{"type":"string"}}}},"ProjectPrivateNetworkCreate":{"type":"object","required":["zone"],"properties":{"name":{"type":"string","description":"Optional; generated when omitted."},"description":{"type":"string","nullable":true},"labels":{"type":"object","additionalProperties":{"type":"string"}},"annotations":{"type":"object","additionalProperties":{"type":"string"}},"zone":{"type":"string"},"subnets":{"type":"array","items":{"type":"string"}}}},"ProjectBgpSession":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string","nullable":true},"labels":{"type":"object","additionalProperties":{"type":"string"}},"annotations":{"type":"object","additionalProperties":{"type":"string"}},"phase":{"type":"string","nullable":true},"attachedToServerIds":{"type":"array","items":{"type":"string"},"description":"Panel server ids this resource is currently attached to."},"zone":{"type":"string","nullable":true},"staticIPs":{"type":"array","items":{"type":"string"}},"state":{"type":"string","nullable":true},"localAsn":{"type":"integer","nullable":true},"peers":{"type":"array","items":{"type":"object"}}}},"ProjectBgpSessionCreate":{"type":"object","properties":{"name":{"type":"string","description":"Optional; generated when omitted."},"description":{"type":"string","nullable":true},"labels":{"type":"object","additionalProperties":{"type":"string"}},"annotations":{"type":"object","additionalProperties":{"type":"string"}},"zone":{"type":"string"},"staticIPs":{"type":"array","items":{"type":"string"}}}},"ProjectSnapshot":{"type":"object","properties":{"name":{"type":"string"},"serverId":{"type":"string","nullable":true},"serverName":{"type":"string","nullable":true},"includeMemory":{"type":"boolean"},"state":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"description":{"type":"string","nullable":true},"labels":{"type":"object","additionalProperties":{"type":"string"}},"annotations":{"type":"object","additionalProperties":{"type":"string"}},"createdAt":{"type":"string","format":"date-time","nullable":true}}},"ProjectSnapshotCreate":{"type":"object","required":["serverId"],"properties":{"name":{"type":"string","description":"Optional; generated when omitted."},"description":{"type":"string","nullable":true},"labels":{"type":"object","additionalProperties":{"type":"string"}},"annotations":{"type":"object","additionalProperties":{"type":"string"}},"serverId":{"type":"string"},"includeMemory":{"type":"boolean"}}},"ProjectBackup":{"type":"object","properties":{"name":{"type":"string"},"serverId":{"type":"string","nullable":true},"serverName":{"type":"string","nullable":true},"state":{"type":"string","nullable":true},"progress":{"type":"integer","nullable":true},"size":{"type":"integer","nullable":true},"bootDiskSize":{"type":"integer","nullable":true},"phase":{"type":"string","nullable":true},"description":{"type":"string","nullable":true},"labels":{"type":"object","additionalProperties":{"type":"string"}},"annotations":{"type":"object","additionalProperties":{"type":"string"}},"createdAt":{"type":"string","format":"date-time","nullable":true}}},"ProjectBackupCreate":{"type":"object","required":["serverId"],"properties":{"name":{"type":"string","description":"Optional; generated when omitted."},"description":{"type":"string","nullable":true},"labels":{"type":"object","additionalProperties":{"type":"string"}},"annotations":{"type":"object","additionalProperties":{"type":"string"}},"serverId":{"type":"string"}}},"ProjectDdosIncident":{"type":"object","properties":{"id":{"type":"string"},"startTimestamp":{"type":"string","format":"date-time","nullable":true},"endTimestamp":{"type":"string","format":"date-time","nullable":true},"targetAddress":{"type":"string","nullable":true},"attackType":{"type":"string","nullable":true},"peakMbps":{"type":"number","nullable":true},"state":{"type":"string","nullable":true}}},"ProjectUpdate":{"type":"object","description":"Only metadata is updatable on project resources.","properties":{"description":{"type":"string","nullable":true},"labels":{"type":"object","additionalProperties":{"type":"string"}},"annotations":{"type":"object","additionalProperties":{"type":"string"}}}},"ProjectAttach":{"type":"object","required":["serverId"],"properties":{"serverId":{"type":"string","description":"Panel server id."}}},"WebhookEndpoint":{"type":"object","properties":{"id":{"type":"string"},"url":{"type":"string","format":"uri"},"description":{"type":"string","nullable":true},"events":{"type":"array","items":{"type":"string"},"description":"Subscribed event types, or `[\"*\"]` for all."},"active":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}}},"WebhookEndpointWithSecret":{"allOf":[{"$ref":"#/components/schemas/WebhookEndpoint"},{"type":"object","properties":{"secret":{"type":"string","description":"HMAC signing secret — returned exactly once and never again."}}}]},"WebhookEndpointCreate":{"type":"object","required":["url","events"],"properties":{"url":{"type":"string","format":"uri"},"events":{"type":"array","items":{"type":"string"},"minItems":1,"description":"At least one valid event type, or `[\"*\"]`."},"description":{"type":"string","nullable":true,"maxLength":500}}},"WebhookEndpointUpdate":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"events":{"type":"array","items":{"type":"string"}},"description":{"type":"string","nullable":true,"maxLength":500},"active":{"type":"boolean"}}},"WebhookDelivery":{"type":"object","properties":{"id":{"type":"string"},"endpointId":{"type":"string"},"eventType":{"type":"string"},"payload":{"type":"object"},"status":{"type":"string","enum":["PENDING","SUCCESS","FAILED"]},"attempts":{"type":"integer"},"maxAttempts":{"type":"integer"},"nextAttemptAt":{"type":"string","format":"date-time"},"responseStatus":{"type":"integer","nullable":true},"lastError":{"type":"string","nullable":true},"deliveredAt":{"type":"string","format":"date-time","nullable":true},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}}},"DnsZone":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["STANDALONE","DOMAIN_LINKED"]},"domainId":{"type":"string","nullable":true},"supplier":{"type":"string"},"monthlyPrice":{"type":"number"},"currency":{"type":"string"},"active":{"type":"boolean"},"monitoringEnabled":{"type":"boolean"},"nextBillingAt":{"type":"string","format":"date-time","nullable":true},"createdAt":{"type":"string","format":"date-time"}}},"DnsZoneCreate":{"type":"object","required":["name"],"properties":{"name":{"type":"string","description":"Zone name, e.g. `example.com`."}}},"DnsZoneDnssecUpdate":{"type":"object","required":["enabled"],"properties":{"enabled":{"type":"boolean"}}},"DnsRecordWrite":{"type":"object","required":["type","name","value"],"properties":{"type":{"type":"string"},"name":{"type":"string"},"value":{"type":"string"},"ttl":{"type":"integer","default":3600},"priority":{"type":"integer","nullable":true},"proxied":{"type":"boolean","nullable":true}}},"DnsZonefileImport":{"type":"object","required":["content"],"properties":{"content":{"type":"string","description":"Raw BIND-style zonefile."},"mode":{"type":"string","enum":["merge","replace"],"default":"merge","description":"Ignored by the preview endpoint."}}},"DnsMonitorSettings":{"type":"object","properties":{"monitoringEnabled":{"type":"boolean"},"dkimSelectors":{"type":"string","description":"Comma-separated selectors to check, e.g. `default,google`."}}},"DnsProductSettings":{"type":"object","properties":{"id":{"type":"string"},"standaloneMonthlyPrice":{"type":"number","format":"float","description":"Net price per month for one standalone zone."},"standaloneMonthlyPriceGross":{"type":"number","format":"float"},"currency":{"type":"string","example":"EUR"},"updatedAt":{"type":"string","format":"date-time"}}},"DnsZonePremiumInfo":{"type":"object","description":"Fields beyond `nameservers` and `dnssec` depend on the provider.","properties":{"zoneRef":{"type":"string","description":"The zone's id at the provider."},"service":{"type":"string","description":"e.g. `PREMIUM`, `BASIC`, `CLOUDFLARE`, `HETZNER`."},"status":{"type":"string"},"nameservers":{"type":"array","items":{"type":"string"}},"dnssec":{"type":"boolean"},"keyDataCount":{"type":"integer","description":"Number of published DNSSEC keys."},"queriesLast24h":{"type":"integer","description":"Only when the provider reports analytics."},"nxLast24h":{"type":"integer","description":"NXDOMAIN answers in the same window."}}},"DnsZonefileRecord":{"type":"object","properties":{"type":{"type":"string","description":"A, AAAA, CNAME, MX, TXT, NS or CAA — other types are skipped."},"name":{"type":"string","description":"`@` for the apex, otherwise the relative label."},"value":{"type":"string"},"ttl":{"type":"integer"},"priority":{"type":"integer","description":"MX only."}}},"DnsZonefileImportPreview":{"type":"object","properties":{"records":{"type":"array","items":{"$ref":"#/components/schemas/DnsZonefileRecord"}},"diff":{"type":"array","items":{"type":"object","properties":{"record":{"$ref":"#/components/schemas/DnsZonefileRecord"},"status":{"type":"string","enum":["new","duplicate"],"description":"duplicate = already in the zone with the same value."}}}},"warnings":{"type":"array","items":{"type":"string"}},"skipped":{"type":"array","description":"Lines that were parsed but will not be imported.","items":{"type":"object","properties":{"type":{"type":"string"},"name":{"type":"string"},"reason":{"type":"string"}}}}}},"DnsZonefileImportResult":{"type":"object","properties":{"created":{"type":"integer"},"skipped":{"type":"integer","description":"Duplicates in merge mode."},"failures":{"type":"array","items":{"type":"object","properties":{"record":{"$ref":"#/components/schemas/DnsZonefileRecord"},"error":{"type":"string"}}}},"warnings":{"type":"array","items":{"type":"string"}}}},"DnsMonitorState":{"type":"object","properties":{"overall":{"$ref":"#/components/schemas/DnsCheckStatus"},"lastMonitoredAt":{"type":"string","format":"date-time","nullable":true},"settings":{"$ref":"#/components/schemas/DnsMonitorSettingsState"},"checks":{"type":"array","items":{"$ref":"#/components/schemas/DnsMonitorCheck"}}}},"DnsMonitorSettingsState":{"type":"object","properties":{"monitoringEnabled":{"type":"boolean"},"dkimSelectors":{"type":"string","nullable":true}}},"DnsCheckStatus":{"type":"string","enum":["OK","WARN","FAIL","UNKNOWN"],"description":"UNKNOWN means the check has not run yet or could not be evaluated."},"DnsCheckType":{"type":"string","enum":["DELEGATION","REACHABILITY","MX","BLACKLIST","SPF","DMARC","DKIM","DNSSEC"]},"DnsMonitorCheck":{"type":"object","properties":{"id":{"type":"string"},"dnsZoneId":{"type":"string"},"checkType":{"$ref":"#/components/schemas/DnsCheckType"},"status":{"$ref":"#/components/schemas/DnsCheckStatus"},"summary":{"type":"string","description":"One-line result, ready to display."},"details":{"type":"string","nullable":true},"checkedAt":{"type":"string","format":"date-time"}}},"DnsMonitorRun":{"type":"object","description":"Result of the run that just happened — not the stored state.","properties":{"zoneId":{"type":"string"},"zoneName":{"type":"string"},"userId":{"type":"string"},"overall":{"$ref":"#/components/schemas/DnsCheckStatus"},"results":{"type":"array","items":{"$ref":"#/components/schemas/DnsMonitorRunCheck"}},"newlyDegraded":{"type":"array","items":{"$ref":"#/components/schemas/DnsMonitorRunCheck"},"description":"Checks that were healthy before this run and are not any more."}}},"DnsMonitorRunCheck":{"type":"object","properties":{"checkType":{"$ref":"#/components/schemas/DnsCheckType"},"status":{"$ref":"#/components/schemas/DnsCheckStatus"},"summary":{"type":"string"}}},"EmailPackage":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"mailboxCount":{"type":"integer","nullable":true},"aliasLimit":{"type":"integer","nullable":true},"storageMb":{"type":"integer","nullable":true},"monthlyNetPrice":{"type":"number"}}},"EmailSubscription":{"type":"object","properties":{"id":{"type":"string"},"packageId":{"type":"string"},"package":{"allOf":[{"$ref":"#/components/schemas/EmailPackage"}],"nullable":true},"mailDomain":{"type":"string"},"status":{"type":"string"},"dns":{"type":"object","properties":{"mode":{"type":"string","enum":["MANAGED","EXTERNAL"]},"status":{"type":"string","enum":["PENDING","OK","PARTIAL","FAILED"]},"checkedAt":{"type":"string","format":"date-time","nullable":true}}},"usage":{"type":"object","properties":{"mailboxesUsed":{"type":"integer"},"mailboxesTotal":{"type":"integer","nullable":true},"aliasesUsed":{"type":"integer"},"aliasesTotal":{"type":"integer","nullable":true}}},"autoRenew":{"type":"boolean"},"billingIntervalMonths":{"type":"integer"},"nextBillingAt":{"type":"string","format":"date-time","nullable":true},"cancellationRequestedAt":{"type":"string","format":"date-time","nullable":true},"cancellationEffectiveAt":{"type":"string","format":"date-time","nullable":true},"createdAt":{"type":"string","format":"date-time"},"mailboxes":{"type":"array","items":{"$ref":"#/components/schemas/EmailMailbox"},"description":"Only on the detail endpoint."},"aliases":{"type":"array","items":{"$ref":"#/components/schemas/EmailAlias"},"description":"Only on the detail endpoint."}}},"EmailSubscriptionCreate":{"type":"object","required":["packageId","mailDomain"],"properties":{"packageId":{"type":"string"},"mailDomain":{"type":"string"},"billingIntervalMonths":{"type":"integer","default":1}}},"EmailChangePlan":{"type":"object","required":["packageId"],"properties":{"packageId":{"type":"string"}}},"EmailCancelRequest":{"type":"object","properties":{"mode":{"type":"string","enum":["IMMEDIATE","SCHEDULED"]},"effectiveAt":{"type":"string","format":"date-time","nullable":true}}},"EmailMailbox":{"type":"object","properties":{"id":{"type":"string"},"localPart":{"type":"string"},"address":{"type":"string"},"displayName":{"type":"string","nullable":true},"quotaMb":{"type":"integer"},"usedMb":{"type":"integer","nullable":true,"description":"Live usage; null when the provider did not answer."},"active":{"type":"boolean"},"status":{"type":"string"},"createdAt":{"type":"string","format":"date-time"}}},"EmailMailboxCreate":{"type":"object","required":["localPart","password"],"properties":{"localPart":{"type":"string"},"password":{"type":"string","format":"password"},"displayName":{"type":"string","nullable":true},"quotaMb":{"type":"integer"}}},"EmailMailboxUpdate":{"type":"object","properties":{"displayName":{"type":"string","nullable":true},"quotaMb":{"type":"integer"},"active":{"type":"boolean"}}},"EmailMailboxPassword":{"type":"object","required":["password"],"properties":{"password":{"type":"string","format":"password"}}},"EmailMigrationStart":{"type":"object","required":["host","user","password"],"properties":{"host":{"type":"string","description":"Source IMAP server — hostname or IP."},"port":{"type":"integer","default":993,"minimum":1,"maximum":65535},"user":{"type":"string","description":"Login for the source mailbox."},"password":{"type":"string","format":"password","description":"Write-only; never returned."},"encryption":{"type":"string","enum":["SSL","TLS","PLAIN"],"default":"SSL"}}},"EmailAlias":{"type":"object","properties":{"id":{"type":"string"},"source":{"type":"string"},"gotos":{"type":"array","items":{"type":"string"},"description":"Destination addresses."},"active":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time"}}},"EmailAliasWrite":{"type":"object","required":["source","gotos"],"properties":{"source":{"type":"string"},"gotos":{"type":"array","items":{"type":"string"},"minItems":1},"active":{"type":"boolean"}}},"EmailCatchAll":{"type":"object","properties":{"target":{"type":"string","nullable":true,"description":"null clears the catch-all."}}},"EmailSpamPolicyWrite":{"type":"object","required":["list","from"],"properties":{"list":{"type":"string","enum":["wl","bl"],"description":"`wl` allows the sender, `bl` blocks it."},"from":{"type":"string","description":"Full address (`spam@example.com`) or a whole domain (`example.com`)."}}},"EmailSpamPolicies":{"type":"object","description":"Both lists, always returned together.","properties":{"whitelist":{"type":"array","items":{"$ref":"#/components/schemas/EmailSpamPolicyEntry"}},"blacklist":{"type":"array","items":{"$ref":"#/components/schemas/EmailSpamPolicyEntry"}}}},"EmailSpamPolicyEntry":{"type":"object","properties":{"id":{"type":"string","description":"Pass as `prefid` to the delete endpoint."},"from":{"type":"string"}}},"EmailCatchAllStatus":{"type":"object","properties":{"enabled":{"type":"boolean"},"target":{"type":"string","nullable":true,"description":"Receiving mailbox; null when disabled."}}},"EmailDnsStatus":{"type":"object","properties":{"mode":{"type":"string","enum":["MANAGED","EXTERNAL"],"description":"MANAGED = the zone runs on our nameservers."},"status":{"type":"string","enum":["PENDING","OK","PARTIAL","FAILED"]},"checkedAt":{"type":"string","format":"date-time","nullable":true},"mailServer":{"type":"string","nullable":true,"description":"Hostname the MX record must point to."},"records":{"type":"array","items":{"$ref":"#/components/schemas/EmailDnsRecord"}}}},"EmailDnsRecord":{"type":"object","properties":{"label":{"type":"string","description":"Human-readable purpose, e.g. `SPF`."},"type":{"type":"string","description":"MX, TXT, CNAME …"},"host":{"type":"string","description":"Fully qualified record name."},"value":{"type":"string"},"priority":{"type":"integer","nullable":true,"description":"MX only."},"ttl":{"type":"integer"}}},"EmailDnsApplyResult":{"type":"object","properties":{"applied":{"type":"object","nullable":true,"properties":{"created":{"type":"integer"},"skipped":{"type":"integer","description":"Already present with the right value."},"failures":{"type":"integer"}}},"status":{"type":"string","enum":["PENDING","OK","PARTIAL","FAILED"],"description":"Re-read after writing."}}},"EmailDnsVerifyResult":{"type":"object","properties":{"status":{"type":"string","enum":["OK","PARTIAL","FAILED"],"description":"Persistierter Status (debounced bei OK→defekt)."},"liveStatus":{"type":"string","enum":["OK","PARTIAL","FAILED"],"description":"Live-Ergebnis der aktuellen Abfrage."},"checks":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","enum":["mx","spf","dkim","dmarc"]},"ok":{"type":"boolean"}}}}}},"EmailBlacklistStatus":{"type":"object","properties":{"target":{"type":"string","description":"The mail domain that was checked."},"targetType":{"type":"string","enum":["DOMAIN","IP"]},"listed":{"type":"boolean","description":"True when at least one DNSBL lists the domain or an MX address."},"listings":{"type":"array","items":{"$ref":"#/components/schemas/EmailBlacklistListing"}},"checkedAt":{"type":"string","format":"date-time","nullable":true,"description":"null when no check has run yet."}}},"EmailBlacklistListing":{"type":"object","properties":{"zone":{"type":"string","description":"DNSBL that was queried, e.g. `zen.spamhaus.org`."},"label":{"type":"string"},"listed":{"type":"boolean"},"txt":{"type":"string","nullable":true,"description":"Reason given by the DNSBL, when it returns one."},"kind":{"type":"string","enum":["DOMAIN","IP"],"description":"DOMAIN = apex against DBL/SURBL; IP = MX address against IP DNSBLs."},"target":{"type":"string","description":"The domain or IP this entry refers to."},"mx":{"type":"string","description":"MX hostname the IP belongs to; only when kind is IP."}}},"EmailMigrationJob":{"type":"object","description":"Source password is never returned.","properties":{"id":{"type":"string"},"host":{"type":"string"},"user":{"type":"string"},"active":{"type":"boolean"},"running":{"type":"boolean"},"lastRun":{"type":"string","nullable":true},"success":{"type":"boolean","nullable":true,"description":"null until the first run finished."},"exitStatus":{"type":"string","nullable":true}}}}}}