{"components":{"securitySchemes":{"machineDPoP":{"description":"Client credentials with private_key_jwt, resource https://api.d0.eu/platform and DPoP-bound access tokens. Send Authorization: DPoP <access-token> plus a fresh ES256 DPoP proof; persist and retry the server nonce challenge once.","flows":{"clientCredentials":{"scopes":{"platform.audit.read":"platform.audit.read","platform.clusters.credentials":"platform.clusters.credentials","platform.clusters.read":"platform.clusters.read","platform.clusters.write":"platform.clusters.write","platform.dns.read":"platform.dns.read","platform.dns.write":"platform.dns.write","platform.domains.authcode":"platform.domains.authcode","platform.domains.read":"platform.domains.read","platform.domains.write":"platform.domains.write","platform.storage.credentials":"platform.storage.credentials","platform.storage.read":"platform.storage.read","platform.storage.write":"platform.storage.write","platform.usage.read":"platform.usage.read"},"tokenUrl":"https://auth.d0.eu/oauth2/token"}},"type":"oauth2"}},"schemas":{"ErrorModel":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://example.com/schemas/ErrorModel.json"],"format":"uri","readOnly":true,"type":"string"},"detail":{"description":"A human-readable explanation specific to this occurrence of the problem.","examples":["Property foo is required but is missing."],"type":"string"},"errors":{"description":"Optional list of individual error details","items":{"$ref":"#/components/schemas/ErrorDetail"},"type":["array","null"]},"instance":{"description":"A URI reference that identifies the specific occurrence of the problem.","examples":["https://example.com/error-log/abc123"],"format":"uri","type":"string"},"status":{"description":"HTTP status code","examples":[400],"format":"int64","type":"integer"},"title":{"description":"A short, human-readable summary of the problem type. This value should not change between occurrences of the error.","examples":["Bad Request"],"type":"string"},"type":{"default":"about:blank","description":"A URI reference to human-readable documentation for the error.","examples":["https://example.com/errors/example"],"format":"uri","type":"string"}},"type":"object"},"ErrorDetail":{"additionalProperties":false,"properties":{"location":{"description":"Where the error occurred, e.g. 'body.items[3].tags' or 'path.thing-id'","type":"string"},"message":{"description":"Error message text","type":"string"},"value":{"description":"The value at the given location"}},"type":"object"},"CreatedCredential":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://example.com/schemas/CreatedCredential.json"],"format":"uri","readOnly":true,"type":"string"},"credential":{"$ref":"#/components/schemas/Credential"},"secret_access_key":{"type":"string"}},"required":["credential","secret_access_key"],"type":"object"},"Credential":{"additionalProperties":false,"properties":{"access_key_id":{"type":"string"},"created_at":{"format":"date-time","type":"string"},"id":{"type":"string"},"name":{"type":"string"},"state":{"type":"string"},"write_access":{"type":"boolean"}},"required":["id","name","write_access","state","created_at"],"type":"object"},"ObjectStorageCreateCredentialInputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://example.com/schemas/ObjectStorageCreateCredentialInputBody.json"],"format":"uri","readOnly":true,"type":"string"},"name":{"maxLength":63,"minLength":2,"type":"string"},"write_access":{"type":"boolean"}},"required":["name","write_access"],"type":"object"},"ObjectStorageCredentialsOutputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://example.com/schemas/ObjectStorageCredentialsOutputBody.json"],"format":"uri","readOnly":true,"type":"string"},"credentials":{"items":{"$ref":"#/components/schemas/Credential"},"type":["array","null"]}},"required":["credentials"],"type":"object"},"Bucket":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://example.com/schemas/Bucket.json"],"format":"uri","readOnly":true,"type":"string"},"created_at":{"format":"date-time","type":"string"},"id":{"type":"string"},"name":{"type":"string"},"s3_name":{"type":"string"},"state":{"type":"string"}},"required":["id","name","s3_name","state","created_at"],"type":"object"},"ObjectStorageCreateBucketInputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://example.com/schemas/ObjectStorageCreateBucketInputBody.json"],"format":"uri","readOnly":true,"type":"string"},"name":{"maxLength":63,"minLength":2,"type":"string"}},"required":["name"],"type":"object"},"ObjectStorageBucketsOutputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://example.com/schemas/ObjectStorageBucketsOutputBody.json"],"format":"uri","readOnly":true,"type":"string"},"buckets":{"items":{"$ref":"#/components/schemas/Bucket"},"type":["array","null"]}},"required":["buckets"],"type":"object"},"Catalog":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://example.com/schemas/Catalog.json"],"format":"uri","readOnly":true,"type":"string"},"enabled":{"type":"boolean"},"endpoint":{"type":"string"},"limits":{"$ref":"#/components/schemas/Limits"},"region":{"type":"string"}},"required":["enabled","endpoint","region","limits"],"type":"object"},"Limits":{"additionalProperties":false,"properties":{"max_bucket_bytes":{"format":"int64","type":"integer"},"max_buckets":{"format":"int64","type":"integer"},"max_credentials_per_bucket":{"format":"int64","type":"integer"},"max_total_bytes":{"format":"int64","type":"integer"}},"required":["max_buckets","max_credentials_per_bucket","max_bucket_bytes","max_total_bytes"],"type":"object"},"SetNameserversInputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://example.com/schemas/SetNameserversInputBody.json"],"format":"uri","readOnly":true,"type":"string"},"nameservers":{"description":"Delegation nameservers","items":{"$ref":"#/components/schemas/NameserverInput"},"maxItems":13,"minItems":1,"type":["array","null"]}},"required":["nameservers"],"type":"object"},"NameserverInput":{"additionalProperties":false,"properties":{"host":{"description":"Nameserver hostname","type":"string"},"ipv4":{"description":"Optional IPv4 glue","type":"string"},"ipv6":{"description":"Optional IPv6 glue","type":"string"}},"required":["host"],"type":"object"},"RecordBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://example.com/schemas/RecordBody.json"],"format":"uri","readOnly":true,"type":"string"},"name":{"description":"Record name (FQDN)","type":"string"},"read_only":{"description":"True for platform-managed sets (SOA, apex NS) that cannot be edited","type":"boolean"},"records":{"description":"Record contents","items":{"type":"string"},"type":["array","null"]},"ttl":{"description":"Time-to-live in seconds","format":"int64","type":"integer"},"type":{"description":"Record type","type":"string"}},"required":["name","type","ttl","records","read_only"],"type":"object"},"RecordUpsertBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://example.com/schemas/RecordUpsertBody.json"],"format":"uri","readOnly":true,"type":"string"},"records":{"description":"Record contents for this name+type","items":{"type":"string"},"minItems":1,"type":["array","null"]},"ttl":{"description":"Time-to-live in seconds (default 3600)","format":"int64","maximum":604800,"minimum":60,"type":"integer"}},"required":["records"],"type":"object"},"ListRecordsOutputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://example.com/schemas/ListRecordsOutputBody.json"],"format":"uri","readOnly":true,"type":"string"},"records":{"description":"The zone's record sets","items":{"$ref":"#/components/schemas/RecordBody"},"type":["array","null"]}},"required":["records"],"type":"object"},"UpdateContactsInputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://example.com/schemas/UpdateContactsInputBody.json"],"format":"uri","readOnly":true,"type":"string"},"registrant":{"$ref":"#/components/schemas/RegistrantInput","description":"Domain registrant (owner). Personal data — minimized and never logged."}},"required":["registrant"],"type":"object"},"RegistrantInput":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://example.com/schemas/RegistrantInput.json"],"format":"uri","readOnly":true,"type":"string"},"city":{"description":"City","type":"string"},"company_name":{"type":"string"},"country":{"description":"ISO 3166-1 alpha-2 country code","maxLength":2,"minLength":2,"type":"string"},"email":{"description":"Registrant contact email","format":"email","type":"string"},"first_name":{"description":"Registrant given name","type":"string"},"last_name":{"description":"Registrant family name","type":"string"},"phone":{"description":"Registrant phone in canonical E.164, e.g. +49301234567","pattern":"^\\+[1-9][0-9]{1,14}$","type":"string"},"registration_data":{"$ref":"#/components/schemas/RegistrationData"},"state":{"type":"string"},"street":{"description":"Street address","type":"string"},"street_number":{"type":"string"},"zipcode":{"description":"Postal code","type":"string"}},"required":["first_name","last_name","email","phone","street","city","zipcode","country"],"type":"object"},"RegistrationData":{"additionalProperties":false,"properties":{"customer":{"additionalProperties":{"type":"string"},"type":"object"},"domain":{"additionalProperties":{"type":"string"},"type":"object"}},"type":"object"},"AuthCodeOutputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://example.com/schemas/AuthCodeOutputBody.json"],"format":"uri","readOnly":true,"type":"string"},"auth_code":{"description":"The EPP transfer auth code","type":"string"}},"required":["auth_code"],"type":"object"},"DomainBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://example.com/schemas/DomainBody.json"],"format":"uri","readOnly":true,"type":"string"},"created_at":{"description":"RFC 3339 creation time","type":"string"},"expires_at":{"description":"RFC 3339 expiry, when known","type":"string"},"fqdn":{"description":"The managed domain","type":"string"},"nameservers":{"description":"Delegation nameservers","items":{"type":"string"},"type":["array","null"]},"status":{"description":"Domain status","type":"string"},"updated_at":{"description":"RFC 3339 last-update time","type":"string"}},"required":["fqdn","status","created_at","updated_at"],"type":"object"},"ListDomainsOutputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://example.com/schemas/ListDomainsOutputBody.json"],"format":"uri","readOnly":true,"type":"string"},"domains":{"description":"The tenant's managed domains, newest first","items":{"$ref":"#/components/schemas/DomainBody"},"type":["array","null"]}},"required":["domains"],"type":"object"},"Usage":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://example.com/schemas/Usage.json"],"format":"uri","readOnly":true,"type":"string"},"by_product":{"items":{"$ref":"#/components/schemas/ProductUsage"},"type":["array","null"]},"collection_gaps_24h":{"format":"int64","type":"integer"},"coverage_from":{"format":"date-time","type":"string"},"covered_products":{"items":{"type":"string"},"type":["array","null"]},"daily":{"items":{"$ref":"#/components/schemas/DailyUsage"},"type":["array","null"]},"environment":{"enum":["production","test"],"type":"string"},"from":{"format":"date-time","type":"string"},"observed_at":{"format":"date-time","type":"string"},"totals":{"$ref":"#/components/schemas/Totals"},"until":{"format":"date-time","type":"string"}},"required":["environment","coverage_from","collection_gaps_24h","covered_products","from","until","observed_at","totals","by_product","daily"],"type":"object"},"Totals":{"additionalProperties":false,"properties":{"duration_ms":{"format":"double","type":"number"},"errors":{"format":"int64","type":"integer"},"rate_limited":{"format":"int64","type":"integer"},"requests":{"format":"int64","type":"integer"}},"required":["requests","errors","rate_limited","duration_ms"],"type":"object"},"DailyUsage":{"additionalProperties":false,"properties":{"day":{"type":"string"},"duration_ms":{"format":"double","type":"number"},"errors":{"format":"int64","type":"integer"},"rate_limited":{"format":"int64","type":"integer"},"requests":{"format":"int64","type":"integer"}},"required":["day","requests","errors","rate_limited","duration_ms"],"type":"object"},"ProductUsage":{"additionalProperties":false,"properties":{"duration_ms":{"format":"double","type":"number"},"errors":{"format":"int64","type":"integer"},"product":{"type":"string"},"rate_limited":{"format":"int64","type":"integer"},"requests":{"format":"int64","type":"integer"}},"required":["product","requests","errors","rate_limited","duration_ms"],"type":"object"},"Result":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://example.com/schemas/Result.json"],"format":"uri","readOnly":true,"type":"string"},"buckets":{"items":{"$ref":"#/components/schemas/RateLimitBucket"},"type":["array","null"]},"client_id":{"type":"string"},"environment":{"enum":["production","test"],"type":"string"},"observed_at":{"format":"date-time","type":"string"},"over_limit":{"type":"boolean"}},"required":["environment","client_id","observed_at","buckets","over_limit"],"type":"object"},"RateLimitBucket":{"additionalProperties":false,"properties":{"remaining":{"format":"int32","minimum":0,"type":"integer"},"requests_per_window":{"format":"int32","minimum":0,"type":"integer"},"reset_after_seconds":{"format":"int64","type":"integer"},"scope":{"enum":["organization","client"],"type":"string"},"window_seconds":{"format":"int64","type":"integer"}},"required":["scope","requests_per_window","window_seconds","remaining","reset_after_seconds"],"type":"object"},"ClusterBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://example.com/schemas/ClusterBody.json"],"format":"uri","readOnly":true,"type":"string"},"created_at":{"description":"RFC 3339 creation time","type":"string"},"currency":{"description":"ISO 4217 currency of price_cents","type":"string"},"endpoint":{"description":"Cluster API endpoint (when running)","type":"string"},"id":{"description":"Cluster ID","type":"string"},"name":{"description":"Cluster display name (a DNS label)","type":"string"},"offering":{"description":"Cluster placement product: shared_nodes or private_nodes","type":"string"},"price_cents":{"description":"Server-side monthly price in minor units","format":"int64","type":"integer"},"public_ipv4_address":{"description":"Reserved dedicated public IPv4 address","type":"string"},"ready":{"description":"Control plane ready + kubeconfig available","type":"boolean"},"spec":{"$ref":"#/components/schemas/SpecBody","description":"The cluster's resource spec"},"state":{"description":"Cluster state","type":"string"},"state_version":{"description":"Optimistic-concurrency version of the state","format":"int64","type":"integer"},"updated_at":{"description":"RFC 3339 last-update time","type":"string"}},"required":["id","name","spec","state","offering","state_version","ready","created_at","updated_at"],"type":"object"},"SpecBody":{"additionalProperties":false,"properties":{"memory_gib":{"description":"Guaranteed memory (GiB)","format":"int64","type":"integer"},"public_ipv4":{"description":"One dedicated public IPv4 address (EUR 1.50/month)","type":"boolean"},"storage_gib":{"description":"Provisioned storage (GiB)","format":"int64","type":"integer"},"vcpu":{"description":"Guaranteed vCPUs","format":"int64","type":"integer"}},"required":["vcpu","memory_gib","storage_gib","public_ipv4"],"type":"object"},"ResizeClusterInputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://example.com/schemas/ResizeClusterInputBody.json"],"format":"uri","readOnly":true,"type":"string"},"spec":{"$ref":"#/components/schemas/SpecReqBody","description":"Target spec; grow-only (a shrink or same-spec is rejected)"}},"required":["spec"],"type":"object"},"SpecReqBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://example.com/schemas/SpecReqBody.json"],"format":"uri","readOnly":true,"type":"string"},"memory_gib":{"description":"Guaranteed memory in GiB (2–256; at most 16×vcpu)","examples":[16],"format":"int64","maximum":256,"minimum":2,"type":"integer"},"public_ipv4":{"description":"Add one dedicated public IPv4 address when available","type":"boolean"},"storage_gib":{"description":"Provisioned storage in GiB (10–4096)","examples":[100],"format":"int64","maximum":4096,"minimum":10,"type":"integer"},"vcpu":{"description":"Guaranteed vCPUs (1–64)","examples":[4],"format":"int64","maximum":64,"minimum":1,"type":"integer"}},"required":["vcpu","memory_gib","storage_gib"],"type":"object"},"KubeconfigOutputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://example.com/schemas/KubeconfigOutputBody.json"],"format":"uri","readOnly":true,"type":"string"},"kubeconfig":{"description":"Cluster kubeconfig (YAML). Sensitive — never logged.","type":"string"}},"required":["kubeconfig"],"type":"object"},"ListClustersOutputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://example.com/schemas/ListClustersOutputBody.json"],"format":"uri","readOnly":true,"type":"string"},"clusters":{"description":"The tenant's clusters, newest first","items":{"$ref":"#/components/schemas/ClusterBody"},"type":["array","null"]}},"required":["clusters"],"type":"object"},"ClusterQuoteOutputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://example.com/schemas/ClusterQuoteOutputBody.json"],"format":"uri","readOnly":true,"type":"string"},"price":{"$ref":"#/components/schemas/PriceBody","description":"The server-computed monthly price"},"spec":{"$ref":"#/components/schemas/SpecBody","description":"The priced spec (echoed)"}},"required":["spec","price"],"type":"object"},"PriceBody":{"additionalProperties":false,"properties":{"amount_cents":{"description":"Monthly price in minor units","format":"int64","type":"integer"},"currency":{"description":"ISO 4217 currency","type":"string"},"interval":{"description":"Billing interval (monthly)","type":"string"}},"required":["amount_cents","currency","interval"],"type":"object"},"CatalogBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://example.com/schemas/CatalogBody.json"],"format":"uri","readOnly":true,"type":"string"},"max_memory_per_vcpu":{"description":"Max memory GiB per vCPU","format":"int64","type":"integer"},"memory_gib":{"$ref":"#/components/schemas/BoundBody","description":"Allowed memory range (GiB)"},"network":{"$ref":"#/components/schemas/CatalogBodyNetworkStruct"},"presets":{"description":"Suggested specs, priced","items":{"$ref":"#/components/schemas/PresetBody"},"type":["array","null"]},"rates":{"$ref":"#/components/schemas/RateCardBody","description":"Per-resource rate card"},"storage_gib":{"$ref":"#/components/schemas/BoundBody","description":"Allowed storage range (GiB)"},"vcpu":{"$ref":"#/components/schemas/BoundBody","description":"Allowed vCPU range"}},"required":["rates","vcpu","memory_gib","storage_gib","max_memory_per_vcpu","presets","network"],"type":"object"},"BoundBody":{"additionalProperties":false,"properties":{"max":{"format":"int64","type":"integer"},"min":{"format":"int64","type":"integer"}},"required":["min","max"],"type":"object"},"RateCardBody":{"additionalProperties":false,"properties":{"base_cents":{"description":"Fixed managed-control-plane fee per month","format":"int64","type":"integer"},"currency":{"description":"ISO 4217 currency","type":"string"},"per_memory_gib_cents":{"description":"Per guaranteed memory GiB / month","format":"int64","type":"integer"},"per_public_ipv4_cents":{"description":"One dedicated public IPv4 address / month","format":"int64","type":"integer"},"per_storage_gib_cents":{"description":"Per storage GiB / month","format":"int64","type":"integer"},"per_vcpu_cents":{"description":"Per guaranteed vCPU / month","format":"int64","type":"integer"}},"required":["currency","base_cents","per_vcpu_cents","per_memory_gib_cents","per_storage_gib_cents","per_public_ipv4_cents"],"type":"object"},"PresetBody":{"additionalProperties":false,"properties":{"name":{"description":"Preset label (small/medium/large)","type":"string"},"price":{"$ref":"#/components/schemas/PriceBody","description":"The preset's monthly price"},"spec":{"$ref":"#/components/schemas/SpecBody","description":"The preset's spec (fully editable)"}},"required":["name","spec","price"],"type":"object"},"CatalogBodyNetworkStruct":{"additionalProperties":false,"properties":{"dedicated_ipv6":{"description":"Dedicated public IPv6 addresses available for LoadBalancer Services","type":"boolean"},"public_ipv4_available":{"description":"Unreserved dedicated public IPv4 stock is available","type":"boolean"}},"required":["dedicated_ipv6","public_ipv4_available"],"type":"object"},"ListAuditEventsOutputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://example.com/schemas/ListAuditEventsOutputBody.json"],"format":"uri","readOnly":true,"type":"string"},"events":{"description":"The tenant's audit trail across orders, clusters, and object storage, newest first","items":{"$ref":"#/components/schemas/AuditEventBody"},"type":["array","null"]},"next_before":{"description":"Exclusive cursor for the next older page; empty when exhausted","type":"string"}},"required":["next_before","events"],"type":"object"},"AuditEventBody":{"additionalProperties":false,"properties":{"actor":{"description":"Who drove the transition (subject or system label); omitted when unattributed","type":"string"},"created_at":{"description":"When the transition was recorded","format":"date-time","type":"string"},"detail":{"additionalProperties":{},"description":"Non-PII transition metadata (action/note/code)","type":"object"},"from_state":{"description":"State before the transition; omitted for the creation event","type":"string"},"id":{"description":"Stable event identity including its lifecycle source","type":"string"},"resource_id":{"description":"Id of the order, cluster, bucket, or credential","type":"string"},"resource_type":{"description":"The resource the event belongs to","enum":["order","cluster","object_storage_bucket","object_storage_credential"],"type":"string"},"state_version":{"description":"Monotonic version of the resource at this transition","format":"int64","type":"integer"},"to_state":{"description":"State after the transition","type":"string"}},"required":["id","resource_type","resource_id","to_state","state_version","created_at"],"type":"object"}}},"info":{"title":"d0-api","version":"1.0.0"},"openapi":"3.1.2","paths":{"/platform/v1/audit/events":{"get":{"description":"Returns the caller tenant's own append-only lifecycle trail across its orders, clusters, and object storage, newest first, for compliance and SIEM export. Scoped to the acting org — never spans tenants. Carries no personal data. Follow next_before as ?before to read older events without offsets shifting when new events arrive.","operationId":"platform-listAuditEvents","parameters":[{"description":"Max rows (default 100)","explode":false,"in":"query","name":"limit","schema":{"description":"Max rows (default 100)","format":"int64","maximum":500,"minimum":1,"type":"integer"}},{"description":"Exclusive cursor returned by the preceding page","explode":false,"in":"query","name":"before","schema":{"description":"Exclusive cursor returned by the preceding page","maxLength":1024,"type":"string"}},{"description":"Fresh ES256 DPoP proof bound to this method, canonical public URL and access token","in":"header","name":"DPoP","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListAuditEventsOutputBody"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"machineDPoP":["platform.audit.read"]}],"summary":"Export the tenant's audit trail","tags":["audit"]}},"/platform/v1/cluster-plans":{"get":{"description":"Returns the self-serve calculator catalog: the per-resource rate card, the valid per-axis bounds, and priced example presets. The UI prices a spec locally against the rate card and re-verifies via POST /v1/cluster-quote.","operationId":"platform-getClusterCatalog","parameters":[{"description":"Fresh ES256 DPoP proof bound to this method, canonical public URL and access token","in":"header","name":"DPoP","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogBody"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"machineDPoP":["platform.clusters.read"]}],"summary":"Get the cluster catalog","tags":["clusters"]}},"/platform/v1/cluster-quote":{"post":{"description":"Prices a candidate spec server-side (the authoritative price). An out-of-bounds spec is 422.","operationId":"platform-quoteCluster","parameters":[{"description":"Fresh ES256 DPoP proof bound to this method, canonical public URL and access token","in":"header","name":"DPoP","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpecReqBody"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClusterQuoteOutputBody"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"machineDPoP":["platform.clusters.read"]}],"summary":"Quote a cluster spec","tags":["clusters"]}},"/platform/v1/clusters":{"get":{"description":"Lists the caller tenant's clusters, newest first.","operationId":"platform-listClusters","parameters":[{"description":"Fresh ES256 DPoP proof bound to this method, canonical public URL and access token","in":"header","name":"DPoP","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListClustersOutputBody"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"machineDPoP":["platform.clusters.read"]}],"summary":"List clusters","tags":["clusters"]}},"/platform/v1/clusters/{id}":{"delete":{"description":"Tears the cluster down (async). Idempotency-Key is required. Returns the cluster now in its deleting state.","operationId":"platform-deleteCluster","parameters":[{"description":"Cluster ID","in":"path","name":"id","required":true,"schema":{"description":"Cluster ID","type":"string"}},{"description":"Required client-chosen key making the action idempotent","in":"header","name":"Idempotency-Key","required":true,"schema":{"description":"Required client-chosen key making the action idempotent","type":"string"}},{"description":"Fresh ES256 DPoP proof bound to this method, canonical public URL and access token","in":"header","name":"DPoP","required":true,"schema":{"type":"string"}}],"responses":{"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClusterBody"}}},"description":"Accepted"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"machineDPoP":["platform.clusters.write"]}],"summary":"Delete a cluster","tags":["clusters"]},"get":{"description":"Returns the cluster's status. Scoped to the caller tenant; a cluster owned by another tenant returns 404.","operationId":"platform-getCluster","parameters":[{"description":"Cluster ID","in":"path","name":"id","required":true,"schema":{"description":"Cluster ID","type":"string"}},{"description":"Fresh ES256 DPoP proof bound to this method, canonical public URL and access token","in":"header","name":"DPoP","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClusterBody"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"machineDPoP":["platform.clusters.read"]}],"summary":"Get a cluster","tags":["clusters"]}},"/platform/v1/clusters/{id}/kubeconfig":{"get":{"description":"Returns the cluster's kubeconfig (YAML). Sensitive — the response is marked no-store and every fetch is audited. Scoped to the caller tenant.","operationId":"platform-getClusterKubeconfig","parameters":[{"description":"Cluster ID","in":"path","name":"id","required":true,"schema":{"description":"Cluster ID","type":"string"}},{"description":"Fresh ES256 DPoP proof bound to this method, canonical public URL and access token","in":"header","name":"DPoP","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KubeconfigOutputBody"}}},"description":"OK","headers":{"Cache-Control":{"schema":{"type":"string"}}}},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"machineDPoP":["platform.clusters.credentials"]}],"summary":"Get a cluster's kubeconfig","tags":["clusters"]}},"/platform/v1/clusters/{id}/kubeconfig:rotate":{"post":{"description":"Re-issues the cluster's admin credential and re-seals it (async), invalidating a leaked kubeconfig. Idempotency-Key is required.","operationId":"platform-rotateClusterKubeconfig","parameters":[{"description":"Cluster ID","in":"path","name":"id","required":true,"schema":{"description":"Cluster ID","type":"string"}},{"description":"Required client-chosen key making the action idempotent","in":"header","name":"Idempotency-Key","required":true,"schema":{"description":"Required client-chosen key making the action idempotent","type":"string"}},{"description":"Fresh ES256 DPoP proof bound to this method, canonical public URL and access token","in":"header","name":"DPoP","required":true,"schema":{"type":"string"}}],"responses":{"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClusterBody"}}},"description":"Accepted"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"machineDPoP":["platform.clusters.credentials"]}],"summary":"Rotate a cluster's kubeconfig","tags":["clusters"]}},"/platform/v1/clusters/{id}/resize":{"post":{"description":"Grows the cluster to a larger spec (async). Grow-only: a shrink or same-spec is rejected (422). Idempotency-Key is required.","operationId":"platform-resizeCluster","parameters":[{"description":"Cluster ID","in":"path","name":"id","required":true,"schema":{"description":"Cluster ID","type":"string"}},{"description":"Required client-chosen key making the resize idempotent","in":"header","name":"Idempotency-Key","required":true,"schema":{"description":"Required client-chosen key making the resize idempotent","type":"string"}},{"description":"Fresh ES256 DPoP proof bound to this method, canonical public URL and access token","in":"header","name":"DPoP","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResizeClusterInputBody"}},"application/octet-stream":{"schema":{"contentMediaType":"application/octet-stream","format":"binary","type":"string"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClusterBody"}}},"description":"Accepted"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"machineDPoP":["platform.clusters.write"]}],"summary":"Resize a cluster (grow-only)","tags":["clusters"]}},"/platform/v1/clusters/{id}/resume":{"post":{"description":"Un-pauses a suspended cluster (async). Idempotency-Key is required. A cluster suspended for non-payment must have its invoice settled first (409).","operationId":"platform-resumeCluster","parameters":[{"description":"Cluster ID","in":"path","name":"id","required":true,"schema":{"description":"Cluster ID","type":"string"}},{"description":"Required client-chosen key making the action idempotent","in":"header","name":"Idempotency-Key","required":true,"schema":{"description":"Required client-chosen key making the action idempotent","type":"string"}},{"description":"Fresh ES256 DPoP proof bound to this method, canonical public URL and access token","in":"header","name":"DPoP","required":true,"schema":{"type":"string"}}],"responses":{"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClusterBody"}}},"description":"Accepted"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"machineDPoP":["platform.clusters.write"]}],"summary":"Resume a cluster","tags":["clusters"]}},"/platform/v1/clusters/{id}/suspend":{"post":{"description":"Pauses the cluster's control plane (async). Idempotency-Key is required. Returns the cluster in its suspending/suspended state.","operationId":"platform-suspendCluster","parameters":[{"description":"Cluster ID","in":"path","name":"id","required":true,"schema":{"description":"Cluster ID","type":"string"}},{"description":"Required client-chosen key making the action idempotent","in":"header","name":"Idempotency-Key","required":true,"schema":{"description":"Required client-chosen key making the action idempotent","type":"string"}},{"description":"Fresh ES256 DPoP proof bound to this method, canonical public URL and access token","in":"header","name":"DPoP","required":true,"schema":{"type":"string"}}],"responses":{"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClusterBody"}}},"description":"Accepted"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"machineDPoP":["platform.clusters.write"]}],"summary":"Suspend a cluster","tags":["clusters"]}},"/platform/v1/developers/limits":{"get":{"description":"Actual shared quota decision for this request. The organization bucket covers all participating product APIs; the client bucket covers the current OAuth client. This request counts toward both limits; the human Console can read an exhausted decision to diagnose throttling. These technical limits are independent of billing and native S3/Kubernetes quotas.","operationId":"platform-getDeveloperLimits","parameters":[{"description":"Fresh ES256 DPoP proof bound to this method, canonical public URL and access token","in":"header","name":"DPoP","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Result"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"machineDPoP":["platform.usage.read"]}],"summary":"Effective organization and caller request limits","tags":["developers"]}},"/platform/v1/developers/usage":{"get":{"description":"Technical request statistics, not billing evidence. UTC day aggregates retained for thirteen months. An unavailable collection pipeline returns 503, never fabricated zero usage.","operationId":"platform-getDeveloperUsage","parameters":[{"explode":false,"in":"query","name":"product","schema":{"maxLength":64,"type":"string"}},{"explode":false,"in":"query","name":"environment","schema":{"default":"production","enum":["production","test"],"type":"string"}},{"explode":false,"in":"query","name":"client_id","schema":{"maxLength":128,"type":"string"}},{"explode":false,"in":"query","name":"from","schema":{"format":"date-time","type":"string"}},{"explode":false,"in":"query","name":"until","schema":{"format":"date-time","type":"string"}},{"description":"Fresh ES256 DPoP proof bound to this method, canonical public URL and access token","in":"header","name":"DPoP","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Usage"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"machineDPoP":["platform.usage.read"]}],"summary":"Organization API usage","tags":["developers"]}},"/platform/v1/domains":{"get":{"description":"Lists the caller tenant's managed domains, newest first.","operationId":"platform-listDomains","parameters":[{"description":"Fresh ES256 DPoP proof bound to this method, canonical public URL and access token","in":"header","name":"DPoP","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListDomainsOutputBody"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"machineDPoP":["platform.domains.read"]}],"summary":"List managed domains","tags":["domains"]}},"/platform/v1/domains/{domain}":{"get":{"description":"Returns a managed domain's detail. Scoped to the caller tenant.","operationId":"platform-getDomain","parameters":[{"description":"The managed domain","in":"path","name":"domain","required":true,"schema":{"description":"The managed domain","examples":["example.eu"],"maxLength":253,"minLength":3,"pattern":"^[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?)+$","type":"string"}},{"description":"Fresh ES256 DPoP proof bound to this method, canonical public URL and access token","in":"header","name":"DPoP","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainBody"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"machineDPoP":["platform.domains.read"]}],"summary":"Get a managed domain","tags":["domains"]}},"/platform/v1/domains/{domain}/authcode":{"get":{"description":"Returns the domain's EPP transfer auth code. Scoped to the caller tenant.","operationId":"platform-getDomainAuthCode","parameters":[{"description":"The managed domain","in":"path","name":"domain","required":true,"schema":{"description":"The managed domain","examples":["example.eu"],"maxLength":253,"minLength":3,"pattern":"^[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?)+$","type":"string"}},{"description":"Fresh ES256 DPoP proof bound to this method, canonical public URL and access token","in":"header","name":"DPoP","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthCodeOutputBody"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"machineDPoP":["platform.domains.authcode"]}],"summary":"Get the EPP auth code","tags":["domains"]}},"/platform/v1/domains/{domain}/authcode/reset":{"post":{"description":"Rotates and returns a new EPP transfer auth code. Scoped to the caller tenant.","operationId":"platform-resetDomainAuthCode","parameters":[{"description":"The managed domain","in":"path","name":"domain","required":true,"schema":{"description":"The managed domain","examples":["example.eu"],"maxLength":253,"minLength":3,"pattern":"^[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?)+$","type":"string"}},{"description":"Fresh ES256 DPoP proof bound to this method, canonical public URL and access token","in":"header","name":"DPoP","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthCodeOutputBody"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"machineDPoP":["platform.domains.authcode"]}],"summary":"Reset the EPP auth code","tags":["domains"]}},"/platform/v1/domains/{domain}/contacts":{"get":{"operationId":"platform-getDomainContacts","parameters":[{"description":"The managed domain","in":"path","name":"domain","required":true,"schema":{"description":"The managed domain","examples":["example.eu"],"maxLength":253,"minLength":3,"pattern":"^[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?)+$","type":"string"}},{"description":"Fresh ES256 DPoP proof bound to this method, canonical public URL and access token","in":"header","name":"DPoP","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegistrantInput"}}},"description":"OK","headers":{"Cache-Control":{"schema":{"type":"string"}}}},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"machineDPoP":["platform.domains.read"]}],"summary":"Read current domain registrant","tags":["domains"]},"put":{"description":"Updates the domain's registrant and contacts at the registry. Personal data — minimized, never logged. Scoped to the caller tenant.","operationId":"platform-updateDomainContacts","parameters":[{"description":"The managed domain","in":"path","name":"domain","required":true,"schema":{"description":"The managed domain","examples":["example.eu"],"maxLength":253,"minLength":3,"pattern":"^[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?)+$","type":"string"}},{"description":"Fresh ES256 DPoP proof bound to this method, canonical public URL and access token","in":"header","name":"DPoP","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateContactsInputBody"}}},"required":true},"responses":{"204":{"description":"No Content"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"machineDPoP":["platform.domains.write"]}],"summary":"Update registrant/contacts","tags":["domains"]}},"/platform/v1/domains/{domain}/dns/records":{"get":{"description":"Lists the domain's zone records. SOA and the apex NS set are flagged read_only. Scoped to the caller tenant.","operationId":"platform-listDNSRecords","parameters":[{"description":"The managed domain","in":"path","name":"domain","required":true,"schema":{"description":"The managed domain","examples":["example.eu"],"maxLength":253,"minLength":3,"pattern":"^[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?)+$","type":"string"}},{"description":"Fresh ES256 DPoP proof bound to this method, canonical public URL and access token","in":"header","name":"DPoP","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListRecordsOutputBody"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"machineDPoP":["platform.dns.read"]}],"summary":"List DNS records","tags":["dns"]}},"/platform/v1/domains/{domain}/dns/records/{name}/{type}":{"delete":{"description":"Deletes one RRset (name+type); deleting a missing set is a no-op (204). SOA and the apex NS set are not editable (422). Scoped to the caller tenant.","operationId":"platform-deleteDNSRecord","parameters":[{"description":"The managed domain","in":"path","name":"domain","required":true,"schema":{"description":"The managed domain","examples":["example.eu"],"maxLength":253,"minLength":3,"pattern":"^[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?)+$","type":"string"}},{"description":"Record name (relative, '@' for apex, or FQDN)","in":"path","name":"name","required":true,"schema":{"description":"Record name (relative, '@' for apex, or FQDN)","examples":["www"],"maxLength":253,"type":"string"}},{"description":"Record type, e.g. A, AAAA, CNAME, MX, TXT, NS, CAA, SRV","in":"path","name":"type","required":true,"schema":{"description":"Record type, e.g. A, AAAA, CNAME, MX, TXT, NS, CAA, SRV","examples":["A"],"pattern":"^[A-Za-z]+$","type":"string"}},{"description":"Fresh ES256 DPoP proof bound to this method, canonical public URL and access token","in":"header","name":"DPoP","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"machineDPoP":["platform.dns.write"]}],"summary":"Delete a DNS record set","tags":["dns"]},"put":{"description":"Upserts one RRset (name+type). Validated for RFC-correct content and zone structure before it reaches the backend. SOA and the apex NS set are not editable (422). Scoped to the caller tenant.","operationId":"platform-upsertDNSRecord","parameters":[{"description":"The managed domain","in":"path","name":"domain","required":true,"schema":{"description":"The managed domain","examples":["example.eu"],"maxLength":253,"minLength":3,"pattern":"^[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?)+$","type":"string"}},{"description":"Record name (relative, '@' for apex, or FQDN)","in":"path","name":"name","required":true,"schema":{"description":"Record name (relative, '@' for apex, or FQDN)","examples":["www"],"maxLength":253,"type":"string"}},{"description":"Record type, e.g. A, AAAA, CNAME, MX, TXT, NS, CAA, SRV","in":"path","name":"type","required":true,"schema":{"description":"Record type, e.g. A, AAAA, CNAME, MX, TXT, NS, CAA, SRV","examples":["A"],"pattern":"^[A-Za-z]+$","type":"string"}},{"description":"Fresh ES256 DPoP proof bound to this method, canonical public URL and access token","in":"header","name":"DPoP","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecordUpsertBody"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecordBody"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"machineDPoP":["platform.dns.write"]}],"summary":"Create or replace a DNS record set","tags":["dns"]}},"/platform/v1/domains/{domain}/nameservers":{"put":{"description":"Replaces the domain's nameservers at the registry. Scoped to the caller tenant.","operationId":"platform-setDomainNameservers","parameters":[{"description":"The managed domain","in":"path","name":"domain","required":true,"schema":{"description":"The managed domain","examples":["example.eu"],"maxLength":253,"minLength":3,"pattern":"^[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?)+$","type":"string"}},{"description":"Fresh ES256 DPoP proof bound to this method, canonical public URL and access token","in":"header","name":"DPoP","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetNameserversInputBody"}}},"required":true},"responses":{"204":{"description":"No Content"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"machineDPoP":["platform.domains.write"]}],"summary":"Set nameservers","tags":["domains"]}},"/platform/v1/object-storage":{"get":{"operationId":"platform-getObjectStorageCatalog","parameters":[{"description":"Fresh ES256 DPoP proof bound to this method, canonical public URL and access token","in":"header","name":"DPoP","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Catalog"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"machineDPoP":["platform.storage.read"]}],"summary":"Object storage availability and service limits","tags":["object-storage"]}},"/platform/v1/object-storage/buckets":{"get":{"operationId":"platform-listObjectStorageBuckets","parameters":[{"description":"Fresh ES256 DPoP proof bound to this method, canonical public URL and access token","in":"header","name":"DPoP","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ObjectStorageBucketsOutputBody"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"machineDPoP":["platform.storage.read"]}],"summary":"List organization buckets","tags":["object-storage"]},"post":{"operationId":"platform-createObjectStorageBucket","parameters":[{"description":"Fresh ES256 DPoP proof bound to this method, canonical public URL and access token","in":"header","name":"DPoP","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ObjectStorageCreateBucketInputBody"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Bucket"}}},"description":"Created"},"202":{"description":"Bucket is persisted and provisioning continues"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Unauthorized"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Forbidden"},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Conflict"},"422":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Internal Server Error"},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Service Unavailable"}},"security":[{"machineDPoP":["platform.storage.write"]}],"summary":"Create organization bucket","tags":["object-storage"]}},"/platform/v1/object-storage/buckets/{id}":{"delete":{"operationId":"platform-deleteObjectStorageBucket","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}},{"description":"Fresh ES256 DPoP proof bound to this method, canonical public URL and access token","in":"header","name":"DPoP","required":true,"schema":{"type":"string"}}],"responses":{"202":{"description":"Deletion is persisted and will be retried"},"204":{"description":"No Content"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Unauthorized"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Forbidden"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Not Found"},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Conflict"},"422":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Internal Server Error"},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Service Unavailable"}},"security":[{"machineDPoP":["platform.storage.write"]}],"summary":"Delete empty organization bucket","tags":["object-storage"]}},"/platform/v1/object-storage/buckets/{id}/credentials":{"get":{"operationId":"platform-listObjectStorageCredentials","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}},{"description":"Fresh ES256 DPoP proof bound to this method, canonical public URL and access token","in":"header","name":"DPoP","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ObjectStorageCredentialsOutputBody"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"machineDPoP":["platform.storage.credentials"]}],"summary":"List bucket credentials","tags":["object-storage"]},"post":{"operationId":"platform-createObjectStorageCredential","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}},{"description":"Fresh ES256 DPoP proof bound to this method, canonical public URL and access token","in":"header","name":"DPoP","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ObjectStorageCreateCredentialInputBody"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatedCredential"}}},"description":"Created"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"machineDPoP":["platform.storage.credentials"]}],"summary":"Create bucket credential; secret returned once","tags":["object-storage"]}},"/platform/v1/object-storage/buckets/{id}/credentials/{credential_id}":{"delete":{"operationId":"platform-deleteObjectStorageCredential","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}},{"in":"path","name":"credential_id","required":true,"schema":{"type":"string"}},{"description":"Fresh ES256 DPoP proof bound to this method, canonical public URL and access token","in":"header","name":"DPoP","required":true,"schema":{"type":"string"}}],"responses":{"202":{"description":"Revocation is pending gateway confirmation"},"204":{"description":"No Content"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Unauthorized"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Forbidden"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Not Found"},"422":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Internal Server Error"},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Service Unavailable"}},"security":[{"machineDPoP":["platform.storage.credentials"]}],"summary":"Revoke bucket credential","tags":["object-storage"]}}},"servers":[{"url":"https://api.d0.eu"}],"x-d0-environment":"production","x-d0-resource":"https://api.d0.eu/platform"}