diff --git a/.gitmodules b/.gitmodules index 549961804b..bf16cc3313 100644 --- a/.gitmodules +++ b/.gitmodules @@ -248,3 +248,8 @@ url = https://github.com/distilled-mirror/spec-mirror-gusto.git ignore = dirty shallow = true +[submodule "packages/hostinger/specs/spec-mirror-hostinger"] + path = packages/hostinger/specs/spec-mirror-hostinger + url = https://github.com/distilled-mirror/spec-mirror-hostinger.git + ignore = dirty + shallow = true diff --git a/packages/hostinger/.generated-specs/hostinger.json b/packages/hostinger/.generated-specs/hostinger.json new file mode 100644 index 0000000000..8eef0bc16e --- /dev/null +++ b/packages/hostinger/.generated-specs/hostinger.json @@ -0,0 +1,37407 @@ +{ + "smithy": "2.0", + "metadata": { + "suppressions": [ + { + "id": "HttpUriConflict", + "namespace": "*" + }, + { + "id": "HttpMethodSemantics", + "namespace": "*" + }, + { + "id": "UnreferencedShape", + "namespace": "*" + } + ], + "distilled.finalized": true + }, + "shapes": { + "com.hostinger.api#ListAgencyHostingAvailableDatacentersV1Request": { + "type": "structure", + "members": { + "order_id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Agency Plan order ID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#AgencyHostingV1DatacentersDatacenterCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#AgencyHostingV1DatacentersDatacenterResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`AgencyHosting.V1.Datacenters.DatacenterResource`](#model/agencyhostingv1datacentersdatacenterresource)" + } + }, + "com.hostinger.api#AgencyHostingV1DatacentersDatacenterResource": { + "type": "structure", + "members": { + "title": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Datacenter title", + "smithy.api#required": {} + } + }, + "code": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Datacenter code", + "smithy.api#required": {} + } + }, + "country": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Datacenter country code", + "smithy.api#required": {} + } + }, + "coordinates": { + "target": "com.hostinger.api#AgencyHostingV1DatacentersCoordinatesResource", + "traits": { + "smithy.api#required": {} + } + }, + "pinger_url": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "URL you can ping to measure round-trip latency to this datacenter. Compare the measured latency across datacenters to identify the nearest one (lowest ping) for your website. Null when no online server is currently available to measure against.", + "smithy.api#required": {}, + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#AgencyHostingV1DatacentersCoordinatesResource": { + "type": "structure", + "members": { + "latitude": { + "target": "smithy.api#Double", + "traits": { + "smithy.api#documentation": "Latitude coordinate" + } + }, + "longitude": { + "target": "smithy.api#Double", + "traits": { + "smithy.api#documentation": "Longitude coordinate" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListAgencyHostingAvailableDatacentersV1Response": { + "type": "structure", + "members": { + "body": { + "target": "com.hostinger.api#AgencyHostingV1DatacentersDatacenterCollection", + "traits": { + "com.distilled.openapi#rawResponse": {}, + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListAgencyHostingAvailableDatacentersV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListAgencyHostingAvailableDatacentersV1Request" + }, + "output": { + "target": "com.hostinger.api#ListAgencyHostingAvailableDatacentersV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/agency-hosting/v1/orders/{order_id}/datacenters", + "code": 200 + }, + "smithy.api#documentation": "List available datacenters\n\nLists the datacenters available for provisioning a new website on the given Agency Plan\nhosting order.\n\nEach datacenter includes a `pinger_url` you can ping from the client to measure round-trip\nlatency; comparing the results across datacenters lets you pick the nearest one (lowest\nping) before choosing its `code` as the `datacenter_code` when creating a website setup." + } + }, + "com.hostinger.api#AgencyHostingChangeWebsiteDomainV1Request": { + "type": "structure", + "members": { + "website_uid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Agency Plan website UID" + } + }, + "from_domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Current domain name to change from" + } + }, + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "New domain to assign to the website. Set to null to revert to the temporary domain.", + "smithy.api#required": {}, + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#CommonSuccessEmptyResource": { + "type": "structure", + "members": { + "message": { + "target": "smithy.api#String" + } + }, + "traits": {} + }, + "com.hostinger.api#AgencyHostingChangeWebsiteDomainV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#AgencyHostingChangeWebsiteDomainV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "PUT", + "uri": "/api/agency-hosting/v1/websites/{website_uid}/domains/{from_domain}", + "code": 200 + }, + "smithy.api#documentation": "Change website domain\n\nChanges the primary domain for an Agency Plan website.\n\nProvide the current domain in the path and the new domain in the request body.\nSet domain to null to revert to the temporary domain." + } + }, + "com.hostinger.api#AgencyHostingLinkDomainToWebsiteV1Request": { + "type": "structure", + "members": { + "website_uid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Agency Plan website UID" + } + }, + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Fully qualified domain name to link to the website", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#AgencyHostingLinkDomainToWebsiteV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#AgencyHostingLinkDomainToWebsiteV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/agency-hosting/v1/websites/{website_uid}/domains", + "code": 200 + }, + "smithy.api#documentation": "Link domain to website\n\nLinks a domain to the specified Agency Plan website so it can serve traffic for that domain." + } + }, + "com.hostinger.api#ListAgencyHostingDomainsV1RequestWebsiteUuidsList": { + "type": "list", + "member": { + "target": "smithy.api#String" + }, + "traits": {} + }, + "com.hostinger.api#ListAgencyHostingDomainsV1Request": { + "type": "structure", + "members": { + "page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "page", + "smithy.api#documentation": "Page number" + } + }, + "per_page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "per_page", + "smithy.api#documentation": "Number of items per page" + } + }, + "website_uuids": { + "target": "com.hostinger.api#ListAgencyHostingDomainsV1RequestWebsiteUuidsList", + "traits": { + "smithy.api#httpQuery": "website_uuids", + "smithy.api#documentation": "Filter by website UIDs" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#AgencyHostingV1DomainsDomainCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#AgencyHostingV1DomainsDomainResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`AgencyHosting.V1.Domains.DomainResource`](#model/agencyhostingv1domainsdomainresource)" + } + }, + "com.hostinger.api#AgencyHostingV1DomainsDomainResource": { + "type": "structure", + "members": { + "fqdn": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Domain name" + } + }, + "website_uid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Owner website UID" + } + }, + "created_at": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Creation date" + } + } + }, + "traits": {} + }, + "com.hostinger.api#CommonSchemaPaginationMetaSchema": { + "type": "structure", + "members": { + "current_page": { + "target": "smithy.api#Integer" + }, + "per_page": { + "target": "smithy.api#Integer" + }, + "total": { + "target": "smithy.api#Integer" + } + }, + "traits": {} + }, + "com.hostinger.api#ListAgencyHostingDomainsV1Response": { + "type": "structure", + "members": { + "data": { + "target": "com.hostinger.api#AgencyHostingV1DomainsDomainCollection" + }, + "meta": { + "target": "com.hostinger.api#CommonSchemaPaginationMetaSchema" + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListAgencyHostingDomainsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListAgencyHostingDomainsV1Request" + }, + "output": { + "target": "com.hostinger.api#ListAgencyHostingDomainsV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/agency-hosting/v1/domains", + "code": 200 + }, + "smithy.api#documentation": "List domains\n\nReturns a paginated list of domains associated with Agency Plan websites accessible to the authenticated client.\n\nUse the website_uuids filter to narrow results to specific websites." + } + }, + "com.hostinger.api#UnlinkAgencyHostingDomainFromWebsiteV1Request": { + "type": "structure", + "members": { + "website_uid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Agency Plan website UID" + } + }, + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#UnlinkAgencyHostingDomainFromWebsiteV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#UnlinkAgencyHostingDomainFromWebsiteV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "traits": { + "smithy.api#http": { + "method": "DELETE", + "uri": "/api/agency-hosting/v1/websites/{website_uid}/domains/{domain}", + "code": 200 + }, + "smithy.api#documentation": "Unlink domain from website\n\nUnlinks a domain from the specified Agency Plan website.\n\nThe website stops serving traffic on this domain immediately.\n\nWebsite files and database are preserved, and any other linked domains remain accessible.\n\nIf this is the only domain on the website, unlinking leaves the website without an accessible domain." + } + }, + "com.hostinger.api#AgencyHostingGenerateUploadURLV1Request": { + "type": "structure", + "members": { + "website_uid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Agency Plan website UID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#AgencyHostingV1FilesUploadUrlResource": { + "type": "structure", + "members": { + "url": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The TUS upload endpoint URL to send upload requests to", + "smithy.api#required": {} + } + }, + "auth_key": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Authentication token to pass as the `X-Auth` header in TUS upload requests", + "smithy.api#required": {} + } + }, + "rest_auth_key": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Authentication token to pass as the `X-Auth-Rest` header in TUS upload requests", + "smithy.api#required": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#AgencyHostingGenerateUploadURLV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#AgencyHostingGenerateUploadURLV1Request" + }, + "output": { + "target": "com.hostinger.api#AgencyHostingV1FilesUploadUrlResource" + }, + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/agency-hosting/v1/websites/{website_uid}/files/upload-urls", + "code": 200 + }, + "smithy.api#documentation": "Generate upload URL\n\nGenerate a file browser upload URL with authentication credentials for uploading files\nto an Agency Plan website's file storage.\n\nReturns `url`, `auth_key` and `rest_auth_key`. Use these to upload a file to the\nwebsite's file storage via the TUS resumable upload protocol (TUS 1.0.0). Send\n`X-Auth: {auth_key}` and `X-Auth-Rest: {rest_auth_key}` headers on every request below.\n\n1. Create the upload: `POST` to `{url}/{relative_file_path}?override=true` with headers\n `upload-length: {file size in bytes}` and `upload-offset: 0`. Expect `201 Created`.\n2. Upload the file: send the file bytes to the same location (any TUS 1.0.0 client, or\n `PATCH` requests with an `upload-offset` header tracking progress) until complete.\n\n`relative_file_path` is the destination path inside the website's file storage, e.g.\n`app.zip`.\n\nInstead of a TUS client, plain `curl` also works:\n```\nFILE=app.zip\nSIZE=$(stat -f%z \"$FILE\") # stat -c%s on Linux\n\ncurl -i -X POST \"{url}/${FILE}?override=true\" \\\n -H \"X-Auth: {auth_key}\" \\\n -H \"X-Auth-Rest: {rest_auth_key}\" \\\n -H \"Tus-Resumable: 1.0.0\" \\\n -H \"Upload-Length: ${SIZE}\" \\\n -H \"Upload-Offset: 0\"\n# -> 201 Created\n\ncurl -i -X PATCH \"{url}/${FILE}?override=true\" \\\n -H \"X-Auth: {auth_key}\" \\\n -H \"X-Auth-Rest: {rest_auth_key}\" \\\n -H \"Tus-Resumable: 1.0.0\" \\\n -H \"Content-Type: application/offset+octet-stream\" \\\n -H \"Upload-Offset: 0\" \\\n --data-binary \"@${FILE}\"\n# -> 204 No Content, Upload-Offset response header equals SIZE when done\n```" + } + }, + "com.hostinger.api#AgencyHostingImportWebsiteFromArchiveV1Request": { + "type": "structure", + "members": { + "website_uid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Agency Plan website UID" + } + }, + "archive_name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Archive filename (e.g., archive.zip). The file must already be uploaded to the website's .h5g/ directory.", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#AgencyHostingImportWebsiteFromArchiveV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#AgencyHostingImportWebsiteFromArchiveV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/agency-hosting/v1/websites/{website_uid}/files/import-archive", + "code": 200 + }, + "smithy.api#documentation": "Import website from archive\n\nImports an Agency Plan website from an already-uploaded archive.\n\nUpload the archive to the website's root directory via file browser first, then provide its\nfilename in this request. Website contents are overwritten by the archive contents. Supported\narchive types: .zip, .tar, .tar.gz, .tgz." + } + }, + "com.hostinger.api#ListAgencyHostingAgencyPlanOrderDiskUsageMetricsV1RequestTimeFrameDays": { + "type": "intEnum", + "members": { + "_1": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": 1 + } + }, + "_7": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": 7 + } + }, + "_14": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": 14 + } + }, + "_30": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": 30 + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListAgencyHostingAgencyPlanOrderDiskUsageMetricsV1Request": { + "type": "structure", + "members": { + "order_id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Agency Plan order ID" + } + }, + "time_frame_days": { + "target": "com.hostinger.api#ListAgencyHostingAgencyPlanOrderDiskUsageMetricsV1RequestTimeFrameDays", + "traits": { + "smithy.api#httpQuery": "time_frame_days", + "smithy.api#documentation": "Length of the window in days, ending now. Bucket size grows with the window." + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#AgencyHostingV1OrdersDiskUsageMetricsMetricsResource": { + "type": "structure", + "members": { + "limits": { + "target": "com.hostinger.api#AgencyHostingV1OrdersDiskUsageMetricsLimitsResource" + }, + "metrics": { + "target": "com.hostinger.api#AgencyHostingV1OrdersDiskUsageMetricsMetricCollection" + } + }, + "traits": {} + }, + "com.hostinger.api#AgencyHostingV1OrdersDiskUsageMetricsLimitsResource": { + "type": "structure", + "members": { + "disk_bytes": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Disk usage quota in bytes" + } + }, + "inodes": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Inodes quota" + } + } + }, + "traits": {} + }, + "com.hostinger.api#AgencyHostingV1OrdersDiskUsageMetricsMetricCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#AgencyHostingV1OrdersDiskUsageMetricsMetricResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`AgencyHosting.V1.Orders.DiskUsageMetrics.MetricResource`](#model/agencyhostingv1ordersdiskusagemetricsmetricresource)" + } + }, + "com.hostinger.api#AgencyHostingV1OrdersDiskUsageMetricsMetricResource": { + "type": "structure", + "members": { + "disk_bytes": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Disk usage in bytes at this sample" + } + }, + "inodes": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Number of inodes used at this sample" + } + }, + "timestamp": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Unix timestamp of the sample" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListAgencyHostingAgencyPlanOrderDiskUsageMetricsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListAgencyHostingAgencyPlanOrderDiskUsageMetricsV1Request" + }, + "output": { + "target": "com.hostinger.api#AgencyHostingV1OrdersDiskUsageMetricsMetricsResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/agency-hosting/v1/orders/{order_id}/disk-usage-metrics", + "code": 200 + }, + "smithy.api#documentation": "List Agency Plan order disk usage metrics\n\nReturns aggregated disk and inode usage for the Agency Plan order over the\nselected time frame, plus the plan quotas. Figures cover the whole order\naccount. Values may be up to one hour stale. CPU, memory, and process usage\nare on the resource-usage-metrics endpoint." + } + }, + "com.hostinger.api#ListAgencyHostingOrdersV1Request": { + "type": "structure", + "members": { + "page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "page", + "smithy.api#documentation": "Page number" + } + }, + "per_page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "per_page", + "smithy.api#documentation": "Number of items per page" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#AgencyHostingV1OrdersOrderCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#AgencyHostingV1OrdersOrderResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`AgencyHosting.V1.Orders.OrderResource`](#model/agencyhostingv1ordersorderresource)" + } + }, + "com.hostinger.api#AgencyHostingV1OrdersOrderResource": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Order ID" + } + }, + "client_id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Order client ID" + } + }, + "status": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Order status", + "com.distilled.openapi#nullable": {} + } + }, + "plan": { + "target": "com.hostinger.api#AgencyHostingV1OrdersPlanResource" + }, + "datacenter": { + "target": "com.hostinger.api#AgencyHostingV1OrdersDatacenterResource", + "traits": { + "smithy.api#documentation": "Order datacenter", + "com.distilled.openapi#nullable": {} + } + }, + "created_at": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Order creation date" + } + } + }, + "traits": {} + }, + "com.hostinger.api#AgencyHostingV1OrdersPlanResource": { + "type": "structure", + "members": { + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Plan display name", + "com.distilled.openapi#nullable": {} + } + }, + "key": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Plan key", + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#AgencyHostingV1OrdersDatacenterResource": { + "type": "structure", + "members": { + "code": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Datacenter code" + } + }, + "country": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Datacenter country" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListAgencyHostingOrdersV1Response": { + "type": "structure", + "members": { + "data": { + "target": "com.hostinger.api#AgencyHostingV1OrdersOrderCollection" + }, + "meta": { + "target": "com.hostinger.api#CommonSchemaPaginationMetaSchema" + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListAgencyHostingOrdersV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListAgencyHostingOrdersV1Request" + }, + "output": { + "target": "com.hostinger.api#ListAgencyHostingOrdersV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/agency-hosting/v1/orders", + "code": 200 + }, + "smithy.api#documentation": "List orders\n\nReturns a paginated list of Agency Plan orders accessible to the authenticated client." + } + }, + "com.hostinger.api#ListAgencyHostingOrderResourceUsageMetricsV1RequestTimeFrameHours": { + "type": "intEnum", + "members": { + "_1": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": 1 + } + }, + "_24": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": 24 + } + }, + "_168": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": 168 + } + }, + "_336": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": 336 + } + }, + "_720": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": 720 + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListAgencyHostingOrderResourceUsageMetricsV1Request": { + "type": "structure", + "members": { + "order_id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Agency Plan order ID" + } + }, + "time_frame_hours": { + "target": "com.hostinger.api#ListAgencyHostingOrderResourceUsageMetricsV1RequestTimeFrameHours", + "traits": { + "smithy.api#httpQuery": "time_frame_hours", + "smithy.api#documentation": "Length of the window in hours, ending now. Bucket size grows with the window." + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#AgencyHostingV1OrdersResourceUsageMetricsMetricsResource": { + "type": "structure", + "members": { + "limits": { + "target": "com.hostinger.api#AgencyHostingV1OrdersResourceUsageMetricsLimitsResource" + }, + "metrics": { + "target": "com.hostinger.api#AgencyHostingV1OrdersResourceUsageMetricsMetricCollection" + }, + "websites": { + "target": "com.hostinger.api#AgencyHostingV1OrdersResourceUsageMetricsWebsiteCollection" + } + }, + "traits": {} + }, + "com.hostinger.api#AgencyHostingV1OrdersResourceUsageMetricsLimitsResource": { + "type": "structure", + "members": { + "memory_bytes": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Memory usage quota in bytes" + } + }, + "cpu_percent": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "CPU usage quota in percent" + } + }, + "processes": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Process usage quota" + } + } + }, + "traits": {} + }, + "com.hostinger.api#AgencyHostingV1OrdersResourceUsageMetricsMetricCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#AgencyHostingV1OrdersResourceUsageMetricsMetricResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`AgencyHosting.V1.Orders.ResourceUsageMetrics.MetricResource`](#model/agencyhostingv1ordersresourceusagemetricsmetricresource)" + } + }, + "com.hostinger.api#AgencyHostingV1OrdersResourceUsageMetricsMetricResource": { + "type": "structure", + "members": { + "cpu_percent": { + "target": "smithy.api#Double", + "traits": { + "smithy.api#documentation": "CPU usage percentage at this sample" + } + }, + "memory_bytes": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Memory usage in bytes at this sample" + } + }, + "processes": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Number of processes at this sample" + } + }, + "timestamp": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Unix timestamp of the sample" + } + } + }, + "traits": {} + }, + "com.hostinger.api#AgencyHostingV1OrdersResourceUsageMetricsWebsiteCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#AgencyHostingV1OrdersResourceUsageMetricsWebsiteResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`AgencyHosting.V1.Orders.ResourceUsageMetrics.WebsiteResource`](#model/agencyhostingv1ordersresourceusagemetricswebsiteresource)" + } + }, + "com.hostinger.api#AgencyHostingV1OrdersResourceUsageMetricsWebsiteResource": { + "type": "structure", + "members": { + "uid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Website UID" + } + }, + "domains": { + "target": "com.hostinger.api#AgencyHostingV1OrdersResourceUsageMetricsWebsiteResourceDomainsList", + "traits": { + "smithy.api#documentation": "Domains associated with the website" + } + }, + "metrics": { + "target": "com.hostinger.api#AgencyHostingV1OrdersResourceUsageMetricsMetricCollection" + } + }, + "traits": {} + }, + "com.hostinger.api#AgencyHostingV1OrdersResourceUsageMetricsWebsiteResourceDomainsList": { + "type": "list", + "member": { + "target": "smithy.api#String" + }, + "traits": { + "smithy.api#documentation": "Domains associated with the website" + } + }, + "com.hostinger.api#ListAgencyHostingOrderResourceUsageMetricsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListAgencyHostingOrderResourceUsageMetricsV1Request" + }, + "output": { + "target": "com.hostinger.api#AgencyHostingV1OrdersResourceUsageMetricsMetricsResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/agency-hosting/v1/orders/{order_id}/resource-usage-metrics", + "code": 200 + }, + "smithy.api#documentation": "List order resource usage metrics\n\nReturns aggregated CPU, memory, and process usage for the Agency Plan order\nover the selected time frame, plus the plan quotas and a per-website\nbreakdown. Each website is identified by uid. Suspended and deleted websites\nare excluded from both the order totals and the per-website breakdown.\nValues may be up to one hour stale. Disk and inode usage are on the\ndisk-usage-metrics endpoint." + } + }, + "com.hostinger.api#ListAgencyHostingPHPExtensionsForAWebsiteV1Request": { + "type": "structure", + "members": { + "website_uid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Agency Plan website UID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#AgencyHostingV1PhpExtensionCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#AgencyHostingV1PhpExtensionResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`AgencyHosting.V1.Php.ExtensionResource`](#model/agencyhostingv1phpextensionresource)" + } + }, + "com.hostinger.api#AgencyHostingV1PhpExtensionResource": { + "type": "structure", + "members": { + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "PHP extension name." + } + }, + "description": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "What the extension provides." + } + }, + "state": { + "target": "com.hostinger.api#AgencyHostingV1PhpExtensionResourceState", + "traits": { + "smithy.api#documentation": "Whether the extension is currently enabled. Extensions in the \"built-in\" state are compiled into PHP and cannot be turned off." + } + } + }, + "traits": {} + }, + "com.hostinger.api#AgencyHostingV1PhpExtensionResourceState": { + "type": "enum", + "members": { + "ENABLED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "enabled" + } + }, + "DISABLED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "disabled" + } + }, + "BUILT_IN": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "built-in" + } + } + }, + "traits": { + "smithy.api#documentation": "Whether the extension is currently enabled. Extensions in the \"built-in\" state are compiled into PHP and cannot be turned off." + } + }, + "com.hostinger.api#ListAgencyHostingPHPExtensionsForAWebsiteV1Response": { + "type": "structure", + "members": { + "body": { + "target": "com.hostinger.api#AgencyHostingV1PhpExtensionCollection", + "traits": { + "com.distilled.openapi#rawResponse": {}, + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListAgencyHostingPHPExtensionsForAWebsiteV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListAgencyHostingPHPExtensionsForAWebsiteV1Request" + }, + "output": { + "target": "com.hostinger.api#ListAgencyHostingPHPExtensionsForAWebsiteV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/agency-hosting/v1/websites/{website_uid}/php-settings/extensions", + "code": 200 + }, + "smithy.api#documentation": "List PHP extensions for a website\n\nLists every PHP extension available to an Agency Plan website and whether it is currently enabled." + } + }, + "com.hostinger.api#ReplaceAgencyHostingWebsitePHPExtensionsV1RequestExtensionsList": { + "type": "list", + "member": { + "target": "smithy.api#String" + }, + "traits": { + "smithy.api#documentation": "Extension names, exactly as returned by the extensions endpoint." + } + }, + "com.hostinger.api#ReplaceAgencyHostingWebsitePHPExtensionsV1Request": { + "type": "structure", + "members": { + "website_uid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Agency Plan website UID" + } + }, + "extensions": { + "target": "com.hostinger.api#ReplaceAgencyHostingWebsitePHPExtensionsV1RequestExtensionsList", + "traits": { + "smithy.api#documentation": "Extension names, exactly as returned by the extensions endpoint.", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#ReplaceAgencyHostingWebsitePHPExtensionsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ReplaceAgencyHostingWebsitePHPExtensionsV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "PUT", + "uri": "/api/agency-hosting/v1/websites/{website_uid}/php-settings/extensions", + "code": 200 + }, + "smithy.api#documentation": "Replace website PHP extensions\n\nReplaces the set of PHP extensions enabled on an Agency Plan website with the ones provided. Any toggleable extension not in the request is disabled, so call the extensions endpoint first and send the full desired set. Extensions compiled into PHP, reported with the \"built-in\" state, are always active and are unaffected." + } + }, + "com.hostinger.api#ListAgencyHostingPHPOptionsForAWebsiteV1Request": { + "type": "structure", + "members": { + "website_uid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Agency Plan website UID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#AgencyHostingV1PhpOptionCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#AgencyHostingV1PhpOptionResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`AgencyHosting.V1.Php.OptionResource`](#model/agencyhostingv1phpoptionresource)" + } + }, + "com.hostinger.api#AgencyHostingV1PhpOptionResource": { + "type": "structure", + "members": { + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "php.ini directive name." + } + }, + "description": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "What the directive controls." + } + }, + "default_value": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Value applied when no custom value is set." + } + }, + "allowed_values": { + "target": "com.hostinger.api#AgencyHostingV1PhpOptionResourceAllowedValuesList", + "traits": { + "smithy.api#documentation": "Values this option accepts. Null when the option accepts any value of its type.", + "com.distilled.openapi#nullable": {} + } + }, + "value": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Value currently in effect for the website." + } + }, + "type": { + "target": "com.hostinger.api#AgencyHostingV1PhpOptionResourceType", + "traits": { + "smithy.api#documentation": "Whether the option takes a single value or a list of values." + } + } + }, + "traits": {} + }, + "com.hostinger.api#AgencyHostingV1PhpOptionResourceAllowedValuesList": { + "type": "list", + "member": { + "target": "smithy.api#String" + }, + "traits": { + "smithy.api#documentation": "Values this option accepts. Null when the option accepts any value of its type." + } + }, + "com.hostinger.api#AgencyHostingV1PhpOptionResourceType": { + "type": "enum", + "members": { + "VALUE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "value" + } + }, + "LIST": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "list" + } + } + }, + "traits": { + "smithy.api#documentation": "Whether the option takes a single value or a list of values." + } + }, + "com.hostinger.api#ListAgencyHostingPHPOptionsForAWebsiteV1Response": { + "type": "structure", + "members": { + "body": { + "target": "com.hostinger.api#AgencyHostingV1PhpOptionCollection", + "traits": { + "com.distilled.openapi#rawResponse": {}, + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListAgencyHostingPHPOptionsForAWebsiteV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListAgencyHostingPHPOptionsForAWebsiteV1Request" + }, + "output": { + "target": "com.hostinger.api#ListAgencyHostingPHPOptionsForAWebsiteV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/agency-hosting/v1/websites/{website_uid}/php-settings/options", + "code": 200 + }, + "smithy.api#documentation": "List PHP options for a website\n\nLists the php.ini directives that can be configured for an Agency Plan website, each with its default, the value currently in effect, and the values it accepts." + } + }, + "com.hostinger.api#ReplaceAgencyHostingWebsitePHPOptionsV1RequestOptionsItem": { + "type": "structure", + "members": { + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "php.ini directive name.", + "smithy.api#required": {} + } + }, + "value": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Value to apply.", + "smithy.api#required": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#ReplaceAgencyHostingWebsitePHPOptionsV1RequestOptionsList": { + "type": "list", + "member": { + "target": "com.hostinger.api#ReplaceAgencyHostingWebsitePHPOptionsV1RequestOptionsItem" + }, + "traits": { + "smithy.api#documentation": "Option names and values. Each name must be one of the options returned by the options endpoint, and each value must satisfy that option's allowed_values when it declares them." + } + }, + "com.hostinger.api#ReplaceAgencyHostingWebsitePHPOptionsV1Request": { + "type": "structure", + "members": { + "website_uid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Agency Plan website UID" + } + }, + "options": { + "target": "com.hostinger.api#ReplaceAgencyHostingWebsitePHPOptionsV1RequestOptionsList", + "traits": { + "smithy.api#documentation": "Option names and values. Each name must be one of the options returned by the options endpoint, and each value must satisfy that option's allowed_values when it declares them.", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#ReplaceAgencyHostingWebsitePHPOptionsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ReplaceAgencyHostingWebsitePHPOptionsV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "PUT", + "uri": "/api/agency-hosting/v1/websites/{website_uid}/php-settings/options", + "code": 200 + }, + "smithy.api#documentation": "Replace website PHP options\n\nReplaces the custom php.ini values on an Agency Plan website with the ones provided. Any option not in the request is reset to its default, so call the options endpoint first and send the full desired set. Sending an empty array resets every option to its default." + } + }, + "com.hostinger.api#ListAgencyHostingAvailablePHPVersionsForAnOrderV1Request": { + "type": "structure", + "members": { + "order_id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Agency Plan order ID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#AgencyHostingV1PhpVersionCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#AgencyHostingV1PhpVersionResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`AgencyHosting.V1.Php.VersionResource`](#model/agencyhostingv1phpversionresource)" + } + }, + "com.hostinger.api#AgencyHostingV1PhpVersionResource": { + "type": "structure", + "members": { + "version": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "PHP version available for the website." + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListAgencyHostingAvailablePHPVersionsForAnOrderV1Response": { + "type": "structure", + "members": { + "body": { + "target": "com.hostinger.api#AgencyHostingV1PhpVersionCollection", + "traits": { + "com.distilled.openapi#rawResponse": {}, + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListAgencyHostingAvailablePHPVersionsForAnOrderV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListAgencyHostingAvailablePHPVersionsForAnOrderV1Request" + }, + "output": { + "target": "com.hostinger.api#ListAgencyHostingAvailablePHPVersionsForAnOrderV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/agency-hosting/v1/orders/{order_id}/websites/php-settings/versions", + "code": 200 + }, + "smithy.api#documentation": "List available PHP versions for an order\n\nLists the PHP versions available to websites created under an Agency Plan order, determined by the server the order is hosted on. Use this before creating a website; for a website that already exists, call the website-scoped versions endpoint instead." + } + }, + "com.hostinger.api#ListAgencyHostingAvailablePHPVersionsForAWebsiteV1Request": { + "type": "structure", + "members": { + "website_uid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Agency Plan website UID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#ListAgencyHostingAvailablePHPVersionsForAWebsiteV1Response": { + "type": "structure", + "members": { + "body": { + "target": "com.hostinger.api#AgencyHostingV1PhpVersionCollection", + "traits": { + "com.distilled.openapi#rawResponse": {}, + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListAgencyHostingAvailablePHPVersionsForAWebsiteV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListAgencyHostingAvailablePHPVersionsForAWebsiteV1Request" + }, + "output": { + "target": "com.hostinger.api#ListAgencyHostingAvailablePHPVersionsForAWebsiteV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/agency-hosting/v1/websites/{website_uid}/php-settings/versions", + "code": 200 + }, + "smithy.api#documentation": "List available PHP versions for a website\n\nLists the PHP versions an Agency Plan website can be switched to. The version the website is currently running is returned as settings.php.version by the website details endpoint." + } + }, + "com.hostinger.api#UpdateAgencyHostingWebsitePHPVersionV1Request": { + "type": "structure", + "members": { + "website_uid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Agency Plan website UID" + } + }, + "version": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "PHP version to switch the website to, as major.minor. Must be one of the versions returned by the available versions endpoint.", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#UpdateAgencyHostingWebsitePHPVersionV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#UpdateAgencyHostingWebsitePHPVersionV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "PATCH", + "uri": "/api/agency-hosting/v1/websites/{website_uid}/php-settings/version", + "code": 200 + }, + "smithy.api#documentation": "Update website PHP version\n\nSwitches an Agency Plan website to a different PHP version. Call the available versions endpoint first to see which versions can be selected. The website restarts on the new version, so requests served during the switch may fail and code that is incompatible with the target version will break." + } + }, + "com.hostinger.api#CreateAgencyHostingANewWebsiteV1RequestSettingsPhp": { + "type": "structure", + "members": { + "version": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "PHP version", + "smithy.api#required": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#CreateAgencyHostingANewWebsiteV1RequestSettings": { + "type": "structure", + "members": { + "php": { + "target": "com.hostinger.api#CreateAgencyHostingANewWebsiteV1RequestSettingsPhp", + "traits": { + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#documentation": "Website settings" + } + }, + "com.hostinger.api#CreateAgencyHostingANewWebsiteV1RequestType": { + "type": "enum", + "members": { + "HORIZONS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "horizons" + } + }, + "NODE_STATIC": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "node-static" + } + } + }, + "traits": { + "smithy.api#documentation": "Website type" + } + }, + "com.hostinger.api#CreateAgencyHostingANewWebsiteV1RequestWordpressAdmin": { + "type": "structure", + "members": { + "user": { + "target": "smithy.api#String", + "traits": { + "smithy.api#required": {} + } + }, + "password": { + "target": "smithy.api#String", + "traits": { + "smithy.api#required": {}, + "smithy.api#sensitive": {} + } + }, + "email": { + "target": "smithy.api#String", + "traits": { + "smithy.api#required": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#CreateAgencyHostingANewWebsiteV1RequestWordpress": { + "type": "structure", + "members": { + "language": { + "target": "smithy.api#String", + "traits": { + "smithy.api#required": {} + } + }, + "title": { + "target": "smithy.api#String", + "traits": { + "smithy.api#required": {} + } + }, + "admin": { + "target": "com.hostinger.api#CreateAgencyHostingANewWebsiteV1RequestWordpressAdmin", + "traits": { + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#documentation": "WordPress installation options" + } + }, + "com.hostinger.api#CreateAgencyHostingANewWebsiteV1RequestClone": { + "type": "structure", + "members": { + "website_uid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#documentation": "Clone the new website from an existing website" + } + }, + "com.hostinger.api#CreateAgencyHostingANewWebsiteV1RequestDeriveDomainFromVhost": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#required": {} + } + }, + "vhost": { + "target": "smithy.api#String", + "traits": { + "smithy.api#required": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#CreateAgencyHostingANewWebsiteV1RequestDeriveDomain": { + "type": "structure", + "members": { + "from_vhost": { + "target": "com.hostinger.api#CreateAgencyHostingANewWebsiteV1RequestDeriveDomainFromVhost", + "traits": { + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#documentation": "Derive the domain from an existing vhost" + } + }, + "com.hostinger.api#CreateAgencyHostingANewWebsiteV1Request": { + "type": "structure", + "members": { + "order_id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Agency Plan order ID" + } + }, + "datacenter_code": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Datacenter code where the website should be provisioned. Available codes depend on live capacity and are not a fixed set.", + "smithy.api#required": {} + } + }, + "flavor": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Setup flavor: a specific WordPress version in the format `wp-.` or `wp-..` (e.g. `wp-6.8.2`), or `php-fpm` for a plain PHP stack. Generic versions like `wp-latest` are not allowed.", + "smithy.api#required": {} + } + }, + "settings": { + "target": "com.hostinger.api#CreateAgencyHostingANewWebsiteV1RequestSettings", + "traits": { + "smithy.api#documentation": "Website settings", + "smithy.api#required": {} + } + }, + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Primary domain to attach to the website. Omit or set to null to get a free auto-generated *.hostingersite.com subdomain instead.", + "com.distilled.openapi#nullable": {} + } + }, + "type": { + "target": "com.hostinger.api#CreateAgencyHostingANewWebsiteV1RequestType", + "traits": { + "smithy.api#documentation": "Website type", + "com.distilled.openapi#nullable": {} + } + }, + "wordpress": { + "target": "com.hostinger.api#CreateAgencyHostingANewWebsiteV1RequestWordpress", + "traits": { + "smithy.api#documentation": "WordPress installation options" + } + }, + "clone": { + "target": "com.hostinger.api#CreateAgencyHostingANewWebsiteV1RequestClone", + "traits": { + "smithy.api#documentation": "Clone the new website from an existing website" + } + }, + "derive_domain": { + "target": "com.hostinger.api#CreateAgencyHostingANewWebsiteV1RequestDeriveDomain", + "traits": { + "smithy.api#documentation": "Derive the domain from an existing vhost" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#AgencyHostingV1SetupsWebsiteSetupResource": { + "type": "structure", + "members": { + "setup_uuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "UUID tracking the asynchronous website setup process" + } + } + }, + "traits": {} + }, + "com.hostinger.api#CreateAgencyHostingANewWebsiteV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#CreateAgencyHostingANewWebsiteV1Request" + }, + "output": { + "target": "com.hostinger.api#AgencyHostingV1SetupsWebsiteSetupResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/agency-hosting/v1/orders/{order_id}/websites/setups", + "code": 200 + }, + "smithy.api#documentation": "Create a new website\n\nProvisions a new website on one of your Agency Plan hosting orders.\n\nChoose the datacenter, stack (`flavor`), and PHP version for the site. Optionally attach\nyour own `domain` — omit it, set it to `null`, or leave it unavailable and a free\n`*.hostingersite.com` subdomain is generated instead — and/or install WordPress by\nsupplying the `wordpress` details (admin account, site title, and language).\n\nCommon setups:\n- **Plain PHP site**: `flavor` set to `php-fpm`, with `settings.php.version`; omit\n `wordpress` and `type`.\n- **WordPress site**: `flavor` set to the desired WordPress version (e.g. `wp-7.0`), plus\n the `wordpress` block (admin account, title, language).\n- **Static/Node.js frontend app**: `flavor` set to `php-fpm` and `type` set to\n `node-static`.\n\nProvisioning runs in the background, so the response returns immediately with a setup UUID\nthat identifies the job. The new website becomes reachable once provisioning finishes." + } + }, + "com.hostinger.api#GetAgencyHostingWebsiteSetupStatusV1Request": { + "type": "structure", + "members": { + "order_id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Agency Plan order ID" + } + }, + "setup_uuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Website setup UUID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#AgencyHostingV1SetupsWebsiteSetupStatusResource": { + "type": "structure", + "members": { + "website_uid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "UID of the website created by the setup, available once provisioning completes", + "com.distilled.openapi#nullable": {} + } + }, + "status": { + "target": "com.hostinger.api#AgencyHostingV1SetupsWebsiteSetupStatusResourceStatus", + "traits": { + "smithy.api#documentation": "Website setup status" + } + } + }, + "traits": {} + }, + "com.hostinger.api#AgencyHostingV1SetupsWebsiteSetupStatusResourceStatus": { + "type": "enum", + "members": { + "RUNNING": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "running" + } + }, + "COMPLETED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "completed" + } + } + }, + "traits": { + "smithy.api#documentation": "Website setup status" + } + }, + "com.hostinger.api#GetAgencyHostingWebsiteSetupStatusV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#GetAgencyHostingWebsiteSetupStatusV1Request" + }, + "output": { + "target": "com.hostinger.api#AgencyHostingV1SetupsWebsiteSetupStatusResource" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/agency-hosting/v1/orders/{order_id}/websites/setups/{setup_uuid}", + "code": 200 + }, + "smithy.api#documentation": "Get website setup status\n\nReturns the current status of an Agency Plan website setup started via the setups\nendpoint.\n\nPoll this endpoint using the `setup_uuid` returned from the provisioning request until\n`status` becomes `completed`, at which point `website_uid` identifies the new website." + } + }, + "com.hostinger.api#AgencyHostingBuildWebsiteNodeJSAssetsV1Request": { + "type": "structure", + "members": { + "website_uid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Agency Plan website UID" + } + }, + "archive_path": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Directory, relative to the website document root, where the uploaded site archive currently lives. Most commonly this is simply `public_html`.", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#AgencyHostingBuildWebsiteNodeJSAssetsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#AgencyHostingBuildWebsiteNodeJSAssetsV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/agency-hosting/v1/websites/{website_uid}/build-assets", + "code": 200 + }, + "smithy.api#documentation": "Build website NodeJS assets\n\nBuilds and deploys a Node.js application for an Agency Plan website from an already-uploaded archive.\n\nUpload the archive to file browser first, then provide its relative path from document root in this request.\nWebsite contents are overwritten by the build result, which is deployed to public_html." + } + }, + "com.hostinger.api#ClearAgencyHostingWebsiteCacheV1Request": { + "type": "structure", + "members": { + "website_uid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Agency Plan website UID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#ClearAgencyHostingWebsiteCacheV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ClearAgencyHostingWebsiteCacheV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "traits": { + "smithy.api#http": { + "method": "DELETE", + "uri": "/api/agency-hosting/v1/websites/{website_uid}/cache", + "code": 200 + }, + "smithy.api#documentation": "Clear website cache\n\nClears cache for all domains associated with an Agency Plan website, including its preview domain.\n\nThis operation clears all cache types for the website." + } + }, + "com.hostinger.api#ListAgencyHostingWebsiteCronJobsV1Request": { + "type": "structure", + "members": { + "website_uid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Agency Plan website UID" + } + }, + "page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "page", + "smithy.api#documentation": "Page number" + } + }, + "per_page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "per_page", + "smithy.api#documentation": "Number of items per page" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#AgencyHostingV1WebsitesCronJobsCronJobCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#AgencyHostingV1WebsitesCronJobsCronJobResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`AgencyHosting.V1.Websites.CronJobs.CronJobResource`](#model/agencyhostingv1websitescronjobscronjobresource)" + } + }, + "com.hostinger.api#AgencyHostingV1WebsitesCronJobsCronJobResource": { + "type": "structure", + "members": { + "uuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Unique identifier of the cron job. Use it to delete the cron job." + } + }, + "time": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Cron schedule expression." + } + }, + "command": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Command executed on the configured schedule." + } + }, + "created_at": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Cron job creation timestamp." + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListAgencyHostingWebsiteCronJobsV1Response": { + "type": "structure", + "members": { + "data": { + "target": "com.hostinger.api#AgencyHostingV1WebsitesCronJobsCronJobCollection" + }, + "meta": { + "target": "com.hostinger.api#CommonSchemaPaginationMetaSchema" + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListAgencyHostingWebsiteCronJobsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListAgencyHostingWebsiteCronJobsV1Request" + }, + "output": { + "target": "com.hostinger.api#ListAgencyHostingWebsiteCronJobsV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/agency-hosting/v1/websites/{website_uid}/cron-jobs", + "code": 200 + }, + "smithy.api#documentation": "List website cron jobs\n\nReturns a paginated list of cron jobs configured for an Agency Plan website.\n\nEach entry includes the schedule expression and the command executed on that schedule." + } + }, + "com.hostinger.api#CreateAgencyHostingWebsiteCronJobV1Request": { + "type": "structure", + "members": { + "website_uid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Agency Plan website UID" + } + }, + "time": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Cron schedule expression (standard 5-field crontab syntax).", + "smithy.api#required": {} + } + }, + "command": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Command to run on the schedule. Must not contain pipe (|) or redirection (<, >) characters.", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#CreateAgencyHostingWebsiteCronJobV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#CreateAgencyHostingWebsiteCronJobV1Request" + }, + "output": { + "target": "com.hostinger.api#AgencyHostingV1WebsitesCronJobsCronJobResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/agency-hosting/v1/websites/{website_uid}/cron-jobs", + "code": 200 + }, + "smithy.api#documentation": "Create website cron job\n\nCreates a cron job for an Agency Plan website from a schedule expression and a command.\n\nReturns the created cron job, including its uuid, which is required to delete the cron job." + } + }, + "com.hostinger.api#DeleteAgencyHostingWebsiteCronJobV1Request": { + "type": "structure", + "members": { + "website_uid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Agency Plan website UID" + } + }, + "uuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Unique identifier of the cron job as returned by the list cron jobs endpoint." + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DeleteAgencyHostingWebsiteCronJobV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#DeleteAgencyHostingWebsiteCronJobV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "traits": { + "smithy.api#http": { + "method": "DELETE", + "uri": "/api/agency-hosting/v1/websites/{website_uid}/cron-jobs/{uuid}", + "code": 200 + }, + "smithy.api#documentation": "Delete website cron job\n\nPermanently deletes the cron job identified by its uuid from an Agency Plan website.\n\nThe operation is idempotent: deleting a cron job that does not exist succeeds without error." + } + }, + "com.hostinger.api#ListAgencyHostingWebsiteDatabasesV1Request": { + "type": "structure", + "members": { + "website_uid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Agency Plan website UID" + } + }, + "page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "page", + "smithy.api#documentation": "Page number" + } + }, + "per_page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "per_page", + "smithy.api#documentation": "Number of items per page" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#AgencyHostingV1WebsitesDatabasesDatabaseCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#AgencyHostingV1WebsitesDatabasesDatabaseResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`AgencyHosting.V1.Websites.Databases.DatabaseResource`](#model/agencyhostingv1websitesdatabasesdatabaseresource)" + } + }, + "com.hostinger.api#AgencyHostingV1WebsitesDatabasesDatabaseResource": { + "type": "structure", + "members": { + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Database name." + } + }, + "created_at": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Database creation date in ISO 8601 format." + } + }, + "users": { + "target": "com.hostinger.api#AgencyHostingV1WebsitesDatabasesDatabaseResourceUsersList", + "traits": { + "smithy.api#documentation": "Non-system users that can access the database." + } + } + }, + "traits": {} + }, + "com.hostinger.api#AgencyHostingV1WebsitesDatabasesDatabaseUserResource": { + "type": "structure", + "members": { + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Database username." + } + }, + "host": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Database host the user is allowed to connect from." + } + }, + "created_at": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Database user creation date in ISO 8601 format." + } + } + }, + "traits": {} + }, + "com.hostinger.api#AgencyHostingV1WebsitesDatabasesDatabaseResourceUsersList": { + "type": "list", + "member": { + "target": "com.hostinger.api#AgencyHostingV1WebsitesDatabasesDatabaseUserResource" + }, + "traits": { + "smithy.api#documentation": "Non-system users that can access the database." + } + }, + "com.hostinger.api#ListAgencyHostingWebsiteDatabasesV1Response": { + "type": "structure", + "members": { + "data": { + "target": "com.hostinger.api#AgencyHostingV1WebsitesDatabasesDatabaseCollection" + }, + "meta": { + "target": "com.hostinger.api#CommonSchemaPaginationMetaSchema" + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListAgencyHostingWebsiteDatabasesV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListAgencyHostingWebsiteDatabasesV1Request" + }, + "output": { + "target": "com.hostinger.api#ListAgencyHostingWebsiteDatabasesV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/agency-hosting/v1/websites/{website_uid}/databases", + "code": 200 + }, + "smithy.api#documentation": "List website databases\n\nReturns a paginated list of MySQL databases created for an Agency Plan website.\n\nEach entry includes the database's non-system users." + } + }, + "com.hostinger.api#CreateAgencyHostingWebsiteDatabaseV1Request": { + "type": "structure", + "members": { + "website_uid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Agency Plan website UID" + } + }, + "database_name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Database name to create (alphanumeric characters).", + "smithy.api#required": {} + } + }, + "database_user": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Database username to create alongside the database (alphanumeric characters).", + "smithy.api#required": {} + } + }, + "password": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Password for the database user (requires mixed case, letters, and numbers).", + "smithy.api#required": {}, + "smithy.api#sensitive": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#CreateAgencyHostingWebsiteDatabaseV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#CreateAgencyHostingWebsiteDatabaseV1Request" + }, + "output": { + "target": "com.hostinger.api#AgencyHostingV1WebsitesDatabasesDatabaseResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/agency-hosting/v1/websites/{website_uid}/databases", + "code": 200 + }, + "smithy.api#documentation": "Create website database\n\nCreates a MySQL database with a dedicated user for an Agency Plan website.\n\nThe database name, username, and password must all be provided by the caller." + } + }, + "com.hostinger.api#DeleteAgencyHostingWebsiteDatabaseV1Request": { + "type": "structure", + "members": { + "website_uid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Agency Plan website UID" + } + }, + "database_name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Full database name as returned by the list databases endpoint." + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DeleteAgencyHostingWebsiteDatabaseV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#DeleteAgencyHostingWebsiteDatabaseV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "traits": { + "smithy.api#http": { + "method": "DELETE", + "uri": "/api/agency-hosting/v1/websites/{website_uid}/databases/{database_name}", + "code": 200 + }, + "smithy.api#documentation": "Delete website database\n\nPermanently deletes a MySQL database and all its data from an Agency Plan website, including its users.\n\nThe operation is idempotent: deleting a database that does not exist succeeds without error." + } + }, + "com.hostinger.api#CreateAgencyHostingWebsiteDatabaseUserV1Request": { + "type": "structure", + "members": { + "website_uid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Agency Plan website UID" + } + }, + "database_name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Full database name as returned by the list databases endpoint." + } + }, + "database_user": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Database username to create (alphanumeric and underscores).", + "smithy.api#required": {} + } + }, + "password": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Password for the database user (requires mixed case, letters, and numbers).", + "smithy.api#required": {}, + "smithy.api#sensitive": {} + } + }, + "host": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Host the user connects from (IPv4, IPv6, % wildcard, or localhost). Defaults to localhost.", + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#CreateAgencyHostingWebsiteDatabaseUserV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#CreateAgencyHostingWebsiteDatabaseUserV1Request" + }, + "output": { + "target": "com.hostinger.api#AgencyHostingV1WebsitesDatabasesDatabaseUserResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/agency-hosting/v1/websites/{website_uid}/databases/{database_name}/users", + "code": 200 + }, + "smithy.api#documentation": "Create website database user\n\nCreates a user for an existing database on an Agency Plan website.\n\nEach database supports a single non-system user; creating a user for a database that already has one fails." + } + }, + "com.hostinger.api#DeleteAgencyHostingWebsiteDatabaseUserV1Request": { + "type": "structure", + "members": { + "website_uid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Agency Plan website UID" + } + }, + "database_name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Full database name as returned by the list databases endpoint." + } + }, + "database_user_name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Database username as returned by the list databases endpoint." + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DeleteAgencyHostingWebsiteDatabaseUserV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#DeleteAgencyHostingWebsiteDatabaseUserV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "traits": { + "smithy.api#http": { + "method": "DELETE", + "uri": "/api/agency-hosting/v1/websites/{website_uid}/databases/{database_name}/users/{database_user_name}", + "code": 200 + }, + "smithy.api#documentation": "Delete website database user\n\nPermanently deletes a database user from an Agency Plan website database, revoking all access it had.\n\nThe operation is idempotent: deleting a user that does not exist succeeds without error." + } + }, + "com.hostinger.api#GetAgencyHostingWebsiteDetailsV1Request": { + "type": "structure", + "members": { + "website_uid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Agency Plan website UID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#AgencyHostingV1WebsitesWebsiteResource": { + "type": "structure", + "members": { + "uid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Website UID" + } + }, + "ipv4": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "IPv4 address" + } + }, + "flavor": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Setup flavor" + } + }, + "type": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Website type", + "com.distilled.openapi#nullable": {} + } + }, + "description": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Description", + "com.distilled.openapi#nullable": {} + } + }, + "state": { + "target": "com.hostinger.api#AgencyHostingV1WebsitesWebsiteResourceState", + "traits": { + "smithy.api#documentation": "Website state" + } + }, + "created_at": { + "target": "smithy.api#String" + }, + "domains": { + "target": "com.hostinger.api#AgencyHostingV1WebsitesWebsiteDomainDetailsCollection" + }, + "preview_domain": { + "target": "com.hostinger.api#AgencyHostingV1WebsitesWebsitePreviewDomainResource", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "settings": { + "target": "com.hostinger.api#AgencyHostingV1WebsitesWebsiteSettingsResource" + }, + "wordpress": { + "target": "com.hostinger.api#AgencyHostingV1WebsitesWordPressInstallResource", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "remote_access": { + "target": "com.hostinger.api#AgencyHostingV1WebsitesWebsiteRemoteAccessResource" + }, + "server": { + "target": "com.hostinger.api#AgencyHostingV1WebsitesWebsiteServerResource" + }, + "order": { + "target": "com.hostinger.api#AgencyHostingV1WebsitesWebsiteOrderResource" + }, + "user": { + "target": "com.hostinger.api#AgencyHostingV1WebsitesWebsiteUserResource" + }, + "staging_root": { + "target": "com.hostinger.api#AgencyHostingV1WebsitesWebsiteStagingRootResource", + "traits": { + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#AgencyHostingV1WebsitesWebsiteResourceState": { + "type": "enum", + "members": { + "ACTIVE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "active" + } + }, + "SUSPENDED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "suspended" + } + } + }, + "traits": { + "smithy.api#documentation": "Website state" + } + }, + "com.hostinger.api#AgencyHostingV1WebsitesWebsiteDomainDetailsCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#AgencyHostingV1WebsitesWebsiteDomainDetailsResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`AgencyHosting.V1.Websites.WebsiteDomainDetailsResource`](#model/agencyhostingv1websiteswebsitedomaindetailsresource)" + } + }, + "com.hostinger.api#AgencyHostingV1WebsitesWebsiteDomainDetailsResource": { + "type": "structure", + "members": { + "fqdn": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Domain name" + } + }, + "parent_fqdn": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Parent domain name if the domain is a subdomain", + "com.distilled.openapi#nullable": {} + } + }, + "ipv6": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "IPv6 address", + "com.distilled.openapi#nullable": {} + } + }, + "created_at": { + "target": "smithy.api#String" + }, + "nameservers": { + "target": "com.hostinger.api#AgencyHostingV1WebsitesWebsiteDomainDetailsResourceNameserversList" + }, + "ssl_cert": { + "target": "com.hostinger.api#AgencyHostingV1WebsitesSslCertResource", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "custom_ssl_cert": { + "target": "com.hostinger.api#AgencyHostingV1WebsitesCustomSslCertResource", + "traits": { + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#AgencyHostingV1WebsitesWebsiteDomainDetailsResourceNameserversList": { + "type": "list", + "member": { + "target": "smithy.api#String" + }, + "traits": {} + }, + "com.hostinger.api#AgencyHostingV1WebsitesSslCertResource": { + "type": "structure", + "members": { + "names": { + "target": "com.hostinger.api#AgencyHostingV1WebsitesSslCertResourceNamesList", + "traits": { + "smithy.api#documentation": "SSL cert names" + } + }, + "expires_at": { + "target": "smithy.api#String" + }, + "created_at": { + "target": "smithy.api#String" + } + }, + "traits": {} + }, + "com.hostinger.api#AgencyHostingV1WebsitesSslCertResourceNamesList": { + "type": "list", + "member": { + "target": "smithy.api#String" + }, + "traits": { + "smithy.api#documentation": "SSL cert names" + } + }, + "com.hostinger.api#AgencyHostingV1WebsitesCustomSslCertResource": { + "type": "structure", + "members": { + "is_expired": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Is the SSL certificate expired" + } + }, + "expires_at": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "created_at": { + "target": "smithy.api#String" + } + }, + "traits": {} + }, + "com.hostinger.api#AgencyHostingV1WebsitesWebsitePreviewDomainResource": { + "type": "structure", + "members": { + "fqdn": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Preview domain name" + } + }, + "created_at": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Creation date" + } + } + }, + "traits": {} + }, + "com.hostinger.api#AgencyHostingV1WebsitesWebsiteSettingsResource": { + "type": "structure", + "members": { + "php": { + "target": "com.hostinger.api#AgencyHostingV1WebsitesWebsitePhpSettingsResource", + "traits": { + "smithy.api#documentation": "PHP settings", + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#AgencyHostingV1WebsitesWebsitePhpSettingsResource": { + "type": "structure", + "members": { + "version": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "PHP version" + } + }, + "workers": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Number of PHP workers" + } + } + }, + "traits": {} + }, + "com.hostinger.api#AgencyHostingV1WebsitesWordPressInstallResource": { + "type": "structure", + "members": { + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "WordPress domain" + } + }, + "title": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "WordPress title" + } + }, + "language": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "WordPress language" + } + }, + "is_config_locked": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "WordPress configuration lock status" + } + }, + "created_at": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Creation date" + } + } + }, + "traits": {} + }, + "com.hostinger.api#AgencyHostingV1WebsitesWebsiteRemoteAccessResource": { + "type": "structure", + "members": { + "mode": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Remote access mode" + } + }, + "ssh": { + "target": "com.hostinger.api#AgencyHostingV1WebsitesWebsiteSshDetailsResource" + }, + "sftp": { + "target": "com.hostinger.api#AgencyHostingV1WebsitesWebsiteSftpDetailsResource" + } + }, + "traits": {} + }, + "com.hostinger.api#AgencyHostingV1WebsitesWebsiteSshDetailsResource": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "SSH username" + } + }, + "host": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "SSH host" + } + }, + "port": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "SSH port" + } + }, + "is_enabled": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Is SSH access enabled" + } + }, + "is_password_enabled": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Is SSH password access enabled" + } + } + }, + "traits": {} + }, + "com.hostinger.api#AgencyHostingV1WebsitesWebsiteSftpDetailsResource": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "SFTP username" + } + }, + "host": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "SFTP host" + } + }, + "port": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "SFTP port" + } + }, + "is_enabled": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Is SFTP access enabled" + } + } + }, + "traits": {} + }, + "com.hostinger.api#AgencyHostingV1WebsitesWebsiteServerResource": { + "type": "structure", + "members": { + "hostname": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Server hostname" + } + }, + "country_code": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Country code" + } + } + }, + "traits": {} + }, + "com.hostinger.api#AgencyHostingV1WebsitesWebsiteOrderResource": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Order ID" + } + }, + "status": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Order status", + "com.distilled.openapi#nullable": {} + } + }, + "created_at": { + "target": "smithy.api#String" + }, + "plan": { + "target": "com.hostinger.api#AgencyHostingV1WebsitesWebsiteOrderPlanResource" + } + }, + "traits": {} + }, + "com.hostinger.api#AgencyHostingV1WebsitesWebsiteOrderPlanResource": { + "type": "structure", + "members": { + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Plan name", + "com.distilled.openapi#nullable": {} + } + }, + "parameters": { + "target": "com.hostinger.api#AgencyHostingV1WebsitesWebsiteOrderPlanResourceParameters", + "traits": { + "smithy.api#documentation": "Plan parameters" + } + } + }, + "traits": {} + }, + "com.hostinger.api#AgencyHostingV1WebsitesWebsiteOrderPlanResourceParameters": { + "type": "structure", + "members": { + "disk_quota_bytes": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Disk quota in bytes" + } + }, + "inode_quota": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Inode quota" + } + }, + "cpu_cores": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "CPU cores" + } + }, + "memory_quota_bytes": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Memory quota in bytes" + } + }, + "disk_iops_quota": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Disk IOPs quota" + } + }, + "process_quota": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Process quota" + } + }, + "website_quota": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Website quota" + } + }, + "max_databases_per_website": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Maximum number of databases per website" + } + }, + "is_cdn_available": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Is CDN available" + } + } + }, + "traits": { + "smithy.api#documentation": "Plan parameters" + } + }, + "com.hostinger.api#AgencyHostingV1WebsitesWebsiteUserResource": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "System username" + } + }, + "state": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "User state" + } + } + }, + "traits": {} + }, + "com.hostinger.api#AgencyHostingV1WebsitesWebsiteStagingRootResource": { + "type": "structure", + "members": { + "uid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "UID of the website this is a staging environment of" + } + } + }, + "traits": {} + }, + "com.hostinger.api#GetAgencyHostingWebsiteDetailsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#GetAgencyHostingWebsiteDetailsV1Request" + }, + "output": { + "target": "com.hostinger.api#AgencyHostingV1WebsitesWebsiteResource" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/agency-hosting/v1/websites/{website_uid}", + "code": 200 + }, + "smithy.api#documentation": "Get website details\n\nRetrieves detailed information about a specific Agency Plan website, including configuration,\nstatus, metadata, hosting plan details, and resource quotas." + } + }, + "com.hostinger.api#DeleteAgencyHostingWebsiteV1Request": { + "type": "structure", + "members": { + "website_uid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Agency Plan website UID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DeleteAgencyHostingWebsiteV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#DeleteAgencyHostingWebsiteV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "traits": { + "smithy.api#http": { + "method": "DELETE", + "uri": "/api/agency-hosting/v1/websites/{website_uid}", + "code": 200 + }, + "smithy.api#documentation": "Delete website\n\nPermanently deletes an Agency Plan website. Deletion is processed asynchronously: the\nwebsite is immediately transitioned to a deleting state and the underlying server\nresources are removed in the background." + } + }, + "com.hostinger.api#ListAgencyHostingAgencyPlanWebsitesV1RequestOrderIdsList": { + "type": "list", + "member": { + "target": "smithy.api#Integer" + }, + "traits": {} + }, + "com.hostinger.api#ListAgencyHostingAgencyPlanWebsitesV1RequestStatesItem": { + "type": "enum", + "members": { + "ACTIVE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "active" + } + }, + "LOCKED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "locked" + } + }, + "SUSPENDED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "suspended" + } + }, + "DELETING": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "deleting" + } + }, + "DELETED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "deleted" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListAgencyHostingAgencyPlanWebsitesV1RequestStatesList": { + "type": "list", + "member": { + "target": "com.hostinger.api#ListAgencyHostingAgencyPlanWebsitesV1RequestStatesItem" + }, + "traits": {} + }, + "com.hostinger.api#ListAgencyHostingAgencyPlanWebsitesV1RequestWebsiteTypesItem": { + "type": "enum", + "members": { + "WORDPRESS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "wordpress" + } + }, + "BUILDER": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "builder" + } + }, + "HORIZONS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "horizons" + } + }, + "NODEJS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "nodejs" + } + }, + "OTHER": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "other" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListAgencyHostingAgencyPlanWebsitesV1RequestWebsiteTypesList": { + "type": "list", + "member": { + "target": "com.hostinger.api#ListAgencyHostingAgencyPlanWebsitesV1RequestWebsiteTypesItem" + }, + "traits": {} + }, + "com.hostinger.api#ListAgencyHostingAgencyPlanWebsitesV1Request": { + "type": "structure", + "members": { + "page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "page", + "smithy.api#documentation": "Page number" + } + }, + "per_page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "per_page", + "smithy.api#documentation": "Number of items per page" + } + }, + "order_ids": { + "target": "com.hostinger.api#ListAgencyHostingAgencyPlanWebsitesV1RequestOrderIdsList", + "traits": { + "smithy.api#httpQuery": "order_ids", + "smithy.api#documentation": "Filter by order IDs. Accepts a comma-separated list." + } + }, + "states": { + "target": "com.hostinger.api#ListAgencyHostingAgencyPlanWebsitesV1RequestStatesList", + "traits": { + "smithy.api#httpQuery": "states", + "smithy.api#documentation": "Filter by website state. Accepts a comma-separated list." + } + }, + "website_types": { + "target": "com.hostinger.api#ListAgencyHostingAgencyPlanWebsitesV1RequestWebsiteTypesList", + "traits": { + "smithy.api#httpQuery": "website_types", + "smithy.api#documentation": "Filter by detected website type, e.g. wordpress,nodejs. Accepts a comma-separated list." + } + }, + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpQuery": "domain", + "smithy.api#documentation": "Filter by domain name (case-insensitive substring match)" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#AgencyHostingV1WebsitesWebsiteCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#AgencyHostingV1WebsitesWebsiteListItemResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`AgencyHosting.V1.Websites.WebsiteListItemResource`](#model/agencyhostingv1websiteswebsitelistitemresource)" + } + }, + "com.hostinger.api#AgencyHostingV1WebsitesWebsiteListItemResource": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#required": {} + } + }, + "client_id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#required": {} + } + }, + "order_id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#required": {} + } + }, + "platform": { + "target": "com.hostinger.api#AgencyHostingV1WebsitesWebsiteListItemResourcePlatform", + "traits": { + "smithy.api#documentation": "Website platform", + "smithy.api#required": {} + } + }, + "state": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Website state", + "smithy.api#required": {} + } + }, + "created_at": { + "target": "smithy.api#String", + "traits": { + "smithy.api#required": {} + } + }, + "plan": { + "target": "com.hostinger.api#AgencyHostingV1WebsitesPlanResource", + "traits": { + "smithy.api#required": {} + } + }, + "details": { + "target": "com.hostinger.api#AgencyHostingV1WebsitesWebsiteListItemResourceDetails", + "traits": { + "smithy.api#documentation": "Platform-specific website details. Shape depends on `platform`.", + "smithy.api#required": {} + } + }, + "suspension_reason": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Reason for suspension, only populated for payment related suspensions", + "smithy.api#required": {}, + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": { + "smithy.api#documentation": "Website item. The `details` shape differs per platform — see the `platform` field." + } + }, + "com.hostinger.api#AgencyHostingV1WebsitesWebsiteListItemResourcePlatform": { + "type": "enum", + "members": { + "H5G": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "h5g" + } + }, + "BUILDER": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "builder" + } + }, + "U4S": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "u4s" + } + } + }, + "traits": { + "smithy.api#documentation": "Website platform" + } + }, + "com.hostinger.api#AgencyHostingV1WebsitesPlanResource": { + "type": "structure", + "members": { + "name": { + "target": "smithy.api#String" + }, + "display_name": { + "target": "smithy.api#String" + }, + "has_cdn": { + "target": "smithy.api#Boolean" + } + }, + "traits": { + "smithy.api#documentation": "Website plan details" + } + }, + "com.hostinger.api#AgencyHostingV1WebsitesH5gWebsiteDetailsResource": { + "type": "structure", + "members": { + "uid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Website UID" + } + }, + "ipv4": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "IPv4 address" + } + }, + "flavor": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Setup flavor" + } + }, + "type": { + "target": "com.hostinger.api#AgencyHostingV1WebsitesH5gWebsiteDetailsResourceType", + "traits": { + "smithy.api#documentation": "Detected website type" + } + }, + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Username for this order" + } + }, + "description": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Description", + "com.distilled.openapi#nullable": {} + } + }, + "state": { + "target": "com.hostinger.api#AgencyHostingV1WebsitesH5gWebsiteDetailsResourceState", + "traits": { + "smithy.api#documentation": "Website state" + } + }, + "created_at": { + "target": "smithy.api#String" + }, + "settings": { + "target": "smithy.api#Document", + "traits": { + "smithy.api#documentation": "Website settings, e.g. PHP configuration" + } + }, + "wordpress": { + "target": "smithy.api#Document", + "traits": { + "smithy.api#documentation": "WordPress installation details", + "com.distilled.openapi#nullable": {} + } + }, + "domains": { + "target": "com.hostinger.api#AgencyHostingV1WebsitesH5gWebsiteDetailsResourceDomainsList", + "traits": { + "smithy.api#documentation": "Website domains" + } + }, + "preview_domain": { + "target": "smithy.api#Document", + "traits": { + "smithy.api#documentation": "Preview domain", + "com.distilled.openapi#nullable": {} + } + }, + "processes": { + "target": "com.hostinger.api#AgencyHostingV1WebsitesH5gWebsiteDetailsResourceProcessesList", + "traits": { + "smithy.api#documentation": "Ongoing website processes" + } + }, + "horizons_uuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Horizons UUID (only for horizons websites)", + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#AgencyHostingV1WebsitesH5gWebsiteDetailsResourceType": { + "type": "enum", + "members": { + "WORDPRESS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "wordpress" + } + }, + "BUILDER": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "builder" + } + }, + "HORIZONS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "horizons" + } + }, + "NODEJS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "nodejs" + } + }, + "U4S": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "u4s" + } + }, + "OTHER": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "other" + } + } + }, + "traits": { + "smithy.api#documentation": "Detected website type" + } + }, + "com.hostinger.api#AgencyHostingV1WebsitesH5gWebsiteDetailsResourceState": { + "type": "enum", + "members": { + "ACTIVE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "active" + } + }, + "SUSPENDED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "suspended" + } + } + }, + "traits": { + "smithy.api#documentation": "Website state" + } + }, + "com.hostinger.api#AgencyHostingV1WebsitesH5gWebsiteDetailsResourceDomainsList": { + "type": "list", + "member": { + "target": "smithy.api#Document" + }, + "traits": { + "smithy.api#documentation": "Website domains" + } + }, + "com.hostinger.api#AgencyHostingV1WebsitesH5gWebsiteDetailsResourceProcessesList": { + "type": "list", + "member": { + "target": "smithy.api#Document" + }, + "traits": { + "smithy.api#documentation": "Ongoing website processes" + } + }, + "com.hostinger.api#AgencyHostingV1WebsitesBuilderWebsiteDetailsResource": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Builder ID", + "com.distilled.openapi#nullable": {} + } + }, + "vhost": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Domain name" + } + }, + "type": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Detected website type" + } + }, + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Account username" + } + }, + "created_at": { + "target": "smithy.api#String" + } + }, + "traits": {} + }, + "com.hostinger.api#AgencyHostingV1WebsitesU4sWebsiteDetailsResource": { + "type": "structure", + "members": { + "uuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Application UUID" + } + }, + "title": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Application title" + } + }, + "port": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Application port" + } + }, + "type": { + "target": "com.hostinger.api#AgencyHostingV1WebsitesU4sWebsiteDetailsResourceType", + "traits": { + "smithy.api#documentation": "Detected website type" + } + }, + "runtime": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Application runtime" + } + }, + "state": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Application state" + } + }, + "domains": { + "target": "com.hostinger.api#AgencyHostingV1WebsitesU4sWebsiteDetailsResourceDomainsList", + "traits": { + "smithy.api#documentation": "Application domains" + } + }, + "horizons_uuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Horizons UUID", + "com.distilled.openapi#nullable": {} + } + }, + "preview_domain": { + "target": "smithy.api#Document", + "traits": { + "smithy.api#documentation": "Preview domain", + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#AgencyHostingV1WebsitesU4sWebsiteDetailsResourceType": { + "type": "enum", + "members": { + "U4S": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "u4s" + } + }, + "HORIZONS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "horizons" + } + } + }, + "traits": { + "smithy.api#documentation": "Detected website type" + } + }, + "com.hostinger.api#AgencyHostingV1WebsitesU4sWebsiteDetailsResourceDomainsList": { + "type": "list", + "member": { + "target": "smithy.api#Document" + }, + "traits": { + "smithy.api#documentation": "Application domains" + } + }, + "com.hostinger.api#AgencyHostingV1WebsitesWebsiteListItemResourceDetails": { + "type": "union", + "members": { + "AgencyHostingV1WebsitesH5gWebsiteDetailsResource": { + "target": "com.hostinger.api#AgencyHostingV1WebsitesH5gWebsiteDetailsResource" + }, + "AgencyHostingV1WebsitesBuilderWebsiteDetailsResource": { + "target": "com.hostinger.api#AgencyHostingV1WebsitesBuilderWebsiteDetailsResource" + }, + "AgencyHostingV1WebsitesU4sWebsiteDetailsResource": { + "target": "com.hostinger.api#AgencyHostingV1WebsitesU4sWebsiteDetailsResource" + } + }, + "traits": { + "smithy.api#documentation": "Platform-specific website details. Shape depends on `platform`." + } + }, + "com.hostinger.api#ListAgencyHostingAgencyPlanWebsitesV1Response": { + "type": "structure", + "members": { + "data": { + "target": "com.hostinger.api#AgencyHostingV1WebsitesWebsiteCollection" + }, + "meta": { + "target": "com.hostinger.api#CommonSchemaPaginationMetaSchema" + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListAgencyHostingAgencyPlanWebsitesV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListAgencyHostingAgencyPlanWebsitesV1Request" + }, + "output": { + "target": "com.hostinger.api#ListAgencyHostingAgencyPlanWebsitesV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/agency-hosting/v1/websites", + "code": 200 + }, + "smithy.api#documentation": "List Agency Plan websites\n\nRetrieve a paginated list of Agency Plan websites (H5G, Builder, and Horizons) accessible to\nthe authenticated client.\n\nThis endpoint returns websites from your hosting accounts as well as\nwebsites from other client hosting accounts that have shared access\nwith you.\n\nThe response shape differs per platform — see the `platform` field on each item.\n\nUse `website_types` to list only websites of a given detected type, e.g. only\nWordPress websites (`website_types=wordpress`) or only Node.js websites\n(`website_types=nodejs`). Combine with `order_ids`, `states`, or `domain` for more\ntargeted results." + } + }, + "com.hostinger.api#ListAgencyHostingWebsiteProcessesV1Request": { + "type": "structure", + "members": { + "website_uid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Agency Plan website UID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#AgencyHostingV1WebsitesWebsiteProcessCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#AgencyHostingV1WebsitesWebsiteProcessResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`AgencyHosting.V1.Websites.WebsiteProcessResource`](#model/agencyhostingv1websiteswebsiteprocessresource)" + } + }, + "com.hostinger.api#AgencyHostingV1WebsitesWebsiteProcessResource": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Process ID" + } + }, + "type": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Process type" + } + }, + "status": { + "target": "com.hostinger.api#AgencyHostingV1WebsitesWebsiteProcessResourceStatus", + "traits": { + "smithy.api#documentation": "Process status" + } + } + }, + "traits": {} + }, + "com.hostinger.api#AgencyHostingV1WebsitesWebsiteProcessResourceStatus": { + "type": "enum", + "members": { + "RUNNING": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "running" + } + }, + "COMPLETED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "completed" + } + }, + "FAILED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "failed" + } + } + }, + "traits": { + "smithy.api#documentation": "Process status" + } + }, + "com.hostinger.api#ListAgencyHostingWebsiteProcessesV1Response": { + "type": "structure", + "members": { + "body": { + "target": "com.hostinger.api#AgencyHostingV1WebsitesWebsiteProcessCollection", + "traits": { + "com.distilled.openapi#rawResponse": {}, + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListAgencyHostingWebsiteProcessesV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListAgencyHostingWebsiteProcessesV1Request" + }, + "output": { + "target": "com.hostinger.api#ListAgencyHostingWebsiteProcessesV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/agency-hosting/v1/websites/{website_uid}/processes", + "code": 200 + }, + "smithy.api#documentation": "List website processes\n\nLists active and recently completed asynchronous processes for an Agency Plan website.\n\nEach process has a unique ID (for tracking), a type, and a status (running, completed, failed).\nPoll this endpoint after initiating async operations (SSL setup, backups, cloning) to track progress." + } + }, + "com.hostinger.api#AgencyHostingChangeWordPressVersionV1Request": { + "type": "structure", + "members": { + "website_uid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Agency Plan website UID" + } + }, + "version": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Target WordPress core version to install. Must be one of the available versions.", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#AgencyHostingChangeWordPressVersionV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#AgencyHostingChangeWordPressVersionV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "PATCH", + "uri": "/api/agency-hosting/v1/websites/{website_uid}/wordpress/settings/version", + "code": 200 + }, + "smithy.api#documentation": "Change WordPress version\n\nChanges the installed WordPress core version on an Agency Plan website to one of the versions available for installation." + } + }, + "com.hostinger.api#GetAgencyHostingWordPressSettingsV1Request": { + "type": "structure", + "members": { + "website_uid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Agency Plan website UID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#AgencyHostingV1WordPressSettingsResource": { + "type": "structure", + "members": { + "core_version": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Currently installed WordPress core version, or null when it cannot be determined.", + "com.distilled.openapi#nullable": {} + } + }, + "is_lite_speed_cache_enabled": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether the LiteSpeed Cache plugin is active." + } + }, + "is_object_cache_enabled": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether LiteSpeed object cache is enabled." + } + }, + "is_maintenance_mode_enabled": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether WordPress maintenance mode is currently enabled." + } + } + }, + "traits": {} + }, + "com.hostinger.api#GetAgencyHostingWordPressSettingsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#GetAgencyHostingWordPressSettingsV1Request" + }, + "output": { + "target": "com.hostinger.api#AgencyHostingV1WordPressSettingsResource" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/agency-hosting/v1/websites/{website_uid}/wordpress/settings", + "code": 200 + }, + "smithy.api#documentation": "Get WordPress settings\n\nReturns the current WordPress settings for an Agency Plan website: installed core version,\nLiteSpeed Cache plugin status, object cache status, and maintenance mode status." + } + }, + "com.hostinger.api#ListAgencyHostingAvailableWordPressVersionsV1Request": { + "type": "structure", + "members": { + "website_uid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Agency Plan website UID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#AgencyHostingV1WordPressVersionCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#AgencyHostingV1WordPressVersionResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`AgencyHosting.V1.WordPress.VersionResource`](#model/agencyhostingv1wordpressversionresource)" + } + }, + "com.hostinger.api#AgencyHostingV1WordPressVersionResource": { + "type": "structure", + "members": { + "version": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "WordPress core version." + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListAgencyHostingAvailableWordPressVersionsV1Response": { + "type": "structure", + "members": { + "body": { + "target": "com.hostinger.api#AgencyHostingV1WordPressVersionCollection", + "traits": { + "com.distilled.openapi#rawResponse": {}, + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListAgencyHostingAvailableWordPressVersionsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListAgencyHostingAvailableWordPressVersionsV1Request" + }, + "output": { + "target": "com.hostinger.api#ListAgencyHostingAvailableWordPressVersionsV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/agency-hosting/v1/websites/{website_uid}/wordpress/settings/versions", + "code": 200 + }, + "smithy.api#documentation": "List available WordPress versions\n\nLists the WordPress core versions available for installation on an Agency Plan website." + } + }, + "com.hostinger.api#BillingGetCatalogItemListV1RequestCategory": { + "type": "enum", + "members": { + "DOMAIN": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "DOMAIN" + } + }, + "VPS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "VPS" + } + }, + "EMAIL": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "EMAIL" + } + } + }, + "traits": {} + }, + "com.hostinger.api#BillingGetCatalogItemListV1Request": { + "type": "structure", + "members": { + "category": { + "target": "com.hostinger.api#BillingGetCatalogItemListV1RequestCategory", + "traits": { + "smithy.api#httpQuery": "category", + "smithy.api#documentation": "Filter catalog items by category" + } + }, + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpQuery": "name", + "smithy.api#documentation": "Filter catalog items by name. Use `*` for wildcard search, e.g. `.COM*` to find .com domain" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#BillingV1CatalogCatalogItemCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#BillingV1CatalogCatalogItemResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`Billing.V1.Catalog.CatalogItemResource`](#model/billingv1catalogcatalogitemresource)" + } + }, + "com.hostinger.api#BillingV1CatalogCatalogItemResource": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Catalog item ID" + } + }, + "name": { + "target": "smithy.api#String" + }, + "category": { + "target": "smithy.api#String" + }, + "metadata": { + "target": "smithy.api#Document", + "traits": { + "smithy.api#documentation": "\n Flexible key-value storage containing category-specific metadata for the catalog item.\n The structure and available fields vary depending on the item category.\n ", + "com.distilled.openapi#nullable": {} + } + }, + "prices": { + "target": "com.hostinger.api#BillingV1CatalogCatalogItemPriceCollection" + } + }, + "traits": {} + }, + "com.hostinger.api#BillingV1CatalogCatalogItemPriceCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#BillingV1CatalogCatalogItemPriceResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`Billing.V1.Catalog.CatalogItemPriceResource`](#model/billingv1catalogcatalogitempriceresource)" + } + }, + "com.hostinger.api#BillingV1CatalogCatalogItemPriceResource": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Price item ID" + } + }, + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Price item name" + } + }, + "currency": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Currency code" + } + }, + "price": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Price in cents" + } + }, + "first_period_price": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "First period price in cents" + } + }, + "period": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Period" + } + }, + "period_unit": { + "target": "com.hostinger.api#BillingV1CatalogCatalogItemPriceResourcePeriodUnit", + "traits": { + "smithy.api#documentation": "Period unit" + } + } + }, + "traits": {} + }, + "com.hostinger.api#BillingV1CatalogCatalogItemPriceResourcePeriodUnit": { + "type": "enum", + "members": { + "DAY": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "day" + } + }, + "WEEK": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "week" + } + }, + "MONTH": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "month" + } + }, + "YEAR": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "year" + } + }, + "NONE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "none" + } + } + }, + "traits": { + "smithy.api#documentation": "Period unit" + } + }, + "com.hostinger.api#BillingGetCatalogItemListV1Response": { + "type": "structure", + "members": { + "body": { + "target": "com.hostinger.api#BillingV1CatalogCatalogItemCollection", + "traits": { + "com.distilled.openapi#rawResponse": {}, + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#BillingGetCatalogItemListV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#BillingGetCatalogItemListV1Request" + }, + "output": { + "target": "com.hostinger.api#BillingGetCatalogItemListV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/billing/v1/catalog", + "code": 200 + }, + "smithy.api#documentation": "Get catalog item list\n\nRetrieve catalog items available for order.\n\nPrices in catalog items is displayed as cents (without floating point),\ne.g: float `17.99` is displayed as integer `1799`.\n\nUse this endpoint to view available services and pricing before placing orders." + } + }, + "com.hostinger.api#CreateBillingPurchaseOrderV1RequestItemsItem": { + "type": "structure", + "members": { + "item_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Catalog price item ID", + "smithy.api#required": {} + } + }, + "quantity": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Quantity to purchase" + } + } + }, + "traits": {} + }, + "com.hostinger.api#CreateBillingPurchaseOrderV1RequestItemsList": { + "type": "list", + "member": { + "target": "com.hostinger.api#CreateBillingPurchaseOrderV1RequestItemsItem" + }, + "traits": { + "smithy.api#documentation": "Catalog price items to purchase" + } + }, + "com.hostinger.api#CreateBillingPurchaseOrderV1RequestCouponsList": { + "type": "list", + "member": { + "target": "smithy.api#Document" + }, + "traits": { + "smithy.api#documentation": "Discount coupon codes" + } + }, + "com.hostinger.api#CreateBillingPurchaseOrderV1Request": { + "type": "structure", + "members": { + "payment_method_id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Payment method ID, default will be used if not provided" + } + }, + "items": { + "target": "com.hostinger.api#CreateBillingPurchaseOrderV1RequestItemsList", + "traits": { + "smithy.api#documentation": "Catalog price items to purchase", + "smithy.api#required": {} + } + }, + "coupons": { + "target": "com.hostinger.api#CreateBillingPurchaseOrderV1RequestCouponsList", + "traits": { + "smithy.api#documentation": "Discount coupon codes" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#BillingV1OrderOrderResource": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Order ID" + } + }, + "subscription_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Subscription ID" + } + }, + "status": { + "target": "com.hostinger.api#BillingV1OrderOrderResourceStatus" + }, + "currency": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Currency code" + } + }, + "subtotal": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Subtotal price (exc. VAT) in cents" + } + }, + "total": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Total price (inc. VAT) in cents" + } + }, + "billing_address": { + "target": "com.hostinger.api#BillingV1OrderOrderBillingAddressResource" + }, + "created_at": { + "target": "smithy.api#String" + }, + "updated_at": { + "target": "smithy.api#String" + } + }, + "traits": {} + }, + "com.hostinger.api#BillingV1OrderOrderResourceStatus": { + "type": "enum", + "members": { + "COMPLETED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "completed" + } + }, + "PENDING": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "pending" + } + }, + "PROCESSING": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "processing" + } + }, + "FAILED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "failed" + } + }, + "REFUNDED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "refunded" + } + }, + "CANCELLED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "cancelled" + } + }, + "AWAITING_PAYMENT": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "awaiting_payment" + } + }, + "PAYMENT_INITIATED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "payment_initiated" + } + }, + "FRAUD_REFUND": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "fraud_refund" + } + } + }, + "traits": {} + }, + "com.hostinger.api#BillingV1OrderOrderBillingAddressResource": { + "type": "structure", + "members": { + "first_name": { + "target": "smithy.api#String" + }, + "last_name": { + "target": "smithy.api#String" + }, + "company": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "address_1": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "address_2": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "city": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "state": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "zip": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "country": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "phone": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "email": { + "target": "smithy.api#String" + } + }, + "traits": {} + }, + "com.hostinger.api#CreateBillingPurchaseOrderV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#CreateBillingPurchaseOrderV1Request" + }, + "output": { + "target": "com.hostinger.api#BillingV1OrderOrderResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/billing/v1/orders", + "code": 200 + }, + "smithy.api#documentation": "Create purchase order\n\nCreate a purchase order for any Hostinger product.\n\nThis unified endpoint places an order for one or more catalog items and\nworks across all Hostinger products, leveraging the existing billing\ninfrastructure. Use the [catalog endpoint](#tag/billing-catalog) to look\nup the `item_id` values available for purchase.\n\nIf no payment method is provided, your default payment method will be used automatically.\n\nThis endpoint only places the order. Product-specific provisioning\n(e.g. VPS setup or domain registration) is not performed here — once the\norder completes, use the relevant product endpoints or\n[hPanel](https://hpanel.hostinger.com/) to finalize setup.\n\nUse this endpoint to purchase any product available in the catalog." + } + }, + "com.hostinger.api#SetBillingDefaultPaymentMethodV1Request": { + "type": "structure", + "members": { + "paymentMethodId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Payment method ID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#SetBillingDefaultPaymentMethodV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#SetBillingDefaultPaymentMethodV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/billing/v1/payment-methods/{paymentMethodId}", + "code": 200 + }, + "smithy.api#documentation": "Set default payment method\n\nSet the default payment method for your account.\n\nUse this endpoint to configure the primary payment method for future orders." + } + }, + "com.hostinger.api#DeleteBillingPaymentMethodV1Request": { + "type": "structure", + "members": { + "paymentMethodId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Payment method ID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DeleteBillingPaymentMethodV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#DeleteBillingPaymentMethodV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "traits": { + "smithy.api#http": { + "method": "DELETE", + "uri": "/api/billing/v1/payment-methods/{paymentMethodId}", + "code": 200 + }, + "smithy.api#documentation": "Delete payment method\n\nDelete a payment method from your account.\n\nUse this endpoint to remove unused payment methods from user accounts." + } + }, + "com.hostinger.api#BillingV1PaymentMethodPaymentMethodCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#BillingV1PaymentMethodPaymentMethodResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`Billing.V1.PaymentMethod.PaymentMethodResource`](#model/billingv1paymentmethodpaymentmethodresource)" + } + }, + "com.hostinger.api#BillingV1PaymentMethodPaymentMethodResource": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Payment method ID" + } + }, + "name": { + "target": "smithy.api#String" + }, + "identifier": { + "target": "smithy.api#String" + }, + "payment_method": { + "target": "smithy.api#String" + }, + "is_default": { + "target": "smithy.api#Boolean" + }, + "is_expired": { + "target": "smithy.api#Boolean" + }, + "is_suspended": { + "target": "smithy.api#Boolean" + }, + "created_at": { + "target": "smithy.api#String" + }, + "expires_at": { + "target": "smithy.api#String" + }, + "suspended_at": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#BillingGetPaymentMethodListV1Response": { + "type": "structure", + "members": { + "body": { + "target": "com.hostinger.api#BillingV1PaymentMethodPaymentMethodCollection", + "traits": { + "com.distilled.openapi#rawResponse": {}, + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#BillingGetPaymentMethodListV1": { + "type": "operation", + "input": { + "target": "smithy.api#Unit" + }, + "output": { + "target": "com.hostinger.api#BillingGetPaymentMethodListV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/billing/v1/payment-methods", + "code": 200 + }, + "smithy.api#documentation": "Get payment method list\n\nRetrieve available payment methods that can be used for placing new orders.\n\nIf you want to add new payment method,\nplease use [hPanel](https://hpanel.hostinger.com/billing/payment-methods).\n\nUse this endpoint to view available payment options before creating orders." + } + }, + "com.hostinger.api#BillingV1SubscriptionSubscriptionCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#BillingV1SubscriptionSubscriptionResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`Billing.V1.Subscription.SubscriptionResource`](#model/billingv1subscriptionsubscriptionresource)" + } + }, + "com.hostinger.api#BillingV1SubscriptionSubscriptionResource": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Subscription ID" + } + }, + "name": { + "target": "smithy.api#String" + }, + "status": { + "target": "com.hostinger.api#BillingV1SubscriptionSubscriptionResourceStatus" + }, + "billing_period": { + "target": "smithy.api#Integer" + }, + "billing_period_unit": { + "target": "smithy.api#String" + }, + "currency_code": { + "target": "smithy.api#String" + }, + "total_price": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Total price in cents" + } + }, + "renewal_price": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Renewal price in cents" + } + }, + "is_auto_renewed": { + "target": "smithy.api#Boolean" + }, + "created_at": { + "target": "smithy.api#String" + }, + "expires_at": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "next_billing_at": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#BillingV1SubscriptionSubscriptionResourceStatus": { + "type": "enum", + "members": { + "ACTIVE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "active" + } + }, + "PAUSED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "paused" + } + }, + "CANCELLED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "cancelled" + } + }, + "NOT_RENEWING": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "not_renewing" + } + }, + "TRANSFERRED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "transferred" + } + }, + "IN_TRIAL": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "in_trial" + } + }, + "FUTURE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "future" + } + } + }, + "traits": {} + }, + "com.hostinger.api#BillingGetSubscriptionListV1Response": { + "type": "structure", + "members": { + "body": { + "target": "com.hostinger.api#BillingV1SubscriptionSubscriptionCollection", + "traits": { + "com.distilled.openapi#rawResponse": {}, + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#BillingGetSubscriptionListV1": { + "type": "operation", + "input": { + "target": "smithy.api#Unit" + }, + "output": { + "target": "com.hostinger.api#BillingGetSubscriptionListV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/billing/v1/subscriptions", + "code": 200 + }, + "smithy.api#documentation": "Get subscription list\n\nRetrieve a list of all subscriptions associated with your account.\n\nUse this endpoint to monitor active services and billing status." + } + }, + "com.hostinger.api#DisableBillingAutoRenewalV1Request": { + "type": "structure", + "members": { + "subscriptionId": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Subscription ID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DisableBillingAutoRenewalV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#DisableBillingAutoRenewalV1Request" + }, + "output": { + "target": "com.hostinger.api#BillingV1SubscriptionSubscriptionResource" + }, + "traits": { + "smithy.api#http": { + "method": "DELETE", + "uri": "/api/billing/v1/subscriptions/{subscriptionId}/auto-renewal/disable", + "code": 200 + }, + "smithy.api#documentation": "Disable auto-renewal\n\nDisable auto-renewal for a subscription.\n\nUse this endpoint when disable auto-renewal for a subscription." + } + }, + "com.hostinger.api#EnableBillingAutoRenewalV1Request": { + "type": "structure", + "members": { + "subscriptionId": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Subscription ID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#EnableBillingAutoRenewalV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#EnableBillingAutoRenewalV1Request" + }, + "output": { + "target": "com.hostinger.api#BillingV1SubscriptionSubscriptionResource" + }, + "traits": { + "smithy.api#http": { + "method": "PATCH", + "uri": "/api/billing/v1/subscriptions/{subscriptionId}/auto-renewal/enable", + "code": 200 + }, + "smithy.api#documentation": "Enable auto-renewal\n\nEnable auto-renewal for a subscription.\n\nUse this endpoint when enable auto-renewal for a subscription." + } + }, + "com.hostinger.api#RenewBillingSubscriptionV1RequestCouponsList": { + "type": "list", + "member": { + "target": "smithy.api#Document" + }, + "traits": { + "smithy.api#documentation": "Discount coupon codes" + } + }, + "com.hostinger.api#RenewBillingSubscriptionV1Request": { + "type": "structure", + "members": { + "subscriptionId": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Subscription ID" + } + }, + "payment_method_id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Payment method ID, default will be used if not provided" + } + }, + "coupons": { + "target": "com.hostinger.api#RenewBillingSubscriptionV1RequestCouponsList", + "traits": { + "smithy.api#documentation": "Discount coupon codes" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#RenewBillingSubscriptionV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#RenewBillingSubscriptionV1Request" + }, + "output": { + "target": "com.hostinger.api#BillingV1OrderOrderResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/billing/v1/subscriptions/{subscriptionId}/renew", + "code": 200 + }, + "smithy.api#documentation": "Renew subscription\n\nCreate a renewal order for an existing Hostinger subscription.\n\nThis endpoint places a renewal order for a single subscription, leveraging\nthe existing billing infrastructure. Use the\n[subscriptions endpoint](#tag/billing-subscriptions) to look up the\n`subscriptionId` values available for renewal.\n\nIf no payment method is provided, your default payment method will be used automatically.\n\nUse this endpoint to renew any subscription available in your account." + } + }, + "com.hostinger.api#GetDNSDNSSnapshotV1Request": { + "type": "structure", + "members": { + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + }, + "snapshotId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Snapshot ID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DNSV1SnapshotSnapshotWithContentResource": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Snapshot ID" + } + }, + "reason": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Reason of the update" + } + }, + "snapshot": { + "target": "com.hostinger.api#DNSV1ZoneRecordCollection" + }, + "created_at": { + "target": "smithy.api#String" + } + }, + "traits": {} + }, + "com.hostinger.api#DNSV1ZoneRecordCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#DNSV1ZoneRecordResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`DNS.V1.Zone.RecordResource`](#model/dnsv1zonerecordresource)" + } + }, + "com.hostinger.api#DNSV1ZoneRecordResource": { + "type": "structure", + "members": { + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Name of the record (use `@` for wildcard name)" + } + }, + "records": { + "target": "com.hostinger.api#DNSV1ZoneNameRecordCollection" + }, + "ttl": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "TTL (Time-To-Live) of the record" + } + }, + "type": { + "target": "com.hostinger.api#DNSV1ZoneRecordResourceType", + "traits": { + "smithy.api#documentation": "Type of the record" + } + } + }, + "traits": {} + }, + "com.hostinger.api#DNSV1ZoneNameRecordCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#DNSV1ZoneNameRecordResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`DNS.V1.Zone.NameRecordResource`](#model/dnsv1zonenamerecordresource)" + } + }, + "com.hostinger.api#DNSV1ZoneNameRecordResource": { + "type": "structure", + "members": { + "content": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Content of the name record" + } + }, + "is_disabled": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Flag to mark name record as disabled" + } + } + }, + "traits": {} + }, + "com.hostinger.api#DNSV1ZoneRecordResourceType": { + "type": "enum", + "members": { + "A": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "A" + } + }, + "AAAA": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "AAAA" + } + }, + "CNAME": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "CNAME" + } + }, + "ALIAS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "ALIAS" + } + }, + "MX": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "MX" + } + }, + "TXT": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "TXT" + } + }, + "NS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "NS" + } + }, + "SOA": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "SOA" + } + }, + "SRV": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "SRV" + } + }, + "CAA": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "CAA" + } + } + }, + "traits": { + "smithy.api#documentation": "Type of the record" + } + }, + "com.hostinger.api#GetDNSDNSSnapshotV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#GetDNSDNSSnapshotV1Request" + }, + "output": { + "target": "com.hostinger.api#DNSV1SnapshotSnapshotWithContentResource" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/dns/v1/snapshots/{domain}/{snapshotId}", + "code": 200 + }, + "smithy.api#documentation": "Get DNS snapshot\n\nRetrieve particular DNS snapshot with contents of DNS zone records.\n\nUse this endpoint to view historical DNS configurations for domains." + } + }, + "com.hostinger.api#DNSGetDNSSnapshotListV1Request": { + "type": "structure", + "members": { + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DNSV1SnapshotSnapshotCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#DNSV1SnapshotSnapshotResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`DNS.V1.Snapshot.SnapshotResource`](#model/dnsv1snapshotsnapshotresource)" + } + }, + "com.hostinger.api#DNSV1SnapshotSnapshotResource": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Snapshot ID" + } + }, + "reason": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Reason of the update" + } + }, + "created_at": { + "target": "smithy.api#String" + } + }, + "traits": {} + }, + "com.hostinger.api#DNSGetDNSSnapshotListV1Response": { + "type": "structure", + "members": { + "body": { + "target": "com.hostinger.api#DNSV1SnapshotSnapshotCollection", + "traits": { + "com.distilled.openapi#rawResponse": {}, + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#DNSGetDNSSnapshotListV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#DNSGetDNSSnapshotListV1Request" + }, + "output": { + "target": "com.hostinger.api#DNSGetDNSSnapshotListV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/dns/v1/snapshots/{domain}", + "code": 200 + }, + "smithy.api#documentation": "Get DNS snapshot list\n\nRetrieve DNS snapshots for a domain.\n\nUse this endpoint to view available DNS backup points for restoration." + } + }, + "com.hostinger.api#RestoreDNSDNSSnapshotV1Request": { + "type": "structure", + "members": { + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + }, + "snapshotId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Snapshot ID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#RestoreDNSDNSSnapshotV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#RestoreDNSDNSSnapshotV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/dns/v1/snapshots/{domain}/{snapshotId}/restore", + "code": 200 + }, + "smithy.api#documentation": "Restore DNS snapshot\n\nRestore DNS zone to the selected snapshot.\n\nUse this endpoint to revert domain DNS to a previous configuration." + } + }, + "com.hostinger.api#GetDNSDNSRecordsV1Request": { + "type": "structure", + "members": { + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#GetDNSDNSRecordsV1Response": { + "type": "structure", + "members": { + "body": { + "target": "com.hostinger.api#DNSV1ZoneRecordCollection", + "traits": { + "com.distilled.openapi#rawResponse": {}, + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#GetDNSDNSRecordsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#GetDNSDNSRecordsV1Request" + }, + "output": { + "target": "com.hostinger.api#GetDNSDNSRecordsV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/dns/v1/zones/{domain}", + "code": 200 + }, + "smithy.api#documentation": "Get DNS records\n\nRetrieve DNS zone records for a specific domain.\n\nUse this endpoint to view current DNS configuration for domain management." + } + }, + "com.hostinger.api#UpdateDNSDNSRecordsV1RequestZoneItemRecordsItem": { + "type": "structure", + "members": { + "content": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Content of the name record", + "smithy.api#required": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#UpdateDNSDNSRecordsV1RequestZoneItemRecordsList": { + "type": "list", + "member": { + "target": "com.hostinger.api#UpdateDNSDNSRecordsV1RequestZoneItemRecordsItem" + }, + "traits": { + "smithy.api#documentation": "Records assigned to the name" + } + }, + "com.hostinger.api#UpdateDNSDNSRecordsV1RequestZoneItemType": { + "type": "enum", + "members": { + "A": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "A" + } + }, + "AAAA": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "AAAA" + } + }, + "CNAME": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "CNAME" + } + }, + "ALIAS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "ALIAS" + } + }, + "MX": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "MX" + } + }, + "TXT": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "TXT" + } + }, + "NS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "NS" + } + }, + "SOA": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "SOA" + } + }, + "SRV": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "SRV" + } + }, + "CAA": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "CAA" + } + } + }, + "traits": { + "smithy.api#documentation": "Type of the record" + } + }, + "com.hostinger.api#UpdateDNSDNSRecordsV1RequestZoneItem": { + "type": "structure", + "members": { + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Name of the record (use `@` for wildcard name)", + "smithy.api#required": {} + } + }, + "records": { + "target": "com.hostinger.api#UpdateDNSDNSRecordsV1RequestZoneItemRecordsList", + "traits": { + "smithy.api#documentation": "Records assigned to the name", + "smithy.api#required": {} + } + }, + "ttl": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "TTL (Time-To-Live) of the record" + } + }, + "type": { + "target": "com.hostinger.api#UpdateDNSDNSRecordsV1RequestZoneItemType", + "traits": { + "smithy.api#documentation": "Type of the record", + "smithy.api#required": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#UpdateDNSDNSRecordsV1RequestZoneList": { + "type": "list", + "member": { + "target": "com.hostinger.api#UpdateDNSDNSRecordsV1RequestZoneItem" + }, + "traits": {} + }, + "com.hostinger.api#UpdateDNSDNSRecordsV1Request": { + "type": "structure", + "members": { + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + }, + "overwrite": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "If `true`, resource records (RRs) matching name and type will be deleted and new RRs will be created,\notherwise resource records' ttl's are updated and new records are appended.\nIf no matching RRs are found, they are created." + } + }, + "zone": { + "target": "com.hostinger.api#UpdateDNSDNSRecordsV1RequestZoneList", + "traits": { + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#UpdateDNSDNSRecordsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#UpdateDNSDNSRecordsV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "PUT", + "uri": "/api/dns/v1/zones/{domain}", + "code": 200 + }, + "smithy.api#documentation": "Update DNS records\n\nUpdate DNS records for the selected domain.\n\nUsing `overwrite = true` will replace existing records with the provided ones. \nOtherwise existing records will be updated and new records will be added.\n\nUse this endpoint to modify domain DNS configuration." + } + }, + "com.hostinger.api#DeleteDNSDNSRecordsV1RequestFiltersItemType": { + "type": "enum", + "members": { + "A": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "A" + } + }, + "AAAA": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "AAAA" + } + }, + "CNAME": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "CNAME" + } + }, + "ALIAS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "ALIAS" + } + }, + "MX": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "MX" + } + }, + "TXT": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "TXT" + } + }, + "NS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "NS" + } + }, + "SOA": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "SOA" + } + }, + "SRV": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "SRV" + } + }, + "CAA": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "CAA" + } + } + }, + "traits": { + "smithy.api#documentation": "Type of the record" + } + }, + "com.hostinger.api#DeleteDNSDNSRecordsV1RequestFiltersItem": { + "type": "structure", + "members": { + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Name of the record", + "smithy.api#required": {} + } + }, + "type": { + "target": "com.hostinger.api#DeleteDNSDNSRecordsV1RequestFiltersItemType", + "traits": { + "smithy.api#documentation": "Type of the record", + "smithy.api#required": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#DeleteDNSDNSRecordsV1RequestFiltersList": { + "type": "list", + "member": { + "target": "com.hostinger.api#DeleteDNSDNSRecordsV1RequestFiltersItem" + }, + "traits": { + "smithy.api#documentation": "Filter records for deletion" + } + }, + "com.hostinger.api#DeleteDNSDNSRecordsV1Request": { + "type": "structure", + "members": { + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + }, + "filters": { + "target": "com.hostinger.api#DeleteDNSDNSRecordsV1RequestFiltersList", + "traits": { + "smithy.api#documentation": "Filter records for deletion", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DeleteDNSDNSRecordsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#DeleteDNSDNSRecordsV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "DELETE", + "uri": "/api/dns/v1/zones/{domain}", + "code": 200 + }, + "smithy.api#documentation": "Delete DNS records\n\nDelete DNS records for the selected domain.\n\nTo filter which records to delete, add the `name` of the record and `type` to the filter. \nMultiple filters can be provided with single request.\n\nIf you have multiple records with the same name and type, and you want to delete only part of them,\nrefer to the `Update zone records` endpoint.\n\nUse this endpoint to remove specific DNS records from domains." + } + }, + "com.hostinger.api#ResetDNSDNSRecordsV1RequestWhitelistedRecordTypesList": { + "type": "list", + "member": { + "target": "smithy.api#String" + }, + "traits": { + "smithy.api#documentation": "Specifies which record types to not reset" + } + }, + "com.hostinger.api#ResetDNSDNSRecordsV1Request": { + "type": "structure", + "members": { + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + }, + "sync": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Determines if operation should be run synchronously" + } + }, + "reset_email_records": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Determines if email records should be reset" + } + }, + "whitelisted_record_types": { + "target": "com.hostinger.api#ResetDNSDNSRecordsV1RequestWhitelistedRecordTypesList", + "traits": { + "smithy.api#documentation": "Specifies which record types to not reset" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#ResetDNSDNSRecordsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ResetDNSDNSRecordsV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/dns/v1/zones/{domain}/reset", + "code": 200 + }, + "smithy.api#documentation": "Reset DNS records\n\nReset DNS zone to the default records.\n\nUse this endpoint to restore domain DNS to original configuration." + } + }, + "com.hostinger.api#ValidateDNSDNSRecordsV1RequestZoneItemRecordsItem": { + "type": "structure", + "members": { + "content": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Content of the name record", + "smithy.api#required": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#ValidateDNSDNSRecordsV1RequestZoneItemRecordsList": { + "type": "list", + "member": { + "target": "com.hostinger.api#ValidateDNSDNSRecordsV1RequestZoneItemRecordsItem" + }, + "traits": { + "smithy.api#documentation": "Records assigned to the name" + } + }, + "com.hostinger.api#ValidateDNSDNSRecordsV1RequestZoneItemType": { + "type": "enum", + "members": { + "A": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "A" + } + }, + "AAAA": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "AAAA" + } + }, + "CNAME": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "CNAME" + } + }, + "ALIAS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "ALIAS" + } + }, + "MX": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "MX" + } + }, + "TXT": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "TXT" + } + }, + "NS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "NS" + } + }, + "SOA": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "SOA" + } + }, + "SRV": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "SRV" + } + }, + "CAA": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "CAA" + } + } + }, + "traits": { + "smithy.api#documentation": "Type of the record" + } + }, + "com.hostinger.api#ValidateDNSDNSRecordsV1RequestZoneItem": { + "type": "structure", + "members": { + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Name of the record (use `@` for wildcard name)", + "smithy.api#required": {} + } + }, + "records": { + "target": "com.hostinger.api#ValidateDNSDNSRecordsV1RequestZoneItemRecordsList", + "traits": { + "smithy.api#documentation": "Records assigned to the name", + "smithy.api#required": {} + } + }, + "ttl": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "TTL (Time-To-Live) of the record" + } + }, + "type": { + "target": "com.hostinger.api#ValidateDNSDNSRecordsV1RequestZoneItemType", + "traits": { + "smithy.api#documentation": "Type of the record", + "smithy.api#required": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#ValidateDNSDNSRecordsV1RequestZoneList": { + "type": "list", + "member": { + "target": "com.hostinger.api#ValidateDNSDNSRecordsV1RequestZoneItem" + }, + "traits": {} + }, + "com.hostinger.api#ValidateDNSDNSRecordsV1Request": { + "type": "structure", + "members": { + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + }, + "overwrite": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "If `true`, resource records (RRs) matching name and type will be deleted and new RRs will be created,\notherwise resource records' ttl's are updated and new records are appended.\nIf no matching RRs are found, they are created." + } + }, + "zone": { + "target": "com.hostinger.api#ValidateDNSDNSRecordsV1RequestZoneList", + "traits": { + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#ValidateDNSDNSRecordsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ValidateDNSDNSRecordsV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/dns/v1/zones/{domain}/validate", + "code": 200 + }, + "smithy.api#documentation": "Validate DNS records\n\nValidate DNS records prior to update for the selected domain.\n\nIf the validation is successful, the response will contain `200 Success` code.\nIf there is validation error, the response will fail with `422 Validation error` code.\n\nUse this endpoint to verify DNS record validity before applying changes." + } + }, + "com.hostinger.api#GetV2DomainVerificationsDIRECTRequestDomainsList": { + "type": "list", + "member": { + "target": "smithy.api#String" + }, + "traits": { + "smithy.api#documentation": "The list of domains for which to get verification details for." + } + }, + "com.hostinger.api#GetV2DomainVerificationsDIRECTRequest": { + "type": "structure", + "members": { + "domains": { + "target": "com.hostinger.api#GetV2DomainVerificationsDIRECTRequestDomainsList", + "traits": { + "smithy.api#documentation": "The list of domains for which to get verification details for.", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DomainAccessVerifierV2VerificationsActiveVerificationsCollection": { + "type": "structure", + "members": { + "data": { + "target": "com.hostinger.api#DomainAccessVerifierV2VerificationsActiveVerificationsCollectionData", + "traits": { + "smithy.api#documentation": "List of active verifications by status. If no verifications are found, this will return an empty array." + } + } + }, + "traits": { + "smithy.api#documentation": "Returns active verifications (PENDING and VERIFIED) grouped by status and domain. Includes last and next verification attempt dates and expiration for PENDING verifications." + } + }, + "com.hostinger.api#DomainAccessVerifierV2VerificationsActiveVerificationsCollectionDataPENDINGDOMAINTLDVERIFICATIONTYPERecordsList": { + "type": "list", + "member": { + "target": "smithy.api#String" + }, + "traits": { + "smithy.api#documentation": "Verification records" + } + }, + "com.hostinger.api#DomainAccessVerifierV2VerificationsActiveVerificationsCollectionDataPENDINGDOMAINTLDVERIFICATIONTYPE": { + "type": "structure", + "members": { + "records": { + "target": "com.hostinger.api#DomainAccessVerifierV2VerificationsActiveVerificationsCollectionDataPENDINGDOMAINTLDVERIFICATIONTYPERecordsList", + "traits": { + "smithy.api#documentation": "Verification records" + } + }, + "last_verification_attempt": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Datetime when last verification attempt occurred" + } + }, + "next_verification_attempt": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Datetime when next verification attempt will occur" + } + }, + "verification_expiration": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Datetime when verification expires" + } + } + }, + "traits": { + "smithy.api#documentation": "Verification type (\"NAMESERVERS\" or \"TXT\"). Only verification types that exist for this domain will be present." + } + }, + "com.hostinger.api#DomainAccessVerifierV2VerificationsActiveVerificationsCollectionDataPENDINGDOMAINTLD": { + "type": "structure", + "members": { + "VERIFICATION_TYPE": { + "target": "com.hostinger.api#DomainAccessVerifierV2VerificationsActiveVerificationsCollectionDataPENDINGDOMAINTLDVERIFICATIONTYPE", + "traits": { + "smithy.api#documentation": "Verification type (\"NAMESERVERS\" or \"TXT\"). Only verification types that exist for this domain will be present." + } + } + }, + "traits": { + "smithy.api#documentation": "Domain name (example). Contains verification types as properties." + } + }, + "com.hostinger.api#DomainAccessVerifierV2VerificationsActiveVerificationsCollectionDataPENDING": { + "type": "structure", + "members": { + "DOMAIN_TLD": { + "target": "com.hostinger.api#DomainAccessVerifierV2VerificationsActiveVerificationsCollectionDataPENDINGDOMAINTLD", + "traits": { + "smithy.api#documentation": "Domain name (example). Contains verification types as properties.", + "smithy.api#jsonName": "DOMAIN.TLD" + } + } + }, + "traits": { + "smithy.api#documentation": "Pending verifications grouped by domain. Keys are domain names (e.g., \"pixel.tld\"). This property will not be returned if no pending verifications are found." + } + }, + "com.hostinger.api#DomainAccessVerifierV2VerificationsActiveVerificationsCollectionDataVERIFIEDDOMAINTLDVERIFICATIONTYPERecordsList": { + "type": "list", + "member": { + "target": "smithy.api#String" + }, + "traits": { + "smithy.api#documentation": "Verification records" + } + }, + "com.hostinger.api#DomainAccessVerifierV2VerificationsActiveVerificationsCollectionDataVERIFIEDDOMAINTLDVERIFICATIONTYPE": { + "type": "structure", + "members": { + "records": { + "target": "com.hostinger.api#DomainAccessVerifierV2VerificationsActiveVerificationsCollectionDataVERIFIEDDOMAINTLDVERIFICATIONTYPERecordsList", + "traits": { + "smithy.api#documentation": "Verification records" + } + } + }, + "traits": { + "smithy.api#documentation": "Verification type (e.g., \"NAMESERVERS\", \"TXT\"). Only verification types that exist for this domain will be present." + } + }, + "com.hostinger.api#DomainAccessVerifierV2VerificationsActiveVerificationsCollectionDataVERIFIEDDOMAINTLD": { + "type": "structure", + "members": { + "VERIFICATION_TYPE": { + "target": "com.hostinger.api#DomainAccessVerifierV2VerificationsActiveVerificationsCollectionDataVERIFIEDDOMAINTLDVERIFICATIONTYPE", + "traits": { + "smithy.api#documentation": "Verification type (e.g., \"NAMESERVERS\", \"TXT\"). Only verification types that exist for this domain will be present." + } + } + }, + "traits": { + "smithy.api#documentation": "Domain name (example). Contains verification types as properties." + } + }, + "com.hostinger.api#DomainAccessVerifierV2VerificationsActiveVerificationsCollectionDataVERIFIED": { + "type": "structure", + "members": { + "DOMAIN_TLD": { + "target": "com.hostinger.api#DomainAccessVerifierV2VerificationsActiveVerificationsCollectionDataVERIFIEDDOMAINTLD", + "traits": { + "smithy.api#documentation": "Domain name (example). Contains verification types as properties.", + "smithy.api#jsonName": "DOMAIN.TLD" + } + } + }, + "traits": { + "smithy.api#documentation": "Verified verifications grouped by domain. Keys are domain names (e.g., \"byte.tld\"). This property will not be returned if no verified verifications are found." + } + }, + "com.hostinger.api#DomainAccessVerifierV2VerificationsActiveVerificationsCollectionData": { + "type": "structure", + "members": { + "PENDING": { + "target": "com.hostinger.api#DomainAccessVerifierV2VerificationsActiveVerificationsCollectionDataPENDING", + "traits": { + "smithy.api#documentation": "Pending verifications grouped by domain. Keys are domain names (e.g., \"pixel.tld\"). This property will not be returned if no pending verifications are found." + } + }, + "VERIFIED": { + "target": "com.hostinger.api#DomainAccessVerifierV2VerificationsActiveVerificationsCollectionDataVERIFIED", + "traits": { + "smithy.api#documentation": "Verified verifications grouped by domain. Keys are domain names (e.g., \"byte.tld\"). This property will not be returned if no verified verifications are found." + } + } + }, + "traits": { + "smithy.api#documentation": "List of active verifications by status. If no verifications are found, this will return an empty array." + } + }, + "com.hostinger.api#GetV2DomainVerificationsDIRECT": { + "type": "operation", + "input": { + "target": "com.hostinger.api#GetV2DomainVerificationsDIRECTRequest" + }, + "output": { + "target": "com.hostinger.api#DomainAccessVerifierV2VerificationsActiveVerificationsCollection" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/v2/direct/verifications/active", + "code": 200 + }, + "smithy.api#documentation": "Get domain verifications\n\nRetrieve a list of pending and completed domain verifications." + } + }, + "com.hostinger.api#DomainsSuggestDomainNamesFromADescriptionV1Request": { + "type": "structure", + "members": { + "description": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Free-text description of the project the domain is needed for", + "smithy.api#required": {} + } + }, + "limit": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Amount of domain names to suggest", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DomainsV1AvailabilityAlternativeCollection": { + "type": "list", + "member": { + "target": "smithy.api#String" + }, + "traits": { + "smithy.api#documentation": "Suggested domain names" + } + }, + "com.hostinger.api#DomainsSuggestDomainNamesFromADescriptionV1Response": { + "type": "structure", + "members": { + "body": { + "target": "com.hostinger.api#DomainsV1AvailabilityAlternativeCollection", + "traits": { + "com.distilled.openapi#rawResponse": {}, + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#DomainsSuggestDomainNamesFromADescriptionV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#DomainsSuggestDomainNamesFromADescriptionV1Request" + }, + "output": { + "target": "com.hostinger.api#DomainsSuggestDomainNamesFromADescriptionV1Response" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/domains/v1/availability/alternatives-from-description", + "code": 200 + }, + "smithy.api#documentation": "Suggest domain names from a description\n\nSuggest available domain names based on a free-text description of your project.\n\nSuggestions are generated by an AI model, so they differ between calls.\n\nEndpoint has rate limit of 90 requests per minute.\n\nUse this endpoint to find a domain name when you only know what the website is about." + } + }, + "com.hostinger.api#DomainsSuggestDomainNamesFromADomainV1Request": { + "type": "structure", + "members": { + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Domain name to base the suggestions on", + "smithy.api#required": {} + } + }, + "limit": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Amount of domain names to suggest", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DomainsSuggestDomainNamesFromADomainV1Response": { + "type": "structure", + "members": { + "body": { + "target": "com.hostinger.api#DomainsV1AvailabilityAlternativeCollection", + "traits": { + "com.distilled.openapi#rawResponse": {}, + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#DomainsSuggestDomainNamesFromADomainV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#DomainsSuggestDomainNamesFromADomainV1Request" + }, + "output": { + "target": "com.hostinger.api#DomainsSuggestDomainNamesFromADomainV1Response" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/domains/v1/availability/alternatives-from-domain", + "code": 200 + }, + "smithy.api#documentation": "Suggest domain names from a domain\n\nSuggest available domain names based on a domain name you already have in mind.\n\nSuggestions are generated by an AI model, so they differ between calls.\n\nEndpoint has rate limit of 90 requests per minute.\n\nUse this endpoint when the domain you wanted is taken and you need close alternatives." + } + }, + "com.hostinger.api#CheckDomainDomainAvailabilityV1RequestTldsList": { + "type": "list", + "member": { + "target": "smithy.api#String" + }, + "traits": { + "smithy.api#documentation": "TLDs list" + } + }, + "com.hostinger.api#CheckDomainDomainAvailabilityV1Request": { + "type": "structure", + "members": { + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Domain name (without TLD)", + "smithy.api#required": {} + } + }, + "tlds": { + "target": "com.hostinger.api#CheckDomainDomainAvailabilityV1RequestTldsList", + "traits": { + "smithy.api#documentation": "TLDs list", + "smithy.api#required": {} + } + }, + "with_alternatives": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Should response include alternatives" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DomainsV1AvailabilityAvailabilityCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#DomainsV1AvailabilityAvailabilityResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`Domains.V1.Availability.AvailabilityResource`](#model/domainsv1availabilityavailabilityresource)" + } + }, + "com.hostinger.api#DomainsV1AvailabilityAvailabilityResource": { + "type": "structure", + "members": { + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Domain name, `null` when not claimed free domain", + "com.distilled.openapi#nullable": {} + } + }, + "is_available": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "`true` if domain is available for registration" + } + }, + "is_alternative": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "`true` if domain is provided as an alternative" + } + }, + "restriction": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Special rules and/or restrictions applied for registering TLD", + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#CheckDomainDomainAvailabilityV1Response": { + "type": "structure", + "members": { + "body": { + "target": "com.hostinger.api#DomainsV1AvailabilityAvailabilityCollection", + "traits": { + "com.distilled.openapi#rawResponse": {}, + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#CheckDomainDomainAvailabilityV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#CheckDomainDomainAvailabilityV1Request" + }, + "output": { + "target": "com.hostinger.api#CheckDomainDomainAvailabilityV1Response" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/domains/v1/availability", + "code": 200 + }, + "smithy.api#documentation": "Check domain availability\n\nCheck availability of domain names across multiple TLDs.\n\nMultiple TLDs can be checked at once.\nIf you want alternative domains with response, provide only one TLD and set `with_alternatives` to `true`.\nTLDs should be provided without leading dot (e.g. `com`, `net`, `org`).\n\nEndpoint has rate limit of 90 requests per minute.\n\nUse this endpoint to verify domain availability before purchase." + } + }, + "com.hostinger.api#GetDomainDomainForwardingV1Request": { + "type": "structure", + "members": { + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DomainsV1ForwardingForwardingResource": { + "type": "structure", + "members": { + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Domain name", + "com.distilled.openapi#nullable": {} + } + }, + "redirect_type": { + "target": "com.hostinger.api#DomainsV1ForwardingForwardingResourceRedirectType", + "traits": { + "smithy.api#documentation": "Redirect type" + } + }, + "redirect_url": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "URL domain is forwarded to" + } + }, + "created_at": { + "target": "smithy.api#String" + }, + "updated_at": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#DomainsV1ForwardingForwardingResourceRedirectType": { + "type": "enum", + "members": { + "_301": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "301" + } + }, + "_302": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "302" + } + } + }, + "traits": { + "smithy.api#documentation": "Redirect type" + } + }, + "com.hostinger.api#GetDomainDomainForwardingV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#GetDomainDomainForwardingV1Request" + }, + "output": { + "target": "com.hostinger.api#DomainsV1ForwardingForwardingResource" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/domains/v1/forwarding/{domain}", + "code": 200 + }, + "smithy.api#documentation": "Get domain forwarding\n\nRetrieve domain forwarding data.\n\nUse this endpoint to view current redirect configuration for domains." + } + }, + "com.hostinger.api#UpdateDomainDomainForwardingV1RequestRedirectType": { + "type": "enum", + "members": { + "_301": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "301" + } + }, + "_302": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "302" + } + } + }, + "traits": { + "smithy.api#documentation": "Redirect type" + } + }, + "com.hostinger.api#UpdateDomainDomainForwardingV1Request": { + "type": "structure", + "members": { + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + }, + "redirect_type": { + "target": "com.hostinger.api#UpdateDomainDomainForwardingV1RequestRedirectType", + "traits": { + "smithy.api#documentation": "Redirect type", + "smithy.api#required": {} + } + }, + "redirect_url": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "URL to forward domain to", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#UpdateDomainDomainForwardingV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#UpdateDomainDomainForwardingV1Request" + }, + "output": { + "target": "com.hostinger.api#DomainsV1ForwardingForwardingResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "PUT", + "uri": "/api/domains/v1/forwarding/{domain}", + "code": 200 + }, + "smithy.api#documentation": "Update domain forwarding\n\nUpdate domain forwarding configuration.\n\nUse this endpoint to modify existing redirect configuration for domains." + } + }, + "com.hostinger.api#DeleteDomainDomainForwardingV1Request": { + "type": "structure", + "members": { + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DeleteDomainDomainForwardingV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#DeleteDomainDomainForwardingV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "traits": { + "smithy.api#http": { + "method": "DELETE", + "uri": "/api/domains/v1/forwarding/{domain}", + "code": 200 + }, + "smithy.api#documentation": "Delete domain forwarding\n\nDelete domain forwarding data.\n\nUse this endpoint to remove redirect configuration from domains." + } + }, + "com.hostinger.api#CreateDomainDomainForwardingV1RequestRedirectType": { + "type": "enum", + "members": { + "_301": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "301" + } + }, + "_302": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "302" + } + } + }, + "traits": { + "smithy.api#documentation": "Redirect type" + } + }, + "com.hostinger.api#CreateDomainDomainForwardingV1Request": { + "type": "structure", + "members": { + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Domain name", + "smithy.api#required": {} + } + }, + "redirect_type": { + "target": "com.hostinger.api#CreateDomainDomainForwardingV1RequestRedirectType", + "traits": { + "smithy.api#documentation": "Redirect type", + "smithy.api#required": {} + } + }, + "redirect_url": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "URL to forward domain to", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#CreateDomainDomainForwardingV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#CreateDomainDomainForwardingV1Request" + }, + "output": { + "target": "com.hostinger.api#DomainsV1ForwardingForwardingResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/domains/v1/forwarding", + "code": 200 + }, + "smithy.api#documentation": "Create domain forwarding\n\nCreate domain forwarding configuration.\n\nUse this endpoint to set up domain redirects to other URLs." + } + }, + "com.hostinger.api#GetDomainPendingIRTPVerificationV1Request": { + "type": "structure", + "members": { + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DomainsV1IRTPVerificationResource": { + "type": "structure", + "members": { + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Domain name" + } + }, + "status": { + "target": "com.hostinger.api#DomainsV1IRTPVerificationResourceStatus", + "traits": { + "smithy.api#documentation": "IRTP verification status" + } + }, + "old_confirmed_at": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "When the old registrant confirmed the change", + "com.distilled.openapi#nullable": {} + } + }, + "new_confirmed_at": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "When the new registrant confirmed the change", + "com.distilled.openapi#nullable": {} + } + }, + "old_whois_profile_email": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Email the old registrant confirmation was sent to" + } + }, + "new_whois_profile_email": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Email the new registrant confirmation was sent to" + } + }, + "expires_at": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "When the verification auto-cancels if unconfirmed" + } + } + }, + "traits": {} + }, + "com.hostinger.api#DomainsV1IRTPVerificationResourceStatus": { + "type": "enum", + "members": { + "PENDING": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "pending" + } + }, + "COMPLETED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "completed" + } + }, + "CANCELED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "canceled" + } + } + }, + "traits": { + "smithy.api#documentation": "IRTP verification status" + } + }, + "com.hostinger.api#GetDomainPendingIRTPVerificationV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#GetDomainPendingIRTPVerificationV1Request" + }, + "output": { + "target": "com.hostinger.api#DomainsV1IRTPVerificationResource" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/domains/v1/irtp/{domain}", + "code": 200 + }, + "smithy.api#documentation": "Get pending IRTP verification\n\nRetrieve a pending IRTP verification for a domain.\n\nBoth the old and new registrant must confirm it before the WHOIS change takes effect.\n\nUse this endpoint to check the status of a WHOIS change awaiting registrant confirmation." + } + }, + "com.hostinger.api#CancelDomainPendingIRTPVerificationV1Request": { + "type": "structure", + "members": { + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#CancelDomainPendingIRTPVerificationV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#CancelDomainPendingIRTPVerificationV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "traits": { + "smithy.api#http": { + "method": "DELETE", + "uri": "/api/domains/v1/irtp/{domain}", + "code": 200 + }, + "smithy.api#documentation": "Cancel pending IRTP verification\n\nCancel a pending IRTP verification.\n\nUse this endpoint to back out of a WHOIS change that is stuck waiting on registrant confirmation,\nfor example when the confirmation email cannot be received, without waiting out the 5-day expiry." + } + }, + "com.hostinger.api#DomainsGetIncomingDomainMoveV1Request": { + "type": "structure", + "members": { + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + }, + "force_sync": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#httpQuery": "force_sync", + "smithy.api#documentation": "Re-check the move against the registry before responding. Only has an effect while the move is in the `activating` status." + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DomainsV1MoveMoveResource": { + "type": "structure", + "members": { + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Domain name" + } + }, + "status": { + "target": "com.hostinger.api#DomainsV1MoveMoveResourceStatus", + "traits": { + "smithy.api#documentation": "Status of the move" + } + }, + "created_at": { + "target": "smithy.api#String" + }, + "updated_at": { + "target": "smithy.api#String" + } + }, + "traits": {} + }, + "com.hostinger.api#DomainsV1MoveMoveResourceStatus": { + "type": "enum", + "members": { + "INITIATED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "initiated" + } + }, + "ACTIVATING": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "activating" + } + }, + "COMPLETED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "completed" + } + } + }, + "traits": { + "smithy.api#documentation": "Status of the move" + } + }, + "com.hostinger.api#DomainsGetIncomingDomainMoveV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#DomainsGetIncomingDomainMoveV1Request" + }, + "output": { + "target": "com.hostinger.api#DomainsV1MoveMoveResource" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/domains/v1/move/incoming/{domain}", + "code": 200 + }, + "smithy.api#documentation": "Get incoming domain move\n\nRetrieve the incoming move for a specified domain.\n\nReturns 404 when no account is moving this domain to you.\n\nUse this endpoint to check whether a domain addressed to you is still waiting to be accepted." + } + }, + "com.hostinger.api#DomainsAcceptIncomingDomainMoveV1RequestDomainContacts": { + "type": "structure", + "members": { + "owner_id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Owner contact WHOIS record ID", + "smithy.api#required": {} + } + }, + "admin_id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Administrative contact WHOIS record ID", + "smithy.api#required": {} + } + }, + "billing_id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Billing contact WHOIS record ID", + "smithy.api#required": {} + } + }, + "tech_id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Technical contact WHOIS record ID", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#documentation": "WHOIS profiles of the accepting account. Only the contact types required by the TLD are applied, but all four IDs must be provided." + } + }, + "com.hostinger.api#DomainsAcceptIncomingDomainMoveV1Request": { + "type": "structure", + "members": { + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + }, + "domain_contacts": { + "target": "com.hostinger.api#DomainsAcceptIncomingDomainMoveV1RequestDomainContacts", + "traits": { + "smithy.api#documentation": "WHOIS profiles of the accepting account. Only the contact types required by the TLD are applied, but all four IDs must be provided.", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DomainsAcceptIncomingDomainMoveV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#DomainsAcceptIncomingDomainMoveV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "PUT", + "uri": "/api/domains/v1/move/incoming/{domain}", + "code": 200 + }, + "smithy.api#documentation": "Accept incoming domain move\n\nAccept an incoming move for a specified domain.\n\nThe provided WHOIS profiles become the contacts of the domain, so they must belong\nto your account and satisfy the requirements of the TLD. Only the contact types the\ndomain actually uses are applied, but all four profile IDs have to be provided.\n\nThe move has to still be waiting for your decision, already accepted moves\ncannot be accepted again.\n\nAccepting does not complete the move. A confirmation email is sent to the email address of\nthe new owner contact, and the domain changes hands only after the change is confirmed from it.\nUntil then the move stays in the `activating` status, which can be followed with the\n[incoming move endpoint](#tag/domains-move).\n\nUse this endpoint to take ownership of a domain offered to you." + } + }, + "com.hostinger.api#DomainsRejectIncomingDomainMoveV1Request": { + "type": "structure", + "members": { + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DomainsRejectIncomingDomainMoveV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#DomainsRejectIncomingDomainMoveV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "traits": { + "smithy.api#http": { + "method": "DELETE", + "uri": "/api/domains/v1/move/incoming/{domain}", + "code": 200 + }, + "smithy.api#documentation": "Reject incoming domain move\n\nReject an incoming move for a specified domain.\n\nThe domain stays in the account which initiated the move.\nMoves you have already accepted cannot be rejected anymore.\n\nUse this endpoint to decline a domain you do not want to take over." + } + }, + "com.hostinger.api#DomainsV1MoveMoveCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#DomainsV1MoveMoveResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`Domains.V1.Move.MoveResource`](#model/domainsv1movemoveresource)" + } + }, + "com.hostinger.api#DomainsGetIncomingDomainMoveListV1Response": { + "type": "structure", + "members": { + "body": { + "target": "com.hostinger.api#DomainsV1MoveMoveCollection", + "traits": { + "com.distilled.openapi#rawResponse": {}, + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#DomainsGetIncomingDomainMoveListV1": { + "type": "operation", + "input": { + "target": "smithy.api#Unit" + }, + "output": { + "target": "com.hostinger.api#DomainsGetIncomingDomainMoveListV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/domains/v1/move/incoming", + "code": 200 + }, + "smithy.api#documentation": "Get incoming domain move list\n\nRetrieve all domains other Hostinger accounts are moving to your account.\n\nMoves of every status are returned, including the ones which already completed.\n\nUse this endpoint to find domains waiting for you to accept them." + } + }, + "com.hostinger.api#DomainsGetOutgoingDomainMoveV1Request": { + "type": "structure", + "members": { + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DomainsGetOutgoingDomainMoveV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#DomainsGetOutgoingDomainMoveV1Request" + }, + "output": { + "target": "com.hostinger.api#DomainsV1MoveMoveResource" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/domains/v1/move/outgoing/{domain}", + "code": 200 + }, + "smithy.api#documentation": "Get outgoing domain move\n\nRetrieve the outgoing move for a specified domain.\n\nReturns 404 when the domain has no move in progress.\n\nUse this endpoint to track the status of a move you have initiated for a single domain." + } + }, + "com.hostinger.api#DomainsStartOutgoingDomainMoveV1Request": { + "type": "structure", + "members": { + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + }, + "new_customer_email": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Email address of the Hostinger account receiving the domain", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DomainsStartOutgoingDomainMoveV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#DomainsStartOutgoingDomainMoveV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/domains/v1/move/outgoing/{domain}", + "code": 200 + }, + "smithy.api#documentation": "Start outgoing domain move\n\nInitiate a move of a specified domain to another Hostinger account.\n\nThe receiving account has to already exist and accept the move before the domain changes hands.\n\nThe domain must be active. The subscription it belongs to is resolved automatically,\nand the request is rejected with a 404 status code when the domain has no domain\nsubscription of its own.\n\nDomains protected by premium protection require an additional verification step,\nsuch requests are rejected with a 428 status code.\n\nUse this endpoint to hand a domain over to another Hostinger user." + } + }, + "com.hostinger.api#DomainsCancelOutgoingDomainMoveV1Request": { + "type": "structure", + "members": { + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DomainsCancelOutgoingDomainMoveV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#DomainsCancelOutgoingDomainMoveV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "traits": { + "smithy.api#http": { + "method": "DELETE", + "uri": "/api/domains/v1/move/outgoing/{domain}", + "code": 200 + }, + "smithy.api#documentation": "Cancel outgoing domain move\n\nCancel an outgoing move for a specified domain.\n\nThe move can only be cancelled while the receiving account has not accepted it yet.\nThe domain stays in your account.\n\nUse this endpoint to withdraw a move you no longer want to complete." + } + }, + "com.hostinger.api#DomainsGetOutgoingDomainMoveListV1Response": { + "type": "structure", + "members": { + "body": { + "target": "com.hostinger.api#DomainsV1MoveMoveCollection", + "traits": { + "com.distilled.openapi#rawResponse": {}, + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#DomainsGetOutgoingDomainMoveListV1": { + "type": "operation", + "input": { + "target": "smithy.api#Unit" + }, + "output": { + "target": "com.hostinger.api#DomainsGetOutgoingDomainMoveListV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/domains/v1/move/outgoing", + "code": 200 + }, + "smithy.api#documentation": "Get outgoing domain move list\n\nRetrieve all domains you are moving to other Hostinger accounts.\n\nOnly moves which have not completed yet are returned.\n\nUse this endpoint to track moves you have initiated and the accounts they are addressed to." + } + }, + "com.hostinger.api#GetDomainDomainAuthorizationCodeV1Request": { + "type": "structure", + "members": { + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DomainsV1PortfolioAuthCodeAuthCodeResource": { + "type": "structure", + "members": { + "auth_code": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Domain authorization code used to transfer the domain to another registrar.", + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#GetDomainDomainAuthorizationCodeV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#GetDomainDomainAuthorizationCodeV1Request" + }, + "output": { + "target": "com.hostinger.api#DomainsV1PortfolioAuthCodeAuthCodeResource" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/domains/v1/portfolio/{domain}/auth-code", + "code": 200 + }, + "smithy.api#documentation": "Get domain authorization code\n\nRetrieve the authorization (EPP) code for a specified domain so it can be transferred\naway from Hostinger to another registrar.\n\nRequesting a new code invalidates any code retrieved previously.\n\nUse this endpoint to obtain the code required to transfer a domain to another registrar." + } + }, + "com.hostinger.api#ClaimDomainFreeDomainV1RequestDomainContacts": { + "type": "structure", + "members": { + "owner_id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Owner contact WHOIS record ID" + } + }, + "admin_id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Administrative contact WHOIS record ID" + } + }, + "billing_id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Billing contact WHOIS record ID" + } + }, + "tech_id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Technical contact WHOIS record ID" + } + } + }, + "traits": { + "smithy.api#documentation": "Domain contact information" + } + }, + "com.hostinger.api#ClaimDomainFreeDomainV1Request": { + "type": "structure", + "members": { + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Domain name", + "smithy.api#required": {} + } + }, + "domain_contacts": { + "target": "com.hostinger.api#ClaimDomainFreeDomainV1RequestDomainContacts", + "traits": { + "smithy.api#documentation": "Domain contact information" + } + }, + "additional_details": { + "target": "smithy.api#Document", + "traits": { + "smithy.api#documentation": "Additional registration data, possible values depends on TLD" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DomainsV1PortfolioClaimResource": { + "type": "structure", + "members": { + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Domain name", + "com.distilled.openapi#nullable": {} + } + }, + "status": { + "target": "com.hostinger.api#DomainsV1PortfolioClaimResourceStatus", + "traits": { + "smithy.api#documentation": "Domain status", + "com.distilled.openapi#nullable": {} + } + }, + "created_at": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#DomainsV1PortfolioClaimResourceStatus": { + "type": "enum", + "members": { + "ACTIVE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "active" + } + }, + "PENDING_SETUP": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "pending_setup" + } + }, + "EXPIRED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "expired" + } + }, + "REQUESTED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "requested" + } + }, + "PENDING_VERIFICATION": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "pending_verification" + } + }, + "DELETED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "deleted" + } + }, + "SUSPENDED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "suspended" + } + }, + "FAILED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "failed" + } + } + }, + "traits": { + "smithy.api#documentation": "Domain status" + } + }, + "com.hostinger.api#ClaimDomainFreeDomainV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ClaimDomainFreeDomainV1Request" + }, + "output": { + "target": "com.hostinger.api#DomainsV1PortfolioClaimResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/domains/v1/portfolio/claim", + "code": 200 + }, + "smithy.api#documentation": "Claim free domain\n\nClaim a free domain available on your account and register it.\n\nUnlike purchasing a domain, this consumes a free domain you already have,\nso no payment method is required.\n\nA successful response means the domain is registered. If registration fails, login to\n[hPanel](https://hpanel.hostinger.com/) and check domain registration status.\n\nIf no WHOIS information is provided, default contact information for that TLD will be used.\nBefore making request, ensure WHOIS information for desired TLD exists in your account.\n\nSome TLDs require `additional_details` to be provided and these will be validated before claiming.\n\nRequests which cannot be fulfilled are rejected with an error code in the response body,\nfor example `2037` when no free domain is available.\n\nUse this endpoint to register a domain using a free domain from your account." + } + }, + "com.hostinger.api#EnableDomainDomainLockV1Request": { + "type": "structure", + "members": { + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#EnableDomainDomainLockV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#EnableDomainDomainLockV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "traits": { + "smithy.api#http": { + "method": "PUT", + "uri": "/api/domains/v1/portfolio/{domain}/domain-lock", + "code": 200 + }, + "smithy.api#documentation": "Enable domain lock\n\nEnable domain lock for the domain.\n\nWhen domain lock is enabled,\nthe domain cannot be transferred to another registrar without first disabling the lock.\n\nUse this endpoint to secure domains against unauthorized transfers." + } + }, + "com.hostinger.api#DisableDomainDomainLockV1Request": { + "type": "structure", + "members": { + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DisableDomainDomainLockV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#DisableDomainDomainLockV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "traits": { + "smithy.api#http": { + "method": "DELETE", + "uri": "/api/domains/v1/portfolio/{domain}/domain-lock", + "code": 200 + }, + "smithy.api#documentation": "Disable domain lock\n\nDisable domain lock for the domain.\n\nDomain lock needs to be disabled before transferring the domain to another registrar.\n\nUse this endpoint to prepare domains for transfer to other registrars." + } + }, + "com.hostinger.api#GetDomainDomainDetailsV1Request": { + "type": "structure", + "members": { + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DomainsV1DomainDomainExtendedResource": { + "type": "structure", + "members": { + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Domain name" + } + }, + "status": { + "target": "com.hostinger.api#DomainsV1DomainDomainExtendedResourceStatus", + "traits": { + "smithy.api#documentation": "Status of the domain" + } + }, + "message": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "is_privacy_protection_allowed": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Is privacy protection allowed for the domain" + } + }, + "is_privacy_protected": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Is privacy protection enabled for the domain" + } + }, + "is_lockable": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Is domain allowed to be locked" + } + }, + "is_locked": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Is domain locked" + } + }, + "name_servers": { + "target": "com.hostinger.api#DomainsV1DomainDomainExtendedResourceNameServers", + "traits": { + "smithy.api#documentation": "Name servers" + } + }, + "child_name_servers": { + "target": "com.hostinger.api#DomainsV1DomainDomainExtendedResourceChildNameServersList", + "traits": { + "smithy.api#documentation": "Child name servers" + } + }, + "domain_contacts": { + "target": "com.hostinger.api#DomainsV1DomainDomainExtendedResourceDomainContacts", + "traits": { + "smithy.api#documentation": "WHOIS profiles" + } + }, + "created_at": { + "target": "smithy.api#String" + }, + "updated_at": { + "target": "smithy.api#String" + }, + "_60_days_lock_expires_at": { + "target": "smithy.api#String", + "traits": { + "smithy.api#jsonName": "60_days_lock_expires_at", + "com.distilled.openapi#nullable": {} + } + }, + "registered_at": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "expires_at": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#DomainsV1DomainDomainExtendedResourceStatus": { + "type": "enum", + "members": { + "ACTIVE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "active" + } + }, + "PENDING_SETUP": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "pending_setup" + } + }, + "EXPIRED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "expired" + } + }, + "REQUESTED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "requested" + } + }, + "PENDING_VERIFICATION": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "pending_verification" + } + }, + "DELETED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "deleted" + } + }, + "SUSPENDED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "suspended" + } + }, + "FAILED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "failed" + } + } + }, + "traits": { + "smithy.api#documentation": "Status of the domain" + } + }, + "com.hostinger.api#DomainsV1DomainDomainExtendedResourceNameServers": { + "type": "structure", + "members": { + "ns1": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Name server 1" + } + }, + "ns2": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Name server 2" + } + } + }, + "traits": { + "smithy.api#documentation": "Name servers" + } + }, + "com.hostinger.api#DomainsV1DomainDomainExtendedResourceChildNameServersItemList": { + "type": "list", + "member": { + "target": "smithy.api#String" + }, + "traits": {} + }, + "com.hostinger.api#DomainsV1DomainDomainExtendedResourceChildNameServersList": { + "type": "list", + "member": { + "target": "com.hostinger.api#DomainsV1DomainDomainExtendedResourceChildNameServersItemList" + }, + "traits": { + "smithy.api#documentation": "Child name servers" + } + }, + "com.hostinger.api#DomainsV1DomainDomainExtendedResourceDomainContacts": { + "type": "structure", + "members": { + "admin_id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Admin WHOIS profile ID" + } + }, + "owner_id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Owner WHOIS profile ID" + } + }, + "billing_id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Billing WHOIS profile ID" + } + }, + "tech_id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Technician WHOIS profile ID" + } + } + }, + "traits": { + "smithy.api#documentation": "WHOIS profiles" + } + }, + "com.hostinger.api#GetDomainDomainDetailsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#GetDomainDomainDetailsV1Request" + }, + "output": { + "target": "com.hostinger.api#DomainsV1DomainDomainExtendedResource" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/domains/v1/portfolio/{domain}", + "code": 200 + }, + "smithy.api#documentation": "Get domain details\n\nRetrieve detailed information for specified domain.\n\nUse this endpoint to view comprehensive domain configuration and status." + } + }, + "com.hostinger.api#DomainsV1DomainDomainCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#DomainsV1DomainDomainResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`Domains.V1.Domain.DomainResource`](#model/domainsv1domaindomainresource)" + } + }, + "com.hostinger.api#DomainsV1DomainDomainResource": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Domain ID" + } + }, + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Domain name, `null` when not claimed free domain", + "com.distilled.openapi#nullable": {} + } + }, + "type": { + "target": "com.hostinger.api#DomainsV1DomainDomainResourceType" + }, + "status": { + "target": "com.hostinger.api#DomainsV1DomainDomainResourceStatus" + }, + "created_at": { + "target": "smithy.api#String" + }, + "expires_at": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#DomainsV1DomainDomainResourceType": { + "type": "enum", + "members": { + "DOMAIN": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "domain" + } + }, + "FREE_DOMAIN": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "free_domain" + } + }, + "DOMAIN_TRANSFER": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "domain_transfer" + } + }, + "FREE_DOMAIN_TRANSFER": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "free_domain_transfer" + } + } + }, + "traits": {} + }, + "com.hostinger.api#DomainsV1DomainDomainResourceStatus": { + "type": "enum", + "members": { + "ACTIVE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "active" + } + }, + "PENDING_SETUP": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "pending_setup" + } + }, + "EXPIRED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "expired" + } + }, + "REQUESTED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "requested" + } + }, + "PENDING_VERIFICATION": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "pending_verification" + } + }, + "DELETED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "deleted" + } + }, + "SUSPENDED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "suspended" + } + }, + "FAILED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "failed" + } + } + }, + "traits": {} + }, + "com.hostinger.api#DomainsGetDomainListV1Response": { + "type": "structure", + "members": { + "body": { + "target": "com.hostinger.api#DomainsV1DomainDomainCollection", + "traits": { + "com.distilled.openapi#rawResponse": {}, + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#DomainsGetDomainListV1": { + "type": "operation", + "input": { + "target": "smithy.api#Unit" + }, + "output": { + "target": "com.hostinger.api#DomainsGetDomainListV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/domains/v1/portfolio", + "code": 200 + }, + "smithy.api#documentation": "Get domain list\n\nRetrieve all domains associated with your account.\n\nUse this endpoint to view user's domain portfolio." + } + }, + "com.hostinger.api#DomainsPurchaseNewDomainV1RequestDomainContacts": { + "type": "structure", + "members": { + "owner_id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Owner contact WHOIS record ID" + } + }, + "admin_id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Administrative contact WHOIS record ID" + } + }, + "billing_id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Billing contact WHOIS record ID" + } + }, + "tech_id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Technical contact WHOIS record ID" + } + } + }, + "traits": { + "smithy.api#documentation": "Domain contact information" + } + }, + "com.hostinger.api#DomainsPurchaseNewDomainV1RequestCouponsList": { + "type": "list", + "member": { + "target": "smithy.api#Document" + }, + "traits": { + "smithy.api#documentation": "Discount coupon codes" + } + }, + "com.hostinger.api#DomainsPurchaseNewDomainV1Request": { + "type": "structure", + "members": { + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Domain name", + "smithy.api#required": {} + } + }, + "item_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Catalog price item ID", + "smithy.api#required": {} + } + }, + "payment_method_id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Payment method ID, default will be used if not provided" + } + }, + "domain_contacts": { + "target": "com.hostinger.api#DomainsPurchaseNewDomainV1RequestDomainContacts", + "traits": { + "smithy.api#documentation": "Domain contact information" + } + }, + "additional_details": { + "target": "smithy.api#Document", + "traits": { + "smithy.api#documentation": "Additional registration data, possible values depends on TLD" + } + }, + "coupons": { + "target": "com.hostinger.api#DomainsPurchaseNewDomainV1RequestCouponsList", + "traits": { + "smithy.api#documentation": "Discount coupon codes" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DomainsPurchaseNewDomainV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#DomainsPurchaseNewDomainV1Request" + }, + "output": { + "target": "com.hostinger.api#BillingV1OrderOrderResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/domains/v1/portfolio", + "code": 200 + }, + "smithy.api#documentation": "Purchase new domain\n\nPurchase and register a new domain name.\n\nIf registration fails, login to [hPanel](https://hpanel.hostinger.com/) and check domain registration status.\n\nIf no payment method is provided, your default payment method will be used automatically.\n\nIf no WHOIS information is provided, default contact information for that TLD will be used.\nBefore making request, ensure WHOIS information for desired TLD exists in your account.\n\nSome TLDs require `additional_details` to be provided and these will be validated before completing purchase.\n\nUse this endpoint to register new domains for users." + } + }, + "com.hostinger.api#EnableDomainPrivacyProtectionV1Request": { + "type": "structure", + "members": { + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#EnableDomainPrivacyProtectionV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#EnableDomainPrivacyProtectionV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "traits": { + "smithy.api#http": { + "method": "PUT", + "uri": "/api/domains/v1/portfolio/{domain}/privacy-protection", + "code": 200 + }, + "smithy.api#documentation": "Enable privacy protection\n\nEnable privacy protection for the domain.\n\nWhen privacy protection is enabled, domain owner's personal information is hidden from public WHOIS database.\n\nUse this endpoint to protect domain owner's personal information from public view." + } + }, + "com.hostinger.api#DisableDomainPrivacyProtectionV1Request": { + "type": "structure", + "members": { + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DisableDomainPrivacyProtectionV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#DisableDomainPrivacyProtectionV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "traits": { + "smithy.api#http": { + "method": "DELETE", + "uri": "/api/domains/v1/portfolio/{domain}/privacy-protection", + "code": 200 + }, + "smithy.api#documentation": "Disable privacy protection\n\nDisable privacy protection for the domain.\n\nWhen privacy protection is disabled, domain owner's personal information is visible in public WHOIS database.\n\nUse this endpoint to make domain owner's information publicly visible." + } + }, + "com.hostinger.api#GetDomainDomainRenewalInformationV1Request": { + "type": "structure", + "members": { + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DomainsV1PortfolioRenewalRenewalInformationResource": { + "type": "structure", + "members": { + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Domain name" + } + }, + "status": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Domain status" + } + }, + "expires_at": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Domain expiration date" + } + } + }, + "traits": {} + }, + "com.hostinger.api#GetDomainDomainRenewalInformationV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#GetDomainDomainRenewalInformationV1Request" + }, + "output": { + "target": "com.hostinger.api#DomainsV1PortfolioRenewalRenewalInformationResource" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/domains/v1/portfolio/{domain}/renewal", + "code": 200 + }, + "smithy.api#documentation": "Get domain renewal information\n\nRetrieve renewal information for a specified domain, including its status and current\nexpiration date.\n\nUse this endpoint to build renewal automation and expiry monitoring for a single domain." + } + }, + "com.hostinger.api#UpdateDomainDomainNameserversV1Request": { + "type": "structure", + "members": { + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + }, + "ns1": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "First name server", + "smithy.api#required": {} + } + }, + "ns2": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Second name server", + "smithy.api#required": {} + } + }, + "ns3": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Third name server" + } + }, + "ns4": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Fourth name server" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#UpdateDomainDomainNameserversV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#UpdateDomainDomainNameserversV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "PUT", + "uri": "/api/domains/v1/portfolio/{domain}/nameservers", + "code": 200 + }, + "smithy.api#documentation": "Update domain nameservers\n\nSet nameservers for a specified domain.\n\nBe aware, that improper nameserver configuration can lead to the domain being unresolvable or unavailable.\n\nUse this endpoint to configure custom DNS hosting for domains." + } + }, + "com.hostinger.api#ClaimDomainFreeDomainTransferV1RequestDomainContacts": { + "type": "structure", + "members": { + "owner_id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Owner contact WHOIS record ID" + } + }, + "admin_id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Administrative contact WHOIS record ID" + } + }, + "billing_id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Billing contact WHOIS record ID" + } + }, + "tech_id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Technical contact WHOIS record ID" + } + } + }, + "traits": { + "smithy.api#documentation": "Domain contact information" + } + }, + "com.hostinger.api#ClaimDomainFreeDomainTransferV1Request": { + "type": "structure", + "members": { + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Domain name", + "smithy.api#required": {} + } + }, + "auth_code": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Authorization code from the current registrar", + "smithy.api#required": {} + } + }, + "domain_contacts": { + "target": "com.hostinger.api#ClaimDomainFreeDomainTransferV1RequestDomainContacts", + "traits": { + "smithy.api#documentation": "Domain contact information" + } + }, + "should_keep_ns": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Keep the existing nameservers of the domain" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DomainsV1TransferTransferResource": { + "type": "structure", + "members": { + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Domain name" + } + }, + "status": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Transfer status" + } + }, + "initiated_at": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "When the transfer was initiated", + "com.distilled.openapi#nullable": {} + } + }, + "completed_at": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "When the transfer completed", + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#ClaimDomainFreeDomainTransferV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ClaimDomainFreeDomainTransferV1Request" + }, + "output": { + "target": "com.hostinger.api#DomainsV1TransferTransferResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/domains/v1/transfers/claim", + "code": 200 + }, + "smithy.api#documentation": "Claim free domain transfer\n\nClaim a free domain transfer available on your account and start the transfer.\n\nUnlike purchasing a transfer, this consumes a free domain transfer you already have,\nso no payment method is required.\n\nBefore making request, unlock the domain at the current registrar and get its authorization\ncode. The transfer is validated first, so domains which cannot be transferred are rejected\nbefore the free domain transfer is consumed.\n\nA successful response means the transfer has been started. Completion depends on the current\nregistrar and can be followed with the [transfer list endpoint](#tag/domains-transfer).\n\nIf no WHOIS information is provided, default contact information for that TLD will be used.\nBefore making request, ensure WHOIS information for desired TLD exists in your account.\n\nRequests which cannot be fulfilled are rejected with an error code in the response body.\n\nUse this endpoint to transfer a domain using a free domain transfer from your account." + } + }, + "com.hostinger.api#GetDomainTransferV1Request": { + "type": "structure", + "members": { + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#GetDomainTransferV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#GetDomainTransferV1Request" + }, + "output": { + "target": "com.hostinger.api#DomainsV1TransferTransferResource" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/domains/v1/transfers/{domain}", + "code": 200 + }, + "smithy.api#documentation": "Get transfer\n\nRetrieve the transfer for a specified domain.\n\nUse this endpoint to track an incoming or outgoing registrar transfer and its status." + } + }, + "com.hostinger.api#DomainsV1TransferTransferCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#DomainsV1TransferTransferResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`Domains.V1.Transfer.TransferResource`](#model/domainsv1transfertransferresource)" + } + }, + "com.hostinger.api#DomainsGetTransferListV1Response": { + "type": "structure", + "members": { + "body": { + "target": "com.hostinger.api#DomainsV1TransferTransferCollection", + "traits": { + "com.distilled.openapi#rawResponse": {}, + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#DomainsGetTransferListV1": { + "type": "operation", + "input": { + "target": "smithy.api#Unit" + }, + "output": { + "target": "com.hostinger.api#DomainsGetTransferListV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/domains/v1/transfers", + "code": 200 + }, + "smithy.api#documentation": "Get transfer list\n\nRetrieve all domain transfers in your portfolio.\n\nUse this endpoint to monitor incoming and outgoing registrar transfers across your domains." + } + }, + "com.hostinger.api#DomainsChangeWHOISProfileForDomainV1RequestChangeForItem": { + "type": "enum", + "members": { + "OWNER": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "owner" + } + }, + "ADMIN": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "admin" + } + }, + "BILLING": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "billing" + } + }, + "TECH": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "tech" + } + } + }, + "traits": {} + }, + "com.hostinger.api#DomainsChangeWHOISProfileForDomainV1RequestChangeForList": { + "type": "list", + "member": { + "target": "com.hostinger.api#DomainsChangeWHOISProfileForDomainV1RequestChangeForItem" + }, + "traits": { + "smithy.api#documentation": "Contact roles to repoint to the new WHOIS profile" + } + }, + "com.hostinger.api#DomainsChangeWHOISProfileForDomainV1Request": { + "type": "structure", + "members": { + "new_whois_id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "WHOIS profile ID to assign to the domain", + "smithy.api#required": {} + } + }, + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Domain name", + "smithy.api#required": {} + } + }, + "change_for": { + "target": "com.hostinger.api#DomainsChangeWHOISProfileForDomainV1RequestChangeForList", + "traits": { + "smithy.api#documentation": "Contact roles to repoint to the new WHOIS profile", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DomainsChangeWHOISProfileForDomainV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#DomainsChangeWHOISProfileForDomainV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "PUT", + "uri": "/api/domains/v1/whois/change", + "code": 200 + }, + "smithy.api#documentation": "Change WHOIS profile for domain\n\nChange WHOIS contact profile for a domain.\n\nRepoints the given contact roles to a new WHOIS profile and submits the change to the registry.\nThe profile currently assigned to those roles is resolved automatically;\nthe request fails if the given roles are not all on the same profile today.\n\nChanging transfer sensitive fields on the owner contact starts an IRTP verification.\n\nThe change is processed asynchronously.\n\nUse this endpoint to move a registered domain onto different contact information." + } + }, + "com.hostinger.api#SetDomainWHOISProfileAsDefaultV1Request": { + "type": "structure", + "members": { + "whoisId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "WHOIS ID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#SetDomainWHOISProfileAsDefaultV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#SetDomainWHOISProfileAsDefaultV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "traits": { + "smithy.api#http": { + "method": "PUT", + "uri": "/api/domains/v1/whois/default/{whoisId}", + "code": 200 + }, + "smithy.api#documentation": "Set WHOIS profile as default\n\nSet WHOIS contact profile as default.\n\nThe default profile is pre-selected for the TLD it belongs to when registering new domains.\n\nUse this endpoint to avoid picking contact information for every registration." + } + }, + "com.hostinger.api#DomainsUnsetDefaultWHOISProfileV1Request": { + "type": "structure", + "members": { + "whoisId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "WHOIS ID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DomainsUnsetDefaultWHOISProfileV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#DomainsUnsetDefaultWHOISProfileV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "traits": { + "smithy.api#http": { + "method": "DELETE", + "uri": "/api/domains/v1/whois/default/{whoisId}", + "code": 200 + }, + "smithy.api#documentation": "Unset default WHOIS profile\n\nUnset WHOIS contact profile as default.\n\nThe profile itself is kept, it is only no longer pre-selected for its TLD.\n\nUse this endpoint to stop reusing contact information for new registrations." + } + }, + "com.hostinger.api#GetDomainWHOISProfileV1Request": { + "type": "structure", + "members": { + "whoisId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "WHOIS ID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DomainsV1WHOISProfileResource": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "WHOIS Profile ID" + } + }, + "tld": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "TLD to which contact profile can be applied to" + } + }, + "country": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "ISO 3166 2-letter country code" + } + }, + "entity_type": { + "target": "com.hostinger.api#DomainsV1WHOISProfileResourceEntityType", + "traits": { + "smithy.api#documentation": "WHOIS profile entity type" + } + }, + "whois_details": { + "target": "smithy.api#Document", + "traits": { + "smithy.api#documentation": "WHOIS profile details" + } + }, + "tld_details": { + "target": "smithy.api#Document", + "traits": { + "smithy.api#documentation": "TLD details" + } + }, + "created_at": { + "target": "smithy.api#String" + }, + "updated_at": { + "target": "smithy.api#String" + } + }, + "traits": {} + }, + "com.hostinger.api#DomainsV1WHOISProfileResourceEntityType": { + "type": "enum", + "members": { + "INDIVIDUAL": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "individual" + } + }, + "ORGANIZATION": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "organization" + } + } + }, + "traits": { + "smithy.api#documentation": "WHOIS profile entity type" + } + }, + "com.hostinger.api#GetDomainWHOISProfileV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#GetDomainWHOISProfileV1Request" + }, + "output": { + "target": "com.hostinger.api#DomainsV1WHOISProfileResource" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/domains/v1/whois/{whoisId}", + "code": 200 + }, + "smithy.api#documentation": "Get WHOIS profile\n\nRetrieve a WHOIS contact profile.\n\nUse this endpoint to view domain registration contact information." + } + }, + "com.hostinger.api#DeleteDomainWHOISProfileV1Request": { + "type": "structure", + "members": { + "whoisId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "WHOIS ID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DeleteDomainWHOISProfileV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#DeleteDomainWHOISProfileV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "traits": { + "smithy.api#http": { + "method": "DELETE", + "uri": "/api/domains/v1/whois/{whoisId}", + "code": 200 + }, + "smithy.api#documentation": "Delete WHOIS profile\n\nDelete WHOIS contact profile.\n\nUse this endpoint to remove unused contact profiles from account." + } + }, + "com.hostinger.api#DomainsGetWHOISProfileListV1Request": { + "type": "structure", + "members": { + "tld": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpQuery": "tld", + "smithy.api#documentation": "Filter by TLD (without leading dot)" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DomainsV1WHOISProfileCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#DomainsV1WHOISProfileResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`Domains.V1.WHOIS.ProfileResource`](#model/domainsv1whoisprofileresource)" + } + }, + "com.hostinger.api#DomainsGetWHOISProfileListV1Response": { + "type": "structure", + "members": { + "body": { + "target": "com.hostinger.api#DomainsV1WHOISProfileCollection", + "traits": { + "com.distilled.openapi#rawResponse": {}, + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#DomainsGetWHOISProfileListV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#DomainsGetWHOISProfileListV1Request" + }, + "output": { + "target": "com.hostinger.api#DomainsGetWHOISProfileListV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/domains/v1/whois", + "code": 200 + }, + "smithy.api#documentation": "Get WHOIS profile list\n\nRetrieve WHOIS contact profiles.\n\nUse this endpoint to view available contact profiles for domain registration." + } + }, + "com.hostinger.api#CreateDomainWHOISProfileV1RequestEntityType": { + "type": "enum", + "members": { + "INDIVIDUAL": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "individual" + } + }, + "ORGANIZATION": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "organization" + } + } + }, + "traits": { + "smithy.api#documentation": "Legal entity type" + } + }, + "com.hostinger.api#CreateDomainWHOISProfileV1Request": { + "type": "structure", + "members": { + "tld": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "TLD of the domain (without leading dot)", + "smithy.api#required": {} + } + }, + "country": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "ISO 3166 2-letter country code", + "smithy.api#required": {} + } + }, + "entity_type": { + "target": "com.hostinger.api#CreateDomainWHOISProfileV1RequestEntityType", + "traits": { + "smithy.api#documentation": "Legal entity type", + "smithy.api#required": {} + } + }, + "tld_details": { + "target": "smithy.api#Document", + "traits": { + "smithy.api#documentation": "TLD details" + } + }, + "whois_details": { + "target": "smithy.api#Document", + "traits": { + "smithy.api#documentation": "WHOIS details", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#CreateDomainWHOISProfileV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#CreateDomainWHOISProfileV1Request" + }, + "output": { + "target": "com.hostinger.api#DomainsV1WHOISProfileResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/domains/v1/whois", + "code": 200 + }, + "smithy.api#documentation": "Create WHOIS profile\n\nCreate WHOIS contact profile.\n\nUse this endpoint to add new contact information for domain registration." + } + }, + "com.hostinger.api#GetDomainWHOISProfileUsageV1Request": { + "type": "structure", + "members": { + "whoisId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "WHOIS ID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DomainsV1WHOISProfileUsageResource": { + "type": "list", + "member": { + "target": "smithy.api#String" + }, + "traits": { + "smithy.api#documentation": "Array of domains" + } + }, + "com.hostinger.api#GetDomainWHOISProfileUsageV1Response": { + "type": "structure", + "members": { + "body": { + "target": "com.hostinger.api#DomainsV1WHOISProfileUsageResource", + "traits": { + "com.distilled.openapi#rawResponse": {}, + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#GetDomainWHOISProfileUsageV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#GetDomainWHOISProfileUsageV1Request" + }, + "output": { + "target": "com.hostinger.api#GetDomainWHOISProfileUsageV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/domains/v1/whois/{whoisId}/usage", + "code": 200 + }, + "smithy.api#documentation": "Get WHOIS profile usage\n\nRetrieve domain list where provided WHOIS contact profile is used.\n\nUse this endpoint to view which domains use specific contact profiles." + } + }, + "com.hostinger.api#ListEcommerceDiscountsV1RequestIsDisabled": { + "type": "enum", + "members": { + "TRUE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "true" + } + }, + "FALSE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "false" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListEcommerceDiscountsV1Request": { + "type": "structure", + "members": { + "store_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "The ID of the store to list discounts for." + } + }, + "q": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpQuery": "q", + "smithy.api#documentation": "Free-text search over discount code and name." + } + }, + "is_disabled": { + "target": "com.hostinger.api#ListEcommerceDiscountsV1RequestIsDisabled", + "traits": { + "smithy.api#httpQuery": "is_disabled", + "smithy.api#documentation": "Filter by disabled state." + } + }, + "page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "page", + "smithy.api#documentation": "Page number" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#EcommerceV1DiscountDiscountCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#EcommerceV1DiscountDiscountResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`Ecommerce.V1.Discount.DiscountResource`](#model/ecommercev1discountdiscountresource)" + } + }, + "com.hostinger.api#EcommerceV1DiscountDiscountResource": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The discount ID, required by every other discount endpoint." + } + }, + "code": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The discount code customers enter at checkout." + } + }, + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The discount name, or null.", + "com.distilled.openapi#nullable": {} + } + }, + "type": { + "target": "com.hostinger.api#EcommerceV1DiscountDiscountResourceType", + "traits": { + "smithy.api#documentation": "The discount type, or null.", + "com.distilled.openapi#nullable": {} + } + }, + "value": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "The discount value, or null. Percentage is 1-100; fixed is in the smallest currency unit.", + "com.distilled.openapi#nullable": {} + } + }, + "allocation": { + "target": "com.hostinger.api#EcommerceV1DiscountDiscountResourceAllocation", + "traits": { + "smithy.api#documentation": "Whether the discount applies to the cart total or to each item, or null.", + "com.distilled.openapi#nullable": {} + } + }, + "is_disabled": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether the discount is disabled." + } + }, + "starts_at": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "When the discount becomes active." + } + }, + "ends_at": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "When the discount expires, or null.", + "com.distilled.openapi#nullable": {} + } + }, + "usage_limit": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Maximum number of redemptions, or null for unlimited.", + "com.distilled.openapi#nullable": {} + } + }, + "usage_count": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Number of times the discount has been redeemed." + } + } + }, + "traits": {} + }, + "com.hostinger.api#EcommerceV1DiscountDiscountResourceType": { + "type": "enum", + "members": { + "PERCENTAGE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "percentage" + } + }, + "FIXED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "fixed" + } + }, + "FREE_SHIPPING": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "free_shipping" + } + } + }, + "traits": { + "smithy.api#documentation": "The discount type, or null." + } + }, + "com.hostinger.api#EcommerceV1DiscountDiscountResourceAllocation": { + "type": "enum", + "members": { + "TOTAL": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "total" + } + }, + "ITEM": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "item" + } + } + }, + "traits": { + "smithy.api#documentation": "Whether the discount applies to the cart total or to each item, or null." + } + }, + "com.hostinger.api#ListEcommerceDiscountsV1Response": { + "type": "structure", + "members": { + "data": { + "target": "com.hostinger.api#EcommerceV1DiscountDiscountCollection" + }, + "meta": { + "target": "com.hostinger.api#CommonSchemaPaginationMetaSchema" + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListEcommerceDiscountsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListEcommerceDiscountsV1Request" + }, + "output": { + "target": "com.hostinger.api#ListEcommerceDiscountsV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/ecommerce/v1/stores/{store_id}/discounts", + "code": 200 + }, + "smithy.api#documentation": "List discounts\n\nList a store's discounts. Filter by free text over code and name, or by disabled state.\nAmounts for fixed discounts are integers in the smallest currency unit; percentage\ndiscounts carry a whole-number value between 1 and 100." + } + }, + "com.hostinger.api#CreateEcommerceADiscountV1RequestType": { + "type": "enum", + "members": { + "PERCENTAGE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "percentage" + } + }, + "FIXED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "fixed" + } + }, + "FREE_SHIPPING": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "free_shipping" + } + } + }, + "traits": { + "smithy.api#documentation": "The discount type." + } + }, + "com.hostinger.api#CreateEcommerceADiscountV1RequestAllocation": { + "type": "enum", + "members": { + "TOTAL": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "total" + } + }, + "ITEM": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "item" + } + } + }, + "traits": { + "smithy.api#documentation": "Whether the discount applies to the cart total or to each eligible item." + } + }, + "com.hostinger.api#CreateEcommerceADiscountV1Request": { + "type": "structure", + "members": { + "store_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "The ID of the store to create the discount for." + } + }, + "code": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The discount code customers enter at checkout.", + "smithy.api#required": {} + } + }, + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "A human-friendly discount name." + } + }, + "type": { + "target": "com.hostinger.api#CreateEcommerceADiscountV1RequestType", + "traits": { + "smithy.api#documentation": "The discount type.", + "smithy.api#required": {} + } + }, + "value": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "For percentage discounts a whole number 1-100; for fixed discounts an amount in the smallest currency unit (e.g. $10 is 1000). Ignored for free_shipping.", + "smithy.api#required": {} + } + }, + "allocation": { + "target": "com.hostinger.api#CreateEcommerceADiscountV1RequestAllocation", + "traits": { + "smithy.api#documentation": "Whether the discount applies to the cart total or to each eligible item." + } + }, + "starts_at": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "When the discount becomes active. A bare date (2026-11-27) anchors to time_zone. Defaults to now when omitted." + } + }, + "ends_at": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "When the discount expires. A bare date runs to the end of that day in time_zone. Never expires when omitted." + } + }, + "usage_limit": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Maximum number of times the discount can be redeemed." + } + }, + "min_cart_value": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Minimum cart value in the smallest currency unit required for the discount to apply." + } + }, + "time_zone": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "IANA time zone used to interpret starts_at and ends_at." + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#EcommerceV1DiscountDiscountResponseResource": { + "type": "structure", + "members": { + "data": { + "target": "com.hostinger.api#EcommerceV1DiscountDiscountResource" + } + }, + "traits": {} + }, + "com.hostinger.api#CreateEcommerceADiscountV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#CreateEcommerceADiscountV1Request" + }, + "output": { + "target": "com.hostinger.api#EcommerceV1DiscountDiscountResponseResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/ecommerce/v1/stores/{store_id}/discounts", + "code": 200 + }, + "smithy.api#documentation": "Create a discount\n\nCreate a discount for a store. Fixed discounts take an amount in the smallest currency\nunit (e.g. $10 is 1000); percentage discounts take a whole-number value between 1 and 100.\nFree-shipping discounts ignore value. Returns the created discount." + } + }, + "com.hostinger.api#EcommerceV1MiscellaneousCustomStorefrontInstructionsResource": { + "type": "structure", + "members": { + "instructions": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Markdown setup instructions for connecting a custom sales channel to your store." + } + } + }, + "traits": {} + }, + "com.hostinger.api#GetEcommerceCustomStorefrontSetupInstructionsV1": { + "type": "operation", + "input": { + "target": "smithy.api#Unit" + }, + "output": { + "target": "com.hostinger.api#EcommerceV1MiscellaneousCustomStorefrontInstructionsResource" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/ecommerce/v1/miscellaneous/custom-storefront-instructions", + "code": 200 + }, + "smithy.api#documentation": "Get custom storefront setup instructions\n\nRetrieve step-by-step setup instructions, formatted as Markdown, for connecting a custom sales\nchannel to your store and keeping your catalog, orders, shipping and payments in sync through\nthe Ecommerce API." + } + }, + "com.hostinger.api#CancelEcommerceAnOrderV1Request": { + "type": "structure", + "members": { + "store_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "The ID of the store that owns the order." + } + }, + "order_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "The ID of the order to cancel." + } + }, + "notify_customer": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether to email the customer about the cancellation. Defaults to true." + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#EcommerceV1OrderOrderResponseResource": { + "type": "structure", + "members": { + "data": { + "target": "com.hostinger.api#EcommerceV1OrderOrderResource" + } + }, + "traits": {} + }, + "com.hostinger.api#EcommerceV1OrderOrderResource": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The order ID, required by every other order endpoint." + } + }, + "display_id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "The order number the merchant and customer see." + } + }, + "status": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The order status." + } + }, + "payment_status": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The payment status. A paid order is \"captured\"." + } + }, + "fulfillment_status": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The fulfilment status." + } + }, + "total": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Order total in the smallest currency unit." + } + }, + "currency_code": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The order currency code." + } + }, + "customer_email": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The customer email.", + "com.distilled.openapi#nullable": {} + } + }, + "item_count": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Number of distinct line items. Retrieve the order for the items themselves." + } + }, + "created_at": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "ISO timestamp of when the order was created." + } + } + }, + "traits": {} + }, + "com.hostinger.api#CancelEcommerceAnOrderV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#CancelEcommerceAnOrderV1Request" + }, + "output": { + "target": "com.hostinger.api#EcommerceV1OrderOrderResponseResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/ecommerce/v1/stores/{store_id}/orders/{order_id}/cancel", + "code": 200 + }, + "smithy.api#documentation": "Cancel an order\n\nCancel the order and optionally email the customer. Returns the updated order summary." + } + }, + "com.hostinger.api#EcommerceFulfilAnOrderV1RequestItemsItem": { + "type": "structure", + "members": { + "line_item_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The line item to fulfil, from the order detail items[].id.", + "smithy.api#required": {} + } + }, + "quantity": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Quantity of the line item to fulfil.", + "smithy.api#required": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#EcommerceFulfilAnOrderV1RequestItemsList": { + "type": "list", + "member": { + "target": "com.hostinger.api#EcommerceFulfilAnOrderV1RequestItemsItem" + }, + "traits": { + "smithy.api#documentation": "Line items to fulfil. Omit to fulfil every remaining unfulfilled item." + } + }, + "com.hostinger.api#EcommerceFulfilAnOrderV1Request": { + "type": "structure", + "members": { + "store_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "The ID of the store that owns the order." + } + }, + "order_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "The ID of the order to fulfil." + } + }, + "items": { + "target": "com.hostinger.api#EcommerceFulfilAnOrderV1RequestItemsList", + "traits": { + "smithy.api#documentation": "Line items to fulfil. Omit to fulfil every remaining unfulfilled item." + } + }, + "tracking_number": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Carrier tracking number for the shipment." + } + }, + "tracking_url": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Public tracking URL for the shipment. Requires tracking_number." + } + }, + "notify_customer": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether to email the customer about the fulfilment. Defaults to true." + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#EcommerceFulfilAnOrderV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#EcommerceFulfilAnOrderV1Request" + }, + "output": { + "target": "com.hostinger.api#EcommerceV1OrderOrderResponseResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/ecommerce/v1/stores/{store_id}/orders/{order_id}/fulfill", + "code": 200 + }, + "smithy.api#documentation": "Fulfil an order\n\nCreate a fulfilment for the order and attach tracking in one call. Omit items to fulfil\nevery remaining unfulfilled item. Returns the updated order summary." + } + }, + "com.hostinger.api#ListEcommerceStoreOrdersV1RequestStatusItem": { + "type": "enum", + "members": { + "PENDING": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "pending" + } + }, + "COMPLETED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "completed" + } + }, + "ARCHIVED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "archived" + } + }, + "CANCELED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "canceled" + } + }, + "REQUIRES_ACTION": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "requires_action" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListEcommerceStoreOrdersV1RequestStatusList": { + "type": "list", + "member": { + "target": "com.hostinger.api#ListEcommerceStoreOrdersV1RequestStatusItem" + }, + "traits": {} + }, + "com.hostinger.api#ListEcommerceStoreOrdersV1RequestPaymentStatusItem": { + "type": "enum", + "members": { + "NOT_PAID": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "not_paid" + } + }, + "AWAITING": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "awaiting" + } + }, + "CAPTURED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "captured" + } + }, + "PARTIALLY_REFUNDED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "partially_refunded" + } + }, + "REFUNDED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "refunded" + } + }, + "CANCELED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "canceled" + } + }, + "REQUIRES_ACTION": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "requires_action" + } + }, + "NOT_REQUIRED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "not_required" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListEcommerceStoreOrdersV1RequestPaymentStatusList": { + "type": "list", + "member": { + "target": "com.hostinger.api#ListEcommerceStoreOrdersV1RequestPaymentStatusItem" + }, + "traits": {} + }, + "com.hostinger.api#ListEcommerceStoreOrdersV1RequestFulfillmentStatusItem": { + "type": "enum", + "members": { + "NOT_FULFILLED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "not_fulfilled" + } + }, + "PARTIALLY_FULFILLED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "partially_fulfilled" + } + }, + "FULFILLED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "fulfilled" + } + }, + "PARTIALLY_SHIPPED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "partially_shipped" + } + }, + "SHIPPED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "shipped" + } + }, + "PARTIALLY_RETURNED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "partially_returned" + } + }, + "RETURNED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "returned" + } + }, + "CANCELED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "canceled" + } + }, + "REQUIRES_ACTION": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "requires_action" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListEcommerceStoreOrdersV1RequestFulfillmentStatusList": { + "type": "list", + "member": { + "target": "com.hostinger.api#ListEcommerceStoreOrdersV1RequestFulfillmentStatusItem" + }, + "traits": {} + }, + "com.hostinger.api#ListEcommerceStoreOrdersV1Request": { + "type": "structure", + "members": { + "store_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "The ID of the store to list orders for." + } + }, + "status": { + "target": "com.hostinger.api#ListEcommerceStoreOrdersV1RequestStatusList", + "traits": { + "smithy.api#httpQuery": "status", + "smithy.api#documentation": "Order statuses to include." + } + }, + "payment_status": { + "target": "com.hostinger.api#ListEcommerceStoreOrdersV1RequestPaymentStatusList", + "traits": { + "smithy.api#httpQuery": "payment_status", + "smithy.api#documentation": "Payment statuses to include. A paid order is \"captured\"." + } + }, + "fulfillment_status": { + "target": "com.hostinger.api#ListEcommerceStoreOrdersV1RequestFulfillmentStatusList", + "traits": { + "smithy.api#httpQuery": "fulfillment_status", + "smithy.api#documentation": "Fulfilment statuses to include." + } + }, + "email": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpQuery": "email", + "smithy.api#documentation": "Customer email, matched exactly." + } + }, + "display_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpQuery": "display_id", + "smithy.api#documentation": "The order number the merchant and customer see." + } + }, + "q": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpQuery": "q", + "smithy.api#documentation": "Free-text search over customer name, email, order number and line items." + } + }, + "created_at_from": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpQuery": "created_at_from", + "smithy.api#documentation": "Earliest creation time to include, inclusive. Accepts a date or ISO date-time (UTC)." + } + }, + "created_at_to": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpQuery": "created_at_to", + "smithy.api#documentation": "Latest creation time to include, inclusive. A bare date covers that whole day." + } + }, + "page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "page", + "smithy.api#documentation": "Page number" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#EcommerceV1OrderOrderCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#EcommerceV1OrderOrderResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`Ecommerce.V1.Order.OrderResource`](#model/ecommercev1orderorderresource)" + } + }, + "com.hostinger.api#ListEcommerceStoreOrdersV1Response": { + "type": "structure", + "members": { + "data": { + "target": "com.hostinger.api#EcommerceV1OrderOrderCollection" + }, + "meta": { + "target": "com.hostinger.api#CommonSchemaPaginationMetaSchema" + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListEcommerceStoreOrdersV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListEcommerceStoreOrdersV1Request" + }, + "output": { + "target": "com.hostinger.api#ListEcommerceStoreOrdersV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/ecommerce/v1/stores/{store_id}/orders", + "code": 200 + }, + "smithy.api#documentation": "List store orders\n\nList a store's orders newest first as summaries. Filter by status, payment or fulfilment\nstatus, customer email, order number or a free-text query. Amounts are in the smallest\ncurrency unit. Retrieve a single order for its line items, addresses and fulfilments." + } + }, + "com.hostinger.api#GetEcommerceAnOrderV1Request": { + "type": "structure", + "members": { + "store_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "The ID of the store that owns the order." + } + }, + "order_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "The ID of the order to retrieve." + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#EcommerceV1OrderOrderDetailResponseResource": { + "type": "structure", + "members": { + "data": { + "target": "com.hostinger.api#EcommerceV1OrderOrderDetailResource" + } + }, + "traits": {} + }, + "com.hostinger.api#EcommerceV1OrderOrderDetailResource": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The order ID." + } + }, + "display_id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "The order number." + } + }, + "status": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The order status." + } + }, + "payment_status": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The payment status." + } + }, + "fulfillment_status": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The fulfilment status." + } + }, + "total": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Order total in the smallest currency unit." + } + }, + "currency_code": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The order currency code." + } + }, + "customer_email": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The customer email.", + "com.distilled.openapi#nullable": {} + } + }, + "item_count": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Number of distinct line items." + } + }, + "created_at": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "ISO timestamp of when the order was created." + } + }, + "merchant_note": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Internal note visible only to the merchant.", + "com.distilled.openapi#nullable": {} + } + }, + "subtotal": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Subtotal in the smallest currency unit." + } + }, + "discount_total": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Discount total in the smallest currency unit." + } + }, + "tax_total": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Tax total in the smallest currency unit." + } + }, + "shipping_total": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Shipping total in the smallest currency unit." + } + }, + "paid_total": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Amount paid in the smallest currency unit." + } + }, + "refunded_total": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Amount refunded in the smallest currency unit." + } + }, + "shipping_address": { + "target": "com.hostinger.api#EcommerceV1OrderOrderDetailResourceShippingAddress", + "traits": { + "smithy.api#documentation": "The shipping address, or null.", + "com.distilled.openapi#nullable": {} + } + }, + "billing_address": { + "target": "com.hostinger.api#EcommerceV1OrderOrderDetailResourceBillingAddress", + "traits": { + "smithy.api#documentation": "The billing address, or null.", + "com.distilled.openapi#nullable": {} + } + }, + "items": { + "target": "com.hostinger.api#EcommerceV1OrderOrderDetailResourceItemsList", + "traits": { + "smithy.api#documentation": "The order line items." + } + }, + "fulfillments": { + "target": "com.hostinger.api#EcommerceV1OrderOrderDetailResourceFulfillmentsList", + "traits": { + "smithy.api#documentation": "The order fulfilments with tracking." + } + } + }, + "traits": {} + }, + "com.hostinger.api#EcommerceV1OrderOrderDetailResourceShippingAddress": { + "type": "structure", + "members": { + "name": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "company": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "address_1": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "address_2": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "city": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "province_code": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "postal_code": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "country_code": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "phone": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": { + "smithy.api#documentation": "The shipping address, or null." + } + }, + "com.hostinger.api#EcommerceV1OrderOrderDetailResourceBillingAddress": { + "type": "structure", + "members": { + "name": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "company": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "address_1": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "address_2": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "city": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "province_code": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "postal_code": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "country_code": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "phone": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": { + "smithy.api#documentation": "The billing address, or null." + } + }, + "com.hostinger.api#EcommerceV1OrderOrderDetailResourceItemsItem": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The line item ID, required by the fulfil endpoint." + } + }, + "title": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The line item title." + } + }, + "sku": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The variant SKU.", + "com.distilled.openapi#nullable": {} + } + }, + "variant_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The variant ID.", + "com.distilled.openapi#nullable": {} + } + }, + "quantity": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Quantity ordered." + } + }, + "fulfilled_quantity": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Quantity already fulfilled." + } + }, + "returned_quantity": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Quantity returned." + } + }, + "unit_price": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Unit price in the smallest currency unit." + } + }, + "total": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Line total in the smallest currency unit." + } + } + }, + "traits": {} + }, + "com.hostinger.api#EcommerceV1OrderOrderDetailResourceItemsList": { + "type": "list", + "member": { + "target": "com.hostinger.api#EcommerceV1OrderOrderDetailResourceItemsItem" + }, + "traits": { + "smithy.api#documentation": "The order line items." + } + }, + "com.hostinger.api#EcommerceV1OrderOrderDetailResourceFulfillmentsItemTrackingItem": { + "type": "structure", + "members": { + "tracking_number": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Carrier tracking number." + } + }, + "url": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Public tracking URL, when available.", + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#EcommerceV1OrderOrderDetailResourceFulfillmentsItemTrackingList": { + "type": "list", + "member": { + "target": "com.hostinger.api#EcommerceV1OrderOrderDetailResourceFulfillmentsItemTrackingItem" + }, + "traits": { + "smithy.api#documentation": "Tracking numbers attached to the fulfilment." + } + }, + "com.hostinger.api#EcommerceV1OrderOrderDetailResourceFulfillmentsItem": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The fulfilment ID." + } + }, + "created_at": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "ISO timestamp of when the fulfilment was created." + } + }, + "shipped_at": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "ISO timestamp of when the fulfilment shipped, if known.", + "com.distilled.openapi#nullable": {} + } + }, + "canceled_at": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "ISO timestamp of when the fulfilment was canceled, if any.", + "com.distilled.openapi#nullable": {} + } + }, + "tracking": { + "target": "com.hostinger.api#EcommerceV1OrderOrderDetailResourceFulfillmentsItemTrackingList", + "traits": { + "smithy.api#documentation": "Tracking numbers attached to the fulfilment." + } + } + }, + "traits": {} + }, + "com.hostinger.api#EcommerceV1OrderOrderDetailResourceFulfillmentsList": { + "type": "list", + "member": { + "target": "com.hostinger.api#EcommerceV1OrderOrderDetailResourceFulfillmentsItem" + }, + "traits": { + "smithy.api#documentation": "The order fulfilments with tracking." + } + }, + "com.hostinger.api#GetEcommerceAnOrderV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#GetEcommerceAnOrderV1Request" + }, + "output": { + "target": "com.hostinger.api#EcommerceV1OrderOrderDetailResponseResource" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/ecommerce/v1/stores/{store_id}/orders/{order_id}", + "code": 200 + }, + "smithy.api#documentation": "Retrieve an order\n\nRetrieve one order in full: line items (each with the id the fulfil endpoint needs),\naddresses, the totals breakdown and fulfilments with tracking. Amounts are in the\nsmallest currency unit." + } + }, + "com.hostinger.api#EnableEcommerceManualPaymentMethodV1Request": { + "type": "structure", + "members": { + "store_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "The ID of the store to enable manual payment for." + } + }, + "title": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Optional display name shown to customers at checkout.", + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#EcommerceV1PaymentManualPaymentResource": { + "type": "structure", + "members": { + "payment_method": { + "target": "com.hostinger.api#EcommerceV1PaymentManualPaymentResourcePaymentMethod" + }, + "admin_url": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Admin UI deep-link to manage payment settings." + } + } + }, + "traits": {} + }, + "com.hostinger.api#EcommerceV1PaymentManualPaymentResourcePaymentMethod": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Store payment provider ID." + } + }, + "provider_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The payment provider identifier." + } + }, + "is_enabled": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether the payment method is shown at checkout." + } + }, + "title": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Display name shown to customers at checkout." + } + } + }, + "traits": {} + }, + "com.hostinger.api#EnableEcommerceManualPaymentMethodV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#EnableEcommerceManualPaymentMethodV1Request" + }, + "output": { + "target": "com.hostinger.api#EcommerceV1PaymentManualPaymentResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/ecommerce/v1/stores/{store_id}/payment-methods/manual", + "code": 200 + }, + "smithy.api#documentation": "Enable manual payment method\n\nEnable a manual payment method so the store can accept orders without an online payment provider." + } + }, + "com.hostinger.api#EcommerceCreateAPaymentProviderConnectLinkV1Request": { + "type": "structure", + "members": { + "store_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "The ID of the store to connect the payment provider to." + } + }, + "provider_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "The ID of the payment gateway to connect, e.g. stripe." + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#EcommerceV1PaymentProviderPaymentProviderConnectLinkResource": { + "type": "structure", + "members": { + "data": { + "target": "com.hostinger.api#EcommerceV1PaymentProviderPaymentProviderConnectLinkResourceData" + } + }, + "traits": {} + }, + "com.hostinger.api#EcommerceV1PaymentProviderPaymentProviderConnectLinkResourceData": { + "type": "structure", + "members": { + "url": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The gateway onboarding URL for the merchant to open." + } + }, + "admin_url": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "A deep-link into the store admin for the provider." + } + } + }, + "traits": {} + }, + "com.hostinger.api#EcommerceCreateAPaymentProviderConnectLinkV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#EcommerceCreateAPaymentProviderConnectLinkV1Request" + }, + "output": { + "target": "com.hostinger.api#EcommerceV1PaymentProviderPaymentProviderConnectLinkResource" + }, + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/ecommerce/v1/stores/{store_id}/payment-providers/{provider_id}/connect-link", + "code": 200 + }, + "smithy.api#documentation": "Create a payment provider connect link\n\nCreate an onboarding link for connecting a payment gateway to the store. Returns the gateway\nonboarding URL for the merchant to open and a deep-link into the store admin." + } + }, + "com.hostinger.api#ListEcommerceStorePaymentProvidersV1Request": { + "type": "structure", + "members": { + "store_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "The ID of the store to list payment providers for." + } + }, + "include_currency_unsupported": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#httpQuery": "include_currency_unsupported", + "smithy.api#documentation": "Include gateways that do not support the store currency in the available list." + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#EcommerceV1PaymentProviderPaymentProviderListResource": { + "type": "structure", + "members": { + "data": { + "target": "com.hostinger.api#EcommerceV1PaymentProviderPaymentProviderListResourceData" + } + }, + "traits": {} + }, + "com.hostinger.api#EcommerceV1PaymentProviderPaymentProviderListResourceDataConnectedItemStatus": { + "type": "enum", + "members": { + "CONNECTED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "connected" + } + }, + "PENDING": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "pending" + } + }, + "NEW": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "new" + } + }, + "INVALID": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "invalid" + } + } + }, + "traits": { + "smithy.api#documentation": "The connection status." + } + }, + "com.hostinger.api#EcommerceV1PaymentProviderPaymentProviderListResourceDataConnectedItem": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The store payment provider row ID." + } + }, + "provider_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The payment gateway ID, e.g. stripe." + } + }, + "title": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The provider title, or null.", + "com.distilled.openapi#nullable": {} + } + }, + "is_enabled": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether the provider is enabled for the store." + } + }, + "status": { + "target": "com.hostinger.api#EcommerceV1PaymentProviderPaymentProviderListResourceDataConnectedItemStatus", + "traits": { + "smithy.api#documentation": "The connection status.", + "com.distilled.openapi#nullable": {} + } + }, + "shows_at_checkout": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether the provider shows at checkout." + } + } + }, + "traits": {} + }, + "com.hostinger.api#EcommerceV1PaymentProviderPaymentProviderListResourceDataConnectedList": { + "type": "list", + "member": { + "target": "com.hostinger.api#EcommerceV1PaymentProviderPaymentProviderListResourceDataConnectedItem" + }, + "traits": { + "smithy.api#documentation": "Payment providers already connected to the store." + } + }, + "com.hostinger.api#EcommerceV1PaymentProviderPaymentProviderListResourceDataAvailableItemSupportedCurrenciesList": { + "type": "list", + "member": { + "target": "smithy.api#String" + }, + "traits": { + "smithy.api#documentation": "Currencies the gateway supports; present only when the store currency is unsupported." + } + }, + "com.hostinger.api#EcommerceV1PaymentProviderPaymentProviderListResourceDataAvailableItem": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The payment gateway ID, e.g. stripe." + } + }, + "is_installed": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether the gateway is installed on the store." + } + }, + "is_enabled": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether the gateway is enabled on the store." + } + }, + "is_currency_supported": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether the gateway supports the store currency." + } + }, + "supported_currencies": { + "target": "com.hostinger.api#EcommerceV1PaymentProviderPaymentProviderListResourceDataAvailableItemSupportedCurrenciesList", + "traits": { + "smithy.api#documentation": "Currencies the gateway supports; present only when the store currency is unsupported." + } + } + }, + "traits": {} + }, + "com.hostinger.api#EcommerceV1PaymentProviderPaymentProviderListResourceDataAvailableList": { + "type": "list", + "member": { + "target": "com.hostinger.api#EcommerceV1PaymentProviderPaymentProviderListResourceDataAvailableItem" + }, + "traits": { + "smithy.api#documentation": "Payment gateways available to install for the store." + } + }, + "com.hostinger.api#EcommerceV1PaymentProviderPaymentProviderListResourceData": { + "type": "structure", + "members": { + "connected": { + "target": "com.hostinger.api#EcommerceV1PaymentProviderPaymentProviderListResourceDataConnectedList", + "traits": { + "smithy.api#documentation": "Payment providers already connected to the store." + } + }, + "available": { + "target": "com.hostinger.api#EcommerceV1PaymentProviderPaymentProviderListResourceDataAvailableList", + "traits": { + "smithy.api#documentation": "Payment gateways available to install for the store." + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListEcommerceStorePaymentProvidersV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListEcommerceStorePaymentProvidersV1Request" + }, + "output": { + "target": "com.hostinger.api#EcommerceV1PaymentProviderPaymentProviderListResource" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/ecommerce/v1/stores/{store_id}/payment-providers", + "code": 200 + }, + "smithy.api#documentation": "List store payment providers\n\nList a store's payment providers, split into providers already connected to the store and\ngateways available to install. Never exposes gateway credentials, secrets, or configuration." + } + }, + "com.hostinger.api#EcommerceCreateAProductImageUploadURLV1Request": { + "type": "structure", + "members": { + "store_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "The ID of the store the product belongs to." + } + }, + "product_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "The ID of the product the image will be attached to." + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#EcommerceV1ProductProductImageUploadUrlResource": { + "type": "structure", + "members": { + "upload_url": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Signed URL to upload the image to with a multipart/form-data POST." + } + }, + "fields": { + "target": "com.hostinger.api#EcommerceV1ProductProductImageUploadUrlResourceFieldsMap", + "traits": { + "smithy.api#documentation": "Form fields to send alongside the file in the multipart POST." + } + }, + "object_name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Key of the uploaded object — send it to the attach-image endpoint." + } + }, + "max_bytes": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Maximum accepted upload size in bytes." + } + } + }, + "traits": {} + }, + "com.hostinger.api#EcommerceV1ProductProductImageUploadUrlResourceFieldsMap": { + "type": "map", + "key": { + "target": "smithy.api#String" + }, + "value": { + "target": "smithy.api#String" + }, + "traits": { + "smithy.api#documentation": "Form fields to send alongside the file in the multipart POST." + } + }, + "com.hostinger.api#EcommerceCreateAProductImageUploadURLV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#EcommerceCreateAProductImageUploadURLV1Request" + }, + "output": { + "target": "com.hostinger.api#EcommerceV1ProductProductImageUploadUrlResource" + }, + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/ecommerce/v1/stores/{store_id}/products/{product_id}/images/upload-url", + "code": 200 + }, + "smithy.api#documentation": "Create a product image upload URL\n\nReturns a signed URL to upload a product image to (multipart/form-data POST). Then call the\nattach-image endpoint with the returned object_name to scan and attach it to the product." + } + }, + "com.hostinger.api#UpdateEcommerceAProductV1RequestStatus": { + "type": "enum", + "members": { + "DRAFT": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "draft" + } + }, + "PUBLISHED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "published" + } + }, + "ARCHIVED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "archived" + } + } + }, + "traits": { + "smithy.api#documentation": "Set \"published\" to make the product buyable, \"draft\" to hide it, or \"archived\" to retire it." + } + }, + "com.hostinger.api#UpdateEcommerceAProductV1Request": { + "type": "structure", + "members": { + "store_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "The ID of the store that owns the product." + } + }, + "product_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "The ID of the product to update." + } + }, + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The product name." + } + }, + "description": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The product description." + } + }, + "status": { + "target": "com.hostinger.api#UpdateEcommerceAProductV1RequestStatus", + "traits": { + "smithy.api#documentation": "Set \"published\" to make the product buyable, \"draft\" to hide it, or \"archived\" to retire it." + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#EcommerceV1ProductProductResponseResource": { + "type": "structure", + "members": { + "data": { + "target": "com.hostinger.api#EcommerceV1ProductProductResource" + } + }, + "traits": {} + }, + "com.hostinger.api#EcommerceV1ProductProductResource": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The product ID, required by every other product endpoint." + } + }, + "title": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The product name." + } + }, + "status": { + "target": "com.hostinger.api#EcommerceV1ProductProductResourceStatus", + "traits": { + "smithy.api#documentation": "The product status." + } + }, + "thumbnail": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The product's primary image URL, or null.", + "com.distilled.openapi#nullable": {} + } + }, + "type": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The product type." + } + }, + "variant_count": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Number of variants. Use include=variants to retrieve them." + } + }, + "price_range": { + "target": "com.hostinger.api#EcommerceV1ProductProductResourcePriceRange", + "traits": { + "smithy.api#documentation": "Effective price bounds across the product's variants." + } + }, + "variants": { + "target": "com.hostinger.api#EcommerceV1ProductProductResourceVariantsList", + "traits": { + "smithy.api#documentation": "Present (non-null) only when include=variants is set; null otherwise.", + "com.distilled.openapi#nullable": {} + } + }, + "media": { + "target": "com.hostinger.api#EcommerceV1ProductProductResourceMediaList", + "traits": { + "smithy.api#documentation": "Present (non-null) only when include=media is set; null otherwise.", + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#EcommerceV1ProductProductResourceStatus": { + "type": "enum", + "members": { + "DRAFT": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "draft" + } + }, + "PROPOSED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "proposed" + } + }, + "PUBLISHED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "published" + } + }, + "REJECTED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "rejected" + } + }, + "ARCHIVED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "archived" + } + } + }, + "traits": { + "smithy.api#documentation": "The product status." + } + }, + "com.hostinger.api#EcommerceV1ProductProductResourcePriceRange": { + "type": "structure", + "members": { + "min": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Lowest effective variant price in the smallest currency unit, or null if unpriced.", + "com.distilled.openapi#nullable": {} + } + }, + "max": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Highest effective variant price in the smallest currency unit, or null if unpriced.", + "com.distilled.openapi#nullable": {} + } + }, + "currency_code": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The store currency the range is expressed in." + } + } + }, + "traits": { + "smithy.api#documentation": "Effective price bounds across the product's variants." + } + }, + "com.hostinger.api#EcommerceV1ProductProductResourceVariantsItemOptionsItem": { + "type": "structure", + "members": { + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Option name, e.g. Size.", + "com.distilled.openapi#nullable": {} + } + }, + "value": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Option value, e.g. L." + } + } + }, + "traits": {} + }, + "com.hostinger.api#EcommerceV1ProductProductResourceVariantsItemOptionsList": { + "type": "list", + "member": { + "target": "com.hostinger.api#EcommerceV1ProductProductResourceVariantsItemOptionsItem" + }, + "traits": { + "smithy.api#documentation": "The variant's option values." + } + }, + "com.hostinger.api#EcommerceV1ProductProductResourceVariantsItemPricesItem": { + "type": "structure", + "members": { + "amount": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Price in the smallest currency unit." + } + }, + "sale_amount": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Sale price in the smallest currency unit, or null.", + "com.distilled.openapi#nullable": {} + } + }, + "currency_code": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The price currency code." + } + } + }, + "traits": {} + }, + "com.hostinger.api#EcommerceV1ProductProductResourceVariantsItemPricesList": { + "type": "list", + "member": { + "target": "com.hostinger.api#EcommerceV1ProductProductResourceVariantsItemPricesItem" + }, + "traits": { + "smithy.api#documentation": "Prices per currency, in the smallest currency unit." + } + }, + "com.hostinger.api#EcommerceV1ProductProductResourceVariantsItem": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The variant ID." + } + }, + "title": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The variant title.", + "com.distilled.openapi#nullable": {} + } + }, + "sku": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The variant SKU.", + "com.distilled.openapi#nullable": {} + } + }, + "options": { + "target": "com.hostinger.api#EcommerceV1ProductProductResourceVariantsItemOptionsList", + "traits": { + "smithy.api#documentation": "The variant's option values." + } + }, + "prices": { + "target": "com.hostinger.api#EcommerceV1ProductProductResourceVariantsItemPricesList", + "traits": { + "smithy.api#documentation": "Prices per currency, in the smallest currency unit." + } + }, + "inventory_quantity": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Units in stock." + } + }, + "manage_inventory": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether stock is tracked for this variant." + } + } + }, + "traits": {} + }, + "com.hostinger.api#EcommerceV1ProductProductResourceVariantsList": { + "type": "list", + "member": { + "target": "com.hostinger.api#EcommerceV1ProductProductResourceVariantsItem" + }, + "traits": { + "smithy.api#documentation": "Present (non-null) only when include=variants is set; null otherwise." + } + }, + "com.hostinger.api#EcommerceV1ProductProductResourceMediaItem": { + "type": "structure", + "members": { + "url": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The media URL." + } + }, + "type": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The media type, e.g. image or video." + } + }, + "is_thumbnail": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether this media is the product's thumbnail." + } + } + }, + "traits": {} + }, + "com.hostinger.api#EcommerceV1ProductProductResourceMediaList": { + "type": "list", + "member": { + "target": "com.hostinger.api#EcommerceV1ProductProductResourceMediaItem" + }, + "traits": { + "smithy.api#documentation": "Present (non-null) only when include=media is set; null otherwise." + } + }, + "com.hostinger.api#UpdateEcommerceAProductV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#UpdateEcommerceAProductV1Request" + }, + "output": { + "target": "com.hostinger.api#EcommerceV1ProductProductResponseResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "PATCH", + "uri": "/api/ecommerce/v1/stores/{store_id}/products/{product_id}", + "code": 200 + }, + "smithy.api#documentation": "Update a product\n\nUpdate a product's name, description or status. Set status to published to make it buyable,\ndraft to hide it, or archived to retire it. Variants, prices and inventory are managed\nthrough the variant endpoints, not here. Returns the updated product summary." + } + }, + "com.hostinger.api#DeleteEcommerceAProductV1Request": { + "type": "structure", + "members": { + "store_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "The ID of the store that owns the product." + } + }, + "product_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "The ID of the product to delete." + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#EcommerceV1ProductProductDeletedResource": { + "type": "structure", + "members": { + "data": { + "target": "com.hostinger.api#EcommerceV1ProductProductDeletedResourceData" + } + }, + "traits": {} + }, + "com.hostinger.api#EcommerceV1ProductProductDeletedResourceData": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The ID of the product." + } + }, + "is_deleted": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "True when the product was deleted." + } + }, + "is_archived": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "True when the product was archived instead of deleted (a subscription product with active subscribers)." + } + } + }, + "traits": {} + }, + "com.hostinger.api#DeleteEcommerceAProductV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#DeleteEcommerceAProductV1Request" + }, + "output": { + "target": "com.hostinger.api#EcommerceV1ProductProductDeletedResource" + }, + "traits": { + "smithy.api#http": { + "method": "DELETE", + "uri": "/api/ecommerce/v1/stores/{store_id}/products/{product_id}", + "code": 200 + }, + "smithy.api#documentation": "Delete a product\n\nDelete a product and its variants from the store. A subscription product with active\nsubscribers is archived instead of deleted so its data stays available." + } + }, + "com.hostinger.api#CreateEcommerceDigitalProductV1Request": { + "type": "structure", + "members": { + "store_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "The ID of the store to create the product in." + } + }, + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The product name.", + "smithy.api#required": {} + } + }, + "price": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Price in the smallest currency unit (e.g. cents). Must be positive.", + "smithy.api#required": {} + } + }, + "description": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The product description.", + "com.distilled.openapi#nullable": {} + } + }, + "currency": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "ISO 4217 currency code. Defaults to the store's default currency when omitted.", + "com.distilled.openapi#nullable": {} + } + }, + "download_url": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Optional external download link delivered to the customer after purchase.", + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#EcommerceV1ProductProductCreationResource": { + "type": "structure", + "members": { + "product": { + "target": "com.hostinger.api#EcommerceV1ProductProductCreationResourceProduct" + }, + "admin_url": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Admin UI deep-link to manage the product." + } + } + }, + "traits": {} + }, + "com.hostinger.api#EcommerceV1ProductProductCreationResourceProductType": { + "type": "enum", + "members": { + "PHYSICAL": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "physical" + } + }, + "DIGITAL": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "digital" + } + } + }, + "traits": { + "smithy.api#documentation": "Product type." + } + }, + "com.hostinger.api#EcommerceV1ProductProductCreationResourceProduct": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Product ID." + } + }, + "title": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Product name." + } + }, + "type": { + "target": "com.hostinger.api#EcommerceV1ProductProductCreationResourceProductType", + "traits": { + "smithy.api#documentation": "Product type." + } + }, + "status": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Product status." + } + }, + "price": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Price in the smallest currency unit (e.g. cents)." + } + }, + "currency_code": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Currency the product is priced in (ISO 4217, lowercase)." + } + } + }, + "traits": {} + }, + "com.hostinger.api#CreateEcommerceDigitalProductV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#CreateEcommerceDigitalProductV1Request" + }, + "output": { + "target": "com.hostinger.api#EcommerceV1ProductProductCreationResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/ecommerce/v1/stores/{store_id}/products/digital", + "code": 200 + }, + "smithy.api#documentation": "Create digital product\n\nCreate a published digital product with a single variant and an optional external download link." + } + }, + "com.hostinger.api#ListEcommerceProductsV1RequestProductIdsList": { + "type": "list", + "member": { + "target": "smithy.api#String" + }, + "traits": {} + }, + "com.hostinger.api#ListEcommerceProductsV1RequestStatusItem": { + "type": "enum", + "members": { + "DRAFT": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "draft" + } + }, + "PROPOSED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "proposed" + } + }, + "PUBLISHED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "published" + } + }, + "REJECTED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "rejected" + } + }, + "ARCHIVED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "archived" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListEcommerceProductsV1RequestStatusList": { + "type": "list", + "member": { + "target": "com.hostinger.api#ListEcommerceProductsV1RequestStatusItem" + }, + "traits": {} + }, + "com.hostinger.api#ListEcommerceProductsV1RequestIncludeItem": { + "type": "enum", + "members": { + "VARIANTS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "variants" + } + }, + "MEDIA": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "media" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListEcommerceProductsV1RequestIncludeList": { + "type": "list", + "member": { + "target": "com.hostinger.api#ListEcommerceProductsV1RequestIncludeItem" + }, + "traits": {} + }, + "com.hostinger.api#ListEcommerceProductsV1Request": { + "type": "structure", + "members": { + "store_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "The ID of the store to list products for." + } + }, + "product_ids": { + "target": "com.hostinger.api#ListEcommerceProductsV1RequestProductIdsList", + "traits": { + "smithy.api#httpQuery": "product_ids", + "smithy.api#documentation": "Restrict to these product ids. Doubles as a single-product lookup. Up to 200 ids." + } + }, + "status": { + "target": "com.hostinger.api#ListEcommerceProductsV1RequestStatusList", + "traits": { + "smithy.api#httpQuery": "status", + "smithy.api#documentation": "Product statuses to include." + } + }, + "q": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpQuery": "q", + "smithy.api#documentation": "Free-text search over product title and SKU." + } + }, + "include": { + "target": "com.hostinger.api#ListEcommerceProductsV1RequestIncludeList", + "traits": { + "smithy.api#httpQuery": "include", + "smithy.api#documentation": "Opt-in heavy data: \"variants\" embeds each product's variants; \"media\" embeds its media." + } + }, + "page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "page", + "smithy.api#documentation": "Page number" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#EcommerceV1ProductProductCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#EcommerceV1ProductProductResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`Ecommerce.V1.Product.ProductResource`](#model/ecommercev1productproductresource)" + } + }, + "com.hostinger.api#ListEcommerceProductsV1Response": { + "type": "structure", + "members": { + "data": { + "target": "com.hostinger.api#EcommerceV1ProductProductCollection" + }, + "meta": { + "target": "com.hostinger.api#CommonSchemaPaginationMetaSchema" + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListEcommerceProductsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListEcommerceProductsV1Request" + }, + "output": { + "target": "com.hostinger.api#ListEcommerceProductsV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/ecommerce/v1/stores/{store_id}/products", + "code": 200 + }, + "smithy.api#documentation": "List products\n\nList a store's products newest first as lean summaries (name, status, thumbnail, variant\ncount and price range). Prices are integers in the smallest currency unit and live on\nvariants. Filter by status, free text or a set of product ids. Use include=variants to\nembed each product's variants with prices and inventory, and include=media to embed its media." + } + }, + "com.hostinger.api#CreateEcommercePhysicalProductV1Request": { + "type": "structure", + "members": { + "store_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "The ID of the store to create the product in." + } + }, + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The product name.", + "smithy.api#required": {} + } + }, + "price": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Price in the smallest currency unit (e.g. cents). Must be positive.", + "smithy.api#required": {} + } + }, + "description": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The product description.", + "com.distilled.openapi#nullable": {} + } + }, + "currency": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "ISO 4217 currency code. Defaults to the store's default currency when omitted.", + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#CreateEcommercePhysicalProductV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#CreateEcommercePhysicalProductV1Request" + }, + "output": { + "target": "com.hostinger.api#EcommerceV1ProductProductCreationResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/ecommerce/v1/stores/{store_id}/products/physical", + "code": 200 + }, + "smithy.api#documentation": "Create physical product\n\nCreate a published physical product with a single variant priced in the store currency." + } + }, + "com.hostinger.api#EcommerceUploadAndAttachAProductImageV1Request": { + "type": "structure", + "members": { + "store_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "The ID of the store the product belongs to." + } + }, + "product_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "The ID of the product to attach the image to." + } + }, + "image_url": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Publicly reachable URL of the raster image (JPEG, PNG, GIF or WebP), maximum 15MB. The image is\nfetched, virus-scanned and validated by content, then stored on the CDN. SVG is not accepted.\nProvide either this or object_name." + } + }, + "object_name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Key returned by the upload-url endpoint. Provide this instead of image_url to attach an uploaded image." + } + }, + "is_thumbnail": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "When true, the image becomes the product's thumbnail (primary image). When omitted, it becomes the\nthumbnail only if the product does not have one yet.", + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#EcommerceV1ProductProductImageUploadResource": { + "type": "structure", + "members": { + "url": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "CDN URL of the uploaded image." + } + }, + "is_thumbnail": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether the image was set as the product's thumbnail (primary image)." + } + } + }, + "traits": {} + }, + "com.hostinger.api#EcommerceUploadAndAttachAProductImageV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#EcommerceUploadAndAttachAProductImageV1Request" + }, + "output": { + "target": "com.hostinger.api#EcommerceV1ProductProductImageUploadResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/ecommerce/v1/stores/{store_id}/products/{product_id}/images", + "code": 200 + }, + "smithy.api#documentation": "Upload and attach a product image\n\nFetch a raster image (JPEG, PNG, GIF or WebP, max 15MB) from a URL and attach it to a product in a\nsingle call. The image is virus-scanned and validated by content, then stored on the CDN. Set\nis_thumbnail to make it the product's primary image." + } + }, + "com.hostinger.api#ListEcommerceSalesChannelsV1Request": { + "type": "structure", + "members": { + "store_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "The ID of the store to list sales channels for." + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#EcommerceV1SalesChannelSalesChannelListResource": { + "type": "structure", + "members": { + "sales_channels": { + "target": "com.hostinger.api#EcommerceV1SalesChannelSalesChannelListResourceSalesChannelsList", + "traits": { + "smithy.api#documentation": "The store's active sales channels." + } + } + }, + "traits": {} + }, + "com.hostinger.api#EcommerceV1SalesChannelSalesChannelListResourceSalesChannelsItemType": { + "type": "enum", + "members": { + "BUILDER": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "builder" + } + }, + "HORIZONS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "horizons" + } + }, + "TIKTOK": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "tiktok" + } + }, + "CUSTOM": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "custom" + } + }, + "QUICK_LINK": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "quick-link" + } + }, + "WORDPRESS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "wordpress" + } + } + }, + "traits": { + "smithy.api#documentation": "Sales channel type" + } + }, + "com.hostinger.api#EcommerceV1SalesChannelSalesChannelListResourceSalesChannelsItem": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Sales channel ID" + } + }, + "type": { + "target": "com.hostinger.api#EcommerceV1SalesChannelSalesChannelListResourceSalesChannelsItemType", + "traits": { + "smithy.api#documentation": "Sales channel type" + } + }, + "is_primary": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether this is the primary sales channel." + } + }, + "is_active": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether the sales channel is active." + } + }, + "external_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "External identifier for the sales channel.", + "com.distilled.openapi#nullable": {} + } + }, + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Merchant-facing custom name.", + "com.distilled.openapi#nullable": {} + } + }, + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Public address where the sales channel lives.", + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#EcommerceV1SalesChannelSalesChannelListResourceSalesChannelsList": { + "type": "list", + "member": { + "target": "com.hostinger.api#EcommerceV1SalesChannelSalesChannelListResourceSalesChannelsItem" + }, + "traits": { + "smithy.api#documentation": "The store's active sales channels." + } + }, + "com.hostinger.api#ListEcommerceSalesChannelsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListEcommerceSalesChannelsV1Request" + }, + "output": { + "target": "com.hostinger.api#EcommerceV1SalesChannelSalesChannelListResource" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/ecommerce/v1/stores/{store_id}/sales-channels", + "code": 200 + }, + "smithy.api#documentation": "List sales channels\n\nList a store's active sales channels with their full metadata." + } + }, + "com.hostinger.api#CreateEcommerceASalesChannelV1RequestType": { + "type": "enum", + "members": { + "CUSTOM": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "custom" + } + }, + "QUICK_LINK": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "quick-link" + } + } + }, + "traits": { + "smithy.api#documentation": "Sales channel type. \"custom\" is a headless channel: it requires a name and takes an optional public url.\n\"quick-link\" is a one-page store whose handle is auto-generated; it supports neither name nor url." + } + }, + "com.hostinger.api#CreateEcommerceASalesChannelV1Request": { + "type": "structure", + "members": { + "store_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "The ID of the store to create the sales channel for." + } + }, + "type": { + "target": "com.hostinger.api#CreateEcommerceASalesChannelV1RequestType", + "traits": { + "smithy.api#documentation": "Sales channel type. \"custom\" is a headless channel: it requires a name and takes an optional public url.\n\"quick-link\" is a one-page store whose handle is auto-generated; it supports neither name nor url.", + "smithy.api#required": {} + } + }, + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Merchant-facing custom name. Required for custom channels; not supported for quick-link." + } + }, + "url": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Optional public url for the channel. Custom channels only; not supported for quick-link.", + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#EcommerceV1SalesChannelSalesChannelCreationResource": { + "type": "structure", + "members": { + "sales_channel": { + "target": "com.hostinger.api#EcommerceV1SalesChannelSalesChannelCreationResourceSalesChannel" + } + }, + "traits": {} + }, + "com.hostinger.api#EcommerceV1SalesChannelSalesChannelCreationResourceSalesChannelType": { + "type": "enum", + "members": { + "BUILDER": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "builder" + } + }, + "HORIZONS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "horizons" + } + }, + "TIKTOK": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "tiktok" + } + }, + "CUSTOM": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "custom" + } + }, + "QUICK_LINK": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "quick-link" + } + }, + "WORDPRESS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "wordpress" + } + } + }, + "traits": { + "smithy.api#documentation": "Sales channel type" + } + }, + "com.hostinger.api#EcommerceV1SalesChannelSalesChannelCreationResourceSalesChannel": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Sales channel ID" + } + }, + "type": { + "target": "com.hostinger.api#EcommerceV1SalesChannelSalesChannelCreationResourceSalesChannelType", + "traits": { + "smithy.api#documentation": "Sales channel type" + } + }, + "is_primary": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether this is the primary sales channel." + } + }, + "is_active": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether the sales channel is active." + } + }, + "external_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "External identifier for the sales channel.", + "com.distilled.openapi#nullable": {} + } + }, + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Merchant-facing custom name.", + "com.distilled.openapi#nullable": {} + } + }, + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Public address where the custom sales channel lives.", + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#CreateEcommerceASalesChannelV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#CreateEcommerceASalesChannelV1Request" + }, + "output": { + "target": "com.hostinger.api#EcommerceV1SalesChannelSalesChannelCreationResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/ecommerce/v1/stores/{store_id}/sales-channels", + "code": 200 + }, + "smithy.api#documentation": "Create a sales channel\n\nCreate a sales channel for a store. A \"custom\" channel is headless: build your own frontend and keep\nyour catalog, orders, shipping and payments in sync through the Ecommerce API. A \"quick-link\" channel\nis a hosted one-page store whose handle is auto-generated." + } + }, + "com.hostinger.api#UpdateEcommerceSalesChannelV1Request": { + "type": "structure", + "members": { + "store_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "The ID of the store that owns the sales channel." + } + }, + "sales_channel_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "The ID of the sales channel to update." + } + }, + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Merchant-facing custom name shown in the sales channels list. Pass null to clear it.", + "com.distilled.openapi#nullable": {} + } + }, + "url": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Public address where the custom sales channel lives. Pass null to clear it.", + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#EcommerceV1SalesChannelSalesChannelUpdateResource": { + "type": "structure", + "members": { + "sales_channel": { + "target": "com.hostinger.api#EcommerceV1SalesChannelSalesChannelUpdateResourceSalesChannel" + } + }, + "traits": {} + }, + "com.hostinger.api#EcommerceV1SalesChannelSalesChannelUpdateResourceSalesChannelType": { + "type": "enum", + "members": { + "BUILDER": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "builder" + } + }, + "HORIZONS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "horizons" + } + }, + "TIKTOK": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "tiktok" + } + }, + "CUSTOM": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "custom" + } + }, + "QUICK_LINK": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "quick-link" + } + }, + "WORDPRESS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "wordpress" + } + } + }, + "traits": { + "smithy.api#documentation": "Sales channel type" + } + }, + "com.hostinger.api#EcommerceV1SalesChannelSalesChannelUpdateResourceSalesChannel": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Sales channel ID" + } + }, + "type": { + "target": "com.hostinger.api#EcommerceV1SalesChannelSalesChannelUpdateResourceSalesChannelType", + "traits": { + "smithy.api#documentation": "Sales channel type" + } + }, + "is_primary": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether this is the primary sales channel." + } + }, + "is_active": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether the sales channel is active." + } + }, + "external_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "External identifier for the sales channel.", + "com.distilled.openapi#nullable": {} + } + }, + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Merchant-facing custom name.", + "com.distilled.openapi#nullable": {} + } + }, + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Public address where the custom sales channel lives.", + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#UpdateEcommerceSalesChannelV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#UpdateEcommerceSalesChannelV1Request" + }, + "output": { + "target": "com.hostinger.api#EcommerceV1SalesChannelSalesChannelUpdateResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "PATCH", + "uri": "/api/ecommerce/v1/stores/{store_id}/sales-channels/{sales_channel_id}", + "code": 200 + }, + "smithy.api#documentation": "Update sales channel\n\nUpdate a custom sales channel. The merchant-facing `name` and the public `url`\n(returned as the channel `domain`) can be changed. Pass `null` to clear a value." + } + }, + "com.hostinger.api#SetEcommerceStoreShippingV1Request": { + "type": "structure", + "members": { + "store_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "The ID of the store to configure shipping for." + } + }, + "price": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Flat shipping rate in the smallest currency unit (e.g. cents). Use 0 for free shipping.", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#EcommerceV1ShippingShippingResource": { + "type": "structure", + "members": { + "shipping_option": { + "target": "com.hostinger.api#EcommerceV1ShippingShippingResourceShippingOption" + }, + "admin_url": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Admin UI deep-link to manage shipping settings." + } + } + }, + "traits": {} + }, + "com.hostinger.api#EcommerceV1ShippingShippingResourceShippingOption": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Shipping option ID." + } + }, + "amount": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Flat shipping rate in the smallest currency unit (e.g. cents)." + } + }, + "currency_code": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Currency code the rate is charged in (ISO 4217, lowercase)." + } + } + }, + "traits": {} + }, + "com.hostinger.api#SetEcommerceStoreShippingV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#SetEcommerceStoreShippingV1Request" + }, + "output": { + "target": "com.hostinger.api#EcommerceV1ShippingShippingResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/ecommerce/v1/stores/{store_id}/shipping", + "code": 200 + }, + "smithy.api#documentation": "Set store shipping\n\nSet the flat-rate shipping price for a store, creating the shipping zone if it does not exist yet." + } + }, + "com.hostinger.api#DeleteEcommerceStoreV1Request": { + "type": "structure", + "members": { + "store_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "The ID of the store to delete." + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#EcommerceV1StoreStoreDeleteResource": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The ID of the deleted store." + } + }, + "is_deleted": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Always true when the store was soft-deleted." + } + } + }, + "traits": {} + }, + "com.hostinger.api#DeleteEcommerceStoreV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#DeleteEcommerceStoreV1Request" + }, + "output": { + "target": "com.hostinger.api#EcommerceV1StoreStoreDeleteResource" + }, + "traits": { + "smithy.api#http": { + "method": "DELETE", + "uri": "/api/ecommerce/v1/stores/{store_id}", + "code": 200 + }, + "smithy.api#documentation": "Delete store\n\nSoft-delete a store owned by your account.\n\nThe underlying store data is preserved; only the store is marked as deleted." + } + }, + "com.hostinger.api#GetEcommerceStoresV1Request": { + "type": "structure", + "members": { + "page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "page", + "smithy.api#documentation": "Page number" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#EcommerceV1StoreStoreCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#EcommerceV1StoreStoreResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`Ecommerce.V1.Store.StoreResource`](#model/ecommercev1storestoreresource)" + } + }, + "com.hostinger.api#EcommerceV1StoreStoreResource": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Store ID" + } + }, + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Store name", + "com.distilled.openapi#nullable": {} + } + }, + "created_at": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Creation date" + } + }, + "updated_at": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Last update date" + } + }, + "version": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Store platform version identifier (e.g. \"v2_standalone\")." + } + }, + "company_name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Company name", + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#GetEcommerceStoresV1Response": { + "type": "structure", + "members": { + "data": { + "target": "com.hostinger.api#EcommerceV1StoreStoreCollection" + }, + "meta": { + "target": "com.hostinger.api#CommonSchemaPaginationMetaSchema" + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#GetEcommerceStoresV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#GetEcommerceStoresV1Request" + }, + "output": { + "target": "com.hostinger.api#GetEcommerceStoresV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/ecommerce/v1/stores", + "code": 200 + }, + "smithy.api#documentation": "Get stores\n\nRetrieve the stores associated with your account." + } + }, + "com.hostinger.api#CreateEcommerceStoreV1RequestSalesChannelType": { + "type": "enum", + "members": { + "CUSTOM": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "custom" + } + } + }, + "traits": { + "smithy.api#documentation": "Sales channel type. Only \"custom\" channels can be created via the API." + } + }, + "com.hostinger.api#CreateEcommerceStoreV1RequestSalesChannel": { + "type": "structure", + "members": { + "type": { + "target": "com.hostinger.api#CreateEcommerceStoreV1RequestSalesChannelType", + "traits": { + "smithy.api#documentation": "Sales channel type. Only \"custom\" channels can be created via the API." + } + }, + "external_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "External identifier for the sales channel.", + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#CreateEcommerceStoreV1Request": { + "type": "structure", + "members": { + "name": { + "target": "smithy.api#String" + }, + "country_code": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "ISO 3166-1 alpha-2 country code." + } + }, + "company_email": { + "target": "smithy.api#String" + }, + "company_name": { + "target": "smithy.api#String" + }, + "language": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "ISO 639-1 language code." + } + }, + "sales_channel": { + "target": "com.hostinger.api#CreateEcommerceStoreV1RequestSalesChannel" + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#EcommerceV1StoreStoreCreationResource": { + "type": "structure", + "members": { + "store": { + "target": "com.hostinger.api#EcommerceV1StoreStoreCreationResourceStore" + }, + "sales_channel": { + "target": "com.hostinger.api#EcommerceV1StoreStoreCreationResourceSalesChannel" + } + }, + "traits": {} + }, + "com.hostinger.api#EcommerceV1StoreStoreCreationResourceStore": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Store ID" + } + }, + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Store name", + "com.distilled.openapi#nullable": {} + } + }, + "company_name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Company name", + "com.distilled.openapi#nullable": {} + } + }, + "h_panel_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Identifier of the hPanel account that owns the store." + } + }, + "created_at": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Creation date" + } + }, + "default_currency_code": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Default currency code (ISO 4217), in lowercase." + } + } + }, + "traits": {} + }, + "com.hostinger.api#EcommerceV1StoreStoreCreationResourceSalesChannelType": { + "type": "enum", + "members": { + "BUILDER": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "builder" + } + }, + "HORIZONS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "horizons" + } + }, + "TIKTOK": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "tiktok" + } + }, + "CUSTOM": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "custom" + } + }, + "QUICK_LINK": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "quick-link" + } + }, + "WORDPRESS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "wordpress" + } + } + }, + "traits": { + "smithy.api#documentation": "Sales channel type" + } + }, + "com.hostinger.api#EcommerceV1StoreStoreCreationResourceSalesChannel": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Sales channel ID" + } + }, + "type": { + "target": "com.hostinger.api#EcommerceV1StoreStoreCreationResourceSalesChannelType", + "traits": { + "smithy.api#documentation": "Sales channel type" + } + }, + "external_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "External identifier for the sales channel", + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#CreateEcommerceStoreV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#CreateEcommerceStoreV1Request" + }, + "output": { + "target": "com.hostinger.api#EcommerceV1StoreStoreCreationResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/ecommerce/v1/stores", + "code": 200 + }, + "smithy.api#documentation": "Create store\n\nCreate a new store for your account.\n\nA primary sales channel is created alongside the store." + } + }, + "com.hostinger.api#GetEcommerceStoreMetadataV1Request": { + "type": "structure", + "members": { + "store_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "The ID of the store to read metadata for." + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#EcommerceV1StoreStoreMetadataResource": { + "type": "structure", + "members": { + "metadata": { + "target": "com.hostinger.api#EcommerceV1StoreStoreMetadataResourceMetadata" + } + }, + "traits": {} + }, + "com.hostinger.api#EcommerceV1StoreStoreMetadataResourceMetadataDefaultCurrency": { + "type": "structure", + "members": { + "code": { + "target": "smithy.api#String" + }, + "symbol": { + "target": "smithy.api#String" + }, + "symbol_native": { + "target": "smithy.api#String" + }, + "name": { + "target": "smithy.api#String" + }, + "name_plural": { + "target": "smithy.api#String" + }, + "decimal_digits": { + "target": "smithy.api#Integer" + }, + "rounding": { + "target": "smithy.api#Double" + }, + "template": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "min_amount": { + "target": "smithy.api#Double", + "traits": { + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": { + "smithy.api#documentation": "The store's default currency, or null when unset." + } + }, + "com.hostinger.api#EcommerceV1StoreStoreMetadataResourceMetadata": { + "type": "structure", + "members": { + "has_payment_methods": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether the store has at least one payment method connected." + } + }, + "has_shipping": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether the store has at least one shipping option configured." + } + }, + "default_currency_code": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The default currency code of the store." + } + }, + "default_currency": { + "target": "com.hostinger.api#EcommerceV1StoreStoreMetadataResourceMetadataDefaultCurrency", + "traits": { + "smithy.api#documentation": "The store's default currency, or null when unset.", + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#GetEcommerceStoreMetadataV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#GetEcommerceStoreMetadataV1Request" + }, + "output": { + "target": "com.hostinger.api#EcommerceV1StoreStoreMetadataResource" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/ecommerce/v1/stores/{store_id}/metadata", + "code": 200 + }, + "smithy.api#documentation": "Get store metadata\n\nGet a store's readiness metadata: whether payment methods and shipping are configured,\nplus its default currency. Useful to verify prerequisites before building a storefront." + } + }, + "com.hostinger.api#UpdateEcommerceProductVariantsInBatchV1RequestVariantsItemPricesItem": { + "type": "structure", + "members": { + "amount": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Price in the smallest currency unit (e.g. cents).", + "smithy.api#required": {} + } + }, + "sale_amount": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Optional sale price in the smallest currency unit; must be lower than amount." + } + }, + "currency": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "ISO 4217 currency code. Defaults to the store's default currency." + } + } + }, + "traits": {} + }, + "com.hostinger.api#UpdateEcommerceProductVariantsInBatchV1RequestVariantsItemPricesList": { + "type": "list", + "member": { + "target": "com.hostinger.api#UpdateEcommerceProductVariantsInBatchV1RequestVariantsItemPricesItem" + }, + "traits": { + "smithy.api#documentation": "The full list of prices for the variant, replacing the existing ones. A free item is amount: 0." + } + }, + "com.hostinger.api#UpdateEcommerceProductVariantsInBatchV1RequestVariantsItem": { + "type": "structure", + "members": { + "variant_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The id of the variant to update.", + "smithy.api#required": {} + } + }, + "title": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The variant title." + } + }, + "inventory_quantity": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Units in stock." + } + }, + "manage_inventory": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether stock is tracked for this variant." + } + }, + "prices": { + "target": "com.hostinger.api#UpdateEcommerceProductVariantsInBatchV1RequestVariantsItemPricesList", + "traits": { + "smithy.api#documentation": "The full list of prices for the variant, replacing the existing ones. A free item is amount: 0." + } + } + }, + "traits": {} + }, + "com.hostinger.api#UpdateEcommerceProductVariantsInBatchV1RequestVariantsList": { + "type": "list", + "member": { + "target": "com.hostinger.api#UpdateEcommerceProductVariantsInBatchV1RequestVariantsItem" + }, + "traits": { + "smithy.api#documentation": "Variants to update in place by id, up to 100. Variants omitted from the list are left untouched." + } + }, + "com.hostinger.api#UpdateEcommerceProductVariantsInBatchV1Request": { + "type": "structure", + "members": { + "store_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "The ID of the store that owns the product." + } + }, + "product_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "The ID of the product whose variants are being updated." + } + }, + "variants": { + "target": "com.hostinger.api#UpdateEcommerceProductVariantsInBatchV1RequestVariantsList", + "traits": { + "smithy.api#documentation": "Variants to update in place by id, up to 100. Variants omitted from the list are left untouched.", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#EcommerceV1VariantVariantListResponseResource": { + "type": "structure", + "members": { + "data": { + "target": "com.hostinger.api#EcommerceV1VariantVariantListResponseResourceDataList", + "traits": { + "smithy.api#documentation": "The variants." + } + } + }, + "traits": {} + }, + "com.hostinger.api#EcommerceV1VariantVariantResource": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The variant ID, required by every other variant endpoint." + } + }, + "title": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The variant title, or null.", + "com.distilled.openapi#nullable": {} + } + }, + "sku": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The variant SKU, or null.", + "com.distilled.openapi#nullable": {} + } + }, + "options": { + "target": "com.hostinger.api#EcommerceV1VariantVariantResourceOptionsList", + "traits": { + "smithy.api#documentation": "The variant's option values." + } + }, + "prices": { + "target": "com.hostinger.api#EcommerceV1VariantVariantResourcePricesList", + "traits": { + "smithy.api#documentation": "Prices per currency, in the smallest currency unit." + } + }, + "inventory_quantity": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Units in stock." + } + }, + "manage_inventory": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether stock is tracked for this variant." + } + } + }, + "traits": {} + }, + "com.hostinger.api#EcommerceV1VariantVariantResourceOptionsItem": { + "type": "structure", + "members": { + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Option name, e.g. Size.", + "com.distilled.openapi#nullable": {} + } + }, + "value": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Option value, e.g. M." + } + } + }, + "traits": {} + }, + "com.hostinger.api#EcommerceV1VariantVariantResourceOptionsList": { + "type": "list", + "member": { + "target": "com.hostinger.api#EcommerceV1VariantVariantResourceOptionsItem" + }, + "traits": { + "smithy.api#documentation": "The variant's option values." + } + }, + "com.hostinger.api#EcommerceV1VariantVariantResourcePricesItem": { + "type": "structure", + "members": { + "amount": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Price in the smallest currency unit." + } + }, + "sale_amount": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Sale price in the smallest currency unit, or null.", + "com.distilled.openapi#nullable": {} + } + }, + "currency_code": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The price currency code." + } + } + }, + "traits": {} + }, + "com.hostinger.api#EcommerceV1VariantVariantResourcePricesList": { + "type": "list", + "member": { + "target": "com.hostinger.api#EcommerceV1VariantVariantResourcePricesItem" + }, + "traits": { + "smithy.api#documentation": "Prices per currency, in the smallest currency unit." + } + }, + "com.hostinger.api#EcommerceV1VariantVariantListResponseResourceDataList": { + "type": "list", + "member": { + "target": "com.hostinger.api#EcommerceV1VariantVariantResource" + }, + "traits": { + "smithy.api#documentation": "The variants." + } + }, + "com.hostinger.api#UpdateEcommerceProductVariantsInBatchV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#UpdateEcommerceProductVariantsInBatchV1Request" + }, + "output": { + "target": "com.hostinger.api#EcommerceV1VariantVariantListResponseResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "PATCH", + "uri": "/api/ecommerce/v1/stores/{store_id}/products/{product_id}/variants/batch", + "code": 200 + }, + "smithy.api#documentation": "Update product variants in batch\n\nUpdate up to 100 existing variants in place by id — title, inventory, stock tracking and\nprices. Variants omitted from the request are left untouched. Prices replace the variant's\nexisting prices in full. Returns the updated variants." + } + }, + "com.hostinger.api#DeleteEcommerceAProductVariantV1Request": { + "type": "structure", + "members": { + "store_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "The ID of the store that owns the product." + } + }, + "product_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "The ID of the product that owns the variant." + } + }, + "variant_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "The ID of the variant to delete." + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#EcommerceV1VariantVariantDeletedResource": { + "type": "structure", + "members": { + "data": { + "target": "com.hostinger.api#EcommerceV1VariantVariantDeletedResourceData" + } + }, + "traits": {} + }, + "com.hostinger.api#EcommerceV1VariantVariantDeletedResourceData": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The ID of the variant." + } + }, + "is_deleted": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "True when the variant was deleted." + } + } + }, + "traits": {} + }, + "com.hostinger.api#DeleteEcommerceAProductVariantV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#DeleteEcommerceAProductVariantV1Request" + }, + "output": { + "target": "com.hostinger.api#EcommerceV1VariantVariantDeletedResource" + }, + "traits": { + "smithy.api#http": { + "method": "DELETE", + "uri": "/api/ecommerce/v1/stores/{store_id}/products/{product_id}/variants/{variant_id}", + "code": 200 + }, + "smithy.api#documentation": "Delete a product variant\n\nDelete a single variant from the product." + } + }, + "com.hostinger.api#ListEcommerceProductVariantsV1Request": { + "type": "structure", + "members": { + "store_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "The ID of the store that owns the product." + } + }, + "product_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "The ID of the product to list variants for." + } + }, + "page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "page", + "smithy.api#documentation": "Page number" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#EcommerceV1VariantVariantCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#EcommerceV1VariantVariantResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`Ecommerce.V1.Variant.VariantResource`](#model/ecommercev1variantvariantresource)" + } + }, + "com.hostinger.api#ListEcommerceProductVariantsV1Response": { + "type": "structure", + "members": { + "data": { + "target": "com.hostinger.api#EcommerceV1VariantVariantCollection" + }, + "meta": { + "target": "com.hostinger.api#CommonSchemaPaginationMetaSchema" + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListEcommerceProductVariantsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListEcommerceProductVariantsV1Request" + }, + "output": { + "target": "com.hostinger.api#ListEcommerceProductVariantsV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/ecommerce/v1/stores/{store_id}/products/{product_id}/variants", + "code": 200 + }, + "smithy.api#documentation": "List product variants\n\nList a product's variants, ordered by rank, with their options, prices and inventory.\nPrices are integers in the smallest currency unit and live on variants." + } + }, + "com.hostinger.api#CreateEcommerceAProductVariantV1RequestOptionsItem": { + "type": "structure", + "members": { + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Option name, e.g. Size.", + "smithy.api#required": {} + } + }, + "value": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Option value for this variant, e.g. M.", + "smithy.api#required": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#CreateEcommerceAProductVariantV1RequestOptionsList": { + "type": "list", + "member": { + "target": "com.hostinger.api#CreateEcommerceAProductVariantV1RequestOptionsItem" + }, + "traits": { + "smithy.api#documentation": "Option name/value pairs that distinguish this variant, e.g. [{name: Size, value: M}]. Options missing from the product are created; provide a value for every option the product already has." + } + }, + "com.hostinger.api#CreateEcommerceAProductVariantV1RequestPricesItem": { + "type": "structure", + "members": { + "amount": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Price in the smallest currency unit (e.g. cents).", + "smithy.api#required": {} + } + }, + "sale_amount": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Optional sale price in the smallest currency unit; must be lower than amount." + } + }, + "currency": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "ISO 4217 currency code. Defaults to the store's default currency when omitted." + } + } + }, + "traits": {} + }, + "com.hostinger.api#CreateEcommerceAProductVariantV1RequestPricesList": { + "type": "list", + "member": { + "target": "com.hostinger.api#CreateEcommerceAProductVariantV1RequestPricesItem" + }, + "traits": { + "smithy.api#documentation": "Prices per currency. Amounts are integers in the smallest currency unit. A free item is amount: 0." + } + }, + "com.hostinger.api#CreateEcommerceAProductVariantV1Request": { + "type": "structure", + "members": { + "store_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "The ID of the store that owns the product." + } + }, + "product_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "The ID of the product to add the variant to." + } + }, + "title": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The variant title. Defaults to the option values joined with ' / ' (e.g. 'Red / L')." + } + }, + "sku": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The variant SKU." + } + }, + "options": { + "target": "com.hostinger.api#CreateEcommerceAProductVariantV1RequestOptionsList", + "traits": { + "smithy.api#documentation": "Option name/value pairs that distinguish this variant, e.g. [{name: Size, value: M}]. Options missing from the product are created; provide a value for every option the product already has.", + "smithy.api#required": {} + } + }, + "prices": { + "target": "com.hostinger.api#CreateEcommerceAProductVariantV1RequestPricesList", + "traits": { + "smithy.api#documentation": "Prices per currency. Amounts are integers in the smallest currency unit. A free item is amount: 0." + } + }, + "inventory_quantity": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Units in stock. Defaults to 0." + } + }, + "manage_inventory": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether stock is tracked for this variant. Defaults to false." + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#EcommerceV1VariantVariantResponseResource": { + "type": "structure", + "members": { + "data": { + "target": "com.hostinger.api#EcommerceV1VariantVariantResource" + } + }, + "traits": {} + }, + "com.hostinger.api#CreateEcommerceAProductVariantV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#CreateEcommerceAProductVariantV1Request" + }, + "output": { + "target": "com.hostinger.api#EcommerceV1VariantVariantResponseResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/ecommerce/v1/stores/{store_id}/products/{product_id}/variants", + "code": 200 + }, + "smithy.api#documentation": "Create a product variant\n\nAdd a variant to a product along one or more option dimensions (e.g. Size, Color). Options\nmissing from the product are created automatically; provide a value for every option the\nproduct already has. Prices are integers in the smallest currency unit and default to the\nstore currency. Returns the created variant." + } + }, + "com.hostinger.api#CreateHorizonWebsiteV1RequestMessageItemType": { + "type": "enum", + "members": { + "TEXT": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "text" + } + } + }, + "traits": {} + }, + "com.hostinger.api#CreateHorizonWebsiteV1RequestMessageItem": { + "type": "structure", + "members": { + "type": { + "target": "com.hostinger.api#CreateHorizonWebsiteV1RequestMessageItemType", + "traits": { + "smithy.api#required": {} + } + }, + "text": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Detailed project specification.\nInclude purpose, key features, user flows, data models, and design preferences.\nThe specification should be detailed and comprehensive, covering all aspects of the project.", + "smithy.api#required": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#CreateHorizonWebsiteV1RequestMessageList": { + "type": "list", + "member": { + "target": "com.hostinger.api#CreateHorizonWebsiteV1RequestMessageItem" + }, + "traits": {} + }, + "com.hostinger.api#CreateHorizonWebsiteV1Request": { + "type": "structure", + "members": { + "message": { + "target": "com.hostinger.api#CreateHorizonWebsiteV1RequestMessageList", + "traits": { + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#HorizonsV1WebsitesCreatedWebsiteResource": { + "type": "structure", + "members": { + "website_url": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The website URL for the user to access their website in Hostinger Horizons interface", + "smithy.api#required": {} + } + }, + "website_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The website ID", + "smithy.api#required": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#CreateHorizonWebsiteV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#CreateHorizonWebsiteV1Request" + }, + "output": { + "target": "com.hostinger.api#HorizonsV1WebsitesCreatedWebsiteResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/horizons/v1/websites", + "code": 200 + }, + "smithy.api#documentation": "Create website\n\nCreate new Hostinger Horizons website from the given message.\\n\nUse this tool when user asks you to create a website, landing page, blog\nor any other type of application.\\n\nThis tool initiates the website creation process and returns a website URL and ID.\nThe generation happens asynchronously.\\n\nAfter invoking this tool, your chat reply must be EXACTLY 1 sentence summarizing\nthat Hostinger Horizons is now creating their website and it will be ready in a few minutes\nand you should provide the website URL to the user immediately\nDo not write code.\\n\\nTo edit afterwards, users must go to Hostinger Horizons interface\nin the provided website URL.\nIf the tool call fails with an error, you should provide a clear explanation of the error\nand do not generate code yourself in the chat.\n\\n\nTECHNOLOGY STACK CONSTRAINTS (STRICTLY ENFORCED):\\n\nThe environment is limited to the following technologies.\nYou MUST NOT use, suggest, or implement any technology outside this list:\\n\n\\n\n- Language: JavaScript ONLY.\n- Languages like TypeScript, Rust, Python, Java, PHP, etc., are STRICTLY PROHIBITED.\\n\n- Framework: React.\\n\n- Navigation: React Router.\\n\n- Styling: TailwindCSS.\\n\n- Components: shadcn/ui (built with @radix-ui primitives).\\n\n- Icons: Lucide React.\\n\n- Animations: Framer Motion.\\n\n\\n\nBACKEND & DATA STORAGE:\\n\n- Horizons integrated backend is the EXCLUSIVE solution for persistent data storage,\nauthentication, and database needs.\\n\n- Local databases (SQLite, MySQL, etc.) are STRICTLY PROHIBITED.\\n\n- Third-party services (Firebase, AWS Amplify) are allowed ONLY if explicitly requested by the user.\\n\n\\n\nMAPS:\\n\n- OpenStreetMap is the default provider.\\n\n- Alternative providers (Google Maps, Mapbox) are allowed ONLY if explicitly requested by the user.\\n" + } + }, + "com.hostinger.api#GetHorizonWebsiteV1Request": { + "type": "structure", + "members": { + "websiteId": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "The website ID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#HorizonsV1WebsitesWebsiteUrlResource": { + "type": "structure", + "members": { + "website_url": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The website URL for the user to access their website in Hostinger Horizons interface", + "smithy.api#required": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#GetHorizonWebsiteV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#GetHorizonWebsiteV1Request" + }, + "output": { + "target": "com.hostinger.api#HorizonsV1WebsitesWebsiteUrlResource" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/horizons/v1/websites/{websiteId}", + "code": 200 + }, + "smithy.api#documentation": "Get website\n\nGet a link for the user to edit their website in Hostinger Horizons interface.\\n\nUse this tool when user wants to modify, edit or add new features to an existing website.\\n\nWebsites can only be edited in Hostinger Horizons interface in the provided website URL." + } + }, + "com.hostinger.api#ClearHostingWebsiteCacheV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + }, + "directory": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpQuery": "directory", + "smithy.api#documentation": "Directory of the website installation to clear, relative to the website root.\nDefaults to the website root." + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#ClearHostingWebsiteCacheV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ClearHostingWebsiteCacheV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "traits": { + "smithy.api#http": { + "method": "DELETE", + "uri": "/api/hosting/v1/accounts/{username}/websites/{domain}/cache/clear", + "code": 200 + }, + "smithy.api#documentation": "Clear website cache\n\nPermanently clears all server-side cache for the website at once. Use it when content was\nupdated and needs to be visible immediately, or after making major changes.\n\nAlso purges the Hostinger CDN cache when CDN is enabled on the website. For a WordPress\ninstallation living in a subdirectory, pass the directory query parameter to clear its cache." + } + }, + "com.hostinger.api#ToggleHostingCachelessModeV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + }, + "enabled": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Turn development (cacheless) mode on (true) or off (false) for the website.", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#ToggleHostingCachelessModeV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ToggleHostingCachelessModeV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "PATCH", + "uri": "/api/hosting/v1/accounts/{username}/websites/{domain}/cacheless-mode/toggle", + "code": 200 + }, + "smithy.api#documentation": "Toggle cacheless mode\n\nTurns development (cacheless) mode on or off, based on the enabled flag. When enabled, nothing\nis cached, effectively turning off all caching for the website; use it while actively developing,\ntesting changes, debugging issues, or when real-time updates must be visible. Disable it after\nfinishing development work to restore the performance benefits of caching." + } + }, + "com.hostinger.api#ToggleHostingWebsiteCacheV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + }, + "enabled": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Turn server-side caching on (true) or off (false) for the website.", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#ToggleHostingWebsiteCacheV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ToggleHostingWebsiteCacheV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "PATCH", + "uri": "/api/hosting/v1/accounts/{username}/websites/{domain}/cache/toggle", + "code": 200 + }, + "smithy.api#documentation": "Toggle website cache\n\nTurns server-side caching for the website on or off, based on the enabled flag. Enable it for\nfaster page loads, reduced server load, and improved user experience; recommended for production\nwebsites. Disabling may impact performance; to temporarily bypass caching while developing or\ndebugging, prefer toggling cacheless mode instead.\n\nDoes nothing if caching is already in the requested state." + } + }, + "com.hostinger.api#ListHostingAccountCronJobsV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#HostingV1CronJobsCronJobCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#HostingV1CronJobsCronJobResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`Hosting.V1.CronJobs.CronJobResource`](#model/hostingv1cronjobscronjobresource)" + } + }, + "com.hostinger.api#HostingV1CronJobsCronJobResource": { + "type": "structure", + "members": { + "uid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Unique identifier of the cron job. Use it to delete the cron job or fetch its output." + } + }, + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Username of the account that owns the cron job." + } + }, + "time": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Cron schedule expression." + } + }, + "command": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Command executed on the schedule." + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListHostingAccountCronJobsV1Response": { + "type": "structure", + "members": { + "body": { + "target": "com.hostinger.api#HostingV1CronJobsCronJobCollection", + "traits": { + "com.distilled.openapi#rawResponse": {}, + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListHostingAccountCronJobsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListHostingAccountCronJobsV1Request" + }, + "output": { + "target": "com.hostinger.api#ListHostingAccountCronJobsV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/hosting/v1/accounts/{username}/cron-jobs", + "code": 200 + }, + "smithy.api#documentation": "List account cron jobs\n\nReturns the list of cron jobs configured for the specified account, including their schedule and command." + } + }, + "com.hostinger.api#CreateHostingAccountCronJobV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "time": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Cron schedule expression (for example \"0 2 * * *\" runs daily at 02:00).", + "smithy.api#required": {} + } + }, + "command": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Command to execute on the schedule.", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#CreateHostingAccountCronJobV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#CreateHostingAccountCronJobV1Request" + }, + "output": { + "target": "com.hostinger.api#HostingV1CronJobsCronJobResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/hosting/v1/accounts/{username}/cron-jobs", + "code": 200 + }, + "smithy.api#documentation": "Create account cron job\n\nCreates a cron job for the specified account from a schedule expression and a command.\n\nReturns the created cron job, including its uid, which is required to delete the cron job or fetch its output." + } + }, + "com.hostinger.api#DeleteHostingAccountCronJobV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "uid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Unique identifier of the cron job as returned by the list cron jobs endpoint." + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DeleteHostingAccountCronJobV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#DeleteHostingAccountCronJobV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "traits": { + "smithy.api#http": { + "method": "DELETE", + "uri": "/api/hosting/v1/accounts/{username}/cron-jobs/{uid}", + "code": 200 + }, + "smithy.api#documentation": "Delete account cron job\n\nPermanently deletes the cron job identified by its uid.\n\nThe uid is returned by the list cron jobs endpoint." + } + }, + "com.hostinger.api#GetHostingCronJobOutputV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "uid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Unique identifier of the cron job as returned by the list cron jobs endpoint." + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#HostingV1CronJobsCronJobOutputResource": { + "type": "structure", + "members": { + "output": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Output captured from the last cron job execution. Empty when the cron job has not run yet.", + "smithy.api#required": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#GetHostingCronJobOutputV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#GetHostingCronJobOutputV1Request" + }, + "output": { + "target": "com.hostinger.api#HostingV1CronJobsCronJobOutputResource" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/hosting/v1/accounts/{username}/cron-jobs/{uid}/output", + "code": 200 + }, + "smithy.api#documentation": "Get cron job output\n\nReturns the output captured from the last execution of the cron job identified by its uid.\n\nThe uid is returned by the list cron jobs endpoint." + } + }, + "com.hostinger.api#HostingChangeDatabasePasswordV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Full database name as returned by the list databases endpoint." + } + }, + "password": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "New database user password.", + "smithy.api#required": {}, + "smithy.api#sensitive": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#HostingChangeDatabasePasswordV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#HostingChangeDatabasePasswordV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "PATCH", + "uri": "/api/hosting/v1/accounts/{username}/databases/{name}/change-password", + "code": 200 + }, + "smithy.api#documentation": "Change database password\n\nChanges the password for the specified database user.\n\nThe database name must be the full name returned by the list databases endpoint.\nThe password must also be updated in any website configuration that uses this database." + } + }, + "com.hostinger.api#ListHostingAccountDatabasesV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "page", + "smithy.api#documentation": "Page number" + } + }, + "per_page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "per_page", + "smithy.api#documentation": "Number of items per page" + } + }, + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpQuery": "domain", + "smithy.api#documentation": "Filter by domain name (case-insensitive substring match)" + } + }, + "is_assigned": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#httpQuery": "is_assigned", + "smithy.api#documentation": "When used with domain, return only databases assigned to that domain." + } + }, + "search": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpQuery": "search", + "smithy.api#documentation": "Search databases by name, user, or creation date." + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#HostingV1DatabasesDatabaseCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#HostingV1DatabasesDatabaseResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`Hosting.V1.Databases.DatabaseResource`](#model/hostingv1databasesdatabaseresource)" + } + }, + "com.hostinger.api#HostingV1DatabasesDatabaseResource": { + "type": "structure", + "members": { + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Database name." + } + }, + "user": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Database user." + } + }, + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Domain assigned to the database, or null when the database is unassigned.", + "com.distilled.openapi#nullable": {} + } + }, + "permissions": { + "target": "smithy.api#Document", + "traits": { + "smithy.api#documentation": "Database user permissions keyed by permission name." + } + }, + "created_at": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Database creation date in ISO 8601 format." + } + }, + "updated_at": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Database last update date in ISO 8601 format." + } + }, + "disk_usage_mb": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Current database disk usage in megabytes.", + "com.distilled.openapi#nullable": {} + } + }, + "max_size_mb": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Maximum allowed database size in megabytes." + } + }, + "host": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "MySQL hostname for remote connections. Same value as hPanel Remote MySQL.\nIdentical for every database on this account. Not the database user grant host." + } + }, + "port": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "MySQL port for remote connections. Always 3306." + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListHostingAccountDatabasesV1Response": { + "type": "structure", + "members": { + "data": { + "target": "com.hostinger.api#HostingV1DatabasesDatabaseCollection" + }, + "meta": { + "target": "com.hostinger.api#CommonSchemaPaginationMetaSchema" + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListHostingAccountDatabasesV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListHostingAccountDatabasesV1Request" + }, + "output": { + "target": "com.hostinger.api#ListHostingAccountDatabasesV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/hosting/v1/accounts/{username}/databases", + "code": 200 + }, + "smithy.api#documentation": "List account databases\n\nReturns a paginated list of databases for the specified account.\n\nUse the domain and is_assigned filters to find databases assigned to a specific domain." + } + }, + "com.hostinger.api#CreateHostingAccountDatabaseV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Database name. If the account username prefix is omitted, it is added automatically.", + "smithy.api#required": {} + } + }, + "user": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Database user. If the account username prefix is omitted, it is added automatically.", + "smithy.api#required": {} + } + }, + "password": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Database user password.", + "smithy.api#required": {}, + "smithy.api#sensitive": {} + } + }, + "website_domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Website domain assigned to the database.", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#CreateHostingAccountDatabaseV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#CreateHostingAccountDatabaseV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/hosting/v1/accounts/{username}/databases", + "code": 200 + }, + "smithy.api#documentation": "Create account database\n\nCreates a database with a database user and password for the specified account.\n\nThe database name and user are automatically prefixed with the account username when needed." + } + }, + "com.hostinger.api#DeleteHostingAccountDatabaseV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Full database name as returned by the list databases endpoint." + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DeleteHostingAccountDatabaseV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#DeleteHostingAccountDatabaseV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "traits": { + "smithy.api#http": { + "method": "DELETE", + "uri": "/api/hosting/v1/accounts/{username}/databases/{name}", + "code": 200 + }, + "smithy.api#documentation": "Delete account database\n\nPermanently deletes a database and its remote connections.\n\nThe database name must be the full name returned by the list databases endpoint." + } + }, + "com.hostinger.api#CreateHostingDatabaseRemoteConnectionV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Full database name as returned by the list databases endpoint." + } + }, + "ip": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Remote host to allow: an IPv4/IPv6 address, or \"%\" for any host.", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#CreateHostingDatabaseRemoteConnectionV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#CreateHostingDatabaseRemoteConnectionV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/hosting/v1/accounts/{username}/databases/{name}/remote-connections", + "code": 200 + }, + "smithy.api#documentation": "Create database remote connection\n\nAllows a remote host to connect to the specified database.\n\nProvide an IPv4/IPv6 address, or \"%\" to allow any host. The database name must be\nthe full name returned by the list databases endpoint." + } + }, + "com.hostinger.api#DeleteHostingDatabaseRemoteConnectionV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Full database name as returned by the list databases endpoint." + } + }, + "ip": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpQuery": "ip", + "smithy.api#required": {}, + "smithy.api#documentation": "Remote host to revoke: the IPv4/IPv6 address, or \"%\",\nexactly as returned by the list remote connections endpoint." + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DeleteHostingDatabaseRemoteConnectionV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#DeleteHostingDatabaseRemoteConnectionV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "traits": { + "smithy.api#http": { + "method": "DELETE", + "uri": "/api/hosting/v1/accounts/{username}/databases/{name}/remote-connections", + "code": 200 + }, + "smithy.api#documentation": "Delete database remote connection\n\nPermanently removes a remote-access rule, revoking the given host's remote access to the database.\n\nIdentify the rule with the required ip query parameter (the IPv4/IPv6 address, or \"%\",\nexactly as returned by the list remote connections endpoint). The database name must be\nthe full name returned by the list databases endpoint." + } + }, + "com.hostinger.api#ListHostingDatabaseRemoteConnectionsV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpQuery": "domain", + "smithy.api#documentation": "Filter remote connections by the domain the database is assigned to.\nRules for databases not assigned to any domain are always included." + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#HostingV1DatabasesRemoteConnectionsRemoteConnectionCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#HostingV1DatabasesRemoteConnectionsRemoteConnectionResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`Hosting.V1.Databases.RemoteConnections.RemoteConnectionResource`](#model/hostingv1databasesremoteconnectionsremoteconnectionresource)" + } + }, + "com.hostinger.api#HostingV1DatabasesRemoteConnectionsRemoteConnectionResource": { + "type": "structure", + "members": { + "database_name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Full name of the database the rule applies to." + } + }, + "database_user": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Database user the rule applies to." + } + }, + "ip": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Allowed remote host: an IPv4/IPv6 address, or \"%\" for any host." + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListHostingDatabaseRemoteConnectionsV1Response": { + "type": "structure", + "members": { + "body": { + "target": "com.hostinger.api#HostingV1DatabasesRemoteConnectionsRemoteConnectionCollection", + "traits": { + "com.distilled.openapi#rawResponse": {}, + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListHostingDatabaseRemoteConnectionsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListHostingDatabaseRemoteConnectionsV1Request" + }, + "output": { + "target": "com.hostinger.api#ListHostingDatabaseRemoteConnectionsV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/hosting/v1/accounts/{username}/databases/remote-connections", + "code": 200 + }, + "smithy.api#documentation": "List database remote connections\n\nReturns the remote-access rules for the specified account: the remote hosts\n(IPv4/IPv6 addresses, or \"%\" for any host) allowed to connect to the account databases.\n\nUse the domain filter to only return rules for databases assigned to a specific domain." + } + }, + "com.hostinger.api#HostingRepairDatabaseV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Full database name as returned by the list databases endpoint." + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#HostingRepairDatabaseV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#HostingRepairDatabaseV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "traits": { + "smithy.api#http": { + "method": "PATCH", + "uri": "/api/hosting/v1/accounts/{username}/databases/{name}/repair", + "code": 200 + }, + "smithy.api#documentation": "Repair database\n\nRepairs corrupted database tables asynchronously.\n\nUse when database errors, crashes, or corruption are reported.\nThe database name must be the full name returned by the list databases endpoint." + } + }, + "com.hostinger.api#GetHostingPhpMyAdminLinkV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Full database name as returned by the list databases endpoint." + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#HostingV1DatabasesPhpMyAdminLinkResource": { + "type": "structure", + "members": { + "link": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Direct sign-on URL to phpMyAdmin for the specified database.", + "smithy.api#required": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#GetHostingPhpMyAdminLinkV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#GetHostingPhpMyAdminLinkV1Request" + }, + "output": { + "target": "com.hostinger.api#HostingV1DatabasesPhpMyAdminLinkResource" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/hosting/v1/accounts/{username}/databases/{name}/phpmyadmin-link", + "code": 200 + }, + "smithy.api#documentation": "Get phpMyAdmin link\n\nReturns a direct sign-on link to phpMyAdmin for the specified database.\n\nUse this when a visual database interface is needed for SQL queries, imports, exports, or table management.\nThe database name must be the full name returned by the list databases endpoint." + } + }, + "com.hostinger.api#ListHostingAvailableDatacentersV1Request": { + "type": "structure", + "members": { + "order_id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "order_id", + "smithy.api#required": {}, + "smithy.api#documentation": "Order ID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#HostingV1DatacenterDatacenterCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#HostingV1DatacenterDatacenterResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`Hosting.V1.Datacenter.DatacenterResource`](#model/hostingv1datacenterdatacenterresource)" + } + }, + "com.hostinger.api#HostingV1DatacenterDatacenterResource": { + "type": "structure", + "members": { + "title": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Data center title" + } + }, + "code": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Data center code" + } + }, + "coordinates": { + "target": "com.hostinger.api#HostingV1DatacenterCoordinatesResource" + } + }, + "traits": {} + }, + "com.hostinger.api#HostingV1DatacenterCoordinatesResource": { + "type": "structure", + "members": { + "latitude": { + "target": "smithy.api#Double", + "traits": { + "smithy.api#documentation": "Latitude coordinate" + } + }, + "longitude": { + "target": "smithy.api#Double", + "traits": { + "smithy.api#documentation": "Longitude coordinate" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListHostingAvailableDatacentersV1Response": { + "type": "structure", + "members": { + "body": { + "target": "com.hostinger.api#HostingV1DatacenterDatacenterCollection", + "traits": { + "com.distilled.openapi#rawResponse": {}, + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListHostingAvailableDatacentersV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListHostingAvailableDatacentersV1Request" + }, + "output": { + "target": "com.hostinger.api#ListHostingAvailableDatacentersV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/hosting/v1/datacenters", + "code": 200 + }, + "smithy.api#documentation": "List available datacenters\n\nRetrieve a list of datacenters available for setting up hosting plans\nbased on available datacenter capacity and hosting plan of your order.\nThe first item in the list is the best match for your specific order\nrequirements." + } + }, + "com.hostinger.api#HostingV1DomainsFreeSubdomainResource": { + "type": "structure", + "members": { + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Generated free subdomain" + } + } + }, + "traits": {} + }, + "com.hostinger.api#GenerateHostingAFreeSubdomainV1": { + "type": "operation", + "input": { + "target": "smithy.api#Unit" + }, + "output": { + "target": "com.hostinger.api#HostingV1DomainsFreeSubdomainResource" + }, + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/hosting/v1/domains/free-subdomains", + "code": 200 + }, + "smithy.api#documentation": "Generate a free subdomain\n\nGenerate a unique free subdomain that can be used for hosting services without purchasing custom domains.\nFree subdomains allow you to start using hosting services immediately\nand you can always connect a custom domain to your site later." + } + }, + "com.hostinger.api#ListHostingWebsiteParkedDomainsV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#HostingV1DomainsParkedDomainCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#HostingV1DomainsParkedDomainResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`Hosting.V1.Domains.ParkedDomainResource`](#model/hostingv1domainsparkeddomainresource)" + } + }, + "com.hostinger.api#HostingV1DomainsParkedDomainResource": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Website username" + } + }, + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Parked domain name or IP address" + } + }, + "parent_domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Parent website domain" + } + }, + "root_directory": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Parked domain root directory" + } + }, + "type": { + "target": "com.hostinger.api#HostingV1DomainsParkedDomainResourceType", + "traits": { + "smithy.api#documentation": "Whether the parked value is a domain name or an IP address (IPv4 or IPv6)" + } + } + }, + "traits": {} + }, + "com.hostinger.api#HostingV1DomainsParkedDomainResourceType": { + "type": "enum", + "members": { + "DOMAIN": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "domain" + } + }, + "IP": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "ip" + } + } + }, + "traits": { + "smithy.api#documentation": "Whether the parked value is a domain name or an IP address (IPv4 or IPv6)" + } + }, + "com.hostinger.api#ListHostingWebsiteParkedDomainsV1Response": { + "type": "structure", + "members": { + "body": { + "target": "com.hostinger.api#HostingV1DomainsParkedDomainCollection", + "traits": { + "com.distilled.openapi#rawResponse": {}, + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListHostingWebsiteParkedDomainsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListHostingWebsiteParkedDomainsV1Request" + }, + "output": { + "target": "com.hostinger.api#ListHostingWebsiteParkedDomainsV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/hosting/v1/accounts/{username}/websites/{domain}/parked-domains", + "code": 200 + }, + "smithy.api#documentation": "List website parked domains\n\nRetrieve all parked or alias domains created under the selected website.\n\nUse this endpoint to inspect parked domain configuration for a specific website,\nincluding the parent domain and root directory assigned to each parked domain." + } + }, + "com.hostinger.api#CreateHostingWebsiteParkedDomainV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + }, + "parked_domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Domain name or IP address to park on the selected website", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#CreateHostingWebsiteParkedDomainV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#CreateHostingWebsiteParkedDomainV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/hosting/v1/accounts/{username}/websites/{domain}/parked-domains", + "code": 200 + }, + "smithy.api#documentation": "Create website parked domain\n\nCreate a parked or alias domain for the selected website.\n\nProvide a domain name or IP address to park on the website so it serves the same content\nas the parent domain." + } + }, + "com.hostinger.api#DeleteHostingWebsiteParkedDomainV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + }, + "parkedDomain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DeleteHostingWebsiteParkedDomainV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#DeleteHostingWebsiteParkedDomainV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "traits": { + "smithy.api#http": { + "method": "DELETE", + "uri": "/api/hosting/v1/accounts/{username}/websites/{domain}/parked-domains/{parkedDomain}", + "code": 200 + }, + "smithy.api#documentation": "Delete website parked domain\n\nDelete an existing parked or alias domain from the selected website.\n\nUse this endpoint to remove parked domains that are no longer needed." + } + }, + "com.hostinger.api#ListHostingWebsiteSubdomainsV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#HostingV1DomainsSubdomainCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#HostingV1DomainsSubdomainResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`Hosting.V1.Domains.SubdomainResource`](#model/hostingv1domainssubdomainresource)" + } + }, + "com.hostinger.api#HostingV1DomainsSubdomainResource": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Website username" + } + }, + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Full subdomain" + } + }, + "parent_domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Parent website domain" + } + }, + "root_directory": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Subdomain root directory" + } + }, + "subdomain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Subdomain prefix" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListHostingWebsiteSubdomainsV1Response": { + "type": "structure", + "members": { + "body": { + "target": "com.hostinger.api#HostingV1DomainsSubdomainCollection", + "traits": { + "com.distilled.openapi#rawResponse": {}, + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListHostingWebsiteSubdomainsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListHostingWebsiteSubdomainsV1Request" + }, + "output": { + "target": "com.hostinger.api#ListHostingWebsiteSubdomainsV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/hosting/v1/accounts/{username}/websites/{domain}/subdomains", + "code": 200 + }, + "smithy.api#documentation": "List website subdomains\n\nRetrieve all subdomains created under the selected website.\n\nUse this endpoint to inspect subdomain configuration for a specific website,\nincluding the parent domain and root directory assigned to each subdomain." + } + }, + "com.hostinger.api#CreateHostingWebsiteSubdomainV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + }, + "subdomain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Subdomain prefix to create under the selected website", + "smithy.api#required": {} + } + }, + "directory": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Directory name for the subdomain relative to the website root", + "com.distilled.openapi#nullable": {} + } + }, + "is_using_public_directory": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Use the website public directory as the subdomain root directory" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#CreateHostingWebsiteSubdomainV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#CreateHostingWebsiteSubdomainV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/hosting/v1/accounts/{username}/websites/{domain}/subdomains", + "code": 200 + }, + "smithy.api#documentation": "Create website subdomain\n\nCreate a new subdomain for the selected website.\n\nProvide a subdomain prefix and, optionally, a custom directory or the\nwebsite public directory to use as the subdomain root." + } + }, + "com.hostinger.api#DeleteHostingWebsiteSubdomainV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + }, + "subdomain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DeleteHostingWebsiteSubdomainV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#DeleteHostingWebsiteSubdomainV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "traits": { + "smithy.api#http": { + "method": "DELETE", + "uri": "/api/hosting/v1/accounts/{username}/websites/{domain}/subdomains/{subdomain}", + "code": 200 + }, + "smithy.api#documentation": "Delete website subdomain\n\nDelete an existing subdomain from the selected website.\n\nUse this endpoint to remove subdomains that are no longer needed." + } + }, + "com.hostinger.api#VerifyHostingDomainOwnershipV1Request": { + "type": "structure", + "members": { + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Domain to verify ownership for", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#HostingV1DomainsDomainAccessResource": { + "type": "structure", + "members": { + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Domain name" + } + }, + "is_accessible": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether domain is accessible" + } + }, + "txt_to_verify": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "TXT record for verification" + } + } + }, + "traits": {} + }, + "com.hostinger.api#VerifyHostingDomainOwnershipV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#VerifyHostingDomainOwnershipV1Request" + }, + "output": { + "target": "com.hostinger.api#HostingV1DomainsDomainAccessResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/hosting/v1/domains/verify-ownership", + "code": 200 + }, + "smithy.api#documentation": "Verify domain ownership\n\nVerify ownership of a single domain and return the verification status.\n\nUse this endpoint to check if a domain is accessible for you before using it for new websites.\nIf the domain is accessible, the response will have `is_accessible: true`.\nIf not, add the given TXT record to your domain's DNS records and try verifying again.\nKeep in mind that it may take up to 10 minutes for new TXT DNS records to propagate.\n\nSkip this verification when using Hostinger's free subdomains (*.hostingersite.com)." + } + }, + "com.hostinger.api#HostingGenerateUploadURLV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Account username", + "smithy.api#required": {} + } + }, + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Website domain", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#HostingV1FilesUploadUrlResource": { + "type": "structure", + "members": { + "url": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The TUS upload endpoint URL to send upload requests to", + "smithy.api#required": {} + } + }, + "auth_key": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Authentication token to pass as the `X-Auth` header in TUS upload requests", + "smithy.api#required": {} + } + }, + "rest_auth_key": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Authentication token to pass as the `X-Auth-Rest` header in TUS upload requests", + "smithy.api#required": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#HostingGenerateUploadURLV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#HostingGenerateUploadURLV1Request" + }, + "output": { + "target": "com.hostinger.api#HostingV1FilesUploadUrlResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/hosting/v1/files/upload-urls", + "code": 200 + }, + "smithy.api#documentation": "Generate upload URL\n\nGenerate a file browser upload URL with authentication credentials\nfor uploading files directly to a website's file storage.\n\nReturns `url`, `auth_key` and `rest_auth_key`. Use these to upload a file to the\nwebsite's `public_html` directory via the TUS resumable upload protocol (TUS 1.0.0).\nSend `X-Auth: {auth_key}` and `X-Auth-Rest: {rest_auth_key}` headers on every request\nbelow.\n\n1. Create the upload: `POST` to `{url}/{relative_file_path}?override=true` with headers\n `upload-length: {file size in bytes}` and `upload-offset: 0`. Expect `201 Created`.\n2. Upload the file: send the file bytes to the same location (any TUS 1.0.0 client, or\n `PATCH` requests with an `upload-offset` header tracking progress) until complete.\n\n`relative_file_path` is the destination path inside `public_html`, e.g. `app.zip`.\n\nInstead of a TUS client, plain `curl` also works:\n```\nFILE=app.zip\nSIZE=$(stat -f%z \"$FILE\") # stat -c%s on Linux\n\ncurl -i -X POST \"{url}/${FILE}?override=true\" \\\n -H \"X-Auth: {auth_key}\" \\\n -H \"X-Auth-Rest: {rest_auth_key}\" \\\n -H \"Tus-Resumable: 1.0.0\" \\\n -H \"Upload-Length: ${SIZE}\" \\\n -H \"Upload-Offset: 0\"\n# -> 201 Created\n\ncurl -i -X PATCH \"{url}/${FILE}?override=true\" \\\n -H \"X-Auth: {auth_key}\" \\\n -H \"X-Auth-Rest: {rest_auth_key}\" \\\n -H \"Tus-Resumable: 1.0.0\" \\\n -H \"Content-Type: application/offset+octet-stream\" \\\n -H \"Upload-Offset: 0\" \\\n --data-binary \"@${FILE}\"\n# -> 204 No Content, Upload-Offset response header equals SIZE when done\n```" + } + }, + "com.hostinger.api#HostingListWebsiteFilesAndDirectoriesV1RequestFileTypesItem": { + "type": "enum", + "members": { + "FILE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "file" + } + }, + "DIRECTORY": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "directory" + } + }, + "SYMLINK": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "symlink" + } + }, + "OTHER": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "other" + } + } + }, + "traits": {} + }, + "com.hostinger.api#HostingListWebsiteFilesAndDirectoriesV1RequestFileTypesList": { + "type": "list", + "member": { + "target": "com.hostinger.api#HostingListWebsiteFilesAndDirectoriesV1RequestFileTypesItem" + }, + "traits": {} + }, + "com.hostinger.api#HostingListWebsiteFilesAndDirectoriesV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + }, + "directory": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpQuery": "directory", + "smithy.api#documentation": "Directory path to check" + } + }, + "max_depth": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "max_depth", + "smithy.api#documentation": "How many directory levels deep to recurse." + } + }, + "max_items": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "max_items", + "smithy.api#documentation": "Max number of entries to return in this page." + } + }, + "offset": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "offset", + "smithy.api#documentation": "Number of entries to skip. Page with offset + item count until reaching total_items." + } + }, + "file_types": { + "target": "com.hostinger.api#HostingListWebsiteFilesAndDirectoriesV1RequestFileTypesList", + "traits": { + "smithy.api#httpQuery": "file_types", + "smithy.api#documentation": "Filter by entry type, e.g. file,directory. Omit for all types." + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#HostingV1FilesFilesResource": { + "type": "structure", + "members": { + "path": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Listed directory, relative to the document root.", + "smithy.api#required": {} + } + }, + "items": { + "target": "com.hostinger.api#HostingV1FilesFilesResourceItemsList", + "traits": { + "smithy.api#documentation": "Entries found in the listed directory.", + "smithy.api#required": {} + } + }, + "total_items": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Total number of entries matching the listing, across all pages.", + "smithy.api#required": {} + } + }, + "total_items_current_page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Number of entries in this page.", + "smithy.api#required": {} + } + }, + "offset": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Number of entries skipped before this page.", + "smithy.api#required": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#HostingV1FilesFilesResourceItemsItemType": { + "type": "enum", + "members": { + "FILE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "file" + } + }, + "DIRECTORY": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "directory" + } + }, + "SYMLINK": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "symlink" + } + }, + "OTHER": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "other" + } + } + }, + "traits": { + "smithy.api#documentation": "Entry type." + } + }, + "com.hostinger.api#HostingV1FilesFilesResourceItemsItem": { + "type": "structure", + "members": { + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Entry name.", + "smithy.api#required": {} + } + }, + "path": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Entry path, relative to the document root.", + "smithy.api#required": {} + } + }, + "type": { + "target": "com.hostinger.api#HostingV1FilesFilesResourceItemsItemType", + "traits": { + "smithy.api#documentation": "Entry type.", + "smithy.api#required": {} + } + }, + "size_bytes": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Entry size in bytes. Null for directories, symlinks, and other non-file entries.", + "smithy.api#required": {}, + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#HostingV1FilesFilesResourceItemsList": { + "type": "list", + "member": { + "target": "com.hostinger.api#HostingV1FilesFilesResourceItemsItem" + }, + "traits": { + "smithy.api#documentation": "Entries found in the listed directory." + } + }, + "com.hostinger.api#HostingListWebsiteFilesAndDirectoriesV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#HostingListWebsiteFilesAndDirectoriesV1Request" + }, + "output": { + "target": "com.hostinger.api#HostingV1FilesFilesResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/hosting/v1/accounts/{username}/domains/{domain}/files", + "code": 200 + }, + "smithy.api#documentation": "List website files and directories\n\nList files and directories under a website's document root.\n\nUse `directory` to browse a subdirectory relative to the document root. Symlinked entries\nare listed but never traversed into or resolved." + } + }, + "com.hostinger.api#GetHostingWebsiteFileContentV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + }, + "path": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpQuery": "path", + "smithy.api#required": {}, + "smithy.api#documentation": "File path, relative to the document root." + } + }, + "from_line": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "from_line", + "smithy.api#documentation": "Line offset to start reading from." + } + }, + "max_lines": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "max_lines", + "smithy.api#documentation": "Max number of lines to return." + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#HostingV1FilesFileContentResource": { + "type": "structure", + "members": { + "path": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "File path, relative to the document root.", + "smithy.api#required": {} + } + }, + "content": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "File content for the requested line range.", + "smithy.api#required": {} + } + }, + "from_line": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Line offset the returned content starts from.", + "smithy.api#required": {} + } + }, + "total_lines": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Total number of lines in the file.", + "smithy.api#required": {} + } + }, + "size_bytes": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Total file size in bytes.", + "smithy.api#required": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#GetHostingWebsiteFileContentV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#GetHostingWebsiteFileContentV1Request" + }, + "output": { + "target": "com.hostinger.api#HostingV1FilesFileContentResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/hosting/v1/accounts/{username}/domains/{domain}/files/content", + "code": 200 + }, + "smithy.api#documentation": "Get website file content\n\nGet a single file's content, relative to a website's document root.\n\nRead-only; refuses symlinks, oversized files, non-text file types, and files identified as\ncontaining secrets (e.g. credential files) — none of these are returned by this endpoint." + } + }, + "com.hostinger.api#ListHostingNodeJSBuildsV1RequestStatesItem": { + "type": "enum", + "members": { + "PENDING": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "pending" + } + }, + "RUNNING": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "running" + } + }, + "COMPLETED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "completed" + } + }, + "FAILED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "failed" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListHostingNodeJSBuildsV1RequestStatesList": { + "type": "list", + "member": { + "target": "com.hostinger.api#ListHostingNodeJSBuildsV1RequestStatesItem" + }, + "traits": {} + }, + "com.hostinger.api#ListHostingNodeJSBuildsV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + }, + "page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "page", + "smithy.api#documentation": "Page number" + } + }, + "per_page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "per_page", + "smithy.api#documentation": "Number of items per page" + } + }, + "states": { + "target": "com.hostinger.api#ListHostingNodeJSBuildsV1RequestStatesList", + "traits": { + "smithy.api#httpQuery": "states", + "smithy.api#documentation": "Build states to filter by" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#HostingV1NodeJsBuildCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#HostingV1NodeJsBuildResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`Hosting.V1.NodeJs.BuildResource`](#model/hostingv1nodejsbuildresource)" + } + }, + "com.hostinger.api#HostingV1NodeJsBuildResource": { + "type": "structure", + "members": { + "uuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Build UUID" + } + }, + "state": { + "target": "com.hostinger.api#HostingV1NodeJsBuildResourceState", + "traits": { + "smithy.api#documentation": "Build state" + } + }, + "options": { + "target": "com.hostinger.api#HostingV1NodeJsBuildOptionsResource", + "traits": { + "smithy.api#documentation": "Build options", + "com.distilled.openapi#nullable": {} + } + }, + "created_at": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Creation timestamp" + } + }, + "updated_at": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Last update timestamp" + } + } + }, + "traits": {} + }, + "com.hostinger.api#HostingV1NodeJsBuildResourceState": { + "type": "enum", + "members": { + "PENDING": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "pending" + } + }, + "RUNNING": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "running" + } + }, + "COMPLETED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "completed" + } + }, + "FAILED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "failed" + } + } + }, + "traits": { + "smithy.api#documentation": "Build state" + } + }, + "com.hostinger.api#HostingV1NodeJsBuildOptionsResource": { + "type": "structure", + "members": { + "node_version": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Node.js version", + "smithy.api#required": {} + } + }, + "app_type": { + "target": "com.hostinger.api#HostingV1NodeJsBuildOptionsResourceAppType", + "traits": { + "smithy.api#documentation": "Node.js application type", + "smithy.api#required": {}, + "com.distilled.openapi#nullable": {} + } + }, + "root_directory": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Application root directory", + "smithy.api#required": {}, + "com.distilled.openapi#nullable": {} + } + }, + "output_directory": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Build output directory", + "smithy.api#required": {}, + "com.distilled.openapi#nullable": {} + } + }, + "build_script": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The npm script to run to build the application", + "smithy.api#required": {}, + "com.distilled.openapi#nullable": {} + } + }, + "entry_file": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The main entry point file for the application", + "smithy.api#required": {}, + "com.distilled.openapi#nullable": {} + } + }, + "package_manager": { + "target": "com.hostinger.api#HostingV1NodeJsBuildOptionsResourcePackageManager", + "traits": { + "smithy.api#documentation": "Package manager", + "smithy.api#required": {}, + "com.distilled.openapi#nullable": {} + } + }, + "source_type": { + "target": "com.hostinger.api#HostingV1NodeJsBuildOptionsResourceSourceType", + "traits": { + "smithy.api#documentation": "Source type for the build", + "smithy.api#required": {}, + "com.distilled.openapi#nullable": {} + } + }, + "source_options": { + "target": "com.hostinger.api#HostingV1NodeJsSourceOptionsResource", + "traits": { + "smithy.api#documentation": "Source options, varies based on sourceType", + "smithy.api#required": {}, + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#HostingV1NodeJsBuildOptionsResourceAppType": { + "type": "enum", + "members": { + "CREATE_REACT_APP": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "create-react-app" + } + }, + "GATSBY": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "gatsby" + } + }, + "VITE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "vite" + } + }, + "ANGULAR": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "angular" + } + }, + "REACT": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "react" + } + }, + "VUE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "vue" + } + }, + "PARCEL": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "parcel" + } + }, + "NEXT": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "next" + } + }, + "NUXT": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "nuxt" + } + }, + "NEST": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "nest" + } + }, + "EXPRESS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "express" + } + }, + "FASTIFY": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "fastify" + } + }, + "ASTRO": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "astro" + } + }, + "SVELTE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "svelte" + } + }, + "SVELTE_KIT": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "svelte-kit" + } + }, + "HONO": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "hono" + } + }, + "REACT_ROUTER": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "react-router" + } + }, + "NITRO": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "nitro" + } + }, + "OTHER": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "other" + } + } + }, + "traits": { + "smithy.api#documentation": "Node.js application type" + } + }, + "com.hostinger.api#HostingV1NodeJsBuildOptionsResourcePackageManager": { + "type": "enum", + "members": { + "NPM": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "npm" + } + }, + "YARN": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "yarn" + } + }, + "PNPM": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "pnpm" + } + } + }, + "traits": { + "smithy.api#documentation": "Package manager" + } + }, + "com.hostinger.api#HostingV1NodeJsBuildOptionsResourceSourceType": { + "type": "enum", + "members": { + "ARCHIVE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "archive" + } + } + }, + "traits": { + "smithy.api#documentation": "Source type for the build" + } + }, + "com.hostinger.api#HostingV1NodeJsSourceOptionsResource": { + "type": "structure", + "members": { + "archive_path": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Present if sourceType is \"archive\"", + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListHostingNodeJSBuildsV1Response": { + "type": "structure", + "members": { + "data": { + "target": "com.hostinger.api#HostingV1NodeJsBuildCollection" + }, + "meta": { + "target": "com.hostinger.api#CommonSchemaPaginationMetaSchema" + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListHostingNodeJSBuildsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListHostingNodeJSBuildsV1Request" + }, + "output": { + "target": "com.hostinger.api#ListHostingNodeJSBuildsV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/builds", + "code": 200 + }, + "smithy.api#documentation": "List NodeJS builds\n\nRetrieve a paginated list of Node.js build processes for a specific website.\n\nEach build represents a single run of the Node.js build pipeline. Use the `states`\nquery parameter to filter results by build state (pending, running, completed, failed).\nUse the `uuid` from a build to poll its output via the `Get Node.js Build Logs` endpoint." + } + }, + "com.hostinger.api#StartHostingNodeJsBuildV1RequestNodeVersion": { + "type": "intEnum", + "members": { + "_18": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": 18 + } + }, + "_20": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": 20 + } + }, + "_22": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": 22 + } + }, + "_24": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": 24 + } + } + }, + "traits": { + "smithy.api#documentation": "Node.js version" + } + }, + "com.hostinger.api#StartHostingNodeJsBuildV1RequestAppType": { + "type": "enum", + "members": { + "CREATE_REACT_APP": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "create-react-app" + } + }, + "GATSBY": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "gatsby" + } + }, + "VITE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "vite" + } + }, + "ANGULAR": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "angular" + } + }, + "REACT": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "react" + } + }, + "VUE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "vue" + } + }, + "PARCEL": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "parcel" + } + }, + "NEXT": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "next" + } + }, + "NUXT": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "nuxt" + } + }, + "NEST": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "nest" + } + }, + "EXPRESS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "express" + } + }, + "FASTIFY": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "fastify" + } + }, + "ASTRO": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "astro" + } + }, + "SVELTE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "svelte" + } + }, + "SVELTE_KIT": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "svelte-kit" + } + }, + "HONO": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "hono" + } + }, + "REACT_ROUTER": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "react-router" + } + }, + "NITRO": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "nitro" + } + }, + "OTHER": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "other" + } + } + }, + "traits": { + "smithy.api#documentation": "Node.js application type" + } + }, + "com.hostinger.api#StartHostingNodeJsBuildV1RequestPackageManager": { + "type": "enum", + "members": { + "NPM": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "npm" + } + }, + "YARN": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "yarn" + } + }, + "PNPM": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "pnpm" + } + } + }, + "traits": { + "smithy.api#documentation": "Package manager" + } + }, + "com.hostinger.api#StartHostingNodeJsBuildV1RequestSourceType": { + "type": "enum", + "members": { + "ARCHIVE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "archive" + } + } + }, + "traits": { + "smithy.api#documentation": "The source type of the files" + } + }, + "com.hostinger.api#StartHostingNodeJsBuildV1RequestSourceOptions": { + "type": "structure", + "members": { + "archive_path": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The path to the archive file relative to the document root of the vhost (required if source is \"archive\")" + } + } + }, + "traits": { + "smithy.api#documentation": "Source-specific options" + } + }, + "com.hostinger.api#StartHostingNodeJsBuildV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + }, + "node_version": { + "target": "com.hostinger.api#StartHostingNodeJsBuildV1RequestNodeVersion", + "traits": { + "smithy.api#documentation": "Node.js version", + "smithy.api#required": {} + } + }, + "app_type": { + "target": "com.hostinger.api#StartHostingNodeJsBuildV1RequestAppType", + "traits": { + "smithy.api#documentation": "Node.js application type", + "smithy.api#required": {}, + "com.distilled.openapi#nullable": {} + } + }, + "root_directory": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Application root directory (where package.json is located) relative to public_html", + "smithy.api#required": {}, + "com.distilled.openapi#nullable": {} + } + }, + "output_directory": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Build output directory relative to the root directory", + "smithy.api#required": {}, + "com.distilled.openapi#nullable": {} + } + }, + "build_script": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Build script that will be ran to build the application", + "smithy.api#required": {}, + "com.distilled.openapi#nullable": {} + } + }, + "entry_file": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The main entry point file for the application", + "com.distilled.openapi#nullable": {} + } + }, + "package_manager": { + "target": "com.hostinger.api#StartHostingNodeJsBuildV1RequestPackageManager", + "traits": { + "smithy.api#documentation": "Package manager", + "com.distilled.openapi#nullable": {} + } + }, + "source_type": { + "target": "com.hostinger.api#StartHostingNodeJsBuildV1RequestSourceType", + "traits": { + "smithy.api#documentation": "The source type of the files", + "smithy.api#required": {} + } + }, + "source_options": { + "target": "com.hostinger.api#StartHostingNodeJsBuildV1RequestSourceOptions", + "traits": { + "smithy.api#documentation": "Source-specific options", + "smithy.api#required": {}, + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#StartHostingNodeJsBuildV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#StartHostingNodeJsBuildV1Request" + }, + "output": { + "target": "com.hostinger.api#HostingV1NodeJsBuildResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/builds", + "code": 200 + }, + "smithy.api#documentation": "Start Node.js build\n\nStart a Node.js build process using files already present on the website's file storage.\n\nWARNING: on success this overwrites the website's existing contents and cannot be\nundone — verify this is intended before calling this endpoint.\n\nThe `source_type` must be `archive` and `source_options.archive_path` must point to an\nexisting archive file on the server (relative to the website document root).\nUse the `Generate Upload URL` endpoint to obtain credentials and upload the archive first.\n\nTo auto-detect build settings from an archive before starting, first call the\n`Get Node.js Build Settings from Archive` endpoint.\n\nThe returned build `uuid` can be used to poll progress and retrieve logs via\nthe `Get Node.js Build Logs` endpoint." + } + }, + "com.hostinger.api#HostingGetNodeJsBuildSettingsFromArchiveV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + }, + "archive_path": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpQuery": "archive_path", + "smithy.api#required": {}, + "smithy.api#documentation": "The path to the archive file relative to the document root of the vhost" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#HostingV1NodeJsBuildSettingsResource": { + "type": "structure", + "members": { + "app_type": { + "target": "com.hostinger.api#HostingV1NodeJsBuildSettingsResourceAppType", + "traits": { + "smithy.api#documentation": "Node.js application type", + "smithy.api#required": {}, + "com.distilled.openapi#nullable": {} + } + }, + "node_version": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Node.js version", + "smithy.api#required": {}, + "com.distilled.openapi#nullable": {} + } + }, + "root_directory": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Application root directory", + "smithy.api#required": {}, + "com.distilled.openapi#nullable": {} + } + }, + "output_directory": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Build output directory", + "smithy.api#required": {}, + "com.distilled.openapi#nullable": {} + } + }, + "build_script": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The npm script to run to build the application", + "smithy.api#required": {}, + "com.distilled.openapi#nullable": {} + } + }, + "entry_file": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The main entry point file for the application", + "smithy.api#required": {}, + "com.distilled.openapi#nullable": {} + } + }, + "package_manager": { + "target": "com.hostinger.api#HostingV1NodeJsBuildSettingsResourcePackageManager", + "traits": { + "smithy.api#documentation": "Package manager", + "smithy.api#required": {}, + "com.distilled.openapi#nullable": {} + } + }, + "available_scripts": { + "target": "com.hostinger.api#HostingV1NodeJsBuildSettingsResourceAvailableScriptsList", + "traits": { + "smithy.api#documentation": "The scripts configured in the package.json file", + "smithy.api#required": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#HostingV1NodeJsBuildSettingsResourceAppType": { + "type": "enum", + "members": { + "CREATE_REACT_APP": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "create-react-app" + } + }, + "GATSBY": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "gatsby" + } + }, + "VITE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "vite" + } + }, + "ANGULAR": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "angular" + } + }, + "REACT": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "react" + } + }, + "VUE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "vue" + } + }, + "PARCEL": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "parcel" + } + }, + "NEXT": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "next" + } + }, + "NUXT": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "nuxt" + } + }, + "NEST": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "nest" + } + }, + "EXPRESS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "express" + } + }, + "FASTIFY": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "fastify" + } + }, + "ASTRO": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "astro" + } + }, + "SVELTE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "svelte" + } + }, + "SVELTE_KIT": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "svelte-kit" + } + }, + "HONO": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "hono" + } + }, + "REACT_ROUTER": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "react-router" + } + }, + "NITRO": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "nitro" + } + }, + "OTHER": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "other" + } + } + }, + "traits": { + "smithy.api#documentation": "Node.js application type" + } + }, + "com.hostinger.api#HostingV1NodeJsBuildSettingsResourcePackageManager": { + "type": "enum", + "members": { + "NPM": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "npm" + } + }, + "YARN": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "yarn" + } + }, + "PNPM": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "pnpm" + } + } + }, + "traits": { + "smithy.api#documentation": "Package manager" + } + }, + "com.hostinger.api#HostingV1NodeJsBuildSettingsResourceAvailableScriptsList": { + "type": "list", + "member": { + "target": "smithy.api#String" + }, + "traits": { + "smithy.api#documentation": "The scripts configured in the package.json file" + } + }, + "com.hostinger.api#HostingGetNodeJsBuildSettingsFromArchiveV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#HostingGetNodeJsBuildSettingsFromArchiveV1Request" + }, + "output": { + "target": "com.hostinger.api#HostingV1NodeJsBuildSettingsResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/builds/settings/from-archive", + "code": 200 + }, + "smithy.api#documentation": "Get Node.js build settings from archive\n\nAuto-detect Node.js build settings from a package.json inside an archive already on the server.\n\nUse this before calling `Start Node.js Build` to preview what settings will be used,\nor to let the user review and override values (framework, node version, root directory,\noutput directory, build script) before committing to a build.\n\nThe archive must already be present on the website's file storage. Use the\n`Generate Upload URL` endpoint to obtain credentials and upload the archive first." + } + }, + "com.hostinger.api#ListHostingNodeJsEnvironmentVariablesV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#HostingV1NodeJsEnvVarCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#HostingV1NodeJsEnvVarResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`Hosting.V1.NodeJs.EnvVarResource`](#model/hostingv1nodejsenvvarresource)" + } + }, + "com.hostinger.api#HostingV1NodeJsEnvVarResource": { + "type": "structure", + "members": { + "key": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Environment variable name" + } + }, + "value": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Always the literal string ********. Real values cannot be read back through this API." + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListHostingNodeJsEnvironmentVariablesV1Response": { + "type": "structure", + "members": { + "body": { + "target": "com.hostinger.api#HostingV1NodeJsEnvVarCollection", + "traits": { + "com.distilled.openapi#rawResponse": {}, + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListHostingNodeJsEnvironmentVariablesV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListHostingNodeJsEnvironmentVariablesV1Request" + }, + "output": { + "target": "com.hostinger.api#ListHostingNodeJsEnvironmentVariablesV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/builds/settings/env", + "code": 200 + }, + "smithy.api#documentation": "List Node.js environment variables\n\nLists the Node.js environment variables currently set for the website. Values are always\nmasked as `********` and cannot be read back through this API. Use this endpoint to see\nwhich keys are configured or to verify a change, not to read values.\n\nTo change variables, use the `Replace Node.js environment variables` endpoint. It replaces\nthe whole set, so never copy the masked values from this response into that request; send\nthe full desired set with real values taken from the project `.env` file or the user\nprompt instead." + } + }, + "com.hostinger.api#ReplaceHostingNodeJsEnvironmentVariablesV1RequestEnvVarsItem": { + "type": "structure", + "members": { + "key": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Environment variable name. Must start with an uppercase letter or\nunderscore, followed by uppercase letters, digits or underscores.", + "smithy.api#required": {} + } + }, + "value": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Environment variable value.", + "smithy.api#required": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#ReplaceHostingNodeJsEnvironmentVariablesV1RequestEnvVarsList": { + "type": "list", + "member": { + "target": "com.hostinger.api#ReplaceHostingNodeJsEnvironmentVariablesV1RequestEnvVarsItem" + }, + "traits": { + "smithy.api#documentation": "Environment variables to set. This is the full desired set: any variable not in\nthis list is deleted, and an empty array deletes every variable." + } + }, + "com.hostinger.api#ReplaceHostingNodeJsEnvironmentVariablesV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + }, + "env_vars": { + "target": "com.hostinger.api#ReplaceHostingNodeJsEnvironmentVariablesV1RequestEnvVarsList", + "traits": { + "smithy.api#documentation": "Environment variables to set. This is the full desired set: any variable not in\nthis list is deleted, and an empty array deletes every variable.", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#ReplaceHostingNodeJsEnvironmentVariablesV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ReplaceHostingNodeJsEnvironmentVariablesV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "PUT", + "uri": "/api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/builds/settings/env", + "code": 200 + }, + "smithy.api#documentation": "Replace Node.js environment variables\n\nReplaces the website's Node.js environment variables with the ones provided. This is a\nfull replace: any variable not in the request is deleted, and sending an empty `env_vars`\narray deletes every variable. Saving writes the values and restarts the running Node.js\nprocess.\n\nA restart is enough for apps that read environment variables at process start, such as\nExpress or NestJS. It is not enough for frameworks that bake variables into the build.\nNext.js standalone is one of those: build-time values (including `NEXT_PUBLIC_*`) need a\nfresh build. After this call, use the `Start Node.js build` endpoint so those apps\npick up the new values.\n\nThe `List Node.js environment variables` endpoint returns masked values (`********`), so\nnever copy values from it into this request. Always send the full desired set with real\nvalues taken from the project `.env` file or the user prompt." + } + }, + "com.hostinger.api#GetHostingNodeJSBuildLogsV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + }, + "uuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Build UUID" + } + }, + "from_line": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "from_line", + "smithy.api#documentation": "Line from which to start retrieving logs" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#HostingV1NodeJsBuildLogsResource": { + "type": "structure", + "members": { + "logs": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Logs from the build process, may contain ANSI escape sequences (for colors, etc.)", + "smithy.api#required": {}, + "com.distilled.openapi#nullable": {} + } + }, + "lines": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Number of log lines returned", + "smithy.api#required": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#GetHostingNodeJSBuildLogsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#GetHostingNodeJSBuildLogsV1Request" + }, + "output": { + "target": "com.hostinger.api#HostingV1NodeJsBuildLogsResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/builds/{uuid}/logs", + "code": 200 + }, + "smithy.api#documentation": "Get NodeJS build logs\n\nRetrieve logs from a specific Node.js build process.\n\nTo stream live output while a build is running, poll this endpoint repeatedly\nwhile the build state is `running`, passing the previously returned `lines` count\nas `from_line` to fetch only new output since the last call.\nLog content may contain ANSI escape sequences (color codes)." + } + }, + "com.hostinger.api#RestartHostingNodeJsApplicationV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#RestartHostingNodeJsApplicationV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#RestartHostingNodeJsApplicationV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/server/restart", + "code": 200 + }, + "smithy.api#documentation": "Restart Node.js application\n\nRestarts the Node.js server process for the website. Does not rebuild or redeploy the\napplication. Use it to apply environment or configuration changes, or to recover a hung\napplication.\n\nOnly applicable to server-side applications (Express, Next.js, NestJS, etc.). Static\nfront-end apps (React, Vue, Vite) have no persistent server process, so restarting them\nhas no effect. Returns success even when the website has no server process to restart." + } + }, + "com.hostinger.api#ListHostingNodeJsVulnerabilitiesV1RequestSeveritiesItem": { + "type": "enum", + "members": { + "LOW": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "low" + } + }, + "MODERATE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "moderate" + } + }, + "HIGH": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "high" + } + }, + "CRITICAL": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "critical" + } + }, + "UNKNOWN": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "unknown" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListHostingNodeJsVulnerabilitiesV1RequestSeveritiesList": { + "type": "list", + "member": { + "target": "com.hostinger.api#ListHostingNodeJsVulnerabilitiesV1RequestSeveritiesItem" + }, + "traits": {} + }, + "com.hostinger.api#ListHostingNodeJsVulnerabilitiesV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + }, + "severities": { + "target": "com.hostinger.api#ListHostingNodeJsVulnerabilitiesV1RequestSeveritiesList", + "traits": { + "smithy.api#httpQuery": "severities", + "smithy.api#documentation": "Severities to filter by" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#HostingV1NodeJsVulnerabilityCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#HostingV1NodeJsVulnerabilityResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`Hosting.V1.NodeJs.VulnerabilityResource`](#model/hostingv1nodejsvulnerabilityresource)" + } + }, + "com.hostinger.api#HostingV1NodeJsVulnerabilityResource": { + "type": "structure", + "members": { + "package_name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Name of the affected npm package" + } + }, + "installed_version": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Version of the package currently installed" + } + }, + "is_direct": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether the package is a direct dependency" + } + }, + "is_patchable": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether the vulnerability can be auto-patched without a major version bump" + } + }, + "fix_version": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Version that fixes the vulnerability, if known", + "com.distilled.openapi#nullable": {} + } + }, + "vulnerability_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Unique vulnerability identifier (e.g. GHSA or CVE)" + } + }, + "severity": { + "target": "com.hostinger.api#HostingV1NodeJsVulnerabilityResourceSeverity", + "traits": { + "smithy.api#documentation": "Severity level of the vulnerability" + } + }, + "title": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Short human-readable title of the vulnerability" + } + }, + "description": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Detailed description of the vulnerability", + "com.distilled.openapi#nullable": {} + } + }, + "cvss_score": { + "target": "smithy.api#Double", + "traits": { + "smithy.api#documentation": "CVSS base score (0.0-10.0)", + "com.distilled.openapi#nullable": {} + } + }, + "cve": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "CVE identifier, if available", + "com.distilled.openapi#nullable": {} + } + }, + "cwe": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "CWE identifier describing the weakness type", + "com.distilled.openapi#nullable": {} + } + }, + "url": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "URL to the vulnerability advisory", + "com.distilled.openapi#nullable": {} + } + }, + "published_at": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Date the vulnerability was published, in ISO 8601 format", + "com.distilled.openapi#nullable": {} + } + }, + "is_patching_in_progress": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether this vulnerability is included in a currently open patch pull request" + } + } + }, + "traits": {} + }, + "com.hostinger.api#HostingV1NodeJsVulnerabilityResourceSeverity": { + "type": "enum", + "members": { + "LOW": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "low" + } + }, + "MODERATE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "moderate" + } + }, + "HIGH": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "high" + } + }, + "CRITICAL": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "critical" + } + }, + "UNKNOWN": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "unknown" + } + } + }, + "traits": { + "smithy.api#documentation": "Severity level of the vulnerability" + } + }, + "com.hostinger.api#ListHostingNodeJsVulnerabilitiesV1Response": { + "type": "structure", + "members": { + "body": { + "target": "com.hostinger.api#HostingV1NodeJsVulnerabilityCollection", + "traits": { + "com.distilled.openapi#rawResponse": {}, + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListHostingNodeJsVulnerabilitiesV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListHostingNodeJsVulnerabilitiesV1Request" + }, + "output": { + "target": "com.hostinger.api#ListHostingNodeJsVulnerabilitiesV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/vulnerabilities", + "code": 200 + }, + "smithy.api#documentation": "List Node.js vulnerabilities\n\nLists known npm package vulnerabilities detected on a Node.js website, enriched with\nadvisory metadata (severity, CVSS score, CVE, advisory URL). Results are sorted from\nthe most severe to the least severe, then by publish date (newest first). Use the\n`severities` query parameter to filter.\n\nVulnerabilities with `is_patchable` set to `true` can be auto-fixed via the\n`Patch Node.js Vulnerabilities` endpoint, which opens a GitHub pull request with\nupdated package versions. Auto-fix is only available for websites deployed from a\nconnected GitHub repository. Vulnerabilities with `is_patching_in_progress` set to\n`true` are already included in an open patch pull request; while any patch pull\nrequest is open, new patch requests for this website are rejected until it is merged\nor closed.\n\nData comes from periodic dependency scans, so it may lag behind the latest deployment.\nAn empty list means the most recent scan found no vulnerabilities; it does not\nguarantee the current deployment is vulnerability-free. Available on Business and\nCloud Hosting plans." + } + }, + "com.hostinger.api#PatchHostingNodeJsVulnerabilitiesV1RequestVulnerabilityIdsList": { + "type": "list", + "member": { + "target": "smithy.api#String" + }, + "traits": { + "smithy.api#documentation": "List of vulnerability IDs to patch, as returned by the list vulnerabilities endpoint." + } + }, + "com.hostinger.api#PatchHostingNodeJsVulnerabilitiesV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + }, + "vulnerability_ids": { + "target": "com.hostinger.api#PatchHostingNodeJsVulnerabilitiesV1RequestVulnerabilityIdsList", + "traits": { + "smithy.api#documentation": "List of vulnerability IDs to patch, as returned by the list vulnerabilities endpoint.", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#HostingV1NodeJsPatchResultResource": { + "type": "structure", + "members": { + "pr_url": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "URL to the created GitHub pull request" + } + }, + "pr_number": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "GitHub pull request number" + } + }, + "head_branch": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The branch created with the fix" + } + }, + "patched_vulnerability_ids": { + "target": "com.hostinger.api#HostingV1NodeJsPatchResultResourcePatchedVulnerabilityIdsList", + "traits": { + "smithy.api#documentation": "List of vulnerability IDs that were patched in the pull request" + } + } + }, + "traits": {} + }, + "com.hostinger.api#HostingV1NodeJsPatchResultResourcePatchedVulnerabilityIdsList": { + "type": "list", + "member": { + "target": "smithy.api#String" + }, + "traits": { + "smithy.api#documentation": "List of vulnerability IDs that were patched in the pull request" + } + }, + "com.hostinger.api#PatchHostingNodeJsVulnerabilitiesV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#PatchHostingNodeJsVulnerabilitiesV1Request" + }, + "output": { + "target": "com.hostinger.api#HostingV1NodeJsPatchResultResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/vulnerabilities/patch", + "code": 200 + }, + "smithy.api#documentation": "Patch Node.js vulnerabilities\n\nPatches the selected Node.js vulnerabilities by updating the affected package versions\nin `package.json` and opening a GitHub pull request in the connected repository. The\ncustomer reviews and merges the pull request; merging triggers the automatic deployment.\n\nAuto-fix is only available for websites deployed from a connected GitHub repository.\nWebsites deployed from an archive have no auto-fix path and return a 404. The Hostinger\nGitHub App needs write access to the repository; without it the request fails with a\n403 explaining the missing permission.\n\nOnly vulnerabilities with `is_patchable` set to `true` can be patched. Non-patchable\nIDs in the selection are skipped; the pull request covers the patchable subset, listed\nin `patched_vulnerability_ids`. Selections without any patchable vulnerability are\nrejected with a 422. Only one patch pull request can be open at a time per website;\nclose or merge it before patching again. Available on Business and Cloud Hosting plans." + } + }, + "com.hostinger.api#ListHostingOrdersV1RequestStatusesItem": { + "type": "enum", + "members": { + "ACTIVE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "active" + } + }, + "DELETING": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "deleting" + } + }, + "DELETED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "deleted" + } + }, + "SUSPENDED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "suspended" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListHostingOrdersV1RequestStatusesList": { + "type": "list", + "member": { + "target": "com.hostinger.api#ListHostingOrdersV1RequestStatusesItem" + }, + "traits": {} + }, + "com.hostinger.api#ListHostingOrdersV1RequestOrderIdsList": { + "type": "list", + "member": { + "target": "smithy.api#Integer" + }, + "traits": {} + }, + "com.hostinger.api#ListHostingOrdersV1Request": { + "type": "structure", + "members": { + "page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "page", + "smithy.api#documentation": "Page number" + } + }, + "per_page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "per_page", + "smithy.api#documentation": "Number of items per page" + } + }, + "statuses": { + "target": "com.hostinger.api#ListHostingOrdersV1RequestStatusesList", + "traits": { + "smithy.api#httpQuery": "statuses", + "smithy.api#documentation": "Filter by order statuses" + } + }, + "order_ids": { + "target": "com.hostinger.api#ListHostingOrdersV1RequestOrderIdsList", + "traits": { + "smithy.api#httpQuery": "order_ids", + "smithy.api#documentation": "Filter by specific order IDs" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#HostingV1OrdersOrderCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#HostingV1OrdersOrderResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`Hosting.V1.Orders.OrderResource`](#model/hostingv1ordersorderresource)" + } + }, + "com.hostinger.api#HostingV1OrdersOrderResource": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Order ID" + } + }, + "client_id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Client ID" + } + }, + "subscription_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Subscription ID", + "com.distilled.openapi#nullable": {} + } + }, + "created_at": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Creation date" + } + }, + "plan": { + "target": "com.hostinger.api#HostingV1OrdersPlanResource" + }, + "status": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Order status" + } + } + }, + "traits": {} + }, + "com.hostinger.api#HostingV1OrdersPlanResource": { + "type": "structure", + "members": { + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Plan name" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListHostingOrdersV1Response": { + "type": "structure", + "members": { + "data": { + "target": "com.hostinger.api#HostingV1OrdersOrderCollection" + }, + "meta": { + "target": "com.hostinger.api#CommonSchemaPaginationMetaSchema" + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListHostingOrdersV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListHostingOrdersV1Request" + }, + "output": { + "target": "com.hostinger.api#ListHostingOrdersV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/hosting/v1/orders", + "code": 200 + }, + "smithy.api#documentation": "List orders\n\nRetrieve a paginated list of orders accessible to the authenticated client.\n\nThis endpoint returns orders of your hosting accounts as well as orders\nof other client hosting accounts that have shared access with you.\n\nUse the available query parameters to filter results by order statuses\nor specific order IDs for more targeted results." + } + }, + "com.hostinger.api#ResetHostingPHPExtensionsV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#ResetHostingPHPExtensionsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ResetHostingPHPExtensionsV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "traits": { + "smithy.api#http": { + "method": "PATCH", + "uri": "/api/hosting/v1/accounts/{username}/websites/{domain}/php/extensions/reset", + "code": 200 + }, + "smithy.api#documentation": "Reset PHP extensions\n\nResets all PHP extensions of the website to their default state.\n\nUse it to recover from extension conflicts or restore the original configuration." + } + }, + "com.hostinger.api#GetHostingPHPDetailsV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#HostingV1PhpPhpDetailsResource": { + "type": "structure", + "members": { + "php_version": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Current PHP version name" + } + }, + "php_version_full": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Full PHP version name" + } + }, + "php_versions": { + "target": "com.hostinger.api#HostingV1PhpPhpVersionsResource" + }, + "options": { + "target": "com.hostinger.api#HostingV1PhpPhpDetailsResourceOptionsMap", + "traits": { + "smithy.api#documentation": "PHP options keyed by option name" + } + }, + "extensions": { + "target": "smithy.api#Document", + "traits": { + "smithy.api#documentation": "PHP extensions keyed by extension name" + } + }, + "conflicting_extensions": { + "target": "com.hostinger.api#HostingV1PhpPhpDetailsResourceConflictingExtensionsList", + "traits": { + "smithy.api#documentation": "Groups of extensions that conflict with each other" + } + } + }, + "traits": {} + }, + "com.hostinger.api#HostingV1PhpPhpVersionsResource": { + "type": "structure", + "members": { + "supported": { + "target": "smithy.api#Document", + "traits": { + "smithy.api#documentation": "Key-value pairs of supported versions" + } + }, + "unsupported": { + "target": "smithy.api#Document", + "traits": { + "smithy.api#documentation": "Key-value pairs of unsupported versions" + } + } + }, + "traits": {} + }, + "com.hostinger.api#HostingV1PhpPhpOptionResource": { + "type": "structure", + "members": { + "type": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Declared option type (e.g. bool, string)" + } + }, + "value": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Current value for this website" + } + }, + "comment": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Human-readable description" + } + }, + "default": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Default value" + } + }, + "range": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Allowed value range or limits, when applicable", + "com.distilled.openapi#nullable": {} + } + }, + "max": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Maximum value allowed by the account hosting plan, when applicable", + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#HostingV1PhpPhpDetailsResourceOptionsMap": { + "type": "map", + "key": { + "target": "smithy.api#String" + }, + "value": { + "target": "com.hostinger.api#HostingV1PhpPhpOptionResource" + }, + "traits": { + "smithy.api#documentation": "PHP options keyed by option name" + } + }, + "com.hostinger.api#HostingV1PhpPhpDetailsResourceConflictingExtensionsItemList": { + "type": "list", + "member": { + "target": "smithy.api#String" + }, + "traits": {} + }, + "com.hostinger.api#HostingV1PhpPhpDetailsResourceConflictingExtensionsList": { + "type": "list", + "member": { + "target": "com.hostinger.api#HostingV1PhpPhpDetailsResourceConflictingExtensionsItemList" + }, + "traits": { + "smithy.api#documentation": "Groups of extensions that conflict with each other" + } + }, + "com.hostinger.api#GetHostingPHPDetailsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#GetHostingPHPDetailsV1Request" + }, + "output": { + "target": "com.hostinger.api#HostingV1PhpPhpDetailsResource" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/hosting/v1/accounts/{username}/websites/{domain}/php/details", + "code": 200 + }, + "smithy.api#documentation": "Get PHP details\n\nReturns the full PHP configuration for the website: current version, available versions\n(supported and unsupported), enabled/disabled extensions, options with their current value,\ndefault, type and the plan limit (`max`), and conflicting extension groups.\n\nUse it to check the current PHP setup before updating the version, extensions or options." + } + }, + "com.hostinger.api#GetHostingPHPInfoV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#HostingV1PhpPhpInfoResource": { + "type": "structure", + "members": { + "info": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "HTML string containing the full phpinfo page" + } + } + }, + "traits": {} + }, + "com.hostinger.api#GetHostingPHPInfoV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#GetHostingPHPInfoV1Request" + }, + "output": { + "target": "com.hostinger.api#HostingV1PhpPhpInfoResource" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/hosting/v1/accounts/{username}/websites/{domain}/php/php-info", + "code": 200 + }, + "smithy.api#documentation": "Get PHP info\n\nReturns the full phpinfo page (HTML) for the website.\n\nUse it to debug PHP issues or inspect the complete PHP environment of the website." + } + }, + "com.hostinger.api#UpdateHostingPHPExtensionsV1RequestEnableList": { + "type": "list", + "member": { + "target": "smithy.api#String" + }, + "traits": { + "smithy.api#documentation": "PHP extensions to enable." + } + }, + "com.hostinger.api#UpdateHostingPHPExtensionsV1RequestDisableList": { + "type": "list", + "member": { + "target": "smithy.api#String" + }, + "traits": { + "smithy.api#documentation": "PHP extensions to disable." + } + }, + "com.hostinger.api#UpdateHostingPHPExtensionsV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + }, + "enable": { + "target": "com.hostinger.api#UpdateHostingPHPExtensionsV1RequestEnableList", + "traits": { + "smithy.api#documentation": "PHP extensions to enable." + } + }, + "disable": { + "target": "com.hostinger.api#UpdateHostingPHPExtensionsV1RequestDisableList", + "traits": { + "smithy.api#documentation": "PHP extensions to disable." + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#UpdateHostingPHPExtensionsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#UpdateHostingPHPExtensionsV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "PATCH", + "uri": "/api/hosting/v1/accounts/{username}/websites/{domain}/php/extensions", + "code": 200 + }, + "smithy.api#documentation": "Update PHP extensions\n\nEnables or disables PHP extensions (modules) for the website.\n\nUse the Get PHP details endpoint to check the current extension states before changing them." + } + }, + "com.hostinger.api#UpdateHostingPHPOptionsV1RequestOptionsValue": { + "type": "union", + "members": { + "Case0": { + "target": "smithy.api#String" + }, + "Case1": { + "target": "smithy.api#Integer" + } + }, + "traits": {} + }, + "com.hostinger.api#UpdateHostingPHPOptionsV1RequestOptionsMap": { + "type": "map", + "key": { + "target": "smithy.api#String" + }, + "value": { + "target": "com.hostinger.api#UpdateHostingPHPOptionsV1RequestOptionsValue" + }, + "traits": { + "smithy.api#documentation": "Map of PHP options to update, keyed by option name. Only include options you want to change." + } + }, + "com.hostinger.api#UpdateHostingPHPOptionsV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + }, + "options": { + "target": "com.hostinger.api#UpdateHostingPHPOptionsV1RequestOptionsMap", + "traits": { + "smithy.api#documentation": "Map of PHP options to update, keyed by option name. Only include options you want to change.", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#UpdateHostingPHPOptionsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#UpdateHostingPHPOptionsV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "PATCH", + "uri": "/api/hosting/v1/accounts/{username}/websites/{domain}/php/options", + "code": 200 + }, + "smithy.api#documentation": "Update PHP options\n\nUpdates PHP options for the website (e.g. `memory_limit`, `max_execution_time`, `upload_max_filesize`).\nOnly provide the options you want to change, inside the `options` object.\n\nValues above the account plan limit are silently capped to that limit, so the request can succeed\nwith a smaller applied value. Call the Get PHP details endpoint afterwards to read the applied value." + } + }, + "com.hostinger.api#UpdateHostingPHPVersionV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + }, + "version": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "PHP version to switch the website to.", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#UpdateHostingPHPVersionV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#UpdateHostingPHPVersionV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "PATCH", + "uri": "/api/hosting/v1/accounts/{username}/websites/{domain}/php/version", + "code": 200 + }, + "smithy.api#documentation": "Update PHP version\n\nChanges the PHP version of the website.\n\nUse the Get PHP details endpoint to see the versions available for the website." + } + }, + "com.hostinger.api#ListHostingWebsiteRedirectsV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + }, + "page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "page", + "smithy.api#documentation": "Page number" + } + }, + "per_page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "per_page", + "smithy.api#documentation": "Number of items per page" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#HostingV1RedirectsRedirectCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#HostingV1RedirectsRedirectResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`Hosting.V1.Redirects.RedirectResource`](#model/hostingv1redirectsredirectresource)" + } + }, + "com.hostinger.api#HostingV1RedirectsRedirectResource": { + "type": "structure", + "members": { + "from": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Source URL" + } + }, + "to": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Destination URL" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListHostingWebsiteRedirectsV1Response": { + "type": "structure", + "members": { + "data": { + "target": "com.hostinger.api#HostingV1RedirectsRedirectCollection" + }, + "meta": { + "target": "com.hostinger.api#CommonSchemaPaginationMetaSchema" + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListHostingWebsiteRedirectsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListHostingWebsiteRedirectsV1Request" + }, + "output": { + "target": "com.hostinger.api#ListHostingWebsiteRedirectsV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/hosting/v1/accounts/{username}/websites/{domain}/redirects", + "code": 200 + }, + "smithy.api#documentation": "List website redirects\n\nReturns a paginated list of redirects configured for the selected website." + } + }, + "com.hostinger.api#CreateHostingWebsiteRedirectV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + }, + "from": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Source URL on the selected website", + "smithy.api#required": {} + } + }, + "to": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Destination URL or IP address", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#CreateHostingWebsiteRedirectV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#CreateHostingWebsiteRedirectV1Request" + }, + "output": { + "target": "com.hostinger.api#HostingV1RedirectsRedirectResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/hosting/v1/accounts/{username}/websites/{domain}/redirects", + "code": 200 + }, + "smithy.api#documentation": "Create website redirect\n\nCreates a redirect from a URL on the selected website to another URL or IP address." + } + }, + "com.hostinger.api#DeleteHostingWebsiteRedirectV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + }, + "from": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpQuery": "from", + "smithy.api#required": {}, + "smithy.api#documentation": "Source URL returned by the list redirects endpoint." + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DeleteHostingWebsiteRedirectV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#DeleteHostingWebsiteRedirectV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "DELETE", + "uri": "/api/hosting/v1/accounts/{username}/websites/{domain}/redirects", + "code": 200 + }, + "smithy.api#documentation": "Delete website redirect\n\nPermanently deletes the redirect identified by its source URL.\n\nPass the `from` value exactly as returned by the list redirects endpoint." + } + }, + "com.hostinger.api#ListHostingWebsitesV1RequestWebsiteTypesItem": { + "type": "enum", + "members": { + "WORDPRESS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "wordpress" + } + }, + "BUILDER": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "builder" + } + }, + "HORIZONS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "horizons" + } + }, + "NODEJS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "nodejs" + } + }, + "OTHER": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "other" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListHostingWebsitesV1RequestWebsiteTypesList": { + "type": "list", + "member": { + "target": "com.hostinger.api#ListHostingWebsitesV1RequestWebsiteTypesItem" + }, + "traits": {} + }, + "com.hostinger.api#ListHostingWebsitesV1Request": { + "type": "structure", + "members": { + "page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "page", + "smithy.api#documentation": "Page number" + } + }, + "per_page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "per_page", + "smithy.api#documentation": "Number of items per page" + } + }, + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpQuery": "username", + "smithy.api#documentation": "Filter by specific username" + } + }, + "order_id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "order_id", + "smithy.api#documentation": "Order ID" + } + }, + "is_enabled": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#httpQuery": "is_enabled", + "smithy.api#documentation": "Filter by enabled status" + } + }, + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpQuery": "domain", + "smithy.api#documentation": "Filter by domain name (case-insensitive substring match)" + } + }, + "website_types": { + "target": "com.hostinger.api#ListHostingWebsitesV1RequestWebsiteTypesList", + "traits": { + "smithy.api#httpQuery": "website_types", + "smithy.api#documentation": "Filter by detected website type, e.g. wordpress,nodejs. Accepts a comma-separated list." + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#HostingV1WebsitesWebsiteCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#HostingV1WebsitesWebsiteResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`Hosting.V1.Websites.WebsiteResource`](#model/hostingv1websiteswebsiteresource)" + } + }, + "com.hostinger.api#HostingV1WebsitesWebsiteResource": { + "type": "structure", + "members": { + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Website domain. Null for U4S websites with no domain attached.", + "com.distilled.openapi#nullable": {} + } + }, + "vhost_type": { + "target": "com.hostinger.api#HostingV1WebsitesWebsiteResourceVhostType", + "traits": { + "smithy.api#documentation": "Virtual host type. Only present for CloudLinux websites.", + "com.distilled.openapi#nullable": {} + } + }, + "is_enabled": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether website is enabled" + } + }, + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Username. Not applicable for U4S websites.", + "com.distilled.openapi#nullable": {} + } + }, + "client_id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Client ID" + } + }, + "order_id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Order ID" + } + }, + "created_at": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Creation date" + } + }, + "root_directory": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Root directory path. Only present for CloudLinux websites.", + "com.distilled.openapi#nullable": {} + } + }, + "parent_domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Parent domain", + "com.distilled.openapi#nullable": {} + } + }, + "website_type": { + "target": "com.hostinger.api#HostingV1WebsitesWebsiteResourceWebsiteType", + "traits": { + "smithy.api#documentation": "Type of website detected on the underlying platform." + } + }, + "horizons_uuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Horizons UUID. Only present for horizons websites.", + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#HostingV1WebsitesWebsiteResourceVhostType": { + "type": "enum", + "members": { + "MAIN": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "main" + } + }, + "ADDON": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "addon" + } + }, + "PARKED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "parked" + } + }, + "SUBDOMAIN": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "subdomain" + } + } + }, + "traits": { + "smithy.api#documentation": "Virtual host type. Only present for CloudLinux websites." + } + }, + "com.hostinger.api#HostingV1WebsitesWebsiteResourceWebsiteType": { + "type": "enum", + "members": { + "WORDPRESS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "wordpress" + } + }, + "BUILDER": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "builder" + } + }, + "HORIZONS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "horizons" + } + }, + "NODEJS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "nodejs" + } + }, + "OTHER": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "other" + } + } + }, + "traits": { + "smithy.api#documentation": "Type of website detected on the underlying platform." + } + }, + "com.hostinger.api#ListHostingWebsitesV1Response": { + "type": "structure", + "members": { + "data": { + "target": "com.hostinger.api#HostingV1WebsitesWebsiteCollection" + }, + "meta": { + "target": "com.hostinger.api#CommonSchemaPaginationMetaSchema" + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListHostingWebsitesV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListHostingWebsitesV1Request" + }, + "output": { + "target": "com.hostinger.api#ListHostingWebsitesV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/hosting/v1/websites", + "code": 200 + }, + "smithy.api#documentation": "List websites\n\nRetrieve a paginated list of websites (CloudLinux, Builder, and Horizons) accessible to the\nauthenticated client.\n\nThis endpoint returns websites from your hosting accounts as well as\nwebsites from other client hosting accounts that have shared access\nwith you.\n\nEach website includes a `website_type` field describing the type of\nwebsite detected on the underlying platform (`wordpress`, `builder`,\n`horizons`, `nodejs`, or `other`). Some fields, such as\n`vhost_type`, `username`, and `root_directory`, only apply to\nCloudLinux websites and are null for other platforms.\n\nUse `website_types` to list only websites of a given detected type, e.g. only\nWordPress websites (`website_types=wordpress`) or only Node.js websites\n(`website_types=nodejs`). Combine with the other available query parameters to\nfilter by username, order ID, enabled status, or domain name for more targeted\nresults." + } + }, + "com.hostinger.api#CreateHostingWebsiteV1Request": { + "type": "structure", + "members": { + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Domain name for the website. Cannot start with \"www.\"", + "smithy.api#required": {} + } + }, + "order_id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "ID of the associated order", + "smithy.api#required": {} + } + }, + "datacenter_code": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Datacenter code. This parameter is required when creating the first website on a new hosting plan.", + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#CreateHostingWebsiteV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#CreateHostingWebsiteV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/hosting/v1/websites", + "code": 200 + }, + "smithy.api#documentation": "Create website\n\nCreate a new website for the authenticated client.\n\nProvide the domain name and associated order ID to create a new website.\nThe datacenter_code parameter is required when creating the first website\non a new hosting plan - this will set up and configure new hosting account\nin the selected datacenter.\n\nSubsequent websites will be hosted on the same datacenter automatically.\n\nWebsite creation takes up to a few minutes to complete. Check the\nwebsites list endpoint to see when your new website becomes available." + } + }, + "com.hostinger.api#HostingDeployStaticSiteArchiveV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + }, + "archive_path": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Relative path to the archive file from website root directory", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#HostingDeployStaticSiteArchiveV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#HostingDeployStaticSiteArchiveV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/hosting/v1/accounts/{username}/websites/{domain}/deploy", + "code": 200 + }, + "smithy.api#documentation": "Deploy static site archive\n\nDeploy a static application from an archive file.\n\nWARNING: this overwrites the website's existing contents and cannot be undone —\nverify this is intended before calling this endpoint.\n\nThis endpoint allows you to deploy a static application from an archive\nfile that has been uploaded to the website's directory.\n\nThis only works for static sites (pre-built HTML/CSS/JS with no build step). For\nNode.js applications, use `Create NodeJS build from archive` instead, or\n`Start Node.js build` if the archive is already uploaded. For WordPress sites,\nuse `Import WordPress website`." + } + }, + "com.hostinger.api#DeleteHostingWebsiteV1Request": { + "type": "structure", + "members": { + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DeleteHostingWebsiteV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#DeleteHostingWebsiteV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "DELETE", + "uri": "/api/hosting/v1/websites/{domain}", + "code": 200 + }, + "smithy.api#documentation": "Delete website\n\nThis endpoint permanently removes a website and all of its data. This action\ncannot be undone. Before calling it, make sure the user understands the\nconsequences and explicitly confirms that they want to proceed.\n\nAll website files, databases and related configuration will be removed.\nThe hosting plan itself is kept, so a new website can be created on it afterwards.\n\nSupported websites: main and addon domain websites on web hosting plans, and\nWebsite Builder websites. Parked domains and subdomains cannot be deleted with\nthis endpoint. The domain must be the exact website domain, not a preview\ndomain or an alias.\n\nReturns 404 when the domain does not exist or does not belong to the\nauthenticated client.\n\nWebsite removal is processed asynchronously and can take a few minutes to\ncomplete. The response returns before the removal finishes." + } + }, + "com.hostinger.api#CreateMailAliasV1Request": { + "type": "structure", + "members": { + "mailboxId": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Mailbox resource ID" + } + }, + "local_part": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Local part of the alias address (the part before the @). The domain is taken from the mailbox. Case-insensitive and stored lowercase; must start and end with a letter or digit; single dots, underscores and hyphens are allowed in between.", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#MailV1AliasesAliasResource": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Unique alias identifier" + } + }, + "address": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Email address of the alias" + } + }, + "mailbox": { + "target": "com.hostinger.api#MailV1AliasesAliasMailboxResource" + }, + "is_active": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether the alias is active and not suspended" + } + }, + "created_at": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "updated_at": { + "target": "smithy.api#String" + } + }, + "traits": {} + }, + "com.hostinger.api#MailV1AliasesAliasMailboxResource": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Mailbox resource ID" + } + }, + "address": { + "target": "smithy.api#String" + } + }, + "traits": {} + }, + "com.hostinger.api#CreateMailAliasV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#CreateMailAliasV1Request" + }, + "output": { + "target": "com.hostinger.api#MailV1AliasesAliasResource" + }, + "errors": [ + { + "target": "com.hostinger.api#NotFound" + }, + { + "target": "com.hostinger.api#Conflict" + }, + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/mail/v1/mailboxes/{mailboxId}/aliases", + "code": 200 + }, + "smithy.api#documentation": "Create alias\n\nCreate an alias for the given mailbox. The alias address is formed\nfrom the given local part and the domain of the mailbox. Messages\nsent to the alias are delivered to the mailbox." + } + }, + "com.hostinger.api#DeleteMailAliasV1Request": { + "type": "structure", + "members": { + "aliasId": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Alias resource ID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DeleteMailAliasV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#DeleteMailAliasV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#NotFound" + }, + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "DELETE", + "uri": "/api/mail/v1/aliases/{aliasId}", + "code": 200 + }, + "smithy.api#documentation": "Delete alias\n\nDelete an alias. Messages sent to the alias address are no longer\ndelivered to the mailbox." + } + }, + "com.hostinger.api#ListMailAliasesV1Request": { + "type": "structure", + "members": { + "orderId": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Order resource ID" + } + }, + "page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "page", + "smithy.api#documentation": "Page number" + } + }, + "per_page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "per_page", + "smithy.api#documentation": "Number of items per page" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#MailV1AliasesAliasCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#MailV1AliasesAliasResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`Mail.V1.Aliases.AliasResource`](#model/mailv1aliasesaliasresource)" + } + }, + "com.hostinger.api#ListMailAliasesV1Response": { + "type": "structure", + "members": { + "data": { + "target": "com.hostinger.api#MailV1AliasesAliasCollection" + }, + "meta": { + "target": "com.hostinger.api#CommonSchemaPaginationMetaSchema" + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListMailAliasesV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListMailAliasesV1Request" + }, + "output": { + "target": "com.hostinger.api#ListMailAliasesV1Response" + }, + "errors": [ + { + "target": "com.hostinger.api#NotFound" + }, + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/mail/v1/orders/{orderId}/aliases", + "code": 200 + }, + "smithy.api#documentation": "List aliases\n\nRetrieve a paginated list of aliases across all mailboxes of a mail\norder." + } + }, + "com.hostinger.api#CreateMailAPITokenV1RequestScopeMailboxIdsList": { + "type": "list", + "member": { + "target": "smithy.api#String" + }, + "traits": { + "smithy.api#documentation": "Required when `has_all_mailboxes` is false. Mailbox resource IDs of this order." + } + }, + "com.hostinger.api#CreateMailAPITokenV1RequestScope": { + "type": "structure", + "members": { + "has_all_mailboxes": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Grant access to all current and future mailboxes of the order", + "smithy.api#required": {} + } + }, + "mailbox_ids": { + "target": "com.hostinger.api#CreateMailAPITokenV1RequestScopeMailboxIdsList", + "traits": { + "smithy.api#documentation": "Required when `has_all_mailboxes` is false. Mailbox resource IDs of this order." + } + } + }, + "traits": { + "smithy.api#documentation": "Mailbox scope this token can access" + } + }, + "com.hostinger.api#CreateMailAPITokenV1Request": { + "type": "structure", + "members": { + "orderId": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Order resource ID" + } + }, + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Human-readable label for this token", + "smithy.api#required": {} + } + }, + "scope": { + "target": "com.hostinger.api#CreateMailAPITokenV1RequestScope", + "traits": { + "smithy.api#documentation": "Mailbox scope this token can access", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#MailV1ApiTokensApiTokenCreatedResource": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Unique API token identifier" + } + }, + "token": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Plaintext API token, returned only in this response. Grants access to the [Hostinger Email API](https://api.mail.hostinger.com/) for mailbox provisioning and management." + } + }, + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Human-readable label for this token", + "com.distilled.openapi#nullable": {} + } + }, + "scope": { + "target": "com.hostinger.api#MailV1ApiTokensApiTokenScopeResource" + }, + "created_at": { + "target": "smithy.api#String" + }, + "type": { + "target": "com.hostinger.api#MailV1ApiTokensApiTokenCreatedResourceType" + } + }, + "traits": {} + }, + "com.hostinger.api#MailV1ApiTokensApiTokenScopeResource": { + "type": "structure", + "members": { + "has_all_mailboxes": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether the token covers all current and future mailboxes of the order" + } + }, + "mailboxes": { + "target": "com.hostinger.api#MailV1ApiTokensApiTokenScopeResourceMailboxesList", + "traits": { + "smithy.api#documentation": "Mailboxes this token grants access to. Empty when `has_all_mailboxes` is true." + } + } + }, + "traits": {} + }, + "com.hostinger.api#MailV1ApiTokensApiTokenMailboxResource": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Mailbox resource ID" + } + }, + "address": { + "target": "smithy.api#String" + } + }, + "traits": {} + }, + "com.hostinger.api#MailV1ApiTokensApiTokenScopeResourceMailboxesList": { + "type": "list", + "member": { + "target": "com.hostinger.api#MailV1ApiTokensApiTokenMailboxResource" + }, + "traits": { + "smithy.api#documentation": "Mailboxes this token grants access to. Empty when `has_all_mailboxes` is true." + } + }, + "com.hostinger.api#MailV1ApiTokensApiTokenCreatedResourceType": { + "type": "enum", + "members": { + "API_TOKEN": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "api_token" + } + }, + "OAUTH": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "oauth" + } + } + }, + "traits": {} + }, + "com.hostinger.api#CreateMailAPITokenV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#CreateMailAPITokenV1Request" + }, + "output": { + "target": "com.hostinger.api#MailV1ApiTokensApiTokenCreatedResource" + }, + "errors": [ + { + "target": "com.hostinger.api#NotFound" + }, + { + "target": "com.hostinger.api#Conflict" + }, + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/mail/v1/orders/{orderId}/api-tokens", + "code": 200 + }, + "smithy.api#documentation": "Create API token\n\nCreate an API token for the given mail order. The token grants access\nto the [Hostinger Email API](https://api.mail.hostinger.com/), where\nyou can provision and manage the mailboxes it is scoped to.\n\nThe plaintext token is returned only in this response, never again.\nA maximum of 10 tokens can exist per order. Use\n`scope.has_all_mailboxes` to cover all current and future mailboxes,\nor list specific mailboxes in `scope.mailbox_ids`." + } + }, + "com.hostinger.api#RevokeMailAPITokenV1Request": { + "type": "structure", + "members": { + "tokenId": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "API token ID (returned when the token was created)" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#RevokeMailAPITokenV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#RevokeMailAPITokenV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#NotFound" + }, + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "DELETE", + "uri": "/api/mail/v1/api-tokens/{tokenId}", + "code": 200 + }, + "smithy.api#documentation": "Revoke API token\n\nRevoke an API token. The token immediately loses access to the\n[Hostinger Email API](https://api.mail.hostinger.com/). This action\ncannot be undone." + } + }, + "com.hostinger.api#ListMailAPITokensV1Request": { + "type": "structure", + "members": { + "order_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpQuery": "order_id", + "smithy.api#documentation": "Filter tokens by order resource ID. Single value or comma-separated list." + } + }, + "page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "page", + "smithy.api#documentation": "Page number" + } + }, + "per_page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "per_page", + "smithy.api#documentation": "Number of items per page" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#MailV1ApiTokensApiTokenCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#MailV1ApiTokensApiTokenResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`Mail.V1.ApiTokens.ApiTokenResource`](#model/mailv1apitokensapitokenresource)" + } + }, + "com.hostinger.api#MailV1ApiTokensApiTokenResource": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Unique API token identifier" + } + }, + "order_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Resource ID of the owning mail order", + "com.distilled.openapi#nullable": {} + } + }, + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Human-readable label for this token", + "com.distilled.openapi#nullable": {} + } + }, + "scope": { + "target": "com.hostinger.api#MailV1ApiTokensApiTokenScopeResource" + }, + "created_at": { + "target": "smithy.api#String" + }, + "last_used_at": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Last successful authentication using this token", + "com.distilled.openapi#nullable": {} + } + }, + "type": { + "target": "com.hostinger.api#MailV1ApiTokensApiTokenResourceType" + } + }, + "traits": {} + }, + "com.hostinger.api#MailV1ApiTokensApiTokenResourceType": { + "type": "enum", + "members": { + "API_TOKEN": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "api_token" + } + }, + "OAUTH": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "oauth" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListMailAPITokensV1Response": { + "type": "structure", + "members": { + "data": { + "target": "com.hostinger.api#MailV1ApiTokensApiTokenCollection" + }, + "meta": { + "target": "com.hostinger.api#CommonSchemaPaginationMetaSchema" + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListMailAPITokensV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListMailAPITokensV1Request" + }, + "output": { + "target": "com.hostinger.api#ListMailAPITokensV1Response" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/mail/v1/api-tokens", + "code": 200 + }, + "smithy.api#documentation": "List API tokens\n\nRetrieve a paginated list of\n[Hostinger Email API](https://api.mail.hostinger.com/) tokens across\nall your mail orders, optionally filtered by order. Plaintext tokens\nare never included; they are returned only when a token is created." + } + }, + "com.hostinger.api#CreateMailAutoreplyV1Request": { + "type": "structure", + "members": { + "mailboxId": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Mailbox resource ID" + } + }, + "subject": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Subject of the automatic reply", + "smithy.api#required": {} + } + }, + "body": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Body of the automatic reply", + "smithy.api#required": {} + } + }, + "display_name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Sender display name used for the reply", + "com.distilled.openapi#nullable": {} + } + }, + "starts_at": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "When the autoreply becomes active. Defaults to now.", + "com.distilled.openapi#nullable": {} + } + }, + "ends_at": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "When the autoreply stops. Omit for an indefinite autoreply.", + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#MailV1AutorepliesAutoreplyResource": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Unique autoreply identifier" + } + }, + "mailbox": { + "target": "com.hostinger.api#MailV1AutorepliesAutoreplyMailboxResource" + }, + "subject": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Subject of the automatic reply" + } + }, + "body": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Body of the automatic reply" + } + }, + "display_name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Sender display name used for the reply", + "com.distilled.openapi#nullable": {} + } + }, + "starts_at": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "When the autoreply becomes active" + } + }, + "ends_at": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "When the autoreply stops", + "com.distilled.openapi#nullable": {} + } + }, + "created_at": { + "target": "smithy.api#String" + }, + "updated_at": { + "target": "smithy.api#String" + } + }, + "traits": {} + }, + "com.hostinger.api#MailV1AutorepliesAutoreplyMailboxResource": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Mailbox resource ID" + } + }, + "address": { + "target": "smithy.api#String" + } + }, + "traits": {} + }, + "com.hostinger.api#CreateMailAutoreplyV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#CreateMailAutoreplyV1Request" + }, + "output": { + "target": "com.hostinger.api#MailV1AutorepliesAutoreplyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#NotFound" + }, + { + "target": "com.hostinger.api#Conflict" + }, + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/mail/v1/mailboxes/{mailboxId}/autoreplies", + "code": 200 + }, + "smithy.api#documentation": "Create autoreply\n\nCreate an automatic reply for the given mailbox. A mailbox can have\nonly one autoreply. Omit `starts_at` to activate the autoreply\nimmediately and omit `ends_at` to keep it active indefinitely." + } + }, + "com.hostinger.api#UpdateMailAutoreplyV1Request": { + "type": "structure", + "members": { + "autoreplyId": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Autoreply resource ID" + } + }, + "subject": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Subject of the automatic reply", + "smithy.api#required": {} + } + }, + "body": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Body of the automatic reply", + "smithy.api#required": {} + } + }, + "display_name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Sender display name used for the reply", + "com.distilled.openapi#nullable": {} + } + }, + "starts_at": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "When the autoreply becomes active. Defaults to now.", + "com.distilled.openapi#nullable": {} + } + }, + "ends_at": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "When the autoreply stops. Omit for an indefinite autoreply.", + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#UpdateMailAutoreplyV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#UpdateMailAutoreplyV1Request" + }, + "output": { + "target": "com.hostinger.api#MailV1AutorepliesAutoreplyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#NotFound" + }, + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "PUT", + "uri": "/api/mail/v1/autoreplies/{autoreplyId}", + "code": 200 + }, + "smithy.api#documentation": "Update autoreply\n\nReplace the autoreply with the given content and schedule. Omitted\noptional fields are cleared: omit `starts_at` to activate the\nautoreply immediately and omit `ends_at` to keep it active\nindefinitely." + } + }, + "com.hostinger.api#DeleteMailAutoreplyV1Request": { + "type": "structure", + "members": { + "autoreplyId": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Autoreply resource ID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DeleteMailAutoreplyV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#DeleteMailAutoreplyV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#NotFound" + }, + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "DELETE", + "uri": "/api/mail/v1/autoreplies/{autoreplyId}", + "code": 200 + }, + "smithy.api#documentation": "Delete autoreply\n\nDelete the autoreply of a mailbox. The mailbox stops sending\nautomatic replies immediately." + } + }, + "com.hostinger.api#ListMailAutorepliesV1Request": { + "type": "structure", + "members": { + "orderId": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Order resource ID" + } + }, + "page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "page", + "smithy.api#documentation": "Page number" + } + }, + "per_page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "per_page", + "smithy.api#documentation": "Number of items per page" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#MailV1AutorepliesAutoreplyCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#MailV1AutorepliesAutoreplyResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`Mail.V1.Autoreplies.AutoreplyResource`](#model/mailv1autorepliesautoreplyresource)" + } + }, + "com.hostinger.api#ListMailAutorepliesV1Response": { + "type": "structure", + "members": { + "data": { + "target": "com.hostinger.api#MailV1AutorepliesAutoreplyCollection" + }, + "meta": { + "target": "com.hostinger.api#CommonSchemaPaginationMetaSchema" + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListMailAutorepliesV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListMailAutorepliesV1Request" + }, + "output": { + "target": "com.hostinger.api#ListMailAutorepliesV1Response" + }, + "errors": [ + { + "target": "com.hostinger.api#NotFound" + }, + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/mail/v1/orders/{orderId}/autoreplies", + "code": 200 + }, + "smithy.api#documentation": "List autoreplies\n\nRetrieve a paginated list of autoreplies across all mailboxes of a\nmail order." + } + }, + "com.hostinger.api#CreateMailCatchAllV1Request": { + "type": "structure", + "members": { + "mailboxId": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Mailbox resource ID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#MailV1CatchallsCatchallResource": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Unique catch-all identifier" + } + }, + "mailbox": { + "target": "com.hostinger.api#MailV1CatchallsCatchallMailboxResource" + }, + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Domain whose unrouted messages are caught" + } + }, + "is_active": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether the catch-all is active" + } + }, + "is_confirmed": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether the mailbox address has confirmed the catch-all" + } + }, + "created_at": { + "target": "smithy.api#String" + }, + "updated_at": { + "target": "smithy.api#String" + } + }, + "traits": {} + }, + "com.hostinger.api#MailV1CatchallsCatchallMailboxResource": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Mailbox resource ID" + } + }, + "address": { + "target": "smithy.api#String" + } + }, + "traits": {} + }, + "com.hostinger.api#CreateMailCatchAllV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#CreateMailCatchAllV1Request" + }, + "output": { + "target": "com.hostinger.api#MailV1CatchallsCatchallResource" + }, + "errors": [ + { + "target": "com.hostinger.api#NotFound" + }, + { + "target": "com.hostinger.api#Conflict" + }, + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/mail/v1/mailboxes/{mailboxId}/catchalls", + "code": 200 + }, + "smithy.api#documentation": "Create catch-all\n\nCreate a catch-all that routes all messages sent to unknown addresses\nof the domain to the given mailbox. The mailbox address receives a\nconfirmation email and the catch-all becomes active only after it is\nconfirmed. A domain can have only one catch-all." + } + }, + "com.hostinger.api#DeleteMailCatchAllV1Request": { + "type": "structure", + "members": { + "catchallId": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Catch-all resource ID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DeleteMailCatchAllV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#DeleteMailCatchAllV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#NotFound" + }, + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "DELETE", + "uri": "/api/mail/v1/catchalls/{catchallId}", + "code": 200 + }, + "smithy.api#documentation": "Delete catch-all\n\nDelete a catch-all. Messages sent to unknown addresses of the domain\nare no longer routed to the mailbox." + } + }, + "com.hostinger.api#ListMailCatchAllsV1Request": { + "type": "structure", + "members": { + "orderId": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Order resource ID" + } + }, + "page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "page", + "smithy.api#documentation": "Page number" + } + }, + "per_page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "per_page", + "smithy.api#documentation": "Number of items per page" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#MailV1CatchallsCatchallCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#MailV1CatchallsCatchallResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`Mail.V1.Catchalls.CatchallResource`](#model/mailv1catchallscatchallresource)" + } + }, + "com.hostinger.api#ListMailCatchAllsV1Response": { + "type": "structure", + "members": { + "data": { + "target": "com.hostinger.api#MailV1CatchallsCatchallCollection" + }, + "meta": { + "target": "com.hostinger.api#CommonSchemaPaginationMetaSchema" + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListMailCatchAllsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListMailCatchAllsV1Request" + }, + "output": { + "target": "com.hostinger.api#ListMailCatchAllsV1Response" + }, + "errors": [ + { + "target": "com.hostinger.api#NotFound" + }, + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/mail/v1/orders/{orderId}/catchalls", + "code": 200 + }, + "smithy.api#documentation": "List catch-alls\n\nRetrieve a paginated list of catch-alls across all mailboxes of a\nmail order." + } + }, + "com.hostinger.api#ResendMailCatchAllConfirmationV1Request": { + "type": "structure", + "members": { + "catchallId": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Catch-all resource ID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#ResendMailCatchAllConfirmationV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ResendMailCatchAllConfirmationV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#NotFound" + }, + { + "target": "com.hostinger.api#Conflict" + }, + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/mail/v1/catchalls/{catchallId}/confirmation/resend", + "code": 200 + }, + "smithy.api#documentation": "Resend catch-all confirmation\n\nResend the confirmation email to the mailbox address of an\nunconfirmed catch-all." + } + }, + "com.hostinger.api#CreateMailForwarderV1Request": { + "type": "structure", + "members": { + "mailboxId": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Mailbox resource ID" + } + }, + "destination": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Email address the messages will be forwarded to", + "smithy.api#required": {} + } + }, + "is_keep_copy_enabled": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether to keep a copy of forwarded messages in the mailbox. Defaults to false." + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#MailV1ForwardersForwarderResource": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Unique forwarder identifier" + } + }, + "mailbox": { + "target": "com.hostinger.api#MailV1ForwardersForwarderMailboxResource" + }, + "destination": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Email address the messages are forwarded to" + } + }, + "is_keep_copy_enabled": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether a copy of forwarded messages is kept in the mailbox" + } + }, + "is_active": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether the forwarder is active" + } + }, + "is_confirmed": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether the destination address has confirmed the forwarding" + } + }, + "created_at": { + "target": "smithy.api#String" + }, + "updated_at": { + "target": "smithy.api#String" + } + }, + "traits": {} + }, + "com.hostinger.api#MailV1ForwardersForwarderMailboxResource": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Mailbox resource ID" + } + }, + "address": { + "target": "smithy.api#String" + } + }, + "traits": {} + }, + "com.hostinger.api#CreateMailForwarderV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#CreateMailForwarderV1Request" + }, + "output": { + "target": "com.hostinger.api#MailV1ForwardersForwarderResource" + }, + "errors": [ + { + "target": "com.hostinger.api#BadRequest" + }, + { + "target": "com.hostinger.api#NotFound" + }, + { + "target": "com.hostinger.api#Conflict" + }, + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/mail/v1/mailboxes/{mailboxId}/forwarders", + "code": 200 + }, + "smithy.api#documentation": "Create forwarder\n\nCreate a forwarder from the given mailbox to the destination address.\nThe destination receives a confirmation email and forwarding becomes\nactive only after it is confirmed." + } + }, + "com.hostinger.api#DeleteMailForwarderV1Request": { + "type": "structure", + "members": { + "forwarderId": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Forwarder resource ID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DeleteMailForwarderV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#DeleteMailForwarderV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#NotFound" + }, + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "DELETE", + "uri": "/api/mail/v1/forwarders/{forwarderId}", + "code": 200 + }, + "smithy.api#documentation": "Delete forwarder\n\nDelete a forwarder. The mailbox stops forwarding messages to the\ndestination address immediately." + } + }, + "com.hostinger.api#ListMailForwardersV1Request": { + "type": "structure", + "members": { + "orderId": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Order resource ID" + } + }, + "page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "page", + "smithy.api#documentation": "Page number" + } + }, + "per_page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "per_page", + "smithy.api#documentation": "Number of items per page" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#MailV1ForwardersForwarderCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#MailV1ForwardersForwarderResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`Mail.V1.Forwarders.ForwarderResource`](#model/mailv1forwardersforwarderresource)" + } + }, + "com.hostinger.api#ListMailForwardersV1Response": { + "type": "structure", + "members": { + "data": { + "target": "com.hostinger.api#MailV1ForwardersForwarderCollection" + }, + "meta": { + "target": "com.hostinger.api#CommonSchemaPaginationMetaSchema" + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListMailForwardersV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListMailForwardersV1Request" + }, + "output": { + "target": "com.hostinger.api#ListMailForwardersV1Response" + }, + "errors": [ + { + "target": "com.hostinger.api#NotFound" + }, + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/mail/v1/orders/{orderId}/forwarders", + "code": 200 + }, + "smithy.api#documentation": "List forwarders\n\nRetrieve a paginated list of forwarders across all mailboxes of a\nmail order." + } + }, + "com.hostinger.api#ResendMailForwarderConfirmationV1Request": { + "type": "structure", + "members": { + "forwarderId": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Forwarder resource ID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#ResendMailForwarderConfirmationV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ResendMailForwarderConfirmationV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#NotFound" + }, + { + "target": "com.hostinger.api#Conflict" + }, + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/mail/v1/forwarders/{forwarderId}/confirmation/resend", + "code": 200 + }, + "smithy.api#documentation": "Resend forwarder confirmation\n\nResend the confirmation email to the destination address of an\nunconfirmed forwarder." + } + }, + "com.hostinger.api#MailUpdateForwarderKeepCopySettingV1Request": { + "type": "structure", + "members": { + "forwarderId": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Forwarder resource ID" + } + }, + "is_keep_copy_enabled": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether to keep a copy of forwarded messages in the mailbox", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#MailUpdateForwarderKeepCopySettingV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#MailUpdateForwarderKeepCopySettingV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#NotFound" + }, + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "PATCH", + "uri": "/api/mail/v1/forwarders/{forwarderId}/keep-copy", + "code": 200 + }, + "smithy.api#documentation": "Update forwarder keep-copy setting\n\nEnable or disable keeping a copy of forwarded messages in the\nmailbox." + } + }, + "com.hostinger.api#ListMailAccessLogsV1RequestStatus": { + "type": "enum", + "members": { + "SUCCESSFUL": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "Successful" + } + }, + "FAILED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "Failed" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListMailAccessLogsV1RequestProtocol": { + "type": "enum", + "members": { + "IMAP": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "imap" + } + }, + "POP3": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "pop3" + } + }, + "SMTP": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "smtp" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListMailAccessLogsV1Request": { + "type": "structure", + "members": { + "orderId": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Order resource ID" + } + }, + "account": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpQuery": "account", + "smithy.api#documentation": "Filter log entries by a specific email account" + } + }, + "date": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpQuery": "date", + "smithy.api#documentation": "Exact date filter (YYYY-MM-DD). Takes precedence over `from_date`/`to_date` when both are given." + } + }, + "from_date": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpQuery": "from_date", + "smithy.api#documentation": "Date range start (RFC 3339)" + } + }, + "to_date": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpQuery": "to_date", + "smithy.api#documentation": "Date range end (RFC 3339)" + } + }, + "status": { + "target": "com.hostinger.api#ListMailAccessLogsV1RequestStatus", + "traits": { + "smithy.api#httpQuery": "status", + "smithy.api#documentation": "Filter log entries by status" + } + }, + "protocol": { + "target": "com.hostinger.api#ListMailAccessLogsV1RequestProtocol", + "traits": { + "smithy.api#httpQuery": "protocol", + "smithy.api#documentation": "Filter access log entries by protocol" + } + }, + "has_deletions": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#httpQuery": "has_deletions", + "smithy.api#documentation": "Filter access log entries by whether the session had deletions" + } + }, + "page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "page", + "smithy.api#documentation": "Page number" + } + }, + "per_page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "per_page", + "smithy.api#documentation": "Number of items per page" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#MailV1LogsAccessAccessLogCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#MailV1LogsAccessAccessLogResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`Mail.V1.Logs.Access.AccessLogResource`](#model/mailv1logsaccessaccesslogresource)" + } + }, + "com.hostinger.api#MailV1LogsAccessAccessLogResource": { + "type": "structure", + "members": { + "account": { + "target": "smithy.api#String" + }, + "domain": { + "target": "smithy.api#String" + }, + "session": { + "target": "smithy.api#String" + }, + "protocol": { + "target": "smithy.api#String" + }, + "remote_ip": { + "target": "smithy.api#String" + }, + "login_time": { + "target": "smithy.api#String" + }, + "in": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Bytes received" + } + }, + "out": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Bytes sent" + } + }, + "deleted": { + "target": "smithy.api#Integer" + }, + "expunged": { + "target": "smithy.api#Integer" + }, + "trashed": { + "target": "smithy.api#Integer" + }, + "logout_time": { + "target": "smithy.api#String" + }, + "timestamp": { + "target": "smithy.api#String" + }, + "app_name": { + "target": "smithy.api#String" + }, + "has_deletions": { + "target": "smithy.api#Boolean" + }, + "result": { + "target": "smithy.api#String" + }, + "status": { + "target": "smithy.api#String" + }, + "is_important": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "True when the session deleted, expunged or trashed messages" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListMailAccessLogsV1Response": { + "type": "structure", + "members": { + "data": { + "target": "com.hostinger.api#MailV1LogsAccessAccessLogCollection" + }, + "meta": { + "target": "com.hostinger.api#CommonSchemaPaginationMetaSchema" + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListMailAccessLogsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListMailAccessLogsV1Request" + }, + "output": { + "target": "com.hostinger.api#ListMailAccessLogsV1Response" + }, + "errors": [ + { + "target": "com.hostinger.api#NotFound" + }, + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/mail/v1/orders/{orderId}/logs/access", + "code": 200 + }, + "smithy.api#documentation": "List access logs\n\nRetrieve paginated access logs for the domain attached to the given\nmail order. Supports filtering by account, date range, protocol,\nstatus, and deletion flag. Results are sorted by timestamp descending." + } + }, + "com.hostinger.api#ListMailActionLogsV1RequestStatus": { + "type": "enum", + "members": { + "SUCCESSFUL": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "Successful" + } + }, + "FAILED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "Failed" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListMailActionLogsV1Request": { + "type": "structure", + "members": { + "orderId": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Order resource ID" + } + }, + "account": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpQuery": "account", + "smithy.api#documentation": "Filter log entries by a specific email account" + } + }, + "date": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpQuery": "date", + "smithy.api#documentation": "Exact date filter (YYYY-MM-DD). Takes precedence over `from_date`/`to_date` when both are given." + } + }, + "from_date": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpQuery": "from_date", + "smithy.api#documentation": "Date range start (RFC 3339)" + } + }, + "to_date": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpQuery": "to_date", + "smithy.api#documentation": "Date range end (RFC 3339)" + } + }, + "status": { + "target": "com.hostinger.api#ListMailActionLogsV1RequestStatus", + "traits": { + "smithy.api#httpQuery": "status", + "smithy.api#documentation": "Filter log entries by status" + } + }, + "page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "page", + "smithy.api#documentation": "Page number" + } + }, + "per_page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "per_page", + "smithy.api#documentation": "Number of items per page" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#MailV1LogsActionActionLogCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#MailV1LogsActionActionLogResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`Mail.V1.Logs.Action.ActionLogResource`](#model/mailv1logsactionactionlogresource)" + } + }, + "com.hostinger.api#MailV1LogsActionActionLogResource": { + "type": "structure", + "members": { + "action": { + "target": "smithy.api#String" + }, + "extra": { + "target": "smithy.api#Document", + "traits": { + "smithy.api#documentation": "Arbitrary contextual payload", + "com.distilled.openapi#nullable": {} + } + }, + "created_at": { + "target": "smithy.api#String" + }, + "ip_address": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Only populated for user-role logs" + } + }, + "role": { + "target": "smithy.api#String" + }, + "action_context": { + "target": "smithy.api#String" + }, + "response_status": { + "target": "com.hostinger.api#MailV1LogsActionActionLogResourceResponseStatus" + } + }, + "traits": {} + }, + "com.hostinger.api#MailV1LogsActionActionLogResourceResponseStatus": { + "type": "enum", + "members": { + "OK": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "OK" + } + }, + "FAIL": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "Fail" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListMailActionLogsV1Response": { + "type": "structure", + "members": { + "data": { + "target": "com.hostinger.api#MailV1LogsActionActionLogCollection" + }, + "meta": { + "target": "com.hostinger.api#CommonSchemaPaginationMetaSchema" + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListMailActionLogsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListMailActionLogsV1Request" + }, + "output": { + "target": "com.hostinger.api#ListMailActionLogsV1Response" + }, + "errors": [ + { + "target": "com.hostinger.api#NotFound" + }, + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/mail/v1/orders/{orderId}/logs/action", + "code": 200 + }, + "smithy.api#documentation": "List action logs\n\nRetrieve paginated account action logs (administrative and user\nactions) for the given mail order. Supports filtering by account,\ndate range, and status. Results are sorted by timestamp descending." + } + }, + "com.hostinger.api#ListMailInboundLogsV1RequestStatus": { + "type": "enum", + "members": { + "SUCCESSFUL": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "Successful" + } + }, + "FAILED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "Failed" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListMailInboundLogsV1Request": { + "type": "structure", + "members": { + "orderId": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Order resource ID" + } + }, + "account": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpQuery": "account", + "smithy.api#documentation": "Filter log entries by a specific email account" + } + }, + "date": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpQuery": "date", + "smithy.api#documentation": "Exact date filter (YYYY-MM-DD). Takes precedence over `from_date`/`to_date` when both are given." + } + }, + "from_date": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpQuery": "from_date", + "smithy.api#documentation": "Date range start (RFC 3339)" + } + }, + "to_date": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpQuery": "to_date", + "smithy.api#documentation": "Date range end (RFC 3339)" + } + }, + "status": { + "target": "com.hostinger.api#ListMailInboundLogsV1RequestStatus", + "traits": { + "smithy.api#httpQuery": "status", + "smithy.api#documentation": "Filter log entries by status" + } + }, + "sender": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpQuery": "sender", + "smithy.api#documentation": "Filter log entries by sender. Accepts a full email address or a domain." + } + }, + "recipient": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpQuery": "recipient", + "smithy.api#documentation": "Filter log entries by recipient. Accepts a full email address or a domain." + } + }, + "page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "page", + "smithy.api#documentation": "Page number" + } + }, + "per_page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "per_page", + "smithy.api#documentation": "Number of items per page" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#MailV1LogsCommonDeliveryLogCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#MailV1LogsCommonDeliveryLogResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`Mail.V1.Logs.Common.DeliveryLogResource`](#model/mailv1logscommondeliverylogresource)" + } + }, + "com.hostinger.api#MailV1LogsCommonDeliveryLogResource": { + "type": "structure", + "members": { + "account": { + "target": "smithy.api#String" + }, + "rcpt": { + "target": "smithy.api#String" + }, + "rcpts": { + "target": "smithy.api#String" + }, + "client_ip": { + "target": "smithy.api#String" + }, + "from": { + "target": "smithy.api#String" + }, + "nrcpt": { + "target": "smithy.api#String" + }, + "timestamp": { + "target": "smithy.api#String" + }, + "relay_events": { + "target": "com.hostinger.api#MailV1LogsCommonDeliveryLogResourceRelayEventsList" + }, + "status": { + "target": "smithy.api#String" + }, + "is_spam": { + "target": "smithy.api#Boolean" + } + }, + "traits": {} + }, + "com.hostinger.api#MailV1LogsCommonDeliveryLogRelayEventResource": { + "type": "structure", + "members": { + "address_to": { + "target": "smithy.api#String" + }, + "relay": { + "target": "smithy.api#String" + }, + "delay": { + "target": "smithy.api#String" + }, + "dsn": { + "target": "smithy.api#String" + }, + "status": { + "target": "smithy.api#String" + }, + "response": { + "target": "smithy.api#String" + }, + "time": { + "target": "smithy.api#String" + } + }, + "traits": {} + }, + "com.hostinger.api#MailV1LogsCommonDeliveryLogResourceRelayEventsList": { + "type": "list", + "member": { + "target": "com.hostinger.api#MailV1LogsCommonDeliveryLogRelayEventResource" + }, + "traits": {} + }, + "com.hostinger.api#ListMailInboundLogsV1Response": { + "type": "structure", + "members": { + "data": { + "target": "com.hostinger.api#MailV1LogsCommonDeliveryLogCollection" + }, + "meta": { + "target": "com.hostinger.api#CommonSchemaPaginationMetaSchema" + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListMailInboundLogsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListMailInboundLogsV1Request" + }, + "output": { + "target": "com.hostinger.api#ListMailInboundLogsV1Response" + }, + "errors": [ + { + "target": "com.hostinger.api#NotFound" + }, + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/mail/v1/orders/{orderId}/logs/inbound", + "code": 200 + }, + "smithy.api#documentation": "List inbound logs\n\nRetrieve paginated inbound (received mail) delivery logs for the\ndomain attached to the given mail order. Supports filtering by\naccount, date range, status, sender, and recipient. Results are\nsorted by timestamp descending." + } + }, + "com.hostinger.api#ListMailMailboxActionLogsV1RequestEvent": { + "type": "enum", + "members": { + "MESSAGENEW": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "MessageNew" + } + }, + "MESSAGEREAD": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "MessageRead" + } + }, + "MESSAGEAPPEND": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "MessageAppend" + } + }, + "MESSAGEEXPUNGE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "MessageExpunge" + } + }, + "MAILBOXCREATE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "MailboxCreate" + } + }, + "MAILBOXDELETE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "MailboxDelete" + } + }, + "MAILBOXRENAME": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "MailboxRename" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListMailMailboxActionLogsV1Request": { + "type": "structure", + "members": { + "orderId": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Order resource ID" + } + }, + "email": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpQuery": "email", + "smithy.api#required": {}, + "smithy.api#documentation": "Mailbox email address. Must belong to the order's domain." + } + }, + "date": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpQuery": "date", + "smithy.api#documentation": "Exact date filter (YYYY-MM-DD). Takes precedence over `from_date`/`to_date` when both are given." + } + }, + "from_date": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpQuery": "from_date", + "smithy.api#documentation": "Date range start (RFC 3339)" + } + }, + "to_date": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpQuery": "to_date", + "smithy.api#documentation": "Date range end (RFC 3339)" + } + }, + "event": { + "target": "com.hostinger.api#ListMailMailboxActionLogsV1RequestEvent", + "traits": { + "smithy.api#httpQuery": "event", + "smithy.api#documentation": "Filter mailbox action log entries by event type" + } + }, + "page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "page", + "smithy.api#documentation": "Page number" + } + }, + "per_page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "per_page", + "smithy.api#documentation": "Number of items per page" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#MailV1LogsMailboxActionsMailboxActionLogCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#MailV1LogsMailboxActionsMailboxActionLogResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`Mail.V1.Logs.MailboxActions.MailboxActionLogResource`](#model/mailv1logsmailboxactionsmailboxactionlogresource)" + } + }, + "com.hostinger.api#MailV1LogsMailboxActionsMailboxActionLogResource": { + "type": "structure", + "members": { + "folder": { + "target": "smithy.api#String" + }, + "time": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Unix timestamp of the event" + } + }, + "event": { + "target": "com.hostinger.api#MailV1LogsMailboxActionsMailboxActionLogResourceEvent" + }, + "mailbox": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Mailbox email address" + } + }, + "hostname": { + "target": "smithy.api#String" + }, + "timestamp": { + "target": "smithy.api#String" + } + }, + "traits": {} + }, + "com.hostinger.api#MailV1LogsMailboxActionsMailboxActionLogResourceEvent": { + "type": "enum", + "members": { + "MESSAGENEW": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "MessageNew" + } + }, + "MESSAGEREAD": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "MessageRead" + } + }, + "MESSAGEAPPEND": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "MessageAppend" + } + }, + "MESSAGEEXPUNGE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "MessageExpunge" + } + }, + "MAILBOXCREATE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "MailboxCreate" + } + }, + "MAILBOXDELETE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "MailboxDelete" + } + }, + "MAILBOXRENAME": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "MailboxRename" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListMailMailboxActionLogsV1Response": { + "type": "structure", + "members": { + "data": { + "target": "com.hostinger.api#MailV1LogsMailboxActionsMailboxActionLogCollection" + }, + "meta": { + "target": "com.hostinger.api#CommonSchemaPaginationMetaSchema" + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListMailMailboxActionLogsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListMailMailboxActionLogsV1Request" + }, + "output": { + "target": "com.hostinger.api#ListMailMailboxActionLogsV1Response" + }, + "errors": [ + { + "target": "com.hostinger.api#NotFound" + }, + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/mail/v1/orders/{orderId}/logs/mailbox-actions", + "code": 200 + }, + "smithy.api#documentation": "List mailbox action logs\n\nRetrieve paginated mailbox action logs (message and mailbox events)\nfor a mailbox in the given mail order. The mailbox email must belong\nto the order's domain. Supports date range and event type filters.\nResults are sorted by timestamp descending." + } + }, + "com.hostinger.api#ListMailOutboundLogsV1RequestStatus": { + "type": "enum", + "members": { + "SUCCESSFUL": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "Successful" + } + }, + "FAILED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "Failed" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListMailOutboundLogsV1Request": { + "type": "structure", + "members": { + "orderId": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Order resource ID" + } + }, + "account": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpQuery": "account", + "smithy.api#documentation": "Filter log entries by a specific email account" + } + }, + "date": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpQuery": "date", + "smithy.api#documentation": "Exact date filter (YYYY-MM-DD). Takes precedence over `from_date`/`to_date` when both are given." + } + }, + "from_date": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpQuery": "from_date", + "smithy.api#documentation": "Date range start (RFC 3339)" + } + }, + "to_date": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpQuery": "to_date", + "smithy.api#documentation": "Date range end (RFC 3339)" + } + }, + "status": { + "target": "com.hostinger.api#ListMailOutboundLogsV1RequestStatus", + "traits": { + "smithy.api#httpQuery": "status", + "smithy.api#documentation": "Filter log entries by status" + } + }, + "sender": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpQuery": "sender", + "smithy.api#documentation": "Filter log entries by sender. Accepts a full email address or a domain." + } + }, + "recipient": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpQuery": "recipient", + "smithy.api#documentation": "Filter log entries by recipient. Accepts a full email address or a domain." + } + }, + "page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "page", + "smithy.api#documentation": "Page number" + } + }, + "per_page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "per_page", + "smithy.api#documentation": "Number of items per page" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#ListMailOutboundLogsV1Response": { + "type": "structure", + "members": { + "data": { + "target": "com.hostinger.api#MailV1LogsCommonDeliveryLogCollection" + }, + "meta": { + "target": "com.hostinger.api#CommonSchemaPaginationMetaSchema" + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListMailOutboundLogsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListMailOutboundLogsV1Request" + }, + "output": { + "target": "com.hostinger.api#ListMailOutboundLogsV1Response" + }, + "errors": [ + { + "target": "com.hostinger.api#NotFound" + }, + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/mail/v1/orders/{orderId}/logs/outbound", + "code": 200 + }, + "smithy.api#documentation": "List outbound logs\n\nRetrieve paginated outbound (sent mail) delivery logs for the domain\nattached to the given mail order. Supports filtering by account, date\nrange, status, sender, and recipient. Results are sorted by timestamp\ndescending." + } + }, + "com.hostinger.api#ListMailMailboxesV1RequestSort": { + "type": "enum", + "members": { + "ADDRESS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "address" + } + }, + "ADDRESS_2": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "-address" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListMailMailboxesV1Request": { + "type": "structure", + "members": { + "orderId": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Order resource ID" + } + }, + "search": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpQuery": "search", + "smithy.api#documentation": "Filter mailboxes whose email address contains the given string" + } + }, + "sort": { + "target": "com.hostinger.api#ListMailMailboxesV1RequestSort", + "traits": { + "smithy.api#httpQuery": "sort", + "smithy.api#documentation": "Sort mailboxes by field. Prefix with `-` for descending order." + } + }, + "page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "page", + "smithy.api#documentation": "Page number" + } + }, + "per_page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "per_page", + "smithy.api#documentation": "Number of items per page" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#MailV1MailboxesMailboxCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#MailV1MailboxesMailboxResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`Mail.V1.Mailboxes.MailboxResource`](#model/mailv1mailboxesmailboxresource)" + } + }, + "com.hostinger.api#MailV1MailboxesMailboxResource": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Mailbox resource ID" + } + }, + "address": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Email address of the mailbox" + } + }, + "status": { + "target": "com.hostinger.api#MailV1MailboxesMailboxResourceStatus", + "traits": { + "smithy.api#documentation": "Mailbox status" + } + }, + "status_reason": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Reason the mailbox was suspended", + "com.distilled.openapi#nullable": {} + } + }, + "protocols": { + "target": "com.hostinger.api#MailV1MailboxesMailboxProtocolsResource" + }, + "counts": { + "target": "com.hostinger.api#MailV1MailboxesMailboxCountsResource" + }, + "is_catchall": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether the mailbox is the catch-all destination for its domain" + } + }, + "usage": { + "target": "com.hostinger.api#MailV1MailboxesMailboxUsageResource" + }, + "created_at": { + "target": "smithy.api#String" + }, + "updated_at": { + "target": "smithy.api#String" + } + }, + "traits": {} + }, + "com.hostinger.api#MailV1MailboxesMailboxResourceStatus": { + "type": "enum", + "members": { + "ACTIVE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "active" + } + }, + "SUSPENDED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "suspended" + } + } + }, + "traits": { + "smithy.api#documentation": "Mailbox status" + } + }, + "com.hostinger.api#MailV1MailboxesMailboxProtocolsResource": { + "type": "structure", + "members": { + "is_imap_enabled": { + "target": "smithy.api#Boolean" + }, + "is_pop3_enabled": { + "target": "smithy.api#Boolean" + }, + "is_smtp_in_enabled": { + "target": "smithy.api#Boolean" + }, + "is_smtp_out_enabled": { + "target": "smithy.api#Boolean" + } + }, + "traits": {} + }, + "com.hostinger.api#MailV1MailboxesMailboxCountsResource": { + "type": "structure", + "members": { + "forwarders": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Number of attached forwarders" + } + }, + "aliases": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Number of attached aliases" + } + }, + "autoreplies": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Number of attached auto-replies" + } + } + }, + "traits": {} + }, + "com.hostinger.api#MailV1MailboxesMailboxUsageResource": { + "type": "structure", + "members": { + "storage_used": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Storage used in kilobytes" + } + }, + "storage_quota": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Storage quota in kilobytes" + } + }, + "messages_used": { + "target": "smithy.api#Integer" + }, + "messages_quota": { + "target": "smithy.api#Integer" + }, + "synced_at": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "When the usage numbers were last synced; null if never synced", + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": { + "smithy.api#documentation": "Periodically synced usage numbers (may lag behind live values)" + } + }, + "com.hostinger.api#ListMailMailboxesV1Response": { + "type": "structure", + "members": { + "data": { + "target": "com.hostinger.api#MailV1MailboxesMailboxCollection" + }, + "meta": { + "target": "com.hostinger.api#CommonSchemaPaginationMetaSchema" + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListMailMailboxesV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListMailMailboxesV1Request" + }, + "output": { + "target": "com.hostinger.api#ListMailMailboxesV1Response" + }, + "errors": [ + { + "target": "com.hostinger.api#NotFound" + }, + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/mail/v1/orders/{orderId}/mailboxes", + "code": 200 + }, + "smithy.api#documentation": "List mailboxes\n\nRetrieve a paginated list of mailboxes belonging to a mail order.\n\nUse this endpoint to monitor mailboxes of your mail service, including\ntheir status, enabled protocols, attached resource counts, and\nperiodically synced usage numbers (usage may lag behind live values)." + } + }, + "com.hostinger.api#CreateMailMailboxV1Request": { + "type": "structure", + "members": { + "orderId": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Order resource ID" + } + }, + "local_part": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Local part of the mailbox address (the part before the @). The domain is taken from the order. Must start and end with a letter or digit; single dots, underscores and hyphens are allowed in between.", + "smithy.api#required": {} + } + }, + "password": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Mailbox password. Minimum 8 characters with uppercase, lowercase, number and special character.", + "smithy.api#required": {}, + "smithy.api#sensitive": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#CreateMailMailboxV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#CreateMailMailboxV1Request" + }, + "output": { + "target": "com.hostinger.api#MailV1MailboxesMailboxResource" + }, + "errors": [ + { + "target": "com.hostinger.api#NotFound" + }, + { + "target": "com.hostinger.api#Conflict" + }, + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/mail/v1/orders/{orderId}/mailboxes", + "code": 200 + }, + "smithy.api#documentation": "Create mailbox\n\nCreate a mailbox under the given mail order. The full email address is\ncomposed from the given local part and the domain of the order." + } + }, + "com.hostinger.api#DeleteMailMailboxV1Request": { + "type": "structure", + "members": { + "mailboxId": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Mailbox resource ID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DeleteMailMailboxV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#DeleteMailMailboxV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#NotFound" + }, + { + "target": "com.hostinger.api#Conflict" + } + ], + "traits": { + "smithy.api#http": { + "method": "DELETE", + "uri": "/api/mail/v1/mailboxes/{mailboxId}", + "code": 200 + }, + "smithy.api#documentation": "Delete mailbox\n\nDelete a mailbox. The mailbox is soft-deleted and stays restorable\nfor a limited period before it is permanently removed." + } + }, + "com.hostinger.api#MailChangeMailboxPasswordV1Request": { + "type": "structure", + "members": { + "mailboxId": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Mailbox resource ID" + } + }, + "password": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "New mailbox password. Minimum 8 characters with uppercase, lowercase, number and special character; must not be a commonly used password.", + "smithy.api#required": {}, + "smithy.api#sensitive": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#MailChangeMailboxPasswordV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#MailChangeMailboxPasswordV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#BadRequest" + }, + { + "target": "com.hostinger.api#NotFound" + }, + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "PATCH", + "uri": "/api/mail/v1/mailboxes/{mailboxId}/password", + "code": 200 + }, + "smithy.api#documentation": "Change mailbox password\n\nChange the password of a mailbox." + } + }, + "com.hostinger.api#ListMailOrdersV1RequestStatus": { + "type": "enum", + "members": { + "PENDING_SETUP": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "pending_setup" + } + }, + "ACTIVE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "active" + } + }, + "SUSPENDED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "suspended" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListMailOrdersV1RequestSort": { + "type": "enum", + "members": { + "CREATED_AT": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "created_at" + } + }, + "CREATED_AT_2": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "-created_at" + } + }, + "EXPIRES_AT": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "expires_at" + } + }, + "EXPIRES_AT_2": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "-expires_at" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListMailOrdersV1Request": { + "type": "structure", + "members": { + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpQuery": "domain", + "smithy.api#documentation": "Filter orders by domain name (exact match)" + } + }, + "status": { + "target": "com.hostinger.api#ListMailOrdersV1RequestStatus", + "traits": { + "smithy.api#httpQuery": "status", + "smithy.api#documentation": "Filter orders by status" + } + }, + "is_trial": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#httpQuery": "is_trial", + "smithy.api#documentation": "Filter orders by trial state" + } + }, + "sort": { + "target": "com.hostinger.api#ListMailOrdersV1RequestSort", + "traits": { + "smithy.api#httpQuery": "sort", + "smithy.api#documentation": "Sort orders by field. Prefix with `-` for descending order." + } + }, + "page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "page", + "smithy.api#documentation": "Page number" + } + }, + "per_page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "per_page", + "smithy.api#documentation": "Number of items per page" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#MailV1OrdersOrderCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#MailV1OrdersOrderResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`Mail.V1.Orders.OrderResource`](#model/mailv1ordersorderresource)" + } + }, + "com.hostinger.api#MailV1OrdersOrderResource": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Order resource ID" + } + }, + "status": { + "target": "com.hostinger.api#MailV1OrdersOrderResourceStatus", + "traits": { + "smithy.api#documentation": "Order status" + } + }, + "is_trial": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether the order is currently in a trial period" + } + }, + "seats": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Number of mailbox seats purchased with the order" + } + }, + "domain": { + "target": "com.hostinger.api#MailV1OrdersOrderDomainResource", + "traits": { + "smithy.api#documentation": "Domain the order is attached to", + "com.distilled.openapi#nullable": {} + } + }, + "plan": { + "target": "com.hostinger.api#MailV1OrdersOrderPlanResource", + "traits": { + "smithy.api#documentation": "Plan the order was purchased with", + "com.distilled.openapi#nullable": {} + } + }, + "has_pending_upgrade": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether an upgrade is currently pending for the order" + } + }, + "created_at": { + "target": "smithy.api#String" + }, + "expires_at": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#MailV1OrdersOrderResourceStatus": { + "type": "enum", + "members": { + "PENDING_SETUP": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "pending_setup" + } + }, + "ACTIVE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "active" + } + }, + "SUSPENDED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "suspended" + } + } + }, + "traits": { + "smithy.api#documentation": "Order status" + } + }, + "com.hostinger.api#MailV1OrdersOrderDomainResource": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Domain resource ID" + } + }, + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Domain name" + } + } + }, + "traits": {} + }, + "com.hostinger.api#MailV1OrdersOrderPlanResource": { + "type": "structure", + "members": { + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Plan name" + } + }, + "title": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Plan title" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListMailOrdersV1Response": { + "type": "structure", + "members": { + "data": { + "target": "com.hostinger.api#MailV1OrdersOrderCollection" + }, + "meta": { + "target": "com.hostinger.api#CommonSchemaPaginationMetaSchema" + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListMailOrdersV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListMailOrdersV1Request" + }, + "output": { + "target": "com.hostinger.api#ListMailOrdersV1Response" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/mail/v1/orders", + "code": 200 + }, + "smithy.api#documentation": "List orders\n\nRetrieve a paginated list of mail orders associated with your account.\n\nUse this endpoint to monitor your mail services, including their status,\nplan, attached domain, and expiration details." + } + }, + "com.hostinger.api#GetMailOrderPlanV1Request": { + "type": "structure", + "members": { + "orderId": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Order resource ID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#MailV1OrdersPlanResource": { + "type": "structure", + "members": { + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Machine name of the plan" + } + }, + "title": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Human-readable plan title" + } + }, + "domain": { + "target": "com.hostinger.api#MailV1OrdersPlanDomainResource" + }, + "mailbox": { + "target": "com.hostinger.api#MailV1OrdersPlanMailboxResource" + } + }, + "traits": {} + }, + "com.hostinger.api#MailV1OrdersPlanDomainResource": { + "type": "structure", + "members": { + "mailbox_quota": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Maximum number of mailboxes per domain" + } + }, + "forwarder_quota": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Maximum number of forwarders per domain" + } + }, + "alias_quota": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Maximum number of aliases per domain" + } + }, + "is_catchall_enabled": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether catch-all mailboxes are available" + } + }, + "is_imap_enabled": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether IMAP access is available" + } + }, + "is_pop3_enabled": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether POP3 access is available" + } + } + }, + "traits": {} + }, + "com.hostinger.api#MailV1OrdersPlanMailboxResource": { + "type": "structure", + "members": { + "storage_quota": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Storage quota per mailbox in megabytes" + } + }, + "messages_quota": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Maximum number of stored messages per mailbox" + } + }, + "forwarder_quota": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Maximum number of forwarders per mailbox" + } + }, + "alias_quota": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Maximum number of aliases per mailbox" + } + }, + "max_outbound_message_size": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Maximum outbound message size in bytes" + } + }, + "max_outbound_attachment_size": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Maximum outbound attachment size in bytes" + } + }, + "max_outbound_recipient_limit": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Maximum number of recipients per outbound message" + } + }, + "rate_limit_inbound": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Inbound message rate limit as `messages/seconds`" + } + }, + "rate_limit_outbound": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Outbound message rate limit as `messages/seconds`" + } + } + }, + "traits": {} + }, + "com.hostinger.api#GetMailOrderPlanV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#GetMailOrderPlanV1Request" + }, + "output": { + "target": "com.hostinger.api#MailV1OrdersPlanResource" + }, + "errors": [ + { + "target": "com.hostinger.api#NotFound" + } + ], + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/mail/v1/orders/{orderId}/plan", + "code": 200 + }, + "smithy.api#documentation": "Get order plan\n\nRetrieve the plan the given mail order was purchased with, including\ndomain-level and mailbox-level quotas, limits, and protocol\navailability." + } + }, + "com.hostinger.api#CreateMailWebhookV1RequestEventsItem": { + "type": "enum", + "members": { + "MESSAGE_RECEIVED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "message.received" + } + } + }, + "traits": {} + }, + "com.hostinger.api#CreateMailWebhookV1RequestEventsList": { + "type": "list", + "member": { + "target": "com.hostinger.api#CreateMailWebhookV1RequestEventsItem" + }, + "traits": { + "smithy.api#documentation": "Events that trigger this webhook" + } + }, + "com.hostinger.api#CreateMailWebhookV1RequestStatus": { + "type": "enum", + "members": { + "ACTIVE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "active" + } + }, + "DISABLED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "disabled" + } + }, + "PAUSED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "paused" + } + } + }, + "traits": { + "smithy.api#documentation": "Initial status of the webhook" + } + }, + "com.hostinger.api#CreateMailWebhookV1Request": { + "type": "structure", + "members": { + "mailboxId": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Mailbox resource ID" + } + }, + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Human-readable name for this webhook", + "smithy.api#required": {} + } + }, + "description": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Optional description of the webhook's purpose", + "com.distilled.openapi#nullable": {} + } + }, + "events": { + "target": "com.hostinger.api#CreateMailWebhookV1RequestEventsList", + "traits": { + "smithy.api#documentation": "Events that trigger this webhook", + "smithy.api#required": {} + } + }, + "status": { + "target": "com.hostinger.api#CreateMailWebhookV1RequestStatus", + "traits": { + "smithy.api#documentation": "Initial status of the webhook" + } + }, + "url": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Publicly reachable URL that receives the webhook POST requests", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#MailV1WebhooksWebhookCreatedResource": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Unique webhook identifier" + } + }, + "mailbox": { + "target": "com.hostinger.api#MailV1WebhooksWebhookMailboxResource" + }, + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Human-readable name for this webhook" + } + }, + "description": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Optional description of the webhook's purpose", + "com.distilled.openapi#nullable": {} + } + }, + "events": { + "target": "com.hostinger.api#MailV1WebhooksWebhookCreatedResourceEventsList", + "traits": { + "smithy.api#documentation": "Events that trigger this webhook" + } + }, + "status": { + "target": "com.hostinger.api#MailV1WebhooksWebhookCreatedResourceStatus", + "traits": { + "smithy.api#documentation": "Current status of the webhook" + } + }, + "url": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "URL that receives webhook POST requests" + } + }, + "secret": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "One-time webhook secret, returned only on creation. Sent as `Authorization: Bearer ` with every delivery.", + "smithy.api#sensitive": {} + } + }, + "created_at": { + "target": "smithy.api#String" + }, + "updated_at": { + "target": "smithy.api#String" + } + }, + "traits": {} + }, + "com.hostinger.api#MailV1WebhooksWebhookMailboxResource": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#String" + }, + "address": { + "target": "smithy.api#String" + } + }, + "traits": {} + }, + "com.hostinger.api#MailV1WebhooksWebhookCreatedResourceEventsItem": { + "type": "enum", + "members": { + "MESSAGE_RECEIVED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "message.received" + } + } + }, + "traits": {} + }, + "com.hostinger.api#MailV1WebhooksWebhookCreatedResourceEventsList": { + "type": "list", + "member": { + "target": "com.hostinger.api#MailV1WebhooksWebhookCreatedResourceEventsItem" + }, + "traits": { + "smithy.api#documentation": "Events that trigger this webhook" + } + }, + "com.hostinger.api#MailV1WebhooksWebhookCreatedResourceStatus": { + "type": "enum", + "members": { + "ACTIVE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "active" + } + }, + "DISABLED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "disabled" + } + }, + "PAUSED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "paused" + } + } + }, + "traits": { + "smithy.api#documentation": "Current status of the webhook" + } + }, + "com.hostinger.api#CreateMailWebhookV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#CreateMailWebhookV1Request" + }, + "output": { + "target": "com.hostinger.api#MailV1WebhooksWebhookCreatedResource" + }, + "errors": [ + { + "target": "com.hostinger.api#BadRequest" + }, + { + "target": "com.hostinger.api#NotFound" + }, + { + "target": "com.hostinger.api#Conflict" + }, + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/mail/v1/mailboxes/{mailboxId}/webhooks", + "code": 200 + }, + "smithy.api#documentation": "Create webhook\n\nCreate a webhook for the given mailbox. The generated secret is\nreturned only in this response and is sent as a bearer token with\nevery delivery." + } + }, + "com.hostinger.api#ListMailWebhookDeliveryLogsV1Request": { + "type": "structure", + "members": { + "orderId": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Order resource ID" + } + }, + "mailbox_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpQuery": "mailbox_id", + "smithy.api#documentation": "Filter by the mailbox resource ID the webhooks are attached to" + } + }, + "page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "page", + "smithy.api#documentation": "Page number" + } + }, + "per_page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "per_page", + "smithy.api#documentation": "Number of items per page" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#MailV1WebhooksWebhookDeliveryLogCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#MailV1WebhooksWebhookDeliveryLogResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`Mail.V1.Webhooks.WebhookDeliveryLogResource`](#model/mailv1webhookswebhookdeliverylogresource)" + } + }, + "com.hostinger.api#MailV1WebhooksWebhookDeliveryLogResource": { + "type": "structure", + "members": { + "created_at": { + "target": "smithy.api#String" + }, + "mailbox_address": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Email address of the mailbox this delivery is attached to" + } + }, + "webhook_url": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "URL that received the webhook POST request" + } + }, + "is_successful": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether the delivery was successful" + } + }, + "duration": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Webhook request duration in milliseconds" + } + }, + "retry_count": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Number of delivery attempts made" + } + }, + "max_retry_count": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Maximum number of delivery attempts allowed" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListMailWebhookDeliveryLogsV1Response": { + "type": "structure", + "members": { + "data": { + "target": "com.hostinger.api#MailV1WebhooksWebhookDeliveryLogCollection" + }, + "meta": { + "target": "com.hostinger.api#CommonSchemaPaginationMetaSchema" + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListMailWebhookDeliveryLogsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListMailWebhookDeliveryLogsV1Request" + }, + "output": { + "target": "com.hostinger.api#ListMailWebhookDeliveryLogsV1Response" + }, + "errors": [ + { + "target": "com.hostinger.api#NotFound" + }, + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/mail/v1/orders/{orderId}/webhooks/delivery-logs", + "code": 200 + }, + "smithy.api#documentation": "List webhook delivery logs\n\nRetrieve a paginated list of webhook delivery logs for the given mail\norder, including delivery outcome, duration, and retry counts.\nSupports filtering by mailbox." + } + }, + "com.hostinger.api#GetMailWebhookV1Request": { + "type": "structure", + "members": { + "webhookId": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Webhook ID (returned when the webhook was created)" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#MailV1WebhooksWebhookResource": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Unique webhook identifier" + } + }, + "mailbox": { + "target": "com.hostinger.api#MailV1WebhooksWebhookMailboxResource" + }, + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Human-readable name for this webhook" + } + }, + "description": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Optional description of the webhook's purpose", + "com.distilled.openapi#nullable": {} + } + }, + "events": { + "target": "com.hostinger.api#MailV1WebhooksWebhookResourceEventsList", + "traits": { + "smithy.api#documentation": "Events that trigger this webhook" + } + }, + "status": { + "target": "com.hostinger.api#MailV1WebhooksWebhookResourceStatus", + "traits": { + "smithy.api#documentation": "Current status of the webhook" + } + }, + "url": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "URL that receives webhook POST requests" + } + }, + "created_at": { + "target": "smithy.api#String" + }, + "updated_at": { + "target": "smithy.api#String" + } + }, + "traits": {} + }, + "com.hostinger.api#MailV1WebhooksWebhookResourceEventsItem": { + "type": "enum", + "members": { + "MESSAGE_RECEIVED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "message.received" + } + } + }, + "traits": {} + }, + "com.hostinger.api#MailV1WebhooksWebhookResourceEventsList": { + "type": "list", + "member": { + "target": "com.hostinger.api#MailV1WebhooksWebhookResourceEventsItem" + }, + "traits": { + "smithy.api#documentation": "Events that trigger this webhook" + } + }, + "com.hostinger.api#MailV1WebhooksWebhookResourceStatus": { + "type": "enum", + "members": { + "ACTIVE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "active" + } + }, + "DISABLED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "disabled" + } + }, + "PAUSED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "paused" + } + } + }, + "traits": { + "smithy.api#documentation": "Current status of the webhook" + } + }, + "com.hostinger.api#GetMailWebhookV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#GetMailWebhookV1Request" + }, + "output": { + "target": "com.hostinger.api#MailV1WebhooksWebhookResource" + }, + "errors": [ + { + "target": "com.hostinger.api#NotFound" + }, + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/mail/v1/webhooks/{webhookId}", + "code": 200 + }, + "smithy.api#documentation": "Get webhook\n\nRetrieve the details of a single webhook. The webhook secret is never\nincluded; it is returned only when a webhook is created or its secret\nis regenerated." + } + }, + "com.hostinger.api#UpdateMailWebhookV1RequestEventsItem": { + "type": "enum", + "members": { + "MESSAGE_RECEIVED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "message.received" + } + } + }, + "traits": {} + }, + "com.hostinger.api#UpdateMailWebhookV1RequestEventsList": { + "type": "list", + "member": { + "target": "com.hostinger.api#UpdateMailWebhookV1RequestEventsItem" + }, + "traits": { + "smithy.api#documentation": "Replaces the full list of subscribed events" + } + }, + "com.hostinger.api#UpdateMailWebhookV1RequestStatus": { + "type": "enum", + "members": { + "ACTIVE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "active" + } + }, + "DISABLED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "disabled" + } + }, + "PAUSED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "paused" + } + } + }, + "traits": { + "smithy.api#documentation": "New status for the webhook" + } + }, + "com.hostinger.api#UpdateMailWebhookV1Request": { + "type": "structure", + "members": { + "webhookId": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Webhook ID (returned when the webhook was created)" + } + }, + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "New human-readable name for the webhook" + } + }, + "description": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "New description, or null to clear it", + "com.distilled.openapi#nullable": {} + } + }, + "events": { + "target": "com.hostinger.api#UpdateMailWebhookV1RequestEventsList", + "traits": { + "smithy.api#documentation": "Replaces the full list of subscribed events" + } + }, + "status": { + "target": "com.hostinger.api#UpdateMailWebhookV1RequestStatus", + "traits": { + "smithy.api#documentation": "New status for the webhook" + } + }, + "url": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "New URL to deliver events to" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#UpdateMailWebhookV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#UpdateMailWebhookV1Request" + }, + "output": { + "target": "com.hostinger.api#MailV1WebhooksWebhookResource" + }, + "errors": [ + { + "target": "com.hostinger.api#BadRequest" + }, + { + "target": "com.hostinger.api#NotFound" + }, + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "PATCH", + "uri": "/api/mail/v1/webhooks/{webhookId}", + "code": 200 + }, + "smithy.api#documentation": "Update webhook\n\nPartially update a webhook. Only the fields included in the request\nbody are changed; omitted fields retain their current values. Pass\n`\"description\": null` to clear the description." + } + }, + "com.hostinger.api#DeleteMailWebhookV1Request": { + "type": "structure", + "members": { + "webhookId": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Webhook ID (returned when the webhook was created)" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DeleteMailWebhookV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#DeleteMailWebhookV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#NotFound" + }, + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "DELETE", + "uri": "/api/mail/v1/webhooks/{webhookId}", + "code": 200 + }, + "smithy.api#documentation": "Delete webhook\n\nPermanently delete a webhook. This action cannot be undone. After\ndeletion the URL no longer receives event notifications." + } + }, + "com.hostinger.api#ListMailWebhooksV1RequestStatus": { + "type": "enum", + "members": { + "ACTIVE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "active" + } + }, + "DISABLED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "disabled" + } + }, + "PAUSED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "paused" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListMailWebhooksV1Request": { + "type": "structure", + "members": { + "orderId": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Order resource ID" + } + }, + "mailbox_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpQuery": "mailbox_id", + "smithy.api#documentation": "Filter by the mailbox resource ID the webhooks are attached to" + } + }, + "status": { + "target": "com.hostinger.api#ListMailWebhooksV1RequestStatus", + "traits": { + "smithy.api#httpQuery": "status", + "smithy.api#documentation": "Filter webhooks by status" + } + }, + "page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "page", + "smithy.api#documentation": "Page number" + } + }, + "per_page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "per_page", + "smithy.api#documentation": "Number of items per page" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#MailV1WebhooksWebhookCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#MailV1WebhooksWebhookResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`Mail.V1.Webhooks.WebhookResource`](#model/mailv1webhookswebhookresource)" + } + }, + "com.hostinger.api#ListMailWebhooksV1Response": { + "type": "structure", + "members": { + "data": { + "target": "com.hostinger.api#MailV1WebhooksWebhookCollection" + }, + "meta": { + "target": "com.hostinger.api#CommonSchemaPaginationMetaSchema" + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListMailWebhooksV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListMailWebhooksV1Request" + }, + "output": { + "target": "com.hostinger.api#ListMailWebhooksV1Response" + }, + "errors": [ + { + "target": "com.hostinger.api#NotFound" + }, + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/mail/v1/orders/{orderId}/webhooks", + "code": 200 + }, + "smithy.api#documentation": "List webhooks\n\nRetrieve a paginated list of webhooks belonging to the given mail\norder. Supports filtering by mailbox and status. The webhook secret\nis never included; it is returned only when a webhook is created or\nits secret is regenerated." + } + }, + "com.hostinger.api#RegenerateMailWebhookSecretV1Request": { + "type": "structure", + "members": { + "webhookId": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Webhook ID (returned when the webhook was created)" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#MailV1WebhooksWebhookSecretResource": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Unique webhook identifier" + } + }, + "mailbox": { + "target": "com.hostinger.api#MailV1WebhooksWebhookMailboxResource" + }, + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Human-readable name for this webhook" + } + }, + "description": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Optional description of the webhook's purpose", + "com.distilled.openapi#nullable": {} + } + }, + "events": { + "target": "com.hostinger.api#MailV1WebhooksWebhookSecretResourceEventsList", + "traits": { + "smithy.api#documentation": "Events that trigger this webhook" + } + }, + "status": { + "target": "com.hostinger.api#MailV1WebhooksWebhookSecretResourceStatus", + "traits": { + "smithy.api#documentation": "Current status of the webhook" + } + }, + "url": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "URL that receives webhook POST requests" + } + }, + "secret": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "New webhook secret, sent as `Authorization: Bearer ` with every delivery. The previous secret is immediately invalidated and the new one is not returned again.", + "smithy.api#sensitive": {} + } + }, + "created_at": { + "target": "smithy.api#String" + }, + "updated_at": { + "target": "smithy.api#String" + } + }, + "traits": {} + }, + "com.hostinger.api#MailV1WebhooksWebhookSecretResourceEventsItem": { + "type": "enum", + "members": { + "MESSAGE_RECEIVED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "message.received" + } + } + }, + "traits": {} + }, + "com.hostinger.api#MailV1WebhooksWebhookSecretResourceEventsList": { + "type": "list", + "member": { + "target": "com.hostinger.api#MailV1WebhooksWebhookSecretResourceEventsItem" + }, + "traits": { + "smithy.api#documentation": "Events that trigger this webhook" + } + }, + "com.hostinger.api#MailV1WebhooksWebhookSecretResourceStatus": { + "type": "enum", + "members": { + "ACTIVE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "active" + } + }, + "DISABLED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "disabled" + } + }, + "PAUSED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "paused" + } + } + }, + "traits": { + "smithy.api#documentation": "Current status of the webhook" + } + }, + "com.hostinger.api#RegenerateMailWebhookSecretV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#RegenerateMailWebhookSecretV1Request" + }, + "output": { + "target": "com.hostinger.api#MailV1WebhooksWebhookSecretResource" + }, + "errors": [ + { + "target": "com.hostinger.api#NotFound" + }, + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/mail/v1/webhooks/{webhookId}/regenerate-secret", + "code": 200 + }, + "smithy.api#documentation": "Regenerate webhook secret\n\nRegenerate the secret of a webhook. The previous secret is\nimmediately invalidated. The new secret is returned only in this\nresponse and is sent as a bearer token with every delivery." + } + }, + "com.hostinger.api#TestMailWebhookV1Request": { + "type": "structure", + "members": { + "webhookId": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Webhook ID (returned when the webhook was created)" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#MailV1WebhooksWebhookTestResultResource": { + "type": "structure", + "members": { + "http_status": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "HTTP status code returned by the webhook endpoint" + } + }, + "is_successful": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether the test delivery was successful" + } + }, + "error": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Error message returned by the webhook endpoint in case of failure", + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#TestMailWebhookV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#TestMailWebhookV1Request" + }, + "output": { + "target": "com.hostinger.api#MailV1WebhooksWebhookTestResultResource" + }, + "errors": [ + { + "target": "com.hostinger.api#NotFound" + }, + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/mail/v1/webhooks/{webhookId}/test", + "code": 200 + }, + "smithy.api#documentation": "Test webhook\n\nSend a test delivery to the webhook URL and return the result. Test\nrequests are rate limited upstream." + } + }, + "com.hostinger.api#GetReachAutomationDetailsV1Request": { + "type": "structure", + "members": { + "profileUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Profile uuid parameter" + } + }, + "automationUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Automation uuid parameter" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#ReachV1AutomationsAutomationResource": { + "type": "structure", + "members": { + "uuid": { + "target": "smithy.api#String" + }, + "name": { + "target": "smithy.api#String" + }, + "status": { + "target": "com.hostinger.api#ReachV1AutomationsAutomationResourceStatus", + "traits": { + "smithy.api#documentation": "There is no `completed` status. Use `events.completed` to see how many contacts finished." + } + }, + "type": { + "target": "com.hostinger.api#ReachV1AutomationsAutomationResourceType", + "traits": { + "smithy.api#documentation": "What kind of workflow this is. `custom` automations are the ones built from scratch." + } + }, + "config": { + "target": "smithy.api#Document", + "traits": { + "smithy.api#documentation": "Trigger configuration of the automation. The shape depends on the type.", + "com.distilled.openapi#nullable": {} + } + }, + "events": { + "target": "com.hostinger.api#ReachV1AutomationsAutomationEventsResource" + }, + "created_at": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "updated_at": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#ReachV1AutomationsAutomationResourceStatus": { + "type": "enum", + "members": { + "ACTIVE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "active" + } + }, + "PAUSED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "paused" + } + }, + "DRAFT": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "draft" + } + } + }, + "traits": { + "smithy.api#documentation": "There is no `completed` status. Use `events.completed` to see how many contacts finished." + } + }, + "com.hostinger.api#ReachV1AutomationsAutomationResourceType": { + "type": "enum", + "members": { + "WELCOME": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "welcome" + } + }, + "WELCOME_SERIES": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "welcome_series" + } + }, + "PROMOTIONAL_SERIES": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "promotional_series" + } + }, + "TRUST_BUILDING_SERIES": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "trust_building_series" + } + }, + "ECOMMERCE_ABANDONED_CART": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "ecommerce_abandoned_cart" + } + }, + "ECOMMERCE_RECOMMEND_AFTER_PURCHASE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "ecommerce_recommend_after_purchase" + } + }, + "ECOMMERCE_POST_PURCHASE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "ecommerce_post_purchase" + } + }, + "ECOMMERCE_DISCOUNT_AFTER_PURCHASE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "ecommerce_discount_after_purchase" + } + }, + "RE_ENGAGEMENT_NON_OPENERS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "re_engagement_non_openers" + } + }, + "RE_ENGAGEMENT_NON_CLICKERS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "re_engagement_non_clickers" + } + }, + "FORM_SUBMITTED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "form_submitted" + } + }, + "CUSTOM": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "custom" + } + } + }, + "traits": { + "smithy.api#documentation": "What kind of workflow this is. `custom` automations are the ones built from scratch." + } + }, + "com.hostinger.api#ReachV1AutomationsAutomationEventsResource": { + "type": "structure", + "members": { + "started": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Contacts that ever entered the automation, including those that already left it." + } + }, + "in_progress": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Contacts currently moving through the automation, including those waiting on a delay step." + } + }, + "completed": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Contacts that reached the end of the workflow." + } + }, + "failed": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Contacts whose journey through the automation errored and stopped." + } + } + }, + "traits": { + "smithy.api#documentation": "Counts of contacts moving through the automation.\n\nThese are not email engagement metrics. Automations expose no sent, open or click counters -\nuse the campaign statistics endpoint for those." + } + }, + "com.hostinger.api#GetReachAutomationDetailsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#GetReachAutomationDetailsV1Request" + }, + "output": { + "target": "com.hostinger.api#ReachV1AutomationsAutomationResource" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/reach/v1/profiles/{profileUuid}/automations/{automationUuid}", + "code": 200 + }, + "smithy.api#documentation": "Get automation details\n\nGet a single automation with the counts of contacts that entered it, are moving through it,\nfinished it or failed on the way.\n\nThis describes the automation itself. To see the workflow it runs, use the steps endpoint." + } + }, + "com.hostinger.api#ListReachAutomationsV1RequestStatus": { + "type": "enum", + "members": { + "ACTIVE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "active" + } + }, + "PAUSED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "paused" + } + }, + "DRAFT": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "draft" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListReachAutomationsV1RequestSortDirection": { + "type": "enum", + "members": { + "ASC": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "asc" + } + }, + "DESC": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "desc" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListReachAutomationsV1Request": { + "type": "structure", + "members": { + "profileUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Profile uuid parameter" + } + }, + "status": { + "target": "com.hostinger.api#ListReachAutomationsV1RequestStatus", + "traits": { + "smithy.api#httpQuery": "status", + "smithy.api#documentation": "Filter automations by status.\n\nThere is no `completed` status. An automation that has finished for every contact still\nreports `active`." + } + }, + "sort_direction": { + "target": "com.hostinger.api#ListReachAutomationsV1RequestSortDirection", + "traits": { + "smithy.api#httpQuery": "sort_direction", + "smithy.api#documentation": "Order automations by creation date. Newest first unless set to `asc`." + } + }, + "page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "page", + "smithy.api#documentation": "Page number" + } + }, + "per_page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "per_page", + "smithy.api#documentation": "Number of items per page" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#ReachV1AutomationsAutomationCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#ReachV1AutomationsAutomationResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`Reach.V1.Automations.AutomationResource`](#model/reachv1automationsautomationresource)" + } + }, + "com.hostinger.api#ListReachAutomationsV1Response": { + "type": "structure", + "members": { + "data": { + "target": "com.hostinger.api#ReachV1AutomationsAutomationCollection" + }, + "meta": { + "target": "com.hostinger.api#CommonSchemaPaginationMetaSchema" + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListReachAutomationsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListReachAutomationsV1Request" + }, + "output": { + "target": "com.hostinger.api#ListReachAutomationsV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/reach/v1/profiles/{profileUuid}/automations", + "code": 200 + }, + "smithy.api#documentation": "List automations\n\nGet a paginated list of the automations in a profile.\n\nEvery automation comes with the counts of contacts that entered it, are moving through it,\nfinished it or failed on the way. Those counts describe the contact journey and are not\nemail engagement metrics - for opens, clicks and unsubscribes use the campaign statistics\nendpoint instead." + } + }, + "com.hostinger.api#ListReachAutomationStepsV1Request": { + "type": "structure", + "members": { + "profileUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Profile uuid parameter" + } + }, + "automationUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Automation uuid parameter" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#ReachV1AutomationsStepsAutomationStepCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#ReachV1AutomationsStepsAutomationStepResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`Reach.V1.Automations.Steps.AutomationStepResource`](#model/reachv1automationsstepsautomationstepresource)" + } + }, + "com.hostinger.api#ReachV1AutomationsStepsAutomationStepResource": { + "type": "structure", + "members": { + "uuid": { + "target": "smithy.api#String" + }, + "parent_uuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The step this one branches from. Null for the entry point of the workflow.", + "com.distilled.openapi#nullable": {} + } + }, + "step_order": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Position of this step among the steps sharing its parent." + } + }, + "type": { + "target": "com.hostinger.api#ReachV1AutomationsStepsAutomationStepResourceType", + "traits": { + "smithy.api#documentation": "Role of the step in the workflow. A `conditional` step branches into several children." + } + }, + "value": { + "target": "com.hostinger.api#ReachV1AutomationsStepsAutomationStepResourceValue", + "traits": { + "smithy.api#documentation": "The concrete trigger, action, decision or delay this step performs." + } + }, + "config": { + "target": "smithy.api#Document", + "traits": { + "smithy.api#documentation": "Step configuration. The shape depends on the value, and is empty for steps that take none.", + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#ReachV1AutomationsStepsAutomationStepResourceType": { + "type": "enum", + "members": { + "TRIGGER": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "trigger" + } + }, + "ACTION": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "action" + } + }, + "CONDITIONAL": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "conditional" + } + } + }, + "traits": { + "smithy.api#documentation": "Role of the step in the workflow. A `conditional` step branches into several children." + } + }, + "com.hostinger.api#ReachV1AutomationsStepsAutomationStepResourceValue": { + "type": "enum", + "members": { + "NEW_CONTACT": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "new_contact" + } + }, + "NEW_SEGMENT_CONTACT": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "new_segment_contact" + } + }, + "FORM_SUBMITTED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "form_submitted" + } + }, + "WEBHOOK": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "webhook" + } + }, + "SEND_WELCOME_EMAIL": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "send_welcome_email" + } + }, + "SEND_EMAIL": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "send_email" + } + }, + "SEND_CAMPAIGN": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "send_campaign" + } + }, + "DECISION": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "decision" + } + }, + "DELAY": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "delay" + } + } + }, + "traits": { + "smithy.api#documentation": "The concrete trigger, action, decision or delay this step performs." + } + }, + "com.hostinger.api#ListReachAutomationStepsV1Response": { + "type": "structure", + "members": { + "body": { + "target": "com.hostinger.api#ReachV1AutomationsStepsAutomationStepCollection", + "traits": { + "com.distilled.openapi#rawResponse": {}, + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListReachAutomationStepsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListReachAutomationStepsV1Request" + }, + "output": { + "target": "com.hostinger.api#ListReachAutomationStepsV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/reach/v1/profiles/{profileUuid}/automations/{automationUuid}/steps", + "code": 200 + }, + "smithy.api#documentation": "List automation steps\n\nGet the workflow of an automation as a flat list of steps.\n\nThe steps form a tree rather than a straight line: follow `parent_uuid` to reconstruct the\nbranches, and use `step_order` to order the steps that share a parent. An automation with no\nsteps yet returns an empty list." + } + }, + "com.hostinger.api#GetReachCampaignDetailsV1Request": { + "type": "structure", + "members": { + "profileUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Profile uuid parameter" + } + }, + "campaignUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Campaign uuid parameter" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#ReachV1CampaignsCampaignDetailsResource": { + "type": "structure", + "members": { + "uuid": { + "target": "smithy.api#String" + }, + "title": { + "target": "smithy.api#String" + }, + "subject": { + "target": "smithy.api#String" + }, + "sender_name": { + "target": "smithy.api#String" + }, + "sender_email": { + "target": "smithy.api#String" + }, + "template_uuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The email template this campaign uses. The template title is not exposed.", + "com.distilled.openapi#nullable": {} + } + }, + "status": { + "target": "com.hostinger.api#ReachV1CampaignsCampaignDetailsResourceStatus", + "traits": { + "smithy.api#documentation": "A fully sent campaign is `publish`. There is no `sent`, `paused` or `archived` status." + } + }, + "type": { + "target": "com.hostinger.api#ReachV1CampaignsCampaignDetailsResourceType" + }, + "failure_reason": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Set only while the status is `failed`.", + "com.distilled.openapi#nullable": {} + } + }, + "is_smart_send": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether delivery time is picked per contact rather than sent to everyone at once." + } + }, + "is_all_contacts": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether the campaign targets every contact instead of the listed segments." + } + }, + "delivery": { + "target": "com.hostinger.api#ReachV1CampaignsCampaignDeliveryResource" + }, + "segment_uuids": { + "target": "com.hostinger.api#ReachV1CampaignsCampaignDetailsResourceSegmentUuidsList", + "traits": { + "smithy.api#documentation": "Segments this campaign targets. Empty when it targets all contacts." + } + }, + "created_at": { + "target": "smithy.api#String" + }, + "updated_at": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "sent_at": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "scheduled_at": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#ReachV1CampaignsCampaignDetailsResourceStatus": { + "type": "enum", + "members": { + "DRAFT": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "draft" + } + }, + "SCHEDULED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "scheduled" + } + }, + "SENDING": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "sending" + } + }, + "PUBLISH": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "publish" + } + }, + "FAILED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "failed" + } + } + }, + "traits": { + "smithy.api#documentation": "A fully sent campaign is `publish`. There is no `sent`, `paused` or `archived` status." + } + }, + "com.hostinger.api#ReachV1CampaignsCampaignDetailsResourceType": { + "type": "enum", + "members": { + "CAMPAIGN": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "campaign" + } + }, + "AUTOMATION": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "automation" + } + }, + "DOUBLE_OPT_IN": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "double_opt_in" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ReachV1CampaignsCampaignDeliveryResource": { + "type": "structure", + "members": { + "total_sent": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Emails sent so far." + } + }, + "estimated_total_recipients": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Recipients this campaign was estimated to reach when sending started. Null for\ncampaigns that have not started sending.", + "com.distilled.openapi#nullable": {} + } + }, + "subscribers_count": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Contacts currently targeted by this campaign." + } + } + }, + "traits": { + "smithy.api#documentation": "Delivery progress. While the campaign is `sending`, `total_sent` climbs towards the estimate." + } + }, + "com.hostinger.api#ReachV1CampaignsCampaignDetailsResourceSegmentUuidsList": { + "type": "list", + "member": { + "target": "smithy.api#String" + }, + "traits": { + "smithy.api#documentation": "Segments this campaign targets. Empty when it targets all contacts." + } + }, + "com.hostinger.api#GetReachCampaignDetailsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#GetReachCampaignDetailsV1Request" + }, + "output": { + "target": "com.hostinger.api#ReachV1CampaignsCampaignDetailsResource" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/reach/v1/profiles/{profileUuid}/campaigns/{campaignUuid}", + "code": 200 + }, + "smithy.api#documentation": "Get campaign details\n\nGet a single campaign with its sender, subject, template reference, targeting and delivery\nprogress.\n\nThis describes how the campaign was set up and how far it has got. For opens, clicks and\nunsubscribes use the campaign statistics endpoint." + } + }, + "com.hostinger.api#ListReachCampaignsV1RequestStatus": { + "type": "enum", + "members": { + "DRAFT": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "draft" + } + }, + "SCHEDULED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "scheduled" + } + }, + "SENDING": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "sending" + } + }, + "PUBLISH": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "publish" + } + }, + "FAILED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "failed" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListReachCampaignsV1RequestType": { + "type": "enum", + "members": { + "CAMPAIGN": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "campaign" + } + }, + "AUTOMATION": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "automation" + } + }, + "DOUBLE_OPT_IN": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "double_opt_in" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListReachCampaignsV1RequestSortDirection": { + "type": "enum", + "members": { + "ASC": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "asc" + } + }, + "DESC": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "desc" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListReachCampaignsV1Request": { + "type": "structure", + "members": { + "profileUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Profile uuid parameter" + } + }, + "status": { + "target": "com.hostinger.api#ListReachCampaignsV1RequestStatus", + "traits": { + "smithy.api#httpQuery": "status", + "smithy.api#documentation": "Filter campaigns by status.\n\nA fully sent campaign has the status `publish`. There is no `sent` status, and campaigns can\nbe neither paused nor archived." + } + }, + "type": { + "target": "com.hostinger.api#ListReachCampaignsV1RequestType", + "traits": { + "smithy.api#httpQuery": "type", + "smithy.api#documentation": "Filter campaigns by type.\n\nDefaults to `campaign`, which leaves out the emails sent by automations and the double\nopt-in confirmations." + } + }, + "sort_direction": { + "target": "com.hostinger.api#ListReachCampaignsV1RequestSortDirection", + "traits": { + "smithy.api#httpQuery": "sort_direction", + "smithy.api#documentation": "Order campaigns by creation date. Newest first unless set to `asc`." + } + }, + "page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "page", + "smithy.api#documentation": "Page number" + } + }, + "per_page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "per_page", + "smithy.api#documentation": "Number of items per page" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#ReachV1CampaignsCampaignCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#ReachV1CampaignsCampaignResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`Reach.V1.Campaigns.CampaignResource`](#model/reachv1campaignscampaignresource)" + } + }, + "com.hostinger.api#ReachV1CampaignsCampaignResource": { + "type": "structure", + "members": { + "uuid": { + "target": "smithy.api#String" + }, + "title": { + "target": "smithy.api#String" + }, + "subject": { + "target": "smithy.api#String" + }, + "sender_name": { + "target": "smithy.api#String" + }, + "sender_email": { + "target": "smithy.api#String" + }, + "template_uuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The email template this campaign uses. The template title is not exposed.", + "com.distilled.openapi#nullable": {} + } + }, + "status": { + "target": "com.hostinger.api#ReachV1CampaignsCampaignResourceStatus", + "traits": { + "smithy.api#documentation": "A fully sent campaign is `publish`. There is no `sent`, `paused` or `archived` status." + } + }, + "type": { + "target": "com.hostinger.api#ReachV1CampaignsCampaignResourceType" + }, + "created_at": { + "target": "smithy.api#String" + }, + "updated_at": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "sent_at": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "scheduled_at": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "statistics": { + "target": "com.hostinger.api#ReachV1CampaignsCampaignSummaryStatisticsResource" + } + }, + "traits": {} + }, + "com.hostinger.api#ReachV1CampaignsCampaignResourceStatus": { + "type": "enum", + "members": { + "DRAFT": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "draft" + } + }, + "SCHEDULED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "scheduled" + } + }, + "SENDING": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "sending" + } + }, + "PUBLISH": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "publish" + } + }, + "FAILED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "failed" + } + } + }, + "traits": { + "smithy.api#documentation": "A fully sent campaign is `publish`. There is no `sent`, `paused` or `archived` status." + } + }, + "com.hostinger.api#ReachV1CampaignsCampaignResourceType": { + "type": "enum", + "members": { + "CAMPAIGN": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "campaign" + } + }, + "AUTOMATION": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "automation" + } + }, + "DOUBLE_OPT_IN": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "double_opt_in" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ReachV1CampaignsCampaignSummaryStatisticsResource": { + "type": "structure", + "members": { + "total_sent": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Emails sent for this campaign, and the denominator of the rates below." + } + }, + "open_rate": { + "target": "smithy.api#Double", + "traits": { + "smithy.api#documentation": "Percentage of sent emails that were opened." + } + }, + "click_rate": { + "target": "smithy.api#Double", + "traits": { + "smithy.api#documentation": "Percentage of sent emails that got a click." + } + }, + "click_to_open_rate": { + "target": "smithy.api#Double", + "traits": { + "smithy.api#documentation": "Percentage of the contacts who opened that went on to click." + } + } + }, + "traits": { + "smithy.api#documentation": "Headline engagement rates. The statistics endpoint carries the full breakdown." + } + }, + "com.hostinger.api#ListReachCampaignsV1Response": { + "type": "structure", + "members": { + "data": { + "target": "com.hostinger.api#ReachV1CampaignsCampaignCollection" + }, + "meta": { + "target": "com.hostinger.api#CommonSchemaPaginationMetaSchema" + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListReachCampaignsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListReachCampaignsV1Request" + }, + "output": { + "target": "com.hostinger.api#ListReachCampaignsV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/reach/v1/profiles/{profileUuid}/campaigns", + "code": 200 + }, + "smithy.api#documentation": "List campaigns\n\nGet a paginated list of the campaigns in a profile.\n\nEach campaign carries its headline engagement rates. Filter by status to find drafts,\nscheduled, sending or sent campaigns, keeping in mind that a fully sent campaign has the\nstatus `publish`. By default only regular campaigns are returned - pass `type` to get the\nemails sent by automations or the double opt-in confirmations instead." + } + }, + "com.hostinger.api#GetReachCampaignPerformanceV1Request": { + "type": "structure", + "members": { + "profileUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Profile uuid parameter" + } + }, + "campaignUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Campaign uuid parameter" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#ReachV1CampaignsCampaignStatisticsResource": { + "type": "structure", + "members": { + "total_sent": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Emails sent for this campaign, and the denominator of every rate below." + } + }, + "estimated_total_recipients": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Recipients this campaign was estimated to reach when sending started. Null for\ncampaigns that have not started sending.", + "com.distilled.openapi#nullable": {} + } + }, + "processed_count": { + "target": "smithy.api#Integer" + }, + "delivered_count": { + "target": "smithy.api#Integer" + }, + "dropped_count": { + "target": "smithy.api#Integer" + }, + "bounced_count": { + "target": "smithy.api#Integer" + }, + "soft_bounced_count": { + "target": "smithy.api#Integer" + }, + "opened_count": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Contacts who opened this campaign." + } + }, + "clicked_count": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Contacts who clicked a link. Only clicks from contacts who also registered an open count." + } + }, + "unsubscribed_count": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Contacts who unsubscribed through this campaign." + } + }, + "open_rate": { + "target": "smithy.api#Double", + "traits": { + "smithy.api#documentation": "Percentage of sent emails that were opened." + } + }, + "click_rate": { + "target": "smithy.api#Double", + "traits": { + "smithy.api#documentation": "Percentage of sent emails that got a click." + } + }, + "click_to_open_rate": { + "target": "smithy.api#Double", + "traits": { + "smithy.api#documentation": "Percentage of the contacts who opened that went on to click." + } + }, + "unsubscribe_rate": { + "target": "smithy.api#Double", + "traits": { + "smithy.api#documentation": "Percentage of sent emails that led to an unsubscribe." + } + }, + "has_bounced_contacts": { + "target": "smithy.api#Boolean" + } + }, + "traits": { + "smithy.api#documentation": "Campaign performance. Every count is unique contacts rather than raw events, so a contact\nwho opens the same email five times is counted once." + } + }, + "com.hostinger.api#GetReachCampaignPerformanceV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#GetReachCampaignPerformanceV1Request" + }, + "output": { + "target": "com.hostinger.api#ReachV1CampaignsCampaignStatisticsResource" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/reach/v1/profiles/{profileUuid}/campaigns/{campaignUuid}/statistics", + "code": 200 + }, + "smithy.api#documentation": "Get campaign performance\n\nGet the performance of a campaign: delivery, opens, clicks and unsubscribes, with the\nmatching rates.\n\nEvery count is unique contacts rather than raw events, so a contact who opens the same email\nfive times is counted once." + } + }, + "com.hostinger.api#UpdateReachAContactFieldV1RequestOptionsItem": { + "type": "structure", + "members": { + "uuid": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "label": { + "target": "smithy.api#String", + "traits": { + "smithy.api#required": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#UpdateReachAContactFieldV1RequestOptionsList": { + "type": "list", + "member": { + "target": "com.hostinger.api#UpdateReachAContactFieldV1RequestOptionsItem" + }, + "traits": { + "smithy.api#documentation": "Replaces the option set when provided. Entries carrying a uuid are kept and relabelled, entries without one are created, and any existing option missing from the list is deleted along with the values contacts hold for it." + } + }, + "com.hostinger.api#UpdateReachAContactFieldV1Request": { + "type": "structure", + "members": { + "profileUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Profile uuid parameter" + } + }, + "fieldUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Contact field uuid parameter" + } + }, + "label": { + "target": "smithy.api#String", + "traits": { + "smithy.api#required": {} + } + }, + "options": { + "target": "com.hostinger.api#UpdateReachAContactFieldV1RequestOptionsList", + "traits": { + "smithy.api#documentation": "Replaces the option set when provided. Entries carrying a uuid are kept and relabelled, entries without one are created, and any existing option missing from the list is deleted along with the values contacts hold for it.", + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#ReachV1ContactsFieldsContactFieldResource": { + "type": "structure", + "members": { + "uuid": { + "target": "smithy.api#String" + }, + "type": { + "target": "com.hostinger.api#ReachV1ContactsFieldsContactFieldResourceType" + }, + "label": { + "target": "smithy.api#String" + }, + "slug": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Derived from the label on creation and immutable afterwards" + } + }, + "options": { + "target": "com.hostinger.api#ReachV1ContactsFieldsContactFieldResourceOptionsList", + "traits": { + "smithy.api#documentation": "Available choices. Always empty for the scalar field types." + } + }, + "created_at": { + "target": "smithy.api#String" + } + }, + "traits": {} + }, + "com.hostinger.api#ReachV1ContactsFieldsContactFieldResourceType": { + "type": "enum", + "members": { + "TEXT": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "text" + } + }, + "NUMBER": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "number" + } + }, + "DATE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "date" + } + }, + "SINGLE_CHOICE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "single_choice" + } + }, + "MULTI_CHOICE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "multi_choice" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ReachV1ContactsFieldsContactFieldOptionResource": { + "type": "structure", + "members": { + "uuid": { + "target": "smithy.api#String" + }, + "label": { + "target": "smithy.api#String" + }, + "sort_order": { + "target": "smithy.api#Integer" + } + }, + "traits": {} + }, + "com.hostinger.api#ReachV1ContactsFieldsContactFieldResourceOptionsList": { + "type": "list", + "member": { + "target": "com.hostinger.api#ReachV1ContactsFieldsContactFieldOptionResource" + }, + "traits": { + "smithy.api#documentation": "Available choices. Always empty for the scalar field types." + } + }, + "com.hostinger.api#UpdateReachAContactFieldV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#UpdateReachAContactFieldV1Request" + }, + "output": { + "target": "com.hostinger.api#ReachV1ContactsFieldsContactFieldResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "PATCH", + "uri": "/api/reach/v1/profiles/{profileUuid}/contacts/fields/{fieldUuid}", + "code": 200 + }, + "smithy.api#documentation": "Update a contact field\n\nRename a custom contact field and, for the choice types, replace its option set.\n\nOptions carrying a uuid are kept and relabelled, options without one are created, and any\nexisting option left out of the list is deleted along with the values contacts hold for\nit. The field type and slug cannot be changed." + } + }, + "com.hostinger.api#DeleteReachAContactFieldV1Request": { + "type": "structure", + "members": { + "profileUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Profile uuid parameter" + } + }, + "fieldUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Contact field uuid parameter" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DeleteReachAContactFieldV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#DeleteReachAContactFieldV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "traits": { + "smithy.api#http": { + "method": "DELETE", + "uri": "/api/reach/v1/profiles/{profileUuid}/contacts/fields/{fieldUuid}", + "code": 200 + }, + "smithy.api#documentation": "Delete a contact field\n\nDelete a custom contact field.\n\nEvery value contacts hold for the field is deleted with it, and for the choice types so\nare its options. The contacts themselves are not affected." + } + }, + "com.hostinger.api#ListReachContactFieldsV1Request": { + "type": "structure", + "members": { + "profileUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Profile uuid parameter" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#ReachV1ContactsFieldsContactFieldCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#ReachV1ContactsFieldsContactFieldResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`Reach.V1.Contacts.Fields.ContactFieldResource`](#model/reachv1contactsfieldscontactfieldresource)" + } + }, + "com.hostinger.api#ListReachContactFieldsV1Response": { + "type": "structure", + "members": { + "body": { + "target": "com.hostinger.api#ReachV1ContactsFieldsContactFieldCollection", + "traits": { + "com.distilled.openapi#rawResponse": {}, + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListReachContactFieldsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListReachContactFieldsV1Request" + }, + "output": { + "target": "com.hostinger.api#ListReachContactFieldsV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/reach/v1/profiles/{profileUuid}/contacts/fields", + "code": 200 + }, + "smithy.api#documentation": "List contact fields\n\nGet the custom contact fields defined in a profile.\n\nCustom fields let you store your own attributes on contacts. The returned uuids are what\nyou pass to the contact update endpoint to set values, and choice fields also list the\noptions available to pick from." + } + }, + "com.hostinger.api#CreateReachAContactFieldV1RequestType": { + "type": "enum", + "members": { + "TEXT": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "text" + } + }, + "NUMBER": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "number" + } + }, + "DATE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "date" + } + }, + "SINGLE_CHOICE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "single_choice" + } + }, + "MULTI_CHOICE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "multi_choice" + } + } + }, + "traits": { + "smithy.api#documentation": "Immutable once the field exists" + } + }, + "com.hostinger.api#CreateReachAContactFieldV1RequestOptionsList": { + "type": "list", + "member": { + "target": "smithy.api#String" + }, + "traits": { + "smithy.api#documentation": "Required for single_choice and multi_choice, ignored for the scalar types. Labels must be unique regardless of casing." + } + }, + "com.hostinger.api#CreateReachAContactFieldV1Request": { + "type": "structure", + "members": { + "profileUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Profile uuid parameter" + } + }, + "type": { + "target": "com.hostinger.api#CreateReachAContactFieldV1RequestType", + "traits": { + "smithy.api#documentation": "Immutable once the field exists", + "smithy.api#required": {} + } + }, + "label": { + "target": "smithy.api#String", + "traits": { + "smithy.api#required": {} + } + }, + "options": { + "target": "com.hostinger.api#CreateReachAContactFieldV1RequestOptionsList", + "traits": { + "smithy.api#documentation": "Required for single_choice and multi_choice, ignored for the scalar types. Labels must be unique regardless of casing." + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#CreateReachAContactFieldV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#CreateReachAContactFieldV1Request" + }, + "output": { + "target": "com.hostinger.api#ReachV1ContactsFieldsContactFieldResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/reach/v1/profiles/{profileUuid}/contacts/fields", + "code": 200 + }, + "smithy.api#documentation": "Create a contact field\n\nDefine a new custom contact field in a profile.\n\nThe `slug` is derived from the label and, like the field type, cannot be changed later.\nUse the returned uuid to set values on contacts." + } + }, + "com.hostinger.api#GetReachContactDetailsV1Request": { + "type": "structure", + "members": { + "profileUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Profile uuid parameter" + } + }, + "contactUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Contact uuid parameter" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#ReachV1ContactsContactDetailsResource": { + "type": "structure", + "members": { + "uuid": { + "target": "smithy.api#String" + }, + "email": { + "target": "smithy.api#String" + }, + "name": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "surname": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "phone": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "subscription_status": { + "target": "com.hostinger.api#ReachV1ContactsContactDetailsResourceSubscriptionStatus" + }, + "subscribed_at": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "unsubscribed_at": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "created_at": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "domain": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "source": { + "target": "com.hostinger.api#ReachV1ContactsContactDetailsResourceSource", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "note": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "tags": { + "target": "com.hostinger.api#ReachV1ContactsContactDetailsResourceTagsList" + }, + "fields": { + "target": "com.hostinger.api#ReachV1ContactsContactDetailsResourceFieldsList", + "traits": { + "smithy.api#documentation": "Custom field values held by this contact" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ReachV1ContactsContactDetailsResourceSubscriptionStatus": { + "type": "enum", + "members": { + "SUBSCRIBED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "subscribed" + } + }, + "UNSUBSCRIBED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "unsubscribed" + } + }, + "CONFIRMED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "confirmed" + } + }, + "PENDING": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "pending" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ReachV1ContactsContactDetailsResourceSource": { + "type": "enum", + "members": { + "SYNC": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "sync" + } + }, + "IMPORT": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "import" + } + }, + "MANUAL": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "manual" + } + }, + "API": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "api" + } + }, + "FORM": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "form" + } + }, + "CHECKOUT": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "checkout" + } + }, + "HORIZONS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "horizons" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ReachV1ContactsTagsTagResource": { + "type": "structure", + "members": { + "uuid": { + "target": "smithy.api#String" + }, + "type": { + "target": "com.hostinger.api#ReachV1ContactsTagsTagResourceType", + "traits": { + "smithy.api#documentation": "How the tag came about. `custom` covers the tags you create yourself, `form` covers the ones Reach creates for its forms." + } + }, + "value": { + "target": "smithy.api#String" + }, + "created_at": { + "target": "smithy.api#String" + } + }, + "traits": {} + }, + "com.hostinger.api#ReachV1ContactsTagsTagResourceType": { + "type": "enum", + "members": { + "FORM": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "form" + } + }, + "CUSTOM": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "custom" + } + } + }, + "traits": { + "smithy.api#documentation": "How the tag came about. `custom` covers the tags you create yourself, `form` covers the ones Reach creates for its forms." + } + }, + "com.hostinger.api#ReachV1ContactsContactDetailsResourceTagsList": { + "type": "list", + "member": { + "target": "com.hostinger.api#ReachV1ContactsTagsTagResource" + }, + "traits": {} + }, + "com.hostinger.api#ReachV1ContactsFieldsContactFieldValueResource": { + "type": "structure", + "members": { + "uuid": { + "target": "smithy.api#String" + }, + "type": { + "target": "com.hostinger.api#ReachV1ContactsFieldsContactFieldValueResourceType" + }, + "label": { + "target": "smithy.api#String" + }, + "slug": { + "target": "smithy.api#String" + }, + "value": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Set for the scalar field types, null for the choice types", + "com.distilled.openapi#nullable": {} + } + }, + "selected_option_uuids": { + "target": "com.hostinger.api#ReachV1ContactsFieldsContactFieldValueResourceSelectedOptionUuidsList", + "traits": { + "smithy.api#documentation": "Chosen options for the choice field types, empty for the scalar types" + } + }, + "options": { + "target": "com.hostinger.api#ReachV1ContactsFieldsContactFieldValueResourceOptionsList", + "traits": { + "smithy.api#documentation": "Every option the field offers, not only the selected ones" + } + } + }, + "traits": { + "smithy.api#documentation": "A custom contact field together with the value held by one contact" + } + }, + "com.hostinger.api#ReachV1ContactsFieldsContactFieldValueResourceType": { + "type": "enum", + "members": { + "TEXT": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "text" + } + }, + "NUMBER": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "number" + } + }, + "DATE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "date" + } + }, + "SINGLE_CHOICE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "single_choice" + } + }, + "MULTI_CHOICE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "multi_choice" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ReachV1ContactsFieldsContactFieldValueResourceSelectedOptionUuidsList": { + "type": "list", + "member": { + "target": "smithy.api#String" + }, + "traits": { + "smithy.api#documentation": "Chosen options for the choice field types, empty for the scalar types" + } + }, + "com.hostinger.api#ReachV1ContactsFieldsContactFieldValueResourceOptionsList": { + "type": "list", + "member": { + "target": "com.hostinger.api#ReachV1ContactsFieldsContactFieldOptionResource" + }, + "traits": { + "smithy.api#documentation": "Every option the field offers, not only the selected ones" + } + }, + "com.hostinger.api#ReachV1ContactsContactDetailsResourceFieldsList": { + "type": "list", + "member": { + "target": "com.hostinger.api#ReachV1ContactsFieldsContactFieldValueResource" + }, + "traits": { + "smithy.api#documentation": "Custom field values held by this contact" + } + }, + "com.hostinger.api#GetReachContactDetailsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#GetReachContactDetailsV1Request" + }, + "output": { + "target": "com.hostinger.api#ReachV1ContactsContactDetailsResource" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/reach/v1/profiles/{profileUuid}/contacts/{contactUuid}", + "code": 200 + }, + "smithy.api#documentation": "Get contact details\n\nGet the full details of a single contact.\n\nAlongside the contact's own attributes this returns the tags assigned to it and the\nvalues it holds for the profile's custom contact fields." + } + }, + "com.hostinger.api#UpdateReachAContactV1RequestSubscriptionStatus": { + "type": "enum", + "members": { + "SUBSCRIBED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "subscribed" + } + }, + "UNSUBSCRIBED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "unsubscribed" + } + }, + "CONFIRMED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "confirmed" + } + }, + "PENDING": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "pending" + } + } + }, + "traits": {} + }, + "com.hostinger.api#UpdateReachAContactV1RequestFieldsItemSelectedOptionUuidsList": { + "type": "list", + "member": { + "target": "smithy.api#String" + }, + "traits": { + "smithy.api#documentation": "For the choice field types" + } + }, + "com.hostinger.api#UpdateReachAContactV1RequestFieldsItem": { + "type": "structure", + "members": { + "uuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#required": {} + } + }, + "value": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "For the scalar field types", + "com.distilled.openapi#nullable": {} + } + }, + "selected_option_uuids": { + "target": "com.hostinger.api#UpdateReachAContactV1RequestFieldsItemSelectedOptionUuidsList", + "traits": { + "smithy.api#documentation": "For the choice field types" + } + } + }, + "traits": {} + }, + "com.hostinger.api#UpdateReachAContactV1RequestFieldsList": { + "type": "list", + "member": { + "target": "com.hostinger.api#UpdateReachAContactV1RequestFieldsItem" + }, + "traits": { + "smithy.api#documentation": "Set custom field values. Omit to leave untouched, send an empty array to clear them all." + } + }, + "com.hostinger.api#UpdateReachAContactV1Request": { + "type": "structure", + "members": { + "profileUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Profile uuid parameter" + } + }, + "contactUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Contact uuid parameter" + } + }, + "email": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "name": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "surname": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "phone": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Phone number in E.164 format (leading \"+\" then 7-15 digits)", + "com.distilled.openapi#nullable": {} + } + }, + "subscription_status": { + "target": "com.hostinger.api#UpdateReachAContactV1RequestSubscriptionStatus", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "note": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "fields": { + "target": "com.hostinger.api#UpdateReachAContactV1RequestFieldsList", + "traits": { + "smithy.api#documentation": "Set custom field values. Omit to leave untouched, send an empty array to clear them all." + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#ReachV1ContactsProfileContactUpdateResource": { + "type": "structure", + "members": { + "uuid": { + "target": "smithy.api#String" + }, + "name": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "surname": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "email": { + "target": "smithy.api#String" + }, + "phone": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "subscription_status": { + "target": "com.hostinger.api#ReachV1ContactsProfileContactUpdateResourceSubscriptionStatus" + }, + "subscribed_at": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "unsubscribed_at": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#ReachV1ContactsProfileContactUpdateResourceSubscriptionStatus": { + "type": "enum", + "members": { + "SUBSCRIBED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "subscribed" + } + }, + "UNSUBSCRIBED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "unsubscribed" + } + }, + "CONFIRMED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "confirmed" + } + }, + "PENDING": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "pending" + } + } + }, + "traits": {} + }, + "com.hostinger.api#UpdateReachAContactV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#UpdateReachAContactV1Request" + }, + "output": { + "target": "com.hostinger.api#ReachV1ContactsProfileContactUpdateResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "PATCH", + "uri": "/api/reach/v1/profiles/{profileUuid}/contacts/{contactUuid}", + "code": 200 + }, + "smithy.api#documentation": "Update a contact\n\nUpdate a contact's attributes and custom field values.\n\nOnly the properties present in the request body are changed, so a partial body is enough\nto change a single attribute. Sending a property as `null` clears it.\n\nThe response carries the contact's core attributes. Read back its tags, custom field\nvalues, source and note with `GET /api/reach/v1/profiles/{profileUuid}/contacts/{contactUuid}`." + } + }, + "com.hostinger.api#DeleteReachAProfileContactV1Request": { + "type": "structure", + "members": { + "profileUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Profile uuid parameter" + } + }, + "contactUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Contact uuid parameter" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DeleteReachAProfileContactV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#DeleteReachAProfileContactV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "traits": { + "smithy.api#http": { + "method": "DELETE", + "uri": "/api/reach/v1/profiles/{profileUuid}/contacts/{contactUuid}", + "code": 200 + }, + "smithy.api#documentation": "Delete a profile contact\n\nPermanently delete a contact from a profile.\n\nThe contact is removed together with its custom field values and tag assignments." + } + }, + "com.hostinger.api#ReachCreateContactsInBulkV1RequestContactsItem": { + "type": "structure", + "members": { + "email": { + "target": "smithy.api#String", + "traits": { + "smithy.api#required": {} + } + }, + "name": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "surname": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "phone": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Phone number in E.164 format (leading \"+\" then 7-15 digits)", + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#ReachCreateContactsInBulkV1RequestContactsList": { + "type": "list", + "member": { + "target": "com.hostinger.api#ReachCreateContactsInBulkV1RequestContactsItem" + }, + "traits": {} + }, + "com.hostinger.api#ReachCreateContactsInBulkV1RequestTagUuidsList": { + "type": "list", + "member": { + "target": "smithy.api#String" + }, + "traits": { + "smithy.api#documentation": "Existing tags to attach to every created contact" + } + }, + "com.hostinger.api#ReachCreateContactsInBulkV1Request": { + "type": "structure", + "members": { + "profileUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Profile uuid parameter" + } + }, + "contacts": { + "target": "com.hostinger.api#ReachCreateContactsInBulkV1RequestContactsList", + "traits": { + "smithy.api#required": {} + } + }, + "tag_uuids": { + "target": "com.hostinger.api#ReachCreateContactsInBulkV1RequestTagUuidsList", + "traits": { + "smithy.api#documentation": "Existing tags to attach to every created contact" + } + }, + "note": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Note applied to every created contact", + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#ReachCreateContactsInBulkV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ReachCreateContactsInBulkV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/reach/v1/profiles/{profileUuid}/contacts/bulk", + "code": 200 + }, + "smithy.api#documentation": "Create contacts in bulk\n\nCreate many contacts in a profile in a single call.\n\nThe contacts are imported in the background, so a success response means the import was\naccepted rather than finished. Contacts whose email already exists in the profile are\nleft as they are. If double opt-in is enabled, new contacts start off pending and are\nsent a confirmation email." + } + }, + "com.hostinger.api#ListReachProfileContactsV1RequestSubscriptionStatus": { + "type": "enum", + "members": { + "SUBSCRIBED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "subscribed" + } + }, + "UNSUBSCRIBED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "unsubscribed" + } + }, + "CONFIRMED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "confirmed" + } + }, + "PENDING": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "pending" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListReachProfileContactsV1Request": { + "type": "structure", + "members": { + "profileUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Profile uuid parameter" + } + }, + "subscription_status": { + "target": "com.hostinger.api#ListReachProfileContactsV1RequestSubscriptionStatus", + "traits": { + "smithy.api#httpQuery": "subscription_status", + "smithy.api#documentation": "Filter contacts by subscription status" + } + }, + "tag_uuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpQuery": "tag_uuid", + "smithy.api#documentation": "Filter contacts by tag UUID" + } + }, + "search": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpQuery": "search", + "smithy.api#documentation": "Search contacts by email" + } + }, + "page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "page", + "smithy.api#documentation": "Page number" + } + }, + "per_page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "per_page", + "smithy.api#documentation": "Number of items per page" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#ReachV1ContactsProfileContactCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#ReachV1ContactsProfileContactResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`Reach.V1.Contacts.ProfileContactResource`](#model/reachv1contactsprofilecontactresource)" + } + }, + "com.hostinger.api#ReachV1ContactsProfileContactResource": { + "type": "structure", + "members": { + "uuid": { + "target": "smithy.api#String" + }, + "name": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "surname": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "email": { + "target": "smithy.api#String" + }, + "phone": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "subscription_status": { + "target": "com.hostinger.api#ReachV1ContactsProfileContactResourceSubscriptionStatus" + }, + "subscribed_at": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "unsubscribed_at": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "source": { + "target": "com.hostinger.api#ReachV1ContactsProfileContactResourceSource", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "note": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#ReachV1ContactsProfileContactResourceSubscriptionStatus": { + "type": "enum", + "members": { + "SUBSCRIBED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "subscribed" + } + }, + "UNSUBSCRIBED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "unsubscribed" + } + }, + "CONFIRMED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "confirmed" + } + }, + "PENDING": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "pending" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ReachV1ContactsProfileContactResourceSource": { + "type": "enum", + "members": { + "SYNC": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "sync" + } + }, + "IMPORT": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "import" + } + }, + "MANUAL": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "manual" + } + }, + "API": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "api" + } + }, + "FORM": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "form" + } + }, + "CHECKOUT": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "checkout" + } + }, + "HORIZONS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "horizons" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListReachProfileContactsV1Response": { + "type": "structure", + "members": { + "data": { + "target": "com.hostinger.api#ReachV1ContactsProfileContactCollection" + }, + "meta": { + "target": "com.hostinger.api#CommonSchemaPaginationMetaSchema" + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListReachProfileContactsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListReachProfileContactsV1Request" + }, + "output": { + "target": "com.hostinger.api#ListReachProfileContactsV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/reach/v1/profiles/{profileUuid}/contacts", + "code": 200 + }, + "smithy.api#documentation": "List profile contacts\n\nGet a paginated list of contacts belonging to a profile.\n\nContacts can be filtered by subscription status, by tag, and by an email search term.\nThe `meta.total` field of the response is the number of contacts matching the filters,\nso calling this endpoint without filters gives the profile's total contact count." + } + }, + "com.hostinger.api#CreateReachNewContactsV1RequestTagUuidsList": { + "type": "list", + "member": { + "target": "smithy.api#String" + }, + "traits": { + "smithy.api#documentation": "Existing tags to attach to the created contact" + } + }, + "com.hostinger.api#CreateReachNewContactsV1Request": { + "type": "structure", + "members": { + "profileUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Profile uuid parameter" + } + }, + "email": { + "target": "smithy.api#String", + "traits": { + "smithy.api#required": {} + } + }, + "name": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "surname": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "phone": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Phone number in E.164 format (leading \"+\" then 7-15 digits)", + "com.distilled.openapi#nullable": {} + } + }, + "note": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "tag_uuids": { + "target": "com.hostinger.api#CreateReachNewContactsV1RequestTagUuidsList", + "traits": { + "smithy.api#documentation": "Existing tags to attach to the created contact" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#CreateReachNewContactsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#CreateReachNewContactsV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/reach/v1/profiles/{profileUuid}/contacts", + "code": 200 + }, + "smithy.api#documentation": "Create new contacts\n\nCreate a new contact in the email marketing system.\n\nThis endpoint allows you to create a new contact with basic information like name, email, and surname.\n\nIf double opt-in is enabled, the contact will be created with a pending status\nand a confirmation email will be sent." + } + }, + "com.hostinger.api#ReachCountProfileSegmentContactsV1Request": { + "type": "structure", + "members": { + "profileUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Profile uuid parameter" + } + }, + "segmentUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Segment uuid parameter" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#ReachV1ContactsSegmentsSegmentContactsCountResource": { + "type": "structure", + "members": { + "count": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Contacts currently matching the segment conditions" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ReachCountProfileSegmentContactsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ReachCountProfileSegmentContactsV1Request" + }, + "output": { + "target": "com.hostinger.api#ReachV1ContactsSegmentsSegmentContactsCountResource" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/reach/v1/profiles/{profileUuid}/segmentation/segments/{segmentUuid}/count", + "code": 200 + }, + "smithy.api#documentation": "Count profile segment contacts\n\nCount the contacts currently matching a segment without listing them.\n\nCheaper than paging through the segment contacts endpoint when only the size is needed." + } + }, + "com.hostinger.api#ListReachProfileSegmentContactsV1Request": { + "type": "structure", + "members": { + "profileUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Profile uuid parameter" + } + }, + "segmentUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Segment uuid parameter" + } + }, + "page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "page", + "smithy.api#documentation": "Page number" + } + }, + "per_page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "per_page", + "smithy.api#documentation": "Number of items per page" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#ReachV1ContactsSegmentsSegmentationContactCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#ReachV1ContactsSegmentsSegmentationContactResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`Reach.V1.Contacts.Segments.SegmentationContactResource`](#model/reachv1contactssegmentssegmentationcontactresource)" + } + }, + "com.hostinger.api#ReachV1ContactsSegmentsSegmentationContactResource": { + "type": "structure", + "members": { + "uuid": { + "target": "smithy.api#String" + }, + "name": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "surname": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "email": { + "target": "smithy.api#String" + }, + "subscription_status": { + "target": "com.hostinger.api#ReachV1ContactsSegmentsSegmentationContactResourceSubscriptionStatus" + }, + "subscribed_at": { + "target": "smithy.api#String" + }, + "source": { + "target": "com.hostinger.api#ReachV1ContactsSegmentsSegmentationContactResourceSource", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "note": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#ReachV1ContactsSegmentsSegmentationContactResourceSubscriptionStatus": { + "type": "enum", + "members": { + "SUBSCRIBED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "subscribed" + } + }, + "UNSUBSCRIBED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "unsubscribed" + } + }, + "CONFIRMED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "confirmed" + } + }, + "PENDING": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "pending" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ReachV1ContactsSegmentsSegmentationContactResourceSource": { + "type": "enum", + "members": { + "SYNC": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "sync" + } + }, + "IMPORT": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "import" + } + }, + "MANUAL": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "manual" + } + }, + "API": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "api" + } + }, + "FORM": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "form" + } + }, + "CHECKOUT": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "checkout" + } + }, + "HORIZONS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "horizons" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListReachProfileSegmentContactsV1Response": { + "type": "structure", + "members": { + "data": { + "target": "com.hostinger.api#ReachV1ContactsSegmentsSegmentationContactCollection" + }, + "meta": { + "target": "com.hostinger.api#CommonSchemaPaginationMetaSchema" + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListReachProfileSegmentContactsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListReachProfileSegmentContactsV1Request" + }, + "output": { + "target": "com.hostinger.api#ListReachProfileSegmentContactsV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/reach/v1/profiles/{profileUuid}/segmentation/segments/{segmentUuid}/contacts", + "code": 200 + }, + "smithy.api#documentation": "List profile segment contacts\n\nRetrieve contacts associated with a specific segment for a given profile.\n\nThis endpoint allows you to fetch and filter contacts that belong to a particular segment,\nidentified by its UUID, scoped to a specific profile." + } + }, + "com.hostinger.api#GetReachProfileSegmentDetailsV1Request": { + "type": "structure", + "members": { + "profileUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Profile uuid parameter" + } + }, + "segmentUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Segment uuid parameter" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#ReachV1ContactsSegmentsSegmentResource": { + "type": "structure", + "members": { + "uuid": { + "target": "smithy.api#String" + }, + "name": { + "target": "smithy.api#String" + }, + "query": { + "target": "com.hostinger.api#ReachV1ContactsSegmentsSegmentResourceQueryList" + }, + "created_at": { + "target": "smithy.api#String" + }, + "updated_at": { + "target": "smithy.api#String" + } + }, + "traits": {} + }, + "com.hostinger.api#ReachV1ContactsSegmentsSegmentResourceQueryList": { + "type": "list", + "member": { + "target": "smithy.api#Document" + }, + "traits": {} + }, + "com.hostinger.api#GetReachProfileSegmentDetailsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#GetReachProfileSegmentDetailsV1Request" + }, + "output": { + "target": "com.hostinger.api#ReachV1ContactsSegmentsSegmentResource" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/reach/v1/profiles/{profileUuid}/segmentation/segments/{segmentUuid}", + "code": 200 + }, + "smithy.api#documentation": "Get profile segment details\n\nGet a single segment of a profile, including the conditions that define it.\n\nTo retrieve the contacts currently matching those conditions, use the segment contacts\nendpoint instead." + } + }, + "com.hostinger.api#UpdateReachAProfileSegmentV1RequestConditionsItemOperator": { + "type": "enum", + "members": { + "EQUALS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "equals" + } + }, + "NOT_EQUALS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "not_equals" + } + }, + "CONTAINS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "contains" + } + }, + "NOT_CONTAINS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "not_contains" + } + }, + "GTE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "gte" + } + }, + "LTE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "lte" + } + }, + "EXISTS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "exists" + } + }, + "WITHIN_LAST_DAYS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "within_last_days" + } + }, + "NOT_WITHIN_LAST_DAYS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "not_within_last_days" + } + }, + "OLDER_THAN_DAYS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "older_than_days" + } + }, + "PROCESSED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "processed" + } + }, + "NOT_PROCESSED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "not_processed" + } + }, + "DELIVERED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "delivered" + } + }, + "NOT_DELIVERED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "not_delivered" + } + }, + "DROPPED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "dropped" + } + }, + "NOT_DROPPED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "not_dropped" + } + }, + "BOUNCED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "bounced" + } + }, + "NOT_BOUNCED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "not_bounced" + } + }, + "SOFT_BOUNCED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "soft_bounced" + } + }, + "NOT_SOFT_BOUNCED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "not_soft_bounced" + } + }, + "OPENED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "opened" + } + }, + "NOT_OPENED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "not_opened" + } + }, + "CLICKED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "clicked" + } + }, + "NOT_CLICKED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "not_clicked" + } + }, + "UNSUBSCRIBED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "unsubscribed" + } + }, + "NOT_UNSUBSCRIBED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "not_unsubscribed" + } + } + }, + "traits": {} + }, + "com.hostinger.api#UpdateReachAProfileSegmentV1RequestConditionsItem": { + "type": "structure", + "members": { + "attribute": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "A built-in contact attribute, or `cf:{fieldUuid}` to target a custom\ncontact field. Custom fields are addressed by field UUID; their slug\nis not accepted.\n\nBuilt-in attributes: `email`, `note`, `domain`, `source`,\n`opt_in_method`, `subscription_status`, `subscribed_at`,\n`unsubscribed_at`, `created_at`, `tag`, `campaigns`, `processed`,\n`opened`, `clicked`, `delivered`, `bounced`, `soft_bounced`,\n`dropped`.\n\nWhich operators are accepted depends on the attribute.", + "smithy.api#required": {} + } + }, + "operator": { + "target": "com.hostinger.api#UpdateReachAProfileSegmentV1RequestConditionsItemOperator", + "traits": { + "smithy.api#required": {} + } + }, + "value": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Always a string, including for numeric and date comparisons", + "smithy.api#required": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#UpdateReachAProfileSegmentV1RequestConditionsList": { + "type": "list", + "member": { + "target": "com.hostinger.api#UpdateReachAProfileSegmentV1RequestConditionsItem" + }, + "traits": { + "smithy.api#documentation": "Replaces the existing conditions entirely. Omit to keep the current ones." + } + }, + "com.hostinger.api#UpdateReachAProfileSegmentV1RequestLogic": { + "type": "enum", + "members": { + "AND": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "AND" + } + }, + "OR": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "OR" + } + } + }, + "traits": { + "smithy.api#documentation": "How to combine multiple conditions. Required when conditions are given." + } + }, + "com.hostinger.api#UpdateReachAProfileSegmentV1Request": { + "type": "structure", + "members": { + "profileUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Profile uuid parameter" + } + }, + "segmentUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Segment uuid parameter" + } + }, + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#required": {} + } + }, + "conditions": { + "target": "com.hostinger.api#UpdateReachAProfileSegmentV1RequestConditionsList", + "traits": { + "smithy.api#documentation": "Replaces the existing conditions entirely. Omit to keep the current ones." + } + }, + "logic": { + "target": "com.hostinger.api#UpdateReachAProfileSegmentV1RequestLogic", + "traits": { + "smithy.api#documentation": "How to combine multiple conditions. Required when conditions are given." + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#UpdateReachAProfileSegmentV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#UpdateReachAProfileSegmentV1Request" + }, + "output": { + "target": "com.hostinger.api#ReachV1ContactsSegmentsSegmentResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "PUT", + "uri": "/api/reach/v1/profiles/{profileUuid}/segmentation/segments/{segmentUuid}", + "code": 200 + }, + "smithy.api#documentation": "Update a profile segment\n\nRename a segment and/or replace the conditions that define it.\n\n`name` is always required. Omit `conditions` to rename without touching the conditions;\nsupply them and they replace the existing set entirely rather than being merged into it.\nContacts are never modified, but which of them match the segment can change immediately." + } + }, + "com.hostinger.api#DeleteReachAProfileSegmentV1Request": { + "type": "structure", + "members": { + "profileUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Profile uuid parameter" + } + }, + "segmentUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Segment uuid parameter" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DeleteReachAProfileSegmentV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#DeleteReachAProfileSegmentV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "traits": { + "smithy.api#http": { + "method": "DELETE", + "uri": "/api/reach/v1/profiles/{profileUuid}/segmentation/segments/{segmentUuid}", + "code": 200 + }, + "smithy.api#documentation": "Delete a profile segment\n\nDelete a segment.\n\nOnly the segment definition is removed. The contacts that matched it are left untouched." + } + }, + "com.hostinger.api#ListReachSegmentFilterAttributesV1Request": { + "type": "structure", + "members": { + "profileUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Profile uuid parameter" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#ReachV1ContactsSegmentsSegmentFilterAttributesResource": { + "type": "structure", + "members": { + "attributes": { + "target": "com.hostinger.api#ReachV1ContactsSegmentsSegmentFilterAttributesResourceAttributesMap", + "traits": { + "smithy.api#documentation": "Every attribute a condition can filter on, keyed by the value to send as\n`attribute`. Custom contact fields are keyed `cf:{fieldUuid}`, tags and campaigns by\ntheir uuid, so the keys are not a fixed list and should be read from this response\nrather than hardcoded." + } + }, + "logic_operators": { + "target": "com.hostinger.api#ReachV1ContactsSegmentsSegmentFilterAttributesResourceLogicOperatorsMap", + "traits": { + "smithy.api#documentation": "The values accepted by `logic` when a segment combines several conditions." + } + } + }, + "traits": { + "smithy.api#documentation": "The vocabulary a segment condition can be built from, for one profile." + } + }, + "com.hostinger.api#ReachV1ContactsSegmentsSegmentFilterAttributeResource": { + "type": "structure", + "members": { + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Value to send as the condition `attribute`." + } + }, + "type": { + "target": "com.hostinger.api#ReachV1ContactsSegmentsSegmentFilterAttributeResourceType", + "traits": { + "smithy.api#documentation": "Where the attribute is sourced from." + } + }, + "description": { + "target": "smithy.api#String" + }, + "operators": { + "target": "com.hostinger.api#ReachV1ContactsSegmentsSegmentFilterAttributeResourceOperatorsMap", + "traits": { + "smithy.api#documentation": "Operators this attribute accepts, keyed by operator name." + } + } + }, + "traits": { + "smithy.api#documentation": "One attribute a segment condition can filter on." + } + }, + "com.hostinger.api#ReachV1ContactsSegmentsSegmentFilterAttributeResourceType": { + "type": "enum", + "members": { + "CONTACTS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "contacts" + } + }, + "CONTACT_METADATA": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "contact_metadata" + } + }, + "CAMPAIGN_EVENTS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "campaign_events" + } + }, + "CONTACT_TAGS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "contact_tags" + } + }, + "CAMPAIGNS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "campaigns" + } + }, + "OPT_IN_METHOD": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "opt_in_method" + } + }, + "CONTACT_FIELD_VALUES": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "contact_field_values" + } + }, + "CONTACT_FIELD_SELECTIONS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "contact_field_selections" + } + } + }, + "traits": { + "smithy.api#documentation": "Where the attribute is sourced from." + } + }, + "com.hostinger.api#ReachV1ContactsSegmentsSegmentFilterOperatorResource": { + "type": "structure", + "members": { + "operator": { + "target": "com.hostinger.api#ReachV1ContactsSegmentsSegmentFilterOperatorResourceOperator", + "traits": { + "smithy.api#documentation": "Value to send as the condition `operator`." + } + }, + "description": { + "target": "smithy.api#String" + }, + "input_type": { + "target": "com.hostinger.api#ReachV1ContactsSegmentsSegmentFilterOperatorResourceInputType", + "traits": { + "smithy.api#documentation": "Shape of the value this operator expects, useful for rendering an input." + } + }, + "example": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "An example value in the format this operator expects." + } + }, + "enum_values": { + "target": "com.hostinger.api#ReachV1ContactsSegmentsSegmentFilterOperatorResourceEnumValuesMap", + "traits": { + "smithy.api#documentation": "The values this operator accepts, keyed by the value to send. Only present when the\noperator is constrained to a fixed set, such as a tag or campaign picker." + } + } + }, + "traits": { + "smithy.api#documentation": "One operator an attribute accepts, and the value format it expects." + } + }, + "com.hostinger.api#ReachV1ContactsSegmentsSegmentFilterOperatorResourceOperator": { + "type": "enum", + "members": { + "EQUALS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "equals" + } + }, + "NOT_EQUALS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "not_equals" + } + }, + "CONTAINS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "contains" + } + }, + "NOT_CONTAINS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "not_contains" + } + }, + "GTE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "gte" + } + }, + "LTE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "lte" + } + }, + "EXISTS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "exists" + } + }, + "WITHIN_LAST_DAYS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "within_last_days" + } + }, + "NOT_WITHIN_LAST_DAYS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "not_within_last_days" + } + }, + "OLDER_THAN_DAYS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "older_than_days" + } + }, + "PROCESSED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "processed" + } + }, + "NOT_PROCESSED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "not_processed" + } + }, + "DELIVERED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "delivered" + } + }, + "NOT_DELIVERED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "not_delivered" + } + }, + "DROPPED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "dropped" + } + }, + "NOT_DROPPED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "not_dropped" + } + }, + "BOUNCED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "bounced" + } + }, + "NOT_BOUNCED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "not_bounced" + } + }, + "SOFT_BOUNCED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "soft_bounced" + } + }, + "NOT_SOFT_BOUNCED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "not_soft_bounced" + } + }, + "OPENED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "opened" + } + }, + "NOT_OPENED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "not_opened" + } + }, + "CLICKED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "clicked" + } + }, + "NOT_CLICKED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "not_clicked" + } + }, + "UNSUBSCRIBED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "unsubscribed" + } + }, + "NOT_UNSUBSCRIBED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "not_unsubscribed" + } + } + }, + "traits": { + "smithy.api#documentation": "Value to send as the condition `operator`." + } + }, + "com.hostinger.api#ReachV1ContactsSegmentsSegmentFilterOperatorResourceInputType": { + "type": "enum", + "members": { + "TEXT": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "text" + } + }, + "NUMBER": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "number" + } + }, + "DATE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "date" + } + }, + "SELECT": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "select" + } + } + }, + "traits": { + "smithy.api#documentation": "Shape of the value this operator expects, useful for rendering an input." + } + }, + "com.hostinger.api#ReachV1ContactsSegmentsSegmentFilterOperatorResourceEnumValuesMap": { + "type": "map", + "key": { + "target": "smithy.api#String" + }, + "value": { + "target": "smithy.api#String" + }, + "traits": { + "smithy.api#documentation": "The values this operator accepts, keyed by the value to send. Only present when the\noperator is constrained to a fixed set, such as a tag or campaign picker." + } + }, + "com.hostinger.api#ReachV1ContactsSegmentsSegmentFilterAttributeResourceOperatorsMap": { + "type": "map", + "key": { + "target": "smithy.api#String" + }, + "value": { + "target": "com.hostinger.api#ReachV1ContactsSegmentsSegmentFilterOperatorResource" + }, + "traits": { + "smithy.api#documentation": "Operators this attribute accepts, keyed by operator name." + } + }, + "com.hostinger.api#ReachV1ContactsSegmentsSegmentFilterAttributesResourceAttributesMap": { + "type": "map", + "key": { + "target": "smithy.api#String" + }, + "value": { + "target": "com.hostinger.api#ReachV1ContactsSegmentsSegmentFilterAttributeResource" + }, + "traits": { + "smithy.api#documentation": "Every attribute a condition can filter on, keyed by the value to send as\n`attribute`. Custom contact fields are keyed `cf:{fieldUuid}`, tags and campaigns by\ntheir uuid, so the keys are not a fixed list and should be read from this response\nrather than hardcoded." + } + }, + "com.hostinger.api#ReachV1ContactsSegmentsSegmentFilterAttributesResourceLogicOperatorsMap": { + "type": "map", + "key": { + "target": "smithy.api#String" + }, + "value": { + "target": "smithy.api#String" + }, + "traits": { + "smithy.api#documentation": "The values accepted by `logic` when a segment combines several conditions." + } + }, + "com.hostinger.api#ListReachSegmentFilterAttributesV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListReachSegmentFilterAttributesV1Request" + }, + "output": { + "target": "com.hostinger.api#ReachV1ContactsSegmentsSegmentFilterAttributesResource" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/reach/v1/profiles/{profileUuid}/segmentation/filters/attributes", + "code": 200 + }, + "smithy.api#documentation": "List segment filter attributes\n\nList every attribute a segment condition can filter on, with the operators each attribute\naccepts, the value format they expect and, where the value is constrained, the allowed\nvalues.\n\nThe list is profile specific: it includes the profile's custom contact fields, its tags and\nits 20 most recently published campaigns, so the valid attributes cannot be hardcoded. Read\nit before creating or updating a segment to discover the valid `attribute`, `operator` and\n`value` combinations." + } + }, + "com.hostinger.api#PreviewReachContactsMatchingConditionsV1RequestConditionsItemOperator": { + "type": "enum", + "members": { + "EQUALS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "equals" + } + }, + "NOT_EQUALS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "not_equals" + } + }, + "CONTAINS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "contains" + } + }, + "NOT_CONTAINS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "not_contains" + } + }, + "GTE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "gte" + } + }, + "LTE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "lte" + } + }, + "EXISTS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "exists" + } + }, + "WITHIN_LAST_DAYS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "within_last_days" + } + }, + "NOT_WITHIN_LAST_DAYS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "not_within_last_days" + } + }, + "OLDER_THAN_DAYS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "older_than_days" + } + }, + "PROCESSED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "processed" + } + }, + "NOT_PROCESSED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "not_processed" + } + }, + "DELIVERED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "delivered" + } + }, + "NOT_DELIVERED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "not_delivered" + } + }, + "DROPPED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "dropped" + } + }, + "NOT_DROPPED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "not_dropped" + } + }, + "BOUNCED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "bounced" + } + }, + "NOT_BOUNCED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "not_bounced" + } + }, + "SOFT_BOUNCED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "soft_bounced" + } + }, + "NOT_SOFT_BOUNCED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "not_soft_bounced" + } + }, + "OPENED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "opened" + } + }, + "NOT_OPENED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "not_opened" + } + }, + "CLICKED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "clicked" + } + }, + "NOT_CLICKED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "not_clicked" + } + }, + "UNSUBSCRIBED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "unsubscribed" + } + }, + "NOT_UNSUBSCRIBED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "not_unsubscribed" + } + } + }, + "traits": {} + }, + "com.hostinger.api#PreviewReachContactsMatchingConditionsV1RequestConditionsItem": { + "type": "structure", + "members": { + "attribute": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "A built-in contact attribute, or `cf:{fieldUuid}` to target a custom\ncontact field. Which operators are accepted depends on the attribute,\nso read the segment filter attributes endpoint for the authoritative\nlist.", + "smithy.api#required": {} + } + }, + "operator": { + "target": "com.hostinger.api#PreviewReachContactsMatchingConditionsV1RequestConditionsItemOperator", + "traits": { + "smithy.api#required": {} + } + }, + "value": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Always a string, including for numeric and date comparisons", + "smithy.api#required": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#PreviewReachContactsMatchingConditionsV1RequestConditionsList": { + "type": "list", + "member": { + "target": "com.hostinger.api#PreviewReachContactsMatchingConditionsV1RequestConditionsItem" + }, + "traits": { + "smithy.api#documentation": "Conditions a contact must satisfy to appear in the preview" + } + }, + "com.hostinger.api#PreviewReachContactsMatchingConditionsV1RequestLogic": { + "type": "enum", + "members": { + "AND": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "AND" + } + }, + "OR": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "OR" + } + } + }, + "traits": { + "smithy.api#documentation": "How to combine multiple conditions" + } + }, + "com.hostinger.api#PreviewReachContactsMatchingConditionsV1RequestSortBy": { + "type": "enum", + "members": { + "EMAIL": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "email" + } + }, + "NAME": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "name" + } + }, + "SURNAME": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "surname" + } + }, + "PHONE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "phone" + } + }, + "SUBSCRIPTION_STATUS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "subscription_status" + } + } + }, + "traits": {} + }, + "com.hostinger.api#PreviewReachContactsMatchingConditionsV1RequestSortDirection": { + "type": "enum", + "members": { + "ASC": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "asc" + } + }, + "DESC": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "desc" + } + } + }, + "traits": {} + }, + "com.hostinger.api#PreviewReachContactsMatchingConditionsV1Request": { + "type": "structure", + "members": { + "profileUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Profile uuid parameter" + } + }, + "conditions": { + "target": "com.hostinger.api#PreviewReachContactsMatchingConditionsV1RequestConditionsList", + "traits": { + "smithy.api#documentation": "Conditions a contact must satisfy to appear in the preview", + "smithy.api#required": {} + } + }, + "logic": { + "target": "com.hostinger.api#PreviewReachContactsMatchingConditionsV1RequestLogic", + "traits": { + "smithy.api#documentation": "How to combine multiple conditions", + "smithy.api#required": {} + } + }, + "page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Page number" + } + }, + "per_page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Number of items per page" + } + }, + "search": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Narrow the preview to contacts whose email matches" + } + }, + "sort_by": { + "target": "com.hostinger.api#PreviewReachContactsMatchingConditionsV1RequestSortBy" + }, + "sort_direction": { + "target": "com.hostinger.api#PreviewReachContactsMatchingConditionsV1RequestSortDirection" + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#PreviewReachContactsMatchingConditionsV1Response": { + "type": "structure", + "members": { + "data": { + "target": "com.hostinger.api#ReachV1ContactsProfileContactCollection" + }, + "meta": { + "target": "com.hostinger.api#CommonSchemaPaginationMetaSchema" + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#PreviewReachContactsMatchingConditionsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#PreviewReachContactsMatchingConditionsV1Request" + }, + "output": { + "target": "com.hostinger.api#PreviewReachContactsMatchingConditionsV1Response" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/reach/v1/profiles/{profileUuid}/segmentation/filters/contacts", + "code": 200 + }, + "smithy.api#documentation": "Preview contacts matching conditions\n\nPreview the contacts matching a set of conditions without saving a segment.\n\nThe body is the same set of conditions accepted when creating or updating a segment, so this\nis how to check who a filter reaches, and how many, before persisting it. Nothing is stored\nand no contact is modified.\n\nCall the segment filter attributes endpoint first to discover the valid `attribute`,\n`operator` and `value` combinations." + } + }, + "com.hostinger.api#ListReachProfileSegmentsV1RequestCountType": { + "type": "enum", + "members": { + "ALL": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "all" + } + }, + "SUBSCRIBED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "subscribed" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListReachProfileSegmentsV1Request": { + "type": "structure", + "members": { + "profileUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Profile uuid parameter" + } + }, + "count_type": { + "target": "com.hostinger.api#ListReachProfileSegmentsV1RequestCountType", + "traits": { + "smithy.api#httpQuery": "count_type", + "smithy.api#documentation": "Which matching contacts to count for each segment" + } + }, + "page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "page", + "smithy.api#documentation": "Page number" + } + }, + "per_page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "per_page", + "smithy.api#documentation": "Number of items per page" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#ReachV1ContactsSegmentsSegmentListItemCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#ReachV1ContactsSegmentsSegmentListItemResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`Reach.V1.Contacts.Segments.SegmentListItemResource`](#model/reachv1contactssegmentssegmentlistitemresource)" + } + }, + "com.hostinger.api#ReachV1ContactsSegmentsSegmentListItemResource": { + "type": "structure", + "members": { + "uuid": { + "target": "smithy.api#String" + }, + "name": { + "target": "smithy.api#String" + }, + "contacts_count": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Contacts currently matching the segment conditions" + } + }, + "created_at": { + "target": "smithy.api#String" + }, + "updated_at": { + "target": "smithy.api#String" + } + }, + "traits": {} + }, + "com.hostinger.api#ListReachProfileSegmentsV1Response": { + "type": "structure", + "members": { + "data": { + "target": "com.hostinger.api#ReachV1ContactsSegmentsSegmentListItemCollection" + }, + "meta": { + "target": "com.hostinger.api#CommonSchemaPaginationMetaSchema" + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListReachProfileSegmentsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListReachProfileSegmentsV1Request" + }, + "output": { + "target": "com.hostinger.api#ListReachProfileSegmentsV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/reach/v1/profiles/{profileUuid}/segmentation/segments", + "code": 200 + }, + "smithy.api#documentation": "List profile segments\n\nGet a paginated list of the segments defined in a profile.\n\nEach entry carries the number of contacts currently matching it, which is recalculated on\nread rather than stored. Use `count_type` to count either every matching contact or only\nthe subscribed ones." + } + }, + "com.hostinger.api#CreateReachAProfileSegmentV1RequestConditionsItemOperator": { + "type": "enum", + "members": { + "EQUALS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "equals" + } + }, + "NOT_EQUALS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "not_equals" + } + }, + "CONTAINS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "contains" + } + }, + "NOT_CONTAINS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "not_contains" + } + }, + "GTE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "gte" + } + }, + "LTE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "lte" + } + }, + "EXISTS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "exists" + } + }, + "WITHIN_LAST_DAYS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "within_last_days" + } + }, + "NOT_WITHIN_LAST_DAYS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "not_within_last_days" + } + }, + "OLDER_THAN_DAYS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "older_than_days" + } + }, + "PROCESSED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "processed" + } + }, + "NOT_PROCESSED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "not_processed" + } + }, + "DELIVERED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "delivered" + } + }, + "NOT_DELIVERED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "not_delivered" + } + }, + "DROPPED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "dropped" + } + }, + "NOT_DROPPED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "not_dropped" + } + }, + "BOUNCED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "bounced" + } + }, + "NOT_BOUNCED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "not_bounced" + } + }, + "SOFT_BOUNCED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "soft_bounced" + } + }, + "NOT_SOFT_BOUNCED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "not_soft_bounced" + } + }, + "OPENED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "opened" + } + }, + "NOT_OPENED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "not_opened" + } + }, + "CLICKED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "clicked" + } + }, + "NOT_CLICKED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "not_clicked" + } + }, + "UNSUBSCRIBED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "unsubscribed" + } + }, + "NOT_UNSUBSCRIBED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "not_unsubscribed" + } + } + }, + "traits": {} + }, + "com.hostinger.api#CreateReachAProfileSegmentV1RequestConditionsItem": { + "type": "structure", + "members": { + "attribute": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "A built-in contact attribute, or `cf:{fieldUuid}` to target a custom\ncontact field. Custom fields are addressed by field UUID; their slug\nis not accepted.\n\nBuilt-in attributes: `email`, `note`, `domain`, `source`,\n`opt_in_method`, `subscription_status`, `subscribed_at`,\n`unsubscribed_at`, `created_at`, `tag`, `campaigns`, `processed`,\n`opened`, `clicked`, `delivered`, `bounced`, `soft_bounced`,\n`dropped`.\n\nWhich operators are accepted depends on the attribute.", + "smithy.api#required": {} + } + }, + "operator": { + "target": "com.hostinger.api#CreateReachAProfileSegmentV1RequestConditionsItemOperator", + "traits": { + "smithy.api#required": {} + } + }, + "value": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Always a string, including for numeric and date comparisons", + "smithy.api#required": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#CreateReachAProfileSegmentV1RequestConditionsList": { + "type": "list", + "member": { + "target": "com.hostinger.api#CreateReachAProfileSegmentV1RequestConditionsItem" + }, + "traits": { + "smithy.api#documentation": "Conditions a contact must satisfy to fall into the segment" + } + }, + "com.hostinger.api#CreateReachAProfileSegmentV1RequestLogic": { + "type": "enum", + "members": { + "AND": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "AND" + } + }, + "OR": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "OR" + } + } + }, + "traits": { + "smithy.api#documentation": "How to combine multiple conditions" + } + }, + "com.hostinger.api#CreateReachAProfileSegmentV1Request": { + "type": "structure", + "members": { + "profileUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Profile uuid parameter" + } + }, + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#required": {} + } + }, + "conditions": { + "target": "com.hostinger.api#CreateReachAProfileSegmentV1RequestConditionsList", + "traits": { + "smithy.api#documentation": "Conditions a contact must satisfy to fall into the segment", + "smithy.api#required": {} + } + }, + "logic": { + "target": "com.hostinger.api#CreateReachAProfileSegmentV1RequestLogic", + "traits": { + "smithy.api#documentation": "How to combine multiple conditions", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#CreateReachAProfileSegmentV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#CreateReachAProfileSegmentV1Request" + }, + "output": { + "target": "com.hostinger.api#ReachV1ContactsSegmentsSegmentResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/reach/v1/profiles/{profileUuid}/segmentation/segments", + "code": 200 + }, + "smithy.api#documentation": "Create a profile segment\n\nCreate a segment in a profile.\n\nA segment is a saved set of conditions rather than a fixed list, so its membership changes\nas contacts change. Creating one does not modify any contact." + } + }, + "com.hostinger.api#AssignReachAContactToATagV1Request": { + "type": "structure", + "members": { + "profileUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Profile uuid parameter" + } + }, + "tagUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Tag uuid parameter" + } + }, + "contactUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Contact uuid parameter" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#AssignReachAContactToATagV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#AssignReachAContactToATagV1Request" + }, + "output": { + "target": "com.hostinger.api#ReachV1ContactsTagsTagResource" + }, + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/reach/v1/profiles/{profileUuid}/tags/{tagUuid}/contacts/{contactUuid}", + "code": 200 + }, + "smithy.api#documentation": "Assign a contact to a tag\n\nAssign a tag to a single contact.\n\nUnlike the bulk endpoint this is applied immediately rather than queued. Assigning a tag\nthe contact already carries succeeds without duplicating it." + } + }, + "com.hostinger.api#RemoveReachAContactFromATagV1Request": { + "type": "structure", + "members": { + "profileUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Profile uuid parameter" + } + }, + "tagUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Tag uuid parameter" + } + }, + "contactUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Contact uuid parameter" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#RemoveReachAContactFromATagV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#RemoveReachAContactFromATagV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "traits": { + "smithy.api#http": { + "method": "DELETE", + "uri": "/api/reach/v1/profiles/{profileUuid}/tags/{tagUuid}/contacts/{contactUuid}", + "code": 200 + }, + "smithy.api#documentation": "Remove a contact from a tag\n\nRemove a tag from a single contact.\n\nUnlike the bulk endpoint this is applied immediately rather than queued. Neither the tag\nnor the contact is deleted." + } + }, + "com.hostinger.api#AssignReachContactsToATagV1RequestContactUuidsList": { + "type": "list", + "member": { + "target": "smithy.api#String" + }, + "traits": { + "smithy.api#documentation": "Contacts to apply the change to. Required unless all_contacts is true." + } + }, + "com.hostinger.api#AssignReachContactsToATagV1Request": { + "type": "structure", + "members": { + "profileUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Profile uuid parameter" + } + }, + "tagUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Tag uuid parameter" + } + }, + "contact_uuids": { + "target": "com.hostinger.api#AssignReachContactsToATagV1RequestContactUuidsList", + "traits": { + "smithy.api#documentation": "Contacts to apply the change to. Required unless all_contacts is true." + } + }, + "all_contacts": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Apply to every contact in the profile" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#AssignReachContactsToATagV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#AssignReachContactsToATagV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/reach/v1/profiles/{profileUuid}/tags/{tagUuid}/contacts", + "code": 200 + }, + "smithy.api#documentation": "Assign contacts to a tag\n\nAssign a tag to many contacts at once.\n\nPass `contact_uuids` to target specific contacts, or `all_contacts` to target every contact\nin the profile. The work is queued, so a success response means it was accepted rather than\nfinished. Contacts that already carry the tag are left alone." + } + }, + "com.hostinger.api#RemoveReachContactsFromATagV1RequestContactUuidsList": { + "type": "list", + "member": { + "target": "smithy.api#String" + }, + "traits": { + "smithy.api#documentation": "Contacts to apply the change to. Required unless all_contacts is true." + } + }, + "com.hostinger.api#RemoveReachContactsFromATagV1Request": { + "type": "structure", + "members": { + "profileUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Profile uuid parameter" + } + }, + "tagUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Tag uuid parameter" + } + }, + "contact_uuids": { + "target": "com.hostinger.api#RemoveReachContactsFromATagV1RequestContactUuidsList", + "traits": { + "smithy.api#documentation": "Contacts to apply the change to. Required unless all_contacts is true." + } + }, + "all_contacts": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Apply to every contact in the profile" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#RemoveReachContactsFromATagV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#RemoveReachContactsFromATagV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "DELETE", + "uri": "/api/reach/v1/profiles/{profileUuid}/tags/{tagUuid}/contacts", + "code": 200 + }, + "smithy.api#documentation": "Remove contacts from a tag\n\nRemove a tag from many contacts at once.\n\nPass `contact_uuids` to target specific contacts, or `all_contacts` to target every contact\nin the profile. The work is queued, so a success response means it was accepted rather than\nfinished. The tag itself and the contacts are not deleted." + } + }, + "com.hostinger.api#RenameReachATagV1Request": { + "type": "structure", + "members": { + "profileUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Profile uuid parameter" + } + }, + "tagUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Tag uuid parameter" + } + }, + "value": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "New tag name", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#RenameReachATagV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#RenameReachATagV1Request" + }, + "output": { + "target": "com.hostinger.api#ReachV1ContactsTagsTagResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "PATCH", + "uri": "/api/reach/v1/profiles/{profileUuid}/tags/{tagUuid}", + "code": 200 + }, + "smithy.api#documentation": "Rename a tag\n\nRename a tag.\n\nThe contacts assigned to the tag are unaffected. Names are unique within a profile, so\nrenaming a tag to a name that is already taken is rejected." + } + }, + "com.hostinger.api#DeleteReachATagV1Request": { + "type": "structure", + "members": { + "profileUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Profile uuid parameter" + } + }, + "tagUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Tag uuid parameter" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DeleteReachATagV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#DeleteReachATagV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "traits": { + "smithy.api#http": { + "method": "DELETE", + "uri": "/api/reach/v1/profiles/{profileUuid}/tags/{tagUuid}", + "code": 200 + }, + "smithy.api#documentation": "Delete a tag\n\nDelete a tag and remove it from every contact carrying it.\n\nThe contacts themselves are not deleted. This is idempotent: deleting a tag that does not\nexist in the profile still succeeds." + } + }, + "com.hostinger.api#ListReachProfileTagsV1Request": { + "type": "structure", + "members": { + "profileUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Profile uuid parameter" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#ReachV1ContactsTagsTagCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#ReachV1ContactsTagsTagResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`Reach.V1.Contacts.Tags.TagResource`](#model/reachv1contactstagstagresource)" + } + }, + "com.hostinger.api#ListReachProfileTagsV1Response": { + "type": "structure", + "members": { + "body": { + "target": "com.hostinger.api#ReachV1ContactsTagsTagCollection", + "traits": { + "com.distilled.openapi#rawResponse": {}, + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListReachProfileTagsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListReachProfileTagsV1Request" + }, + "output": { + "target": "com.hostinger.api#ListReachProfileTagsV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/reach/v1/profiles/{profileUuid}/tags", + "code": 200 + }, + "smithy.api#documentation": "List profile tags\n\nGet all tags defined in a profile.\n\nTags are the way contacts are grouped in Reach, and can be used to filter the contact\nlist or to build segments." + } + }, + "com.hostinger.api#ReachCreateOrFindTagsV1RequestNamesList": { + "type": "list", + "member": { + "target": "smithy.api#String" + }, + "traits": {} + }, + "com.hostinger.api#ReachCreateOrFindTagsV1Request": { + "type": "structure", + "members": { + "profileUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Profile uuid parameter" + } + }, + "names": { + "target": "com.hostinger.api#ReachCreateOrFindTagsV1RequestNamesList", + "traits": { + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#ReachCreateOrFindTagsV1Response": { + "type": "structure", + "members": { + "body": { + "target": "com.hostinger.api#ReachV1ContactsTagsTagCollection", + "traits": { + "com.distilled.openapi#rawResponse": {}, + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ReachCreateOrFindTagsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ReachCreateOrFindTagsV1Request" + }, + "output": { + "target": "com.hostinger.api#ReachCreateOrFindTagsV1Response" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/reach/v1/profiles/{profileUuid}/tags", + "code": 200 + }, + "smithy.api#documentation": "Create or find tags\n\nCreate tags in a profile.\n\nNames that already exist in the profile are not duplicated: the existing tag is returned\ninstead, so the call is safe to repeat. Every tag in the request is returned, whether it\nwas created now or already existed." + } + }, + "com.hostinger.api#GetReachFormDetailsV1Request": { + "type": "structure", + "members": { + "profileUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Profile uuid parameter" + } + }, + "formUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Form uuid parameter" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#ReachV1FormsFormDetailsResource": { + "type": "structure", + "members": { + "uuid": { + "target": "smithy.api#String" + }, + "name": { + "target": "smithy.api#String" + }, + "status": { + "target": "com.hostinger.api#ReachV1FormsFormDetailsResourceStatus", + "traits": { + "smithy.api#documentation": "A `paused` form keeps its template online but stops accepting submissions." + } + }, + "type": { + "target": "com.hostinger.api#ReachV1FormsFormDetailsResourceType" + }, + "template": { + "target": "com.hostinger.api#ReachV1FormsFormTemplateDetailsResource" + }, + "tags": { + "target": "com.hostinger.api#ReachV1FormsFormDetailsResourceTagsList", + "traits": { + "smithy.api#documentation": "Tags applied to every contact this form captures." + } + }, + "created_at": { + "target": "smithy.api#String" + }, + "updated_at": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#ReachV1FormsFormDetailsResourceStatus": { + "type": "enum", + "members": { + "ACTIVE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "active" + } + }, + "PAUSED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "paused" + } + }, + "DRAFT": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "draft" + } + } + }, + "traits": { + "smithy.api#documentation": "A `paused` form keeps its template online but stops accepting submissions." + } + }, + "com.hostinger.api#ReachV1FormsFormDetailsResourceType": { + "type": "enum", + "members": { + "FORM": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "form" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ReachV1FormsFormTemplateDetailsResource": { + "type": "structure", + "members": { + "uuid": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "path": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Storage path of the template HTML, relative to the storage directory of this profile. `url`\nalready includes that prefix, so prefer it unless you resolve storage paths yourself.", + "com.distilled.openapi#nullable": {} + } + }, + "url": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Publicly reachable URL of the template HTML.", + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": { + "smithy.api#documentation": "The rendered form template. There is no ready-made embed snippet - either serve the HTML behind\n`url` or build your own embed around the form uuid. All fields stay null until the template has\nbeen generated." + } + }, + "com.hostinger.api#ReachV1FormsFormTagResource": { + "type": "structure", + "members": { + "uuid": { + "target": "smithy.api#String" + }, + "value": { + "target": "smithy.api#String" + }, + "type": { + "target": "com.hostinger.api#ReachV1FormsFormTagResourceType", + "traits": { + "smithy.api#documentation": "How the tag came about. `custom` covers the tags you create yourself, `import` the ones added\nby contact imports, and `form` and `system` the ones Reach creates on its own. Every form gets\na `form:{name}` tag when it is created." + } + } + }, + "traits": { + "smithy.api#documentation": "A tag applied to every contact this form captures." + } + }, + "com.hostinger.api#ReachV1FormsFormTagResourceType": { + "type": "enum", + "members": { + "FORM": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "form" + } + }, + "CUSTOM": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "custom" + } + }, + "IMPORT": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "import" + } + }, + "SYSTEM": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "system" + } + } + }, + "traits": { + "smithy.api#documentation": "How the tag came about. `custom` covers the tags you create yourself, `import` the ones added\nby contact imports, and `form` and `system` the ones Reach creates on its own. Every form gets\na `form:{name}` tag when it is created." + } + }, + "com.hostinger.api#ReachV1FormsFormDetailsResourceTagsList": { + "type": "list", + "member": { + "target": "com.hostinger.api#ReachV1FormsFormTagResource" + }, + "traits": { + "smithy.api#documentation": "Tags applied to every contact this form captures." + } + }, + "com.hostinger.api#GetReachFormDetailsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#GetReachFormDetailsV1Request" + }, + "output": { + "target": "com.hostinger.api#ReachV1FormsFormDetailsResource" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/reach/v1/profiles/{profileUuid}/forms/{formUuid}", + "code": 200 + }, + "smithy.api#documentation": "Get form details\n\nGet a single form with the URL of its hosted template and the tags it applies to the contacts\nit captures.\n\nThere is no ready-made embed snippet in the response - either serve the template HTML yourself\nor build your own embed around the form uuid." + } + }, + "com.hostinger.api#DeleteReachFormV1Request": { + "type": "structure", + "members": { + "profileUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Profile uuid parameter" + } + }, + "formUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Form uuid parameter" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DeleteReachFormV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#DeleteReachFormV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#Conflict" + } + ], + "traits": { + "smithy.api#http": { + "method": "DELETE", + "uri": "/api/reach/v1/profiles/{profileUuid}/forms/{formUuid}", + "code": 200 + }, + "smithy.api#documentation": "Delete form\n\nPermanently delete a form together with its template.\n\nA form that has already captured submissions cannot be deleted, so that the contacts it collected\nare never silently discarded - pause the form instead to stop it collecting new ones. Views alone\ndo not block deletion." + } + }, + "com.hostinger.api#ListReachFormsV1Request": { + "type": "structure", + "members": { + "profileUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Profile uuid parameter" + } + }, + "page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "page", + "smithy.api#documentation": "Page number" + } + }, + "per_page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "per_page", + "smithy.api#documentation": "Number of items per page" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#ReachV1FormsFormCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#ReachV1FormsFormResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`Reach.V1.Forms.FormResource`](#model/reachv1formsformresource)" + } + }, + "com.hostinger.api#ReachV1FormsFormResource": { + "type": "structure", + "members": { + "uuid": { + "target": "smithy.api#String" + }, + "name": { + "target": "smithy.api#String" + }, + "status": { + "target": "com.hostinger.api#ReachV1FormsFormResourceStatus", + "traits": { + "smithy.api#documentation": "A `paused` form keeps its template online but stops accepting submissions." + } + }, + "type": { + "target": "com.hostinger.api#ReachV1FormsFormResourceType" + }, + "template": { + "target": "com.hostinger.api#ReachV1FormsFormTemplateResource" + }, + "created_at": { + "target": "smithy.api#String" + }, + "updated_at": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#ReachV1FormsFormResourceStatus": { + "type": "enum", + "members": { + "ACTIVE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "active" + } + }, + "PAUSED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "paused" + } + }, + "DRAFT": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "draft" + } + } + }, + "traits": { + "smithy.api#documentation": "A `paused` form keeps its template online but stops accepting submissions." + } + }, + "com.hostinger.api#ReachV1FormsFormResourceType": { + "type": "enum", + "members": { + "FORM": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "form" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ReachV1FormsFormTemplateResource": { + "type": "structure", + "members": { + "uuid": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "path": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Storage path of the template HTML, relative to the storage directory of this profile. Get the\nform details to receive a directly usable URL instead.", + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": { + "smithy.api#documentation": "The rendered form template. Both fields stay null until the template has been generated." + } + }, + "com.hostinger.api#ListReachFormsV1Response": { + "type": "structure", + "members": { + "data": { + "target": "com.hostinger.api#ReachV1FormsFormCollection" + }, + "meta": { + "target": "com.hostinger.api#CommonSchemaPaginationMetaSchema" + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListReachFormsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListReachFormsV1Request" + }, + "output": { + "target": "com.hostinger.api#ListReachFormsV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/reach/v1/profiles/{profileUuid}/forms", + "code": 200 + }, + "smithy.api#documentation": "List forms\n\nGet a paginated list of the signup forms in a profile.\n\nEach form carries a reference to the template that renders it. Get the form details for a\ndirectly usable template URL and for the tags the form puts on the contacts it captures." + } + }, + "com.hostinger.api#GetReachProfileDomainDNSStatusV1Request": { + "type": "structure", + "members": { + "profileUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Profile uuid parameter" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#ReachV1ProfilesDomainsDnsStatusResource": { + "type": "structure", + "members": { + "domain": { + "target": "smithy.api#String" + }, + "mx": { + "target": "com.hostinger.api#ReachV1ProfilesDomainsDnsRecordStatus" + }, + "spf": { + "target": "com.hostinger.api#ReachV1ProfilesDomainsDnsRecordStatus" + }, + "dkim": { + "target": "com.hostinger.api#ReachV1ProfilesDomainsDnsRecordStatus" + }, + "dmarc": { + "target": "com.hostinger.api#ReachV1ProfilesDomainsDnsRecordStatus" + } + }, + "traits": {} + }, + "com.hostinger.api#ReachV1ProfilesDomainsDnsRecordStatus": { + "type": "structure", + "members": { + "actual": { + "target": "com.hostinger.api#ReachV1ProfilesDomainsDnsRecordStatusActualList" + }, + "suggested": { + "target": "com.hostinger.api#ReachV1ProfilesDomainsDnsRecordStatusSuggestedList" + }, + "is_valid": { + "target": "smithy.api#Boolean" + } + }, + "traits": {} + }, + "com.hostinger.api#ReachV1ProfilesDomainsDnsRecordStatusActualItem": { + "type": "structure", + "members": { + "type": { + "target": "smithy.api#String" + }, + "value": { + "target": "smithy.api#String" + } + }, + "traits": {} + }, + "com.hostinger.api#ReachV1ProfilesDomainsDnsRecordStatusActualList": { + "type": "list", + "member": { + "target": "com.hostinger.api#ReachV1ProfilesDomainsDnsRecordStatusActualItem" + }, + "traits": {} + }, + "com.hostinger.api#ReachV1ProfilesDomainsDnsRecordStatusSuggestedItem": { + "type": "structure", + "members": { + "name": { + "target": "smithy.api#String" + }, + "type": { + "target": "smithy.api#String" + }, + "value": { + "target": "smithy.api#String" + } + }, + "traits": {} + }, + "com.hostinger.api#ReachV1ProfilesDomainsDnsRecordStatusSuggestedList": { + "type": "list", + "member": { + "target": "com.hostinger.api#ReachV1ProfilesDomainsDnsRecordStatusSuggestedItem" + }, + "traits": {} + }, + "com.hostinger.api#GetReachProfileDomainDNSStatusV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#GetReachProfileDomainDNSStatusV1Request" + }, + "output": { + "target": "com.hostinger.api#ReachV1ProfilesDomainsDnsStatusResource" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/reach/v1/profiles/{profileUuid}/domains/dns-status", + "code": 200 + }, + "smithy.api#documentation": "Get profile domain DNS status\n\nRetrieve the DNS configuration status for a profile's domain.\n\nThis endpoint reports the state of MX, SPF, DKIM and DMARC records, including the\nactual records found and the suggested records required for correct email delivery." + } + }, + "com.hostinger.api#GetReachConnectedSendingDomainV1Request": { + "type": "structure", + "members": { + "profileUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Profile uuid parameter" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#ReachV1ProfilesDomainsSendingDomainResource": { + "type": "structure", + "members": { + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Domain campaigns are sent from. It may be a subdomain of the domain that was\nconnected, so it will not always match the website domain.", + "com.distilled.openapi#nullable": {} + } + }, + "status": { + "target": "com.hostinger.api#ReachV1ProfilesDomainsSendingDomainResourceStatus", + "traits": { + "smithy.api#documentation": "Campaigns can only be sent while the domain is `active`.", + "com.distilled.openapi#nullable": {} + } + }, + "created_at": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "When the domain was connected to the profile.", + "com.distilled.openapi#nullable": {} + } + }, + "updated_at": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "When the domain or its verification state last changed.", + "com.distilled.openapi#nullable": {} + } + }, + "suspended_sender_emails": { + "target": "com.hostinger.api#ReachV1ProfilesDomainsSendingDomainResourceSuspendedSenderEmailsList", + "traits": { + "smithy.api#documentation": "Sender addresses on this domain that have been suspended. A campaign using one of\nthem will not go out even while the domain itself is active." + } + } + }, + "traits": { + "smithy.api#documentation": "The sending domain connected to the profile.\n\nWhen no domain is connected every field is `null` and `suspended_sender_emails` is empty,\nso the shape stays the same whether or not the profile is set up for sending." + } + }, + "com.hostinger.api#ReachV1ProfilesDomainsSendingDomainResourceStatus": { + "type": "enum", + "members": { + "ACTIVE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "active" + } + }, + "INACTIVE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "inactive" + } + }, + "PENDING": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "pending" + } + }, + "BLOCKED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "blocked" + } + } + }, + "traits": { + "smithy.api#documentation": "Campaigns can only be sent while the domain is `active`." + } + }, + "com.hostinger.api#ReachV1ProfilesDomainsSuspendedSenderEmailResource": { + "type": "structure", + "members": { + "email": { + "target": "smithy.api#String" + }, + "email_local_part": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "The part of the address before the @." + } + }, + "suspended_at": { + "target": "smithy.api#String" + } + }, + "traits": { + "smithy.api#documentation": "A sender address on the connected domain that is no longer allowed to send." + } + }, + "com.hostinger.api#ReachV1ProfilesDomainsSendingDomainResourceSuspendedSenderEmailsList": { + "type": "list", + "member": { + "target": "com.hostinger.api#ReachV1ProfilesDomainsSuspendedSenderEmailResource" + }, + "traits": { + "smithy.api#documentation": "Sender addresses on this domain that have been suspended. A campaign using one of\nthem will not go out even while the domain itself is active." + } + }, + "com.hostinger.api#GetReachConnectedSendingDomainV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#GetReachConnectedSendingDomainV1Request" + }, + "output": { + "target": "com.hostinger.api#ReachV1ProfilesDomainsSendingDomainResource" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/reach/v1/profiles/{profileUuid}/domains", + "code": 200 + }, + "smithy.api#documentation": "Get connected sending domain\n\nGet the sending domain connected to the profile, its verification status and any suspended\nsender addresses.\n\nCampaigns only go out once a domain is connected and active, so this is the cheapest way to\ncheck that precondition before building one. A profile with no domain connected returns the\nsame shape with every field set to `null`. For the individual MX, SPF, DKIM and DMARC records\nbehind the status, use the DNS status endpoint." + } + }, + "com.hostinger.api#ListReachPlanFeatureAccessV1Request": { + "type": "structure", + "members": { + "profileUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Profile uuid parameter" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#ReachV1ProfilesFeaturesPlanFeatureCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#ReachV1ProfilesFeaturesPlanFeatureResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`Reach.V1.Profiles.Features.PlanFeatureResource`](#model/reachv1profilesfeaturesplanfeatureresource)" + } + }, + "com.hostinger.api#ReachV1ProfilesFeaturesPlanFeatureResource": { + "type": "structure", + "members": { + "feature": { + "target": "com.hostinger.api#ReachV1ProfilesFeaturesPlanFeatureResourceFeature" + }, + "is_available": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether the feature can be used right now." + } + }, + "is_locked": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether the feature sits outside the base plan and needs an upgrade." + } + } + }, + "traits": { + "smithy.api#documentation": "Whether a single plan feature can be used on the profile." + } + }, + "com.hostinger.api#ReachV1ProfilesFeaturesPlanFeatureResourceFeature": { + "type": "enum", + "members": { + "AUTOMATIONACTIVATION": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "AutomationActivation" + } + }, + "SMARTSENDING": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "SmartSending" + } + }, + "AIGENERATESUBJECTLINES": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "AiGenerateSubjectLines" + } + }, + "TEMPLATECHECKERANALYSIS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "TemplateCheckerAnalysis" + } + }, + "REMOVESIGNATURE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "RemoveSignature" + } + }, + "COLLABORATORS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "Collaborators" + } + }, + "HTMLCODEEDITOR": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "HtmlCodeEditor" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListReachPlanFeatureAccessV1Response": { + "type": "structure", + "members": { + "body": { + "target": "com.hostinger.api#ReachV1ProfilesFeaturesPlanFeatureCollection", + "traits": { + "com.distilled.openapi#rawResponse": {}, + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListReachPlanFeatureAccessV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListReachPlanFeatureAccessV1Request" + }, + "output": { + "target": "com.hostinger.api#ListReachPlanFeatureAccessV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/reach/v1/profiles/{profileUuid}/features", + "code": 200 + }, + "smithy.api#documentation": "List plan feature access\n\nList which plan features the profile can use.\n\nThis is the feature lock matrix, not a usage quota. `available` means the feature can be\nused right now and `locked` means it is not part of the base plan, so an upgrade is needed.\nFor remaining emails, recipients and AI credits use the limits endpoint instead.\n\nWorth checking before building something that cannot be activated afterwards, such as an\nautomation on a plan without automation activation." + } + }, + "com.hostinger.api#GetReachRemainingPlanLimitsV1Request": { + "type": "structure", + "members": { + "profileUuid": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Profile uuid parameter" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#ReachV1ProfilesPlanLimitsResource": { + "type": "structure", + "members": { + "emails": { + "target": "com.hostinger.api#ReachV1ProfilesPlanLimitUsageResource" + }, + "recipients": { + "target": "com.hostinger.api#ReachV1ProfilesPlanLimitUsageResource" + }, + "ai_credits": { + "target": "com.hostinger.api#ReachV1ProfilesPlanLimitUsageResource" + }, + "period_start": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Start of the current period. Periods are calendar months rather than billing anniversaries,\nso the counters reset at midnight UTC on the 1st no matter when the subscription started." + } + }, + "period_end": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "End of the current period, that is the last moment of the calendar month." + } + } + }, + "traits": { + "smithy.api#documentation": "What the plan allows and what is left of it for the current period.\n\n`emails` counts every email sent. `recipients` counts the distinct contacts emailed - it is not the\nsize of the contact list, a contact emailed three times counts once and a contact never emailed does\nnot count at all. `ai_credits` counts the AI generations used, and its limit includes any extra\ncredits bought on top of the plan." + } + }, + "com.hostinger.api#ReachV1ProfilesPlanLimitUsageResource": { + "type": "structure", + "members": { + "limit": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "The allowance for the current period." + } + }, + "used": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "How much of the allowance has been consumed so far." + } + }, + "remaining": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Headroom left. Floors at 0, so it never reports a negative overage." + } + } + }, + "traits": { + "smithy.api#documentation": "Allowance, consumption and headroom of a single plan limit for the current period." + } + }, + "com.hostinger.api#GetReachRemainingPlanLimitsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#GetReachRemainingPlanLimitsV1Request" + }, + "output": { + "target": "com.hostinger.api#ReachV1ProfilesPlanLimitsResource" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/reach/v1/profiles/{profileUuid}/limits", + "code": 200 + }, + "smithy.api#documentation": "Get remaining plan limits\n\nGet how much of the plan is left for the current period.\n\nTwo things to keep in mind before you build alerting on this. The period is a calendar month\nrather than a billing anniversary, so the counters reset on the 1st no matter when the\nsubscription started. And usage is tracked per order, so every profile on the same order shares\none pool and reports the same numbers here. Only the current period is available, past usage is\nnot kept." + } + }, + "com.hostinger.api#ReachV1ProfilesProfileCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#ReachV1ProfilesProfileResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`Reach.V1.Profiles.ProfileResource`](#model/reachv1profilesprofileresource)" + } + }, + "com.hostinger.api#ReachV1ProfilesProfileResource": { + "type": "structure", + "members": { + "limits": { + "target": "com.hostinger.api#ReachV1ProfilesProfileResourceLimits" + }, + "is_trial": { + "target": "smithy.api#Boolean" + }, + "expires_at": { + "target": "smithy.api#String" + }, + "resource_id": { + "target": "smithy.api#Integer" + }, + "status": { + "target": "smithy.api#String" + }, + "profiles": { + "target": "com.hostinger.api#ReachV1ProfilesProfileResourceProfilesList" + } + }, + "traits": {} + }, + "com.hostinger.api#ReachV1ProfilesProfileResourceLimits": { + "type": "structure", + "members": { + "ai_messages_limit": { + "target": "smithy.api#Integer" + }, + "subscribers_limit": { + "target": "smithy.api#Integer" + }, + "emails_monthly_limit": { + "target": "smithy.api#Integer" + }, + "ai_messages_additional": { + "target": "smithy.api#Integer" + } + }, + "traits": {} + }, + "com.hostinger.api#ReachV1ProfilesProfileResourceProfilesItem": { + "type": "structure", + "members": { + "uuid": { + "target": "smithy.api#String" + }, + "domain": { + "target": "smithy.api#String" + }, + "created_at": { + "target": "smithy.api#String" + }, + "updated_at": { + "target": "smithy.api#String" + } + }, + "traits": {} + }, + "com.hostinger.api#ReachV1ProfilesProfileResourceProfilesList": { + "type": "list", + "member": { + "target": "com.hostinger.api#ReachV1ProfilesProfileResourceProfilesItem" + }, + "traits": {} + }, + "com.hostinger.api#ListReachProfilesV1Response": { + "type": "structure", + "members": { + "body": { + "target": "com.hostinger.api#ReachV1ProfilesProfileCollection", + "traits": { + "com.distilled.openapi#rawResponse": {}, + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListReachProfilesV1": { + "type": "operation", + "input": { + "target": "smithy.api#Unit" + }, + "output": { + "target": "com.hostinger.api#ListReachProfilesV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/reach/v1/profiles", + "code": 200 + }, + "smithy.api#documentation": "List Profiles\n\nThis endpoint returns all profiles available to the client, including their basic information." + } + }, + "com.hostinger.api#VPSV1DataCenterDataCenterCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#VPSV1DataCenterDataCenterResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`VPS.V1.DataCenter.DataCenterResource`](#model/vpsv1datacenterdatacenterresource)" + } + }, + "com.hostinger.api#VPSV1DataCenterDataCenterResource": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Data center ID" + } + }, + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Data center name", + "com.distilled.openapi#nullable": {} + } + }, + "location": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Data center location country (two letter code)", + "com.distilled.openapi#nullable": {} + } + }, + "city": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Data center location city", + "com.distilled.openapi#nullable": {} + } + }, + "continent": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Data center location continent", + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#VPSGetDataCenterListV1Response": { + "type": "structure", + "members": { + "body": { + "target": "com.hostinger.api#VPSV1DataCenterDataCenterCollection", + "traits": { + "com.distilled.openapi#rawResponse": {}, + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#VPSGetDataCenterListV1": { + "type": "operation", + "input": { + "target": "smithy.api#Unit" + }, + "output": { + "target": "com.hostinger.api#VPSGetDataCenterListV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/vps/v1/data-centers", + "code": 200 + }, + "smithy.api#documentation": "Get data center list\n\nRetrieve all available data centers.\n\nUse this endpoint to view location options before deploying VPS instances." + } + }, + "com.hostinger.api#GetVPSProjectContainersV1Request": { + "type": "structure", + "members": { + "virtualMachineId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Virtual Machine ID" + } + }, + "projectName": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Docker Compose project name using alphanumeric characters, dashes, and underscores only" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#VPSV1DockerManagerContainerCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#VPSV1DockerManagerContainerResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`VPS.V1.DockerManager.ContainerResource`](#model/vpsv1dockermanagercontainerresource)" + } + }, + "com.hostinger.api#VPSV1DockerManagerContainerResource": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Unique container identifier (short form of Docker container ID)" + } + }, + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Container name as defined in docker-compose or assigned by Docker" + } + }, + "image": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Docker image name and tag used to create this container" + } + }, + "command": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Command being executed inside the container (may be truncated with ...)" + } + }, + "status": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Human-readable container status including uptime, exit codes, or error information" + } + }, + "state": { + "target": "com.hostinger.api#VPSV1DockerManagerContainerResourceState", + "traits": { + "smithy.api#documentation": "Programmatic container lifecycle state for automated processing" + } + }, + "health": { + "target": "com.hostinger.api#VPSV1DockerManagerContainerResourceHealth", + "traits": { + "smithy.api#documentation": "Container health status" + } + }, + "ports": { + "target": "com.hostinger.api#VPSV1DockerManagerContainerPortCollection" + }, + "stats": { + "target": "com.hostinger.api#VPSV1DockerManagerContainerStatsResource", + "traits": { + "smithy.api#documentation": "Real-time resource usage statistics (only available for running containers)", + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#VPSV1DockerManagerContainerResourceState": { + "type": "enum", + "members": { + "CREATED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "created" + } + }, + "RUNNING": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "running" + } + }, + "RESTARTING": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "restarting" + } + }, + "EXITED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "exited" + } + }, + "PAUSED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "paused" + } + }, + "DEAD": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "dead" + } + }, + "STOPPING": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "stopping" + } + } + }, + "traits": { + "smithy.api#documentation": "Programmatic container lifecycle state for automated processing" + } + }, + "com.hostinger.api#VPSV1DockerManagerContainerResourceHealth": { + "type": "enum", + "members": { + "STARTING": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "starting" + } + }, + "HEALTHY": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "healthy" + } + }, + "UNHEALTHY": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "unhealthy" + } + }, + "VALUE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "" + } + } + }, + "traits": { + "smithy.api#documentation": "Container health status" + } + }, + "com.hostinger.api#VPSV1DockerManagerContainerPortCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#VPSV1DockerManagerContainerPortResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`VPS.V1.DockerManager.ContainerPortResource`](#model/vpsv1dockermanagercontainerportresource)" + } + }, + "com.hostinger.api#VPSV1DockerManagerContainerPortResource": { + "type": "structure", + "members": { + "type": { + "target": "com.hostinger.api#VPSV1DockerManagerContainerPortResourceType", + "traits": { + "smithy.api#documentation": "Port mapping type - published (accessible from host), exposed (only internal), or range variants" + } + }, + "protocol": { + "target": "com.hostinger.api#VPSV1DockerManagerContainerPortResourceProtocol", + "traits": { + "smithy.api#documentation": "Network protocol used for communication" + } + }, + "host_ip": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "IP address on host where port is bound (null for exposed-only ports)", + "com.distilled.openapi#nullable": {} + } + }, + "host_port": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Port number on host machine (null for exposed-only or range ports)", + "com.distilled.openapi#nullable": {} + } + }, + "container_port": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Port number inside container (null for range ports)", + "com.distilled.openapi#nullable": {} + } + }, + "host_port_start": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Starting port number in host port range (null for single ports)", + "com.distilled.openapi#nullable": {} + } + }, + "host_port_end": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Ending port number in host port range (null for single ports)", + "com.distilled.openapi#nullable": {} + } + }, + "container_port_start": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Starting port number in container port range (null for single ports)", + "com.distilled.openapi#nullable": {} + } + }, + "container_port_end": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Ending port number in container port range (null for single ports)", + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#VPSV1DockerManagerContainerPortResourceType": { + "type": "enum", + "members": { + "PUBLISHED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "published" + } + }, + "PUBLISHED_RANGE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "published_range" + } + }, + "EXPOSED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "exposed" + } + }, + "EXPOSED_RANGE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "exposed_range" + } + } + }, + "traits": { + "smithy.api#documentation": "Port mapping type - published (accessible from host), exposed (only internal), or range variants" + } + }, + "com.hostinger.api#VPSV1DockerManagerContainerPortResourceProtocol": { + "type": "enum", + "members": { + "TCP": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "tcp" + } + }, + "UDP": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "udp" + } + } + }, + "traits": { + "smithy.api#documentation": "Network protocol used for communication" + } + }, + "com.hostinger.api#VPSV1DockerManagerContainerStatsResource": { + "type": "structure", + "members": { + "cpu_percentage": { + "target": "smithy.api#Double", + "traits": { + "smithy.api#documentation": "CPU usage in percentage" + } + }, + "memory_percentage": { + "target": "smithy.api#Double", + "traits": { + "smithy.api#documentation": "Memory usage in percentage" + } + }, + "memory_used": { + "target": "smithy.api#Double", + "traits": { + "smithy.api#documentation": "Used memory in bytes" + } + }, + "memory_total": { + "target": "smithy.api#Double", + "traits": { + "smithy.api#documentation": "Total available memory in bytes" + } + }, + "net_in": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Inbound network traffic in bytes" + } + }, + "net_out": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Outbound network traffic in bytes" + } + } + }, + "traits": {} + }, + "com.hostinger.api#GetVPSProjectContainersV1Response": { + "type": "structure", + "members": { + "body": { + "target": "com.hostinger.api#VPSV1DockerManagerContainerCollection", + "traits": { + "com.distilled.openapi#rawResponse": {}, + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#GetVPSProjectContainersV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#GetVPSProjectContainersV1Request" + }, + "output": { + "target": "com.hostinger.api#GetVPSProjectContainersV1Response" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/vps/v1/virtual-machines/{virtualMachineId}/docker/{projectName}/containers", + "code": 200 + }, + "smithy.api#documentation": "Get project containers\n\nRetrieves a list of all containers belonging to a specific Docker Compose project on the virtual machine. \n\nThis endpoint returns detailed information about each container including\ntheir current status, port mappings, and runtime configuration.\n\nUse this to monitor the health and state of all services within your Docker Compose project." + } + }, + "com.hostinger.api#GetVPSProjectContentsV1Request": { + "type": "structure", + "members": { + "virtualMachineId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Virtual Machine ID" + } + }, + "projectName": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Docker Compose project name using alphanumeric characters, dashes, and underscores only" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#VPSV1DockerManagerContentResource": { + "type": "structure", + "members": { + "content": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Contents of docker-compose file" + } + }, + "environment": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Project environment variables", + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#GetVPSProjectContentsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#GetVPSProjectContentsV1Request" + }, + "output": { + "target": "com.hostinger.api#VPSV1DockerManagerContentResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/vps/v1/virtual-machines/{virtualMachineId}/docker/{projectName}", + "code": 200 + }, + "smithy.api#documentation": "Get project contents\n\nRetrieves the complete project information including the docker-compose.yml\nfile contents, project metadata, and current deployment status.\n\nThis endpoint provides the full configuration and state details of a specific Docker Compose project. \n\nUse this to inspect project settings, review the compose file, or check the overall project health." + } + }, + "com.hostinger.api#DeleteVPSProjectV1Request": { + "type": "structure", + "members": { + "virtualMachineId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Virtual Machine ID" + } + }, + "projectName": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Docker Compose project name using alphanumeric characters, dashes, and underscores only" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#VPSV1ActionActionResource": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Action ID" + } + }, + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Action name" + } + }, + "state": { + "target": "com.hostinger.api#VPSV1ActionActionResourceState", + "traits": { + "smithy.api#documentation": "Action state" + } + }, + "created_at": { + "target": "smithy.api#String" + }, + "updated_at": { + "target": "smithy.api#String" + } + }, + "traits": {} + }, + "com.hostinger.api#VPSV1ActionActionResourceState": { + "type": "enum", + "members": { + "SUCCESS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "success" + } + }, + "ERROR": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "error" + } + }, + "DELAYED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "delayed" + } + }, + "SENT": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "sent" + } + }, + "CREATED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "created" + } + } + }, + "traits": { + "smithy.api#documentation": "Action state" + } + }, + "com.hostinger.api#DeleteVPSProjectV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#DeleteVPSProjectV1Request" + }, + "output": { + "target": "com.hostinger.api#VPSV1ActionActionResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "DELETE", + "uri": "/api/vps/v1/virtual-machines/{virtualMachineId}/docker/{projectName}/down", + "code": 200 + }, + "smithy.api#documentation": "Delete project\n\nCompletely removes a Docker Compose project from the virtual machine, stopping all containers and cleaning up \nassociated resources including networks, volumes, and images. \n\nThis operation is irreversible and will delete all project data. \n\nUse this when you want to permanently remove a project and free up system resources." + } + }, + "com.hostinger.api#VPSGetProjectListV1Request": { + "type": "structure", + "members": { + "virtualMachineId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Virtual Machine ID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#VPSV1DockerManagerProjectCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#VPSV1DockerManagerProjectResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`VPS.V1.DockerManager.ProjectResource`](#model/vpsv1dockermanagerprojectresource)" + } + }, + "com.hostinger.api#VPSV1DockerManagerProjectResource": { + "type": "structure", + "members": { + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Docker Compose project name (derived from directory name or compose file)" + } + }, + "status": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Raw output from docker compose ps command showing service count and states" + } + }, + "state": { + "target": "com.hostinger.api#VPSV1DockerManagerProjectResourceState", + "traits": { + "smithy.api#documentation": "Derived project state parsed from the raw docker compose status" + } + }, + "path": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Full filesystem path to the docker-compose.yml file" + } + }, + "containers": { + "target": "com.hostinger.api#VPSV1DockerManagerContainerCollection" + } + }, + "traits": {} + }, + "com.hostinger.api#VPSV1DockerManagerProjectResourceState": { + "type": "enum", + "members": { + "RUNNING": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "running" + } + }, + "STOPPED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "stopped" + } + }, + "CREATED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "created" + } + }, + "MIXED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "mixed" + } + }, + "UNKNOWN": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "unknown" + } + } + }, + "traits": { + "smithy.api#documentation": "Derived project state parsed from the raw docker compose status" + } + }, + "com.hostinger.api#VPSGetProjectListV1Response": { + "type": "structure", + "members": { + "body": { + "target": "com.hostinger.api#VPSV1DockerManagerProjectCollection", + "traits": { + "com.distilled.openapi#rawResponse": {}, + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#VPSGetProjectListV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#VPSGetProjectListV1Request" + }, + "output": { + "target": "com.hostinger.api#VPSGetProjectListV1Response" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/vps/v1/virtual-machines/{virtualMachineId}/docker", + "code": 200 + }, + "smithy.api#documentation": "Get project list\n\nRetrieves a list of all Docker Compose projects currently deployed on the virtual machine. \n\nThis endpoint returns basic information about each project including name,\nstatus, file path and list of containers with details about their names,\nimage, status, health and ports. Container stats are omitted in this\nendpoint. If you need to get detailed information about container with\nstats included, use the `Get project containers` endpoint.\n\nUse this to get an overview of all Docker projects on your VPS instance." + } + }, + "com.hostinger.api#CreateVPSNewProjectV1Request": { + "type": "structure", + "members": { + "virtualMachineId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Virtual Machine ID" + } + }, + "project_name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Docker Compose project name using alphanumeric characters, dashes, and underscores only", + "smithy.api#required": {} + } + }, + "content": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "URL pointing to docker-compose.yaml file, Github repository or raw YAML content of the compose file", + "smithy.api#required": {} + } + }, + "environment": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Project environment variables", + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#CreateVPSNewProjectV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#CreateVPSNewProjectV1Request" + }, + "output": { + "target": "com.hostinger.api#VPSV1ActionActionResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/vps/v1/virtual-machines/{virtualMachineId}/docker", + "code": 200 + }, + "smithy.api#documentation": "Create new project\n\nDeploy new project from docker-compose.yaml contents or download contents from URL. \n\nURL can be Github repository url in format https://github.com/[user]/[repo]\nand it will be automatically resolved to docker-compose.yaml file in\nmaster branch. Any other URL provided must return docker-compose.yaml\nfile contents.\n\nIf project with the same name already exists, existing project will be replaced." + } + }, + "com.hostinger.api#GetVPSProjectLogsV1Request": { + "type": "structure", + "members": { + "virtualMachineId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Virtual Machine ID" + } + }, + "projectName": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Docker Compose project name using alphanumeric characters, dashes, and underscores only" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#VPSV1DockerManagerLogsCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#VPSV1DockerManagerLogsResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`VPS.V1.DockerManager.LogsResource`](#model/vpsv1dockermanagerlogsresource)" + } + }, + "com.hostinger.api#VPSV1DockerManagerLogsResource": { + "type": "structure", + "members": { + "service": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Name of the Docker Compose service that generated these log entries" + } + }, + "entries": { + "target": "com.hostinger.api#VPSV1DockerManagerLogEntryCollection" + } + }, + "traits": {} + }, + "com.hostinger.api#VPSV1DockerManagerLogEntryCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#VPSV1DockerManagerLogEntryResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`VPS.V1.DockerManager.LogEntryResource`](#model/vpsv1dockermanagerlogentryresource)" + } + }, + "com.hostinger.api#VPSV1DockerManagerLogEntryResource": { + "type": "structure", + "members": { + "timestamp": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "ISO 8601 formatted timestamp when the log entry was generated by the container" + } + }, + "line": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Raw log message content as output by the application inside the container" + } + } + }, + "traits": {} + }, + "com.hostinger.api#GetVPSProjectLogsV1Response": { + "type": "structure", + "members": { + "body": { + "target": "com.hostinger.api#VPSV1DockerManagerLogsCollection", + "traits": { + "com.distilled.openapi#rawResponse": {}, + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#GetVPSProjectLogsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#GetVPSProjectLogsV1Request" + }, + "output": { + "target": "com.hostinger.api#GetVPSProjectLogsV1Response" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/vps/v1/virtual-machines/{virtualMachineId}/docker/{projectName}/logs", + "code": 200 + }, + "smithy.api#documentation": "Get project logs\n\nRetrieves aggregated log entries from all services within a Docker Compose project. \n\nThis endpoint returns recent log output from each container, organized by service name with timestamps. \nThe response contains the last 300 log entries across all services. \n\nUse this for debugging, monitoring application behavior, and\ntroubleshooting issues across your entire project stack." + } + }, + "com.hostinger.api#RestartVPSProjectV1Request": { + "type": "structure", + "members": { + "virtualMachineId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Virtual Machine ID" + } + }, + "projectName": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Docker Compose project name using alphanumeric characters, dashes, and underscores only" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#RestartVPSProjectV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#RestartVPSProjectV1Request" + }, + "output": { + "target": "com.hostinger.api#VPSV1ActionActionResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/vps/v1/virtual-machines/{virtualMachineId}/docker/{projectName}/restart", + "code": 200 + }, + "smithy.api#documentation": "Restart project\n\nRestarts all services in a Docker Compose project by stopping and starting\ncontainers in the correct dependency order.\n\nThis operation preserves data volumes and network configurations while refreshing the running containers. \n\nUse this to apply configuration changes or recover from service failures." + } + }, + "com.hostinger.api#StartVPSProjectV1Request": { + "type": "structure", + "members": { + "virtualMachineId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Virtual Machine ID" + } + }, + "projectName": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Docker Compose project name using alphanumeric characters, dashes, and underscores only" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#StartVPSProjectV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#StartVPSProjectV1Request" + }, + "output": { + "target": "com.hostinger.api#VPSV1ActionActionResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/vps/v1/virtual-machines/{virtualMachineId}/docker/{projectName}/start", + "code": 200 + }, + "smithy.api#documentation": "Start project\n\nStarts all services in a Docker Compose project that are currently stopped. \n\nThis operation brings up containers in the correct dependency order as defined in the compose file. \n\nUse this to resume a project that was previously stopped or to start services after a system reboot." + } + }, + "com.hostinger.api#StopVPSProjectV1Request": { + "type": "structure", + "members": { + "virtualMachineId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Virtual Machine ID" + } + }, + "projectName": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Docker Compose project name using alphanumeric characters, dashes, and underscores only" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#StopVPSProjectV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#StopVPSProjectV1Request" + }, + "output": { + "target": "com.hostinger.api#VPSV1ActionActionResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/vps/v1/virtual-machines/{virtualMachineId}/docker/{projectName}/stop", + "code": 200 + }, + "smithy.api#documentation": "Stop project\n\nStops all running services in a Docker Compose project while preserving\ncontainer configurations and data volumes.\n\nThis operation gracefully shuts down containers in reverse dependency order. \n\nUse this to temporarily halt a project without removing data or configurations." + } + }, + "com.hostinger.api#UpdateVPSProjectV1Request": { + "type": "structure", + "members": { + "virtualMachineId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Virtual Machine ID" + } + }, + "projectName": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Docker Compose project name using alphanumeric characters, dashes, and underscores only" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#UpdateVPSProjectV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#UpdateVPSProjectV1Request" + }, + "output": { + "target": "com.hostinger.api#VPSV1ActionActionResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/vps/v1/virtual-machines/{virtualMachineId}/docker/{projectName}/update", + "code": 200 + }, + "smithy.api#documentation": "Update project\n\nUpdates a Docker Compose project by pulling the latest image versions and\nrecreating containers with new configurations.\n\nThis operation preserves data volumes while applying changes from the compose file. \n\nUse this to deploy application updates, apply configuration changes, or\nrefresh container images to their latest versions." + } + }, + "com.hostinger.api#ActivateVPSFirewallV1Request": { + "type": "structure", + "members": { + "firewallId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Firewall ID" + } + }, + "virtualMachineId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Virtual Machine ID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#ActivateVPSFirewallV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ActivateVPSFirewallV1Request" + }, + "output": { + "target": "com.hostinger.api#VPSV1ActionActionResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/vps/v1/firewall/{firewallId}/activate/{virtualMachineId}", + "code": 200 + }, + "smithy.api#documentation": "Activate firewall\n\nActivate a firewall for a specified virtual machine.\n\nOnly one firewall can be active for a virtual machine at a time.\n\nUse this endpoint to apply firewall rules to VPS instances." + } + }, + "com.hostinger.api#DeactivateVPSFirewallV1Request": { + "type": "structure", + "members": { + "firewallId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Firewall ID" + } + }, + "virtualMachineId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Virtual Machine ID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DeactivateVPSFirewallV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#DeactivateVPSFirewallV1Request" + }, + "output": { + "target": "com.hostinger.api#VPSV1ActionActionResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/vps/v1/firewall/{firewallId}/deactivate/{virtualMachineId}", + "code": 200 + }, + "smithy.api#documentation": "Deactivate firewall\n\nDeactivate a firewall for a specified virtual machine.\n\nUse this endpoint to remove firewall protection from VPS instances." + } + }, + "com.hostinger.api#GetVPSFirewallDetailsV1Request": { + "type": "structure", + "members": { + "firewallId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Firewall ID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#VPSV1FirewallFirewallResource": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Firewall ID" + } + }, + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Firewall name" + } + }, + "is_synced": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Is current firewall synced with VPS" + } + }, + "rules": { + "target": "com.hostinger.api#VPSV1FirewallFirewallRuleCollection" + }, + "created_at": { + "target": "smithy.api#String" + }, + "updated_at": { + "target": "smithy.api#String" + } + }, + "traits": {} + }, + "com.hostinger.api#VPSV1FirewallFirewallRuleCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#VPSV1FirewallFirewallRuleResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`VPS.V1.Firewall.FirewallRuleResource`](#model/vpsv1firewallfirewallruleresource)" + } + }, + "com.hostinger.api#VPSV1FirewallFirewallRuleResource": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Firewall rule ID" + } + }, + "action": { + "target": "com.hostinger.api#VPSV1FirewallFirewallRuleResourceAction", + "traits": { + "smithy.api#documentation": "Firewall rule action" + } + }, + "protocol": { + "target": "com.hostinger.api#VPSV1FirewallFirewallRuleResourceProtocol", + "traits": { + "smithy.api#documentation": "Firewall rule protocol" + } + }, + "port": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Firewall rule destination port: single or port range" + } + }, + "source": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Firewall rule source. Can be `any` or `custom`" + } + }, + "source_detail": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Firewall rule source detail. Can be `any` or IP address, CIDR or range" + } + } + }, + "traits": {} + }, + "com.hostinger.api#VPSV1FirewallFirewallRuleResourceAction": { + "type": "enum", + "members": { + "ACCEPT": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "accept" + } + }, + "DROP": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "drop" + } + } + }, + "traits": { + "smithy.api#documentation": "Firewall rule action" + } + }, + "com.hostinger.api#VPSV1FirewallFirewallRuleResourceProtocol": { + "type": "enum", + "members": { + "TCP": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "TCP" + } + }, + "UDP": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "UDP" + } + }, + "ICMP": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "ICMP" + } + }, + "GRE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "GRE" + } + }, + "ANY": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "any" + } + }, + "ESP": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "ESP" + } + }, + "AH": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "AH" + } + }, + "ICMPV6": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "ICMPv6" + } + }, + "SSH": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "SSH" + } + }, + "HTTP": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "HTTP" + } + }, + "HTTPS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "HTTPS" + } + }, + "MYSQL": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "MySQL" + } + }, + "POSTGRESQL": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "PostgreSQL" + } + } + }, + "traits": { + "smithy.api#documentation": "Firewall rule protocol" + } + }, + "com.hostinger.api#GetVPSFirewallDetailsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#GetVPSFirewallDetailsV1Request" + }, + "output": { + "target": "com.hostinger.api#VPSV1FirewallFirewallResource" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/vps/v1/firewall/{firewallId}", + "code": 200 + }, + "smithy.api#documentation": "Get firewall details\n\nRetrieve firewall by its ID and rules associated with it.\n\nUse this endpoint to view specific firewall configuration and rules." + } + }, + "com.hostinger.api#DeleteVPSFirewallV1Request": { + "type": "structure", + "members": { + "firewallId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Firewall ID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DeleteVPSFirewallV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#DeleteVPSFirewallV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "traits": { + "smithy.api#http": { + "method": "DELETE", + "uri": "/api/vps/v1/firewall/{firewallId}", + "code": 200 + }, + "smithy.api#documentation": "Delete firewall\n\nDelete a specified firewall.\n\nAny virtual machine that has this firewall activated will automatically have it deactivated.\n\nUse this endpoint to remove unused firewall configurations." + } + }, + "com.hostinger.api#VPSGetFirewallListV1Request": { + "type": "structure", + "members": { + "page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "page", + "smithy.api#documentation": "Page number" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#VPSV1FirewallFirewallCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#VPSV1FirewallFirewallResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`VPS.V1.Firewall.FirewallResource`](#model/vpsv1firewallfirewallresource)" + } + }, + "com.hostinger.api#VPSGetFirewallListV1Response": { + "type": "structure", + "members": { + "data": { + "target": "com.hostinger.api#VPSV1FirewallFirewallCollection" + }, + "meta": { + "target": "com.hostinger.api#CommonSchemaPaginationMetaSchema" + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#VPSGetFirewallListV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#VPSGetFirewallListV1Request" + }, + "output": { + "target": "com.hostinger.api#VPSGetFirewallListV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/vps/v1/firewall", + "code": 200 + }, + "smithy.api#documentation": "Get firewall list\n\nRetrieve all available firewalls.\n\nUse this endpoint to view existing firewall configurations." + } + }, + "com.hostinger.api#CreateVPSNewFirewallV1Request": { + "type": "structure", + "members": { + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#CreateVPSNewFirewallV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#CreateVPSNewFirewallV1Request" + }, + "output": { + "target": "com.hostinger.api#VPSV1FirewallFirewallResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/vps/v1/firewall", + "code": 200 + }, + "smithy.api#documentation": "Create new firewall\n\nCreate a new firewall.\n\nUse this endpoint to set up new firewall configurations for VPS security." + } + }, + "com.hostinger.api#UpdateVPSFirewallRuleV1RequestProtocol": { + "type": "enum", + "members": { + "TCP": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "TCP" + } + }, + "UDP": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "UDP" + } + }, + "ICMP": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "ICMP" + } + }, + "GRE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "GRE" + } + }, + "ANY": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "any" + } + }, + "ESP": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "ESP" + } + }, + "AH": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "AH" + } + }, + "ICMPV6": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "ICMPv6" + } + }, + "SSH": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "SSH" + } + }, + "HTTP": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "HTTP" + } + }, + "HTTPS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "HTTPS" + } + }, + "MYSQL": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "MySQL" + } + }, + "POSTGRESQL": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "PostgreSQL" + } + } + }, + "traits": {} + }, + "com.hostinger.api#UpdateVPSFirewallRuleV1RequestSource": { + "type": "enum", + "members": { + "ANY": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "any" + } + }, + "CUSTOM": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "custom" + } + } + }, + "traits": {} + }, + "com.hostinger.api#UpdateVPSFirewallRuleV1Request": { + "type": "structure", + "members": { + "firewallId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Firewall ID" + } + }, + "ruleId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Firewall Rule ID" + } + }, + "protocol": { + "target": "com.hostinger.api#UpdateVPSFirewallRuleV1RequestProtocol", + "traits": { + "smithy.api#required": {} + } + }, + "port": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Port or port range, ex: 1024:2048", + "smithy.api#required": {} + } + }, + "source": { + "target": "com.hostinger.api#UpdateVPSFirewallRuleV1RequestSource", + "traits": { + "smithy.api#required": {} + } + }, + "source_detail": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "IP range, CIDR, single IP or `any`", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#UpdateVPSFirewallRuleV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#UpdateVPSFirewallRuleV1Request" + }, + "output": { + "target": "com.hostinger.api#VPSV1FirewallFirewallRuleResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "PUT", + "uri": "/api/vps/v1/firewall/{firewallId}/rules/{ruleId}", + "code": 200 + }, + "smithy.api#documentation": "Update firewall rule\n\nUpdate a specific firewall rule from a specified firewall.\n\nAny virtual machine that has this firewall activated will lose sync with the firewall\nand will have to be synced again manually.\n\nUse this endpoint to modify existing firewall rules." + } + }, + "com.hostinger.api#DeleteVPSFirewallRuleV1Request": { + "type": "structure", + "members": { + "firewallId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Firewall ID" + } + }, + "ruleId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Firewall Rule ID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DeleteVPSFirewallRuleV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#DeleteVPSFirewallRuleV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "traits": { + "smithy.api#http": { + "method": "DELETE", + "uri": "/api/vps/v1/firewall/{firewallId}/rules/{ruleId}", + "code": 200 + }, + "smithy.api#documentation": "Delete firewall rule\n\nDelete a specific firewall rule from a specified firewall.\n\nAny virtual machine that has this firewall activated will lose sync with the firewall\nand will have to be synced again manually.\n\nUse this endpoint to remove specific firewall rules." + } + }, + "com.hostinger.api#CreateVPSFirewallRuleV1RequestProtocol": { + "type": "enum", + "members": { + "TCP": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "TCP" + } + }, + "UDP": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "UDP" + } + }, + "ICMP": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "ICMP" + } + }, + "GRE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "GRE" + } + }, + "ANY": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "any" + } + }, + "ESP": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "ESP" + } + }, + "AH": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "AH" + } + }, + "ICMPV6": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "ICMPv6" + } + }, + "SSH": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "SSH" + } + }, + "HTTP": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "HTTP" + } + }, + "HTTPS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "HTTPS" + } + }, + "MYSQL": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "MySQL" + } + }, + "POSTGRESQL": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "PostgreSQL" + } + } + }, + "traits": {} + }, + "com.hostinger.api#CreateVPSFirewallRuleV1RequestSource": { + "type": "enum", + "members": { + "ANY": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "any" + } + }, + "CUSTOM": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "custom" + } + } + }, + "traits": {} + }, + "com.hostinger.api#CreateVPSFirewallRuleV1Request": { + "type": "structure", + "members": { + "firewallId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Firewall ID" + } + }, + "protocol": { + "target": "com.hostinger.api#CreateVPSFirewallRuleV1RequestProtocol", + "traits": { + "smithy.api#required": {} + } + }, + "port": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Port or port range, ex: 1024:2048", + "smithy.api#required": {} + } + }, + "source": { + "target": "com.hostinger.api#CreateVPSFirewallRuleV1RequestSource", + "traits": { + "smithy.api#required": {} + } + }, + "source_detail": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "IP range, CIDR, single IP or `any`", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#CreateVPSFirewallRuleV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#CreateVPSFirewallRuleV1Request" + }, + "output": { + "target": "com.hostinger.api#VPSV1FirewallFirewallRuleResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/vps/v1/firewall/{firewallId}/rules", + "code": 200 + }, + "smithy.api#documentation": "Create firewall rule\n\nCreate new firewall rule for a specified firewall.\n\nBy default, the firewall drops all incoming traffic,\nwhich means you must add accept rules for all ports you want to use.\n\nAny virtual machine that has this firewall activated will lose sync with the firewall\nand will have to be synced again manually.\n\nUse this endpoint to add new security rules to firewalls." + } + }, + "com.hostinger.api#VPSV1FirewallRulesStoreRequest": { + "type": "structure", + "members": { + "protocol": { + "target": "com.hostinger.api#VPSV1FirewallRulesStoreRequestProtocol", + "traits": { + "smithy.api#required": {} + } + }, + "port": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Port or port range, ex: 1024:2048", + "smithy.api#required": {} + } + }, + "source": { + "target": "com.hostinger.api#VPSV1FirewallRulesStoreRequestSource", + "traits": { + "smithy.api#required": {} + } + }, + "source_detail": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "IP range, CIDR, single IP or `any`", + "smithy.api#required": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#VPSV1FirewallRulesStoreRequestProtocol": { + "type": "enum", + "members": { + "TCP": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "TCP" + } + }, + "UDP": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "UDP" + } + }, + "ICMP": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "ICMP" + } + }, + "GRE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "GRE" + } + }, + "ANY": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "any" + } + }, + "ESP": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "ESP" + } + }, + "AH": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "AH" + } + }, + "ICMPV6": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "ICMPv6" + } + }, + "SSH": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "SSH" + } + }, + "HTTP": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "HTTP" + } + }, + "HTTPS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "HTTPS" + } + }, + "MYSQL": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "MySQL" + } + }, + "POSTGRESQL": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "PostgreSQL" + } + } + }, + "traits": {} + }, + "com.hostinger.api#VPSV1FirewallRulesStoreRequestSource": { + "type": "enum", + "members": { + "ANY": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "any" + } + }, + "CUSTOM": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "custom" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ReplaceVPSAllFirewallRulesInGroupV1RequestRulesList": { + "type": "list", + "member": { + "target": "com.hostinger.api#VPSV1FirewallRulesStoreRequest" + }, + "traits": { + "smithy.api#documentation": "The complete set of firewall rules that atomically replaces all existing rules in the group" + } + }, + "com.hostinger.api#ReplaceVPSAllFirewallRulesInGroupV1Request": { + "type": "structure", + "members": { + "firewallId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Firewall ID" + } + }, + "rules": { + "target": "com.hostinger.api#ReplaceVPSAllFirewallRulesInGroupV1RequestRulesList", + "traits": { + "smithy.api#documentation": "The complete set of firewall rules that atomically replaces all existing rules in the group", + "smithy.api#required": {} + } + }, + "sync": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Synchronize the firewall group to all its virtual machines after replacing the rules" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#ReplaceVPSAllFirewallRulesInGroupV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ReplaceVPSAllFirewallRulesInGroupV1Request" + }, + "output": { + "target": "com.hostinger.api#VPSV1FirewallFirewallResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "PUT", + "uri": "/api/vps/v1/firewall/{firewallId}/rules", + "code": 200 + }, + "smithy.api#documentation": "Replace all firewall rules in group\n\nReplaces all firewall rules within a specified firewall group with the provided set of rules\nin a single atomic operation, instead of creating or deleting rules one by one.\n\nAny virtual machine using this firewall group will need to be synchronized after replacing rules;\npass the \"sync\" parameter to trigger synchronization immediately." + } + }, + "com.hostinger.api#SyncVPSFirewallV1Request": { + "type": "structure", + "members": { + "firewallId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Firewall ID" + } + }, + "virtualMachineId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Virtual Machine ID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#SyncVPSFirewallV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#SyncVPSFirewallV1Request" + }, + "output": { + "target": "com.hostinger.api#VPSV1ActionActionResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/vps/v1/firewall/{firewallId}/sync/{virtualMachineId}", + "code": 200 + }, + "smithy.api#documentation": "Sync firewall\n\nSync a firewall for a specified virtual machine.\n\nFirewall can lose sync with virtual machine if the firewall has new rules added, removed or updated.\n\nUse this endpoint to apply updated firewall rules to VPS instances." + } + }, + "com.hostinger.api#VPSGetPostInstallScriptV1Request": { + "type": "structure", + "members": { + "postInstallScriptId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Post-install script ID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#VPSV1PostInstallScriptPostInstallScriptResource": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Post-install script ID" + } + }, + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Name of the script" + } + }, + "content": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Content of the script" + } + }, + "created_at": { + "target": "smithy.api#String" + }, + "updated_at": { + "target": "smithy.api#String" + } + }, + "traits": {} + }, + "com.hostinger.api#VPSGetPostInstallScriptV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#VPSGetPostInstallScriptV1Request" + }, + "output": { + "target": "com.hostinger.api#VPSV1PostInstallScriptPostInstallScriptResource" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/vps/v1/post-install-scripts/{postInstallScriptId}", + "code": 200 + }, + "smithy.api#documentation": "Get post-install script\n\nRetrieve post-install script by its ID.\n\nUse this endpoint to view specific automation script details." + } + }, + "com.hostinger.api#VPSUpdatePostInstallScriptV1Request": { + "type": "structure", + "members": { + "postInstallScriptId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Post-install script ID" + } + }, + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Name of the script", + "smithy.api#required": {} + } + }, + "content": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Content of the script", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#VPSUpdatePostInstallScriptV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#VPSUpdatePostInstallScriptV1Request" + }, + "output": { + "target": "com.hostinger.api#VPSV1PostInstallScriptPostInstallScriptResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "PUT", + "uri": "/api/vps/v1/post-install-scripts/{postInstallScriptId}", + "code": 200 + }, + "smithy.api#documentation": "Update post-install script\n\nUpdate a specific post-install script.\n\nUse this endpoint to modify existing automation scripts." + } + }, + "com.hostinger.api#VPSDeletePostInstallScriptV1Request": { + "type": "structure", + "members": { + "postInstallScriptId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Post-install script ID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#VPSDeletePostInstallScriptV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#VPSDeletePostInstallScriptV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "traits": { + "smithy.api#http": { + "method": "DELETE", + "uri": "/api/vps/v1/post-install-scripts/{postInstallScriptId}", + "code": 200 + }, + "smithy.api#documentation": "Delete post-install script\n\nDelete a post-install script from your account.\n \nUse this endpoint to remove unused automation scripts." + } + }, + "com.hostinger.api#VPSGetPostInstallScriptsV1Request": { + "type": "structure", + "members": { + "page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "page", + "smithy.api#documentation": "Page number" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#VPSV1PostInstallScriptPostInstallScriptCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#VPSV1PostInstallScriptPostInstallScriptResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`VPS.V1.PostInstallScript.PostInstallScriptResource`](#model/vpsv1postinstallscriptpostinstallscriptresource)" + } + }, + "com.hostinger.api#VPSGetPostInstallScriptsV1Response": { + "type": "structure", + "members": { + "data": { + "target": "com.hostinger.api#VPSV1PostInstallScriptPostInstallScriptCollection" + }, + "meta": { + "target": "com.hostinger.api#CommonSchemaPaginationMetaSchema" + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#VPSGetPostInstallScriptsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#VPSGetPostInstallScriptsV1Request" + }, + "output": { + "target": "com.hostinger.api#VPSGetPostInstallScriptsV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/vps/v1/post-install-scripts", + "code": 200 + }, + "smithy.api#documentation": "Get post-install scripts\n\nRetrieve post-install scripts associated with your account.\n\nUse this endpoint to view available automation scripts for VPS deployment." + } + }, + "com.hostinger.api#VPSCreatePostInstallScriptV1Request": { + "type": "structure", + "members": { + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Name of the script", + "smithy.api#required": {} + } + }, + "content": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Content of the script", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#VPSCreatePostInstallScriptV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#VPSCreatePostInstallScriptV1Request" + }, + "output": { + "target": "com.hostinger.api#VPSV1PostInstallScriptPostInstallScriptResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/vps/v1/post-install-scripts", + "code": 200 + }, + "smithy.api#documentation": "Create post-install script\n\nAdd a new post-install script to your account, which can then be used after virtual machine installation.\n\nThe script contents will be saved to the file `/post_install` with executable attribute set\nand will be executed once virtual machine is installed.\nThe output of the script will be redirected to `/post_install.log`. Maximum script size is 48KB.\n\nUse this endpoint to create automation scripts for VPS setup tasks." + } + }, + "com.hostinger.api#AttachVPSPublicKeyV1RequestIdsList": { + "type": "list", + "member": { + "target": "smithy.api#Integer" + }, + "traits": { + "smithy.api#documentation": "Public Key IDs to attach" + } + }, + "com.hostinger.api#AttachVPSPublicKeyV1Request": { + "type": "structure", + "members": { + "virtualMachineId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Virtual Machine ID" + } + }, + "ids": { + "target": "com.hostinger.api#AttachVPSPublicKeyV1RequestIdsList", + "traits": { + "smithy.api#documentation": "Public Key IDs to attach", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#AttachVPSPublicKeyV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#AttachVPSPublicKeyV1Request" + }, + "output": { + "target": "com.hostinger.api#VPSV1ActionActionResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/vps/v1/public-keys/attach/{virtualMachineId}", + "code": 200 + }, + "smithy.api#documentation": "Attach public key\n\nAttach existing public keys from your account to a specified virtual machine.\n\nMultiple keys can be attached to a single virtual machine.\n\nUse this endpoint to enable SSH key authentication for VPS instances." + } + }, + "com.hostinger.api#DeleteVPSPublicKeyV1Request": { + "type": "structure", + "members": { + "publicKeyId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Public Key ID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DeleteVPSPublicKeyV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#DeleteVPSPublicKeyV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "traits": { + "smithy.api#http": { + "method": "DELETE", + "uri": "/api/vps/v1/public-keys/{publicKeyId}", + "code": 200 + }, + "smithy.api#documentation": "Delete public key\n\nDelete a public key from your account. \n\n**Deleting public key from account does not remove it from virtual machine** \n \nUse this endpoint to remove unused SSH keys from account." + } + }, + "com.hostinger.api#GetVPSPublicKeysV1Request": { + "type": "structure", + "members": { + "page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "page", + "smithy.api#documentation": "Page number" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#VPSV1PublicKeyPublicKeyCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#VPSV1PublicKeyPublicKeyResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`VPS.V1.PublicKey.PublicKeyResource`](#model/vpsv1publickeypublickeyresource)" + } + }, + "com.hostinger.api#VPSV1PublicKeyPublicKeyResource": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Public key ID" + } + }, + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Public key name" + } + }, + "key": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Public key content" + } + } + }, + "traits": {} + }, + "com.hostinger.api#GetVPSPublicKeysV1Response": { + "type": "structure", + "members": { + "data": { + "target": "com.hostinger.api#VPSV1PublicKeyPublicKeyCollection" + }, + "meta": { + "target": "com.hostinger.api#CommonSchemaPaginationMetaSchema" + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#GetVPSPublicKeysV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#GetVPSPublicKeysV1Request" + }, + "output": { + "target": "com.hostinger.api#GetVPSPublicKeysV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/vps/v1/public-keys", + "code": 200 + }, + "smithy.api#documentation": "Get public keys\n\nRetrieve public keys associated with your account.\n\nUse this endpoint to view available SSH keys for VPS authentication." + } + }, + "com.hostinger.api#CreateVPSPublicKeyV1Request": { + "type": "structure", + "members": { + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#required": {} + } + }, + "key": { + "target": "smithy.api#String", + "traits": { + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#CreateVPSPublicKeyV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#CreateVPSPublicKeyV1Request" + }, + "output": { + "target": "com.hostinger.api#VPSV1PublicKeyPublicKeyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/vps/v1/public-keys", + "code": 200 + }, + "smithy.api#documentation": "Create public key\n\nAdd a new public key to your account.\n\nUse this endpoint to register SSH keys for VPS authentication." + } + }, + "com.hostinger.api#GetVPSTemplateDetailsV1Request": { + "type": "structure", + "members": { + "templateId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Template ID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#VPSV1TemplateTemplateResource": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Template ID" + } + }, + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Template name" + } + }, + "description": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Template description" + } + }, + "documentation": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Link to official OS documentation", + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#GetVPSTemplateDetailsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#GetVPSTemplateDetailsV1Request" + }, + "output": { + "target": "com.hostinger.api#VPSV1TemplateTemplateResource" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/vps/v1/templates/{templateId}", + "code": 200 + }, + "smithy.api#documentation": "Get template details\n\nRetrieve detailed information about a specific OS template for virtual machines.\n\nUse this endpoint to view specific template specifications before deployment." + } + }, + "com.hostinger.api#VPSV1TemplateTemplateCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#VPSV1TemplateTemplateResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`VPS.V1.Template.TemplateResource`](#model/vpsv1templatetemplateresource)" + } + }, + "com.hostinger.api#GetVPSTemplatesV1Response": { + "type": "structure", + "members": { + "body": { + "target": "com.hostinger.api#VPSV1TemplateTemplateCollection", + "traits": { + "com.distilled.openapi#rawResponse": {}, + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#GetVPSTemplatesV1": { + "type": "operation", + "input": { + "target": "smithy.api#Unit" + }, + "output": { + "target": "com.hostinger.api#GetVPSTemplatesV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/vps/v1/templates", + "code": 200 + }, + "smithy.api#documentation": "Get templates\n\nRetrieve available OS templates for virtual machines.\n\nUse this endpoint to view operating system options before creating or recreating VPS instances." + } + }, + "com.hostinger.api#GetVPSActionDetailsV1Request": { + "type": "structure", + "members": { + "virtualMachineId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Virtual Machine ID" + } + }, + "actionId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Action ID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#GetVPSActionDetailsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#GetVPSActionDetailsV1Request" + }, + "output": { + "target": "com.hostinger.api#VPSV1ActionActionResource" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/vps/v1/virtual-machines/{virtualMachineId}/actions/{actionId}", + "code": 200 + }, + "smithy.api#documentation": "Get action details\n\nRetrieve detailed information about a specific action performed on a specified virtual machine.\n\nUse this endpoint to monitor specific VPS operation status and details." + } + }, + "com.hostinger.api#GetVPSActionsV1Request": { + "type": "structure", + "members": { + "virtualMachineId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Virtual Machine ID" + } + }, + "page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "page", + "smithy.api#documentation": "Page number" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#VPSV1ActionActionCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#VPSV1ActionActionResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`VPS.V1.Action.ActionResource`](#model/vpsv1actionactionresource)" + } + }, + "com.hostinger.api#GetVPSActionsV1Response": { + "type": "structure", + "members": { + "data": { + "target": "com.hostinger.api#VPSV1ActionActionCollection" + }, + "meta": { + "target": "com.hostinger.api#CommonSchemaPaginationMetaSchema" + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#GetVPSActionsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#GetVPSActionsV1Request" + }, + "output": { + "target": "com.hostinger.api#GetVPSActionsV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/vps/v1/virtual-machines/{virtualMachineId}/actions", + "code": 200 + }, + "smithy.api#documentation": "Get actions\n\nRetrieve actions performed on a specified virtual machine.\n\nActions are operations or events that have been executed on the virtual\nmachine, such as starting, stopping, or modifying the machine. This endpoint\nallows you to view the history of these actions, providing details about\neach action, such as the action name, timestamp, and status.\n\nUse this endpoint to view VPS operation history and troubleshoot issues." + } + }, + "com.hostinger.api#GetVPSAttachedPublicKeysV1Request": { + "type": "structure", + "members": { + "virtualMachineId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Virtual Machine ID" + } + }, + "page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "page", + "smithy.api#documentation": "Page number" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#GetVPSAttachedPublicKeysV1Response": { + "type": "structure", + "members": { + "data": { + "target": "com.hostinger.api#VPSV1PublicKeyPublicKeyCollection" + }, + "meta": { + "target": "com.hostinger.api#CommonSchemaPaginationMetaSchema" + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#GetVPSAttachedPublicKeysV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#GetVPSAttachedPublicKeysV1Request" + }, + "output": { + "target": "com.hostinger.api#GetVPSAttachedPublicKeysV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/vps/v1/virtual-machines/{virtualMachineId}/public-keys", + "code": 200 + }, + "smithy.api#documentation": "Get attached public keys\n\nRetrieve public keys attached to a specified virtual machine.\n\nUse this endpoint to view SSH keys configured for specific VPS instances." + } + }, + "com.hostinger.api#GetVPSBackupsV1Request": { + "type": "structure", + "members": { + "virtualMachineId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Virtual Machine ID" + } + }, + "page": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "page", + "smithy.api#documentation": "Page number" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#VPSV1BackupBackupCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#VPSV1BackupBackupResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`VPS.V1.Backup.BackupResource`](#model/vpsv1backupbackupresource)" + } + }, + "com.hostinger.api#VPSV1BackupBackupResource": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Backup ID" + } + }, + "size": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Backup size in kilobytes" + } + }, + "restore_time": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Estimated backup restore time in seconds" + } + }, + "location": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Location of the backup" + } + }, + "created_at": { + "target": "smithy.api#String" + } + }, + "traits": {} + }, + "com.hostinger.api#GetVPSBackupsV1Response": { + "type": "structure", + "members": { + "data": { + "target": "com.hostinger.api#VPSV1BackupBackupCollection" + }, + "meta": { + "target": "com.hostinger.api#CommonSchemaPaginationMetaSchema" + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#GetVPSBackupsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#GetVPSBackupsV1Request" + }, + "output": { + "target": "com.hostinger.api#GetVPSBackupsV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/vps/v1/virtual-machines/{virtualMachineId}/backups", + "code": 200 + }, + "smithy.api#documentation": "Get backups\n\nRetrieve backups for a specified virtual machine.\n\nUse this endpoint to view available backup points for VPS data recovery." + } + }, + "com.hostinger.api#RestoreVPSBackupV1Request": { + "type": "structure", + "members": { + "virtualMachineId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Virtual Machine ID" + } + }, + "backupId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Backup ID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#RestoreVPSBackupV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#RestoreVPSBackupV1Request" + }, + "output": { + "target": "com.hostinger.api#VPSV1ActionActionResource" + }, + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/vps/v1/virtual-machines/{virtualMachineId}/backups/{backupId}/restore", + "code": 200 + }, + "smithy.api#documentation": "Restore backup\n\nRestore a backup for a specified virtual machine.\n\nThe system will then initiate the restore process, which may take some time depending on the size of the backup.\n\n**All data on the virtual machine will be overwritten with the data from the backup.**\n\nUse this endpoint to recover VPS data from backup points." + } + }, + "com.hostinger.api#SetVPSHostnameV1Request": { + "type": "structure", + "members": { + "virtualMachineId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Virtual Machine ID" + } + }, + "hostname": { + "target": "smithy.api#String", + "traits": { + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#SetVPSHostnameV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#SetVPSHostnameV1Request" + }, + "output": { + "target": "com.hostinger.api#VPSV1ActionActionResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "PUT", + "uri": "/api/vps/v1/virtual-machines/{virtualMachineId}/hostname", + "code": 200 + }, + "smithy.api#documentation": "Set hostname\n\nSet hostname for a specified virtual machine.\n\nChanging hostname does not update PTR record automatically.\nIf you want your virtual machine to be reachable by a hostname, \nyou need to point your domain A/AAAA records to virtual machine IP as well.\n\nUse this endpoint to configure custom hostnames for VPS instances." + } + }, + "com.hostinger.api#ResetVPSHostnameV1Request": { + "type": "structure", + "members": { + "virtualMachineId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Virtual Machine ID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#ResetVPSHostnameV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ResetVPSHostnameV1Request" + }, + "output": { + "target": "com.hostinger.api#VPSV1ActionActionResource" + }, + "traits": { + "smithy.api#http": { + "method": "DELETE", + "uri": "/api/vps/v1/virtual-machines/{virtualMachineId}/hostname", + "code": 200 + }, + "smithy.api#documentation": "Reset hostname\n\nReset hostname and PTR record of a specified virtual machine to default value.\n\nUse this endpoint to restore default hostname configuration for VPS instances." + } + }, + "com.hostinger.api#GetVPSVirtualMachineDetailsV1Request": { + "type": "structure", + "members": { + "virtualMachineId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Virtual Machine ID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#VPSV1VirtualMachineVirtualMachineResource": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Virtual machine ID" + } + }, + "firewall_group_id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Active firewall ID, `null` if disabled", + "com.distilled.openapi#nullable": {} + } + }, + "subscription_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Subscription ID", + "com.distilled.openapi#nullable": {} + } + }, + "data_center_id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Data center ID", + "com.distilled.openapi#nullable": {} + } + }, + "plan": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "VPS plan name", + "com.distilled.openapi#nullable": {} + } + }, + "hostname": { + "target": "smithy.api#String" + }, + "state": { + "target": "com.hostinger.api#VPSV1VirtualMachineVirtualMachineResourceState" + }, + "actions_lock": { + "target": "com.hostinger.api#VPSV1VirtualMachineVirtualMachineResourceActionsLock" + }, + "cpus": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "CPUs count assigned to virtual machine" + } + }, + "memory": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Memory available to virtual machine (in megabytes)" + } + }, + "disk": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Virtual machine disk size (in megabytes)" + } + }, + "bandwidth": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Monthly internet traffic available to virtual machine (in megabytes)" + } + }, + "ns1": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Primary DNS resolver", + "com.distilled.openapi#nullable": {} + } + }, + "ns2": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Secondary DNS resolver", + "com.distilled.openapi#nullable": {} + } + }, + "ipv4": { + "target": "com.hostinger.api#VPSV1IPAddressIPAddressCollection", + "traits": { + "smithy.api#documentation": "IPv4 address of virtual machine", + "com.distilled.openapi#nullable": {} + } + }, + "ipv6": { + "target": "com.hostinger.api#VPSV1IPAddressIPAddressCollection", + "traits": { + "smithy.api#documentation": "IPv6 address of virtual machine, `null` if not assigned", + "com.distilled.openapi#nullable": {} + } + }, + "template": { + "target": "com.hostinger.api#VPSV1TemplateTemplateResource", + "traits": { + "smithy.api#documentation": "OS template installed in virtual machine", + "com.distilled.openapi#nullable": {} + } + }, + "created_at": { + "target": "smithy.api#String" + } + }, + "traits": {} + }, + "com.hostinger.api#VPSV1VirtualMachineVirtualMachineResourceState": { + "type": "enum", + "members": { + "RUNNING": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "running" + } + }, + "STARTING": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "starting" + } + }, + "STOPPING": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "stopping" + } + }, + "STOPPED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "stopped" + } + }, + "CREATING": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "creating" + } + }, + "INITIAL": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "initial" + } + }, + "ERROR": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "error" + } + }, + "SUSPENDING": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "suspending" + } + }, + "UNSUSPENDING": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "unsuspending" + } + }, + "SUSPENDED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "suspended" + } + }, + "DESTROYING": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "destroying" + } + }, + "DESTROYED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "destroyed" + } + }, + "RECREATING": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "recreating" + } + }, + "RESTORING": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "restoring" + } + }, + "RECOVERY": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "recovery" + } + }, + "STOPPING_RECOVERY": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "stopping_recovery" + } + } + }, + "traits": {} + }, + "com.hostinger.api#VPSV1VirtualMachineVirtualMachineResourceActionsLock": { + "type": "enum", + "members": { + "UNLOCKED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "unlocked" + } + }, + "LOCKED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "locked" + } + } + }, + "traits": {} + }, + "com.hostinger.api#VPSV1IPAddressIPAddressCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#VPSV1IPAddressIPAddressResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`VPS.V1.IPAddress.IPAddressResource`](#model/vpsv1ipaddressipaddressresource)" + } + }, + "com.hostinger.api#VPSV1IPAddressIPAddressResource": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "IP address ID" + } + }, + "address": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "IP address: IPv4 or IPv6" + } + }, + "ptr": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "IP address PTR record", + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#GetVPSVirtualMachineDetailsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#GetVPSVirtualMachineDetailsV1Request" + }, + "output": { + "target": "com.hostinger.api#VPSV1VirtualMachineVirtualMachineResource" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/vps/v1/virtual-machines/{virtualMachineId}", + "code": 200 + }, + "smithy.api#documentation": "Get virtual machine details\n\nRetrieve detailed information about a specified virtual machine.\n\nUse this endpoint to view comprehensive VPS configuration and status." + } + }, + "com.hostinger.api#VPSV1VirtualMachineVirtualMachineCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#VPSV1VirtualMachineVirtualMachineResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`VPS.V1.VirtualMachine.VirtualMachineResource`](#model/vpsv1virtualmachinevirtualmachineresource)" + } + }, + "com.hostinger.api#GetVPSVirtualMachinesV1Response": { + "type": "structure", + "members": { + "body": { + "target": "com.hostinger.api#VPSV1VirtualMachineVirtualMachineCollection", + "traits": { + "com.distilled.openapi#rawResponse": {}, + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#GetVPSVirtualMachinesV1": { + "type": "operation", + "input": { + "target": "smithy.api#Unit" + }, + "output": { + "target": "com.hostinger.api#GetVPSVirtualMachinesV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/vps/v1/virtual-machines", + "code": 200 + }, + "smithy.api#documentation": "Get virtual machines\n\nRetrieve all available virtual machines.\n\nUse this endpoint to view available VPS instances." + } + }, + "com.hostinger.api#VPSV1VirtualMachineSetupRequest": { + "type": "structure", + "members": { + "template_id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Template ID", + "smithy.api#required": {} + } + }, + "data_center_id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Data center ID", + "smithy.api#required": {} + } + }, + "post_install_script_id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Post-install script ID" + } + }, + "password": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Password for the virtual machine. If not provided, random password will be generated.\nPassword will not be shown in the response.", + "smithy.api#sensitive": {} + } + }, + "hostname": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Override default hostname of the virtual machine" + } + }, + "install_monarx": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Install Monarx malware scanner (if supported)" + } + }, + "enable_backups": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Enable weekly backup schedule" + } + }, + "ns1": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Name server 1" + } + }, + "ns2": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Name server 2" + } + }, + "public_key": { + "target": "com.hostinger.api#VPSV1VirtualMachineSetupRequestPublicKey", + "traits": { + "smithy.api#documentation": "Use SSH key" + } + } + }, + "traits": {} + }, + "com.hostinger.api#VPSV1VirtualMachineSetupRequestPublicKey": { + "type": "structure", + "members": { + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Name of the SSH key" + } + }, + "key": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Contents of the SSH key" + } + } + }, + "traits": { + "smithy.api#documentation": "Use SSH key" + } + }, + "com.hostinger.api#VPSPurchaseNewVirtualMachineV1RequestCouponsList": { + "type": "list", + "member": { + "target": "smithy.api#Document" + }, + "traits": { + "smithy.api#documentation": "Discount coupon codes" + } + }, + "com.hostinger.api#VPSPurchaseNewVirtualMachineV1Request": { + "type": "structure", + "members": { + "item_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Catalog price item ID", + "smithy.api#required": {} + } + }, + "payment_method_id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Payment method ID, default will be used if not provided" + } + }, + "setup": { + "target": "com.hostinger.api#VPSV1VirtualMachineSetupRequest", + "traits": { + "smithy.api#required": {} + } + }, + "coupons": { + "target": "com.hostinger.api#VPSPurchaseNewVirtualMachineV1RequestCouponsList", + "traits": { + "smithy.api#documentation": "Discount coupon codes" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#BillingV1OrderVirtualMachineOrderResource": { + "type": "structure", + "members": { + "order": { + "target": "com.hostinger.api#BillingV1OrderOrderResource" + }, + "virtual_machine": { + "target": "com.hostinger.api#VPSV1VirtualMachineVirtualMachineResource" + } + }, + "traits": {} + }, + "com.hostinger.api#VPSPurchaseNewVirtualMachineV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#VPSPurchaseNewVirtualMachineV1Request" + }, + "output": { + "target": "com.hostinger.api#BillingV1OrderVirtualMachineOrderResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/vps/v1/virtual-machines", + "code": 200 + }, + "smithy.api#documentation": "Purchase new virtual machine\n\nPurchase and setup a new virtual machine.\n\nIf virtual machine setup fails for any reason, login to\n[hPanel](https://hpanel.hostinger.com/) and complete the setup manually.\n\nIf no payment method is provided, your default payment method will be used automatically.\n\nUse this endpoint to create new VPS instances." + } + }, + "com.hostinger.api#GetVPSScanMetricsV1Request": { + "type": "structure", + "members": { + "virtualMachineId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Virtual Machine ID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#VPSV1MalwareMetricsResource": { + "type": "structure", + "members": { + "records": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Records found during last scan" + } + }, + "malicious": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Malicious files found during last scan" + } + }, + "compromised": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Compromised files found during last scan" + } + }, + "scanned_files": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Total number of files scanned during last scan" + } + }, + "scan_started_at": { + "target": "smithy.api#String" + }, + "scan_ended_at": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#GetVPSScanMetricsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#GetVPSScanMetricsV1Request" + }, + "output": { + "target": "com.hostinger.api#VPSV1MalwareMetricsResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/vps/v1/virtual-machines/{virtualMachineId}/monarx", + "code": 200 + }, + "smithy.api#documentation": "Get scan metrics\n\nRetrieve scan metrics for the [Monarx](https://www.monarx.com/) malware scanner\ninstalled on a specified virtual machine.\n\nThe scan metrics provide detailed information about malware scans performed\nby Monarx, including number of scans, detected threats, and other relevant\nstatistics. This information is useful for monitoring security status of the\nvirtual machine and assessing effectiveness of the malware scanner.\n\nUse this endpoint to monitor VPS security scan results and threat detection." + } + }, + "com.hostinger.api#InstallVPSMonarxV1Request": { + "type": "structure", + "members": { + "virtualMachineId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Virtual Machine ID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#InstallVPSMonarxV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#InstallVPSMonarxV1Request" + }, + "output": { + "target": "com.hostinger.api#VPSV1ActionActionResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/vps/v1/virtual-machines/{virtualMachineId}/monarx", + "code": 200 + }, + "smithy.api#documentation": "Install Monarx\n\nInstall the Monarx malware scanner on a specified virtual machine.\n\n[Monarx](https://www.monarx.com/) is a security tool designed to detect and\nprevent malware infections on virtual machines. By installing Monarx, users\ncan enhance the security of their virtual machines, ensuring that they are\nprotected against malicious software.\n\nUse this endpoint to enable malware protection on VPS instances." + } + }, + "com.hostinger.api#UninstallVPSMonarxV1Request": { + "type": "structure", + "members": { + "virtualMachineId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Virtual Machine ID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#UninstallVPSMonarxV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#UninstallVPSMonarxV1Request" + }, + "output": { + "target": "com.hostinger.api#VPSV1ActionActionResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "DELETE", + "uri": "/api/vps/v1/virtual-machines/{virtualMachineId}/monarx", + "code": 200 + }, + "smithy.api#documentation": "Uninstall Monarx\n\nUninstall the Monarx malware scanner on a specified virtual machine.\n\nIf Monarx is not installed, the request will still be processed without any effect.\n\nUse this endpoint to remove malware scanner from VPS instances." + } + }, + "com.hostinger.api#GetVPSMetricsV1Request": { + "type": "structure", + "members": { + "virtualMachineId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Virtual Machine ID" + } + }, + "date_from": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpQuery": "date_from", + "smithy.api#required": {} + } + }, + "date_to": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpQuery": "date_to", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#VPSV1MetricsMetricsCollection": { + "type": "structure", + "members": { + "cpu_usage": { + "target": "com.hostinger.api#VPSV1MetricsMetricsResource", + "traits": { + "smithy.api#documentation": "CPU usage in percentage, 0 - 100%", + "com.distilled.openapi#nullable": {} + } + }, + "ram_usage": { + "target": "com.hostinger.api#VPSV1MetricsMetricsResource", + "traits": { + "smithy.api#documentation": "RAM usage in bytes", + "com.distilled.openapi#nullable": {} + } + }, + "disk_space": { + "target": "com.hostinger.api#VPSV1MetricsMetricsResource", + "traits": { + "smithy.api#documentation": "Disk space usage in bytes", + "com.distilled.openapi#nullable": {} + } + }, + "outgoing_traffic": { + "target": "com.hostinger.api#VPSV1MetricsMetricsResource", + "traits": { + "smithy.api#documentation": "Outgoing traffic in bytes", + "com.distilled.openapi#nullable": {} + } + }, + "incoming_traffic": { + "target": "com.hostinger.api#VPSV1MetricsMetricsResource", + "traits": { + "smithy.api#documentation": "Incoming traffic in bytes", + "com.distilled.openapi#nullable": {} + } + }, + "uptime": { + "target": "com.hostinger.api#VPSV1MetricsMetricsResource", + "traits": { + "smithy.api#documentation": "Uptime in milliseconds", + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#VPSV1MetricsMetricsResource": { + "type": "structure", + "members": { + "unit": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Measurement unit" + } + }, + "usage": { + "target": "smithy.api#Document", + "traits": { + "smithy.api#documentation": "Object, containing UNIX timestamps as a key and measurement as a value." + } + } + }, + "traits": {} + }, + "com.hostinger.api#GetVPSMetricsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#GetVPSMetricsV1Request" + }, + "output": { + "target": "com.hostinger.api#VPSV1MetricsMetricsCollection" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/vps/v1/virtual-machines/{virtualMachineId}/metrics", + "code": 200 + }, + "smithy.api#documentation": "Get metrics\n\nRetrieve historical metrics for a specified virtual machine.\n\nIt includes the following metrics: \n- CPU usage\n- Memory usage\n- Disk usage\n- Network usage\n- Uptime\n\nUse this endpoint to monitor VPS performance and resource utilization over time." + } + }, + "com.hostinger.api#SetVPSNameserversV1Request": { + "type": "structure", + "members": { + "virtualMachineId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Virtual Machine ID" + } + }, + "ns1": { + "target": "smithy.api#String", + "traits": { + "smithy.api#required": {} + } + }, + "ns2": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + }, + "ns3": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#SetVPSNameserversV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#SetVPSNameserversV1Request" + }, + "output": { + "target": "com.hostinger.api#VPSV1ActionActionResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "PUT", + "uri": "/api/vps/v1/virtual-machines/{virtualMachineId}/nameservers", + "code": 200 + }, + "smithy.api#documentation": "Set nameservers\n\nSet nameservers for a specified virtual machine.\n\nBe aware, that improper nameserver configuration can lead to the virtual\nmachine being unable to resolve domain names.\n\nUse this endpoint to configure custom DNS resolvers for VPS instances." + } + }, + "com.hostinger.api#CreateVPSPTRRecordV1Request": { + "type": "structure", + "members": { + "virtualMachineId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Virtual Machine ID" + } + }, + "ipAddressId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "IP Address ID" + } + }, + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Pointer record domain", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#CreateVPSPTRRecordV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#CreateVPSPTRRecordV1Request" + }, + "output": { + "target": "com.hostinger.api#VPSV1ActionActionResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/vps/v1/virtual-machines/{virtualMachineId}/ptr/{ipAddressId}", + "code": 200 + }, + "smithy.api#documentation": "Create PTR record\n\nCreate or update a PTR (Pointer) record for a specified virtual machine.\n\nUse this endpoint to configure reverse DNS lookup for VPS IP addresses." + } + }, + "com.hostinger.api#DeleteVPSPTRRecordV1Request": { + "type": "structure", + "members": { + "virtualMachineId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Virtual Machine ID" + } + }, + "ipAddressId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "IP Address ID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DeleteVPSPTRRecordV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#DeleteVPSPTRRecordV1Request" + }, + "output": { + "target": "com.hostinger.api#VPSV1ActionActionResource" + }, + "traits": { + "smithy.api#http": { + "method": "DELETE", + "uri": "/api/vps/v1/virtual-machines/{virtualMachineId}/ptr/{ipAddressId}", + "code": 200 + }, + "smithy.api#documentation": "Delete PTR record\n\nDelete a PTR (Pointer) record for a specified virtual machine.\n\nOnce deleted, reverse DNS lookups to the virtual machine's IP address will\nno longer return the previously configured hostname.\n\nUse this endpoint to remove reverse DNS configuration from VPS instances." + } + }, + "com.hostinger.api#SetVPSPanelPasswordV1Request": { + "type": "structure", + "members": { + "virtualMachineId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Virtual Machine ID" + } + }, + "password": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Panel password for the virtual machine", + "smithy.api#required": {}, + "smithy.api#sensitive": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#SetVPSPanelPasswordV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#SetVPSPanelPasswordV1Request" + }, + "output": { + "target": "com.hostinger.api#VPSV1ActionActionResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "PUT", + "uri": "/api/vps/v1/virtual-machines/{virtualMachineId}/panel-password", + "code": 200 + }, + "smithy.api#documentation": "Set panel password\n\nSet panel password for a specified virtual machine.\n\nIf virtual machine does not use panel OS, the request will still be processed without any effect.\nRequirements for password are same as in the [recreate virtual machine\nendpoint](/#tag/vps-virtual-machine/POST/api/vps/v1/virtual-machines/{virtualMachineId}/recreate).\n\nUse this endpoint to configure control panel access credentials for VPS instances." + } + }, + "com.hostinger.api#StartVPSRecoveryModeV1Request": { + "type": "structure", + "members": { + "virtualMachineId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Virtual Machine ID" + } + }, + "root_password": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Temporary root password for recovery mode", + "smithy.api#required": {}, + "smithy.api#sensitive": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#StartVPSRecoveryModeV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#StartVPSRecoveryModeV1Request" + }, + "output": { + "target": "com.hostinger.api#VPSV1ActionActionResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/vps/v1/virtual-machines/{virtualMachineId}/recovery", + "code": 200 + }, + "smithy.api#documentation": "Start recovery mode\n\nInitiate recovery mode for a specified virtual machine.\n\nRecovery mode is a special state that allows users to perform system rescue operations, \nsuch as repairing file systems, recovering data, or troubleshooting issues that prevent the virtual machine \nfrom booting normally. \n\nVirtual machine will boot recovery disk image and original disk image will be mounted in `/mnt` directory.\n\nUse this endpoint to enable system rescue operations on VPS instances." + } + }, + "com.hostinger.api#StopVPSRecoveryModeV1Request": { + "type": "structure", + "members": { + "virtualMachineId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Virtual Machine ID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#StopVPSRecoveryModeV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#StopVPSRecoveryModeV1Request" + }, + "output": { + "target": "com.hostinger.api#VPSV1ActionActionResource" + }, + "traits": { + "smithy.api#http": { + "method": "DELETE", + "uri": "/api/vps/v1/virtual-machines/{virtualMachineId}/recovery", + "code": 200 + }, + "smithy.api#documentation": "Stop recovery mode\n\nStop recovery mode for a specified virtual machine.\n\nIf virtual machine is not in recovery mode, this operation will fail.\n\nUse this endpoint to exit system rescue mode and return VPS to normal operation." + } + }, + "com.hostinger.api#RecreateVPSVirtualMachineV1Request": { + "type": "structure", + "members": { + "virtualMachineId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Virtual Machine ID" + } + }, + "template_id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Template ID", + "smithy.api#required": {} + } + }, + "password": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Root password for the virtual machine. If not provided, random password will be generated.\nPassword will not be shown in the response.", + "smithy.api#sensitive": {} + } + }, + "panel_password": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Panel password for the panel-based OS template. If not provided, random password will be generated.\nIf OS does not support panel_password this field will be ignored.\nPassword will not be shown in the response.", + "smithy.api#sensitive": {} + } + }, + "post_install_script_id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Post-install script to execute after virtual machine was recreated" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#RecreateVPSVirtualMachineV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#RecreateVPSVirtualMachineV1Request" + }, + "output": { + "target": "com.hostinger.api#VPSV1ActionActionResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/vps/v1/virtual-machines/{virtualMachineId}/recreate", + "code": 200 + }, + "smithy.api#documentation": "Recreate virtual machine\n\nRecreate a virtual machine from scratch.\n\nThe recreation process involves reinstalling the operating system and\nresetting the virtual machine to its initial state.\nSnapshots, if there are any, will be deleted.\n\n## Password Requirements\nPassword will be checked against leaked password databases. \nRequirements for the password are:\n- At least 12 characters long\n- At least one uppercase letter\n- At least one lowercase letter\n- At least one number\n- Is not leaked publicly\n\n**This operation is irreversible and will result in the loss of all data stored on the virtual machine!**\n\nUse this endpoint to completely rebuild VPS instances with fresh OS installation." + } + }, + "com.hostinger.api#RestartVPSVirtualMachineV1Request": { + "type": "structure", + "members": { + "virtualMachineId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Virtual Machine ID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#RestartVPSVirtualMachineV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#RestartVPSVirtualMachineV1Request" + }, + "output": { + "target": "com.hostinger.api#VPSV1ActionActionResource" + }, + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/vps/v1/virtual-machines/{virtualMachineId}/restart", + "code": 200 + }, + "smithy.api#documentation": "Restart virtual machine\n\nRestart a specified virtual machine by fully stopping and starting it.\n\nIf the virtual machine was stopped, it will be started.\n\nUse this endpoint to reboot VPS instances." + } + }, + "com.hostinger.api#SetVPSRootPasswordV1Request": { + "type": "structure", + "members": { + "virtualMachineId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Virtual Machine ID" + } + }, + "password": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Root password for the virtual machine", + "smithy.api#required": {}, + "smithy.api#sensitive": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#SetVPSRootPasswordV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#SetVPSRootPasswordV1Request" + }, + "output": { + "target": "com.hostinger.api#VPSV1ActionActionResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "PUT", + "uri": "/api/vps/v1/virtual-machines/{virtualMachineId}/root-password", + "code": 200 + }, + "smithy.api#documentation": "Set root password\n\nSet root password for a specified virtual machine.\n\nRequirements for password are same as in the [recreate virtual machine\nendpoint](/#tag/vps-virtual-machine/POST/api/vps/v1/virtual-machines/{virtualMachineId}/recreate).\n\nUse this endpoint to update administrator credentials for VPS instances." + } + }, + "com.hostinger.api#VPSSetupPurchasedVirtualMachineV1RequestPublicKey": { + "type": "structure", + "members": { + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Name of the SSH key" + } + }, + "key": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Contents of the SSH key" + } + } + }, + "traits": { + "smithy.api#documentation": "Use SSH key" + } + }, + "com.hostinger.api#VPSSetupPurchasedVirtualMachineV1Request": { + "type": "structure", + "members": { + "virtualMachineId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Virtual Machine ID" + } + }, + "template_id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Template ID", + "smithy.api#required": {} + } + }, + "data_center_id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Data center ID", + "smithy.api#required": {} + } + }, + "post_install_script_id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Post-install script ID" + } + }, + "password": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Password for the virtual machine. If not provided, random password will be generated.\nPassword will not be shown in the response.", + "smithy.api#sensitive": {} + } + }, + "hostname": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Override default hostname of the virtual machine" + } + }, + "install_monarx": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Install Monarx malware scanner (if supported)" + } + }, + "enable_backups": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Enable weekly backup schedule" + } + }, + "ns1": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Name server 1" + } + }, + "ns2": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Name server 2" + } + }, + "public_key": { + "target": "com.hostinger.api#VPSSetupPurchasedVirtualMachineV1RequestPublicKey", + "traits": { + "smithy.api#documentation": "Use SSH key" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#VPSSetupPurchasedVirtualMachineV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#VPSSetupPurchasedVirtualMachineV1Request" + }, + "output": { + "target": "com.hostinger.api#VPSV1VirtualMachineVirtualMachineResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/vps/v1/virtual-machines/{virtualMachineId}/setup", + "code": 200 + }, + "smithy.api#documentation": "Setup purchased virtual machine\n\nSetup newly purchased virtual machine with `initial` state.\n\nUse this endpoint to configure and initialize purchased VPS instances." + } + }, + "com.hostinger.api#GetVPSSnapshotV1Request": { + "type": "structure", + "members": { + "virtualMachineId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Virtual Machine ID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#VPSV1SnapshotSnapshotResource": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Snapshot ID" + } + }, + "restore_time": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Estimated snapshot restore time in seconds" + } + }, + "created_at": { + "target": "smithy.api#String" + }, + "expires_at": { + "target": "smithy.api#String" + } + }, + "traits": {} + }, + "com.hostinger.api#GetVPSSnapshotV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#GetVPSSnapshotV1Request" + }, + "output": { + "target": "com.hostinger.api#VPSV1SnapshotSnapshotResource" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/vps/v1/virtual-machines/{virtualMachineId}/snapshot", + "code": 200 + }, + "smithy.api#documentation": "Get snapshot\n\nRetrieve snapshot for a specified virtual machine.\n\nUse this endpoint to view current VPS snapshot information." + } + }, + "com.hostinger.api#CreateVPSSnapshotV1Request": { + "type": "structure", + "members": { + "virtualMachineId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Virtual Machine ID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#CreateVPSSnapshotV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#CreateVPSSnapshotV1Request" + }, + "output": { + "target": "com.hostinger.api#VPSV1ActionActionResource" + }, + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/vps/v1/virtual-machines/{virtualMachineId}/snapshot", + "code": 200 + }, + "smithy.api#documentation": "Create snapshot\n\nCreate a snapshot of a specified virtual machine.\n\nA snapshot captures the state and data of the virtual machine at a specific point in time, \nallowing users to restore the virtual machine to that state if needed. \nThis operation is useful for backup purposes, system recovery, \nand testing changes without affecting the current state of the virtual machine.\n\n**Creating new snapshot will overwrite the existing snapshot!**\n\nUse this endpoint to capture VPS state for backup and recovery purposes." + } + }, + "com.hostinger.api#DeleteVPSSnapshotV1Request": { + "type": "structure", + "members": { + "virtualMachineId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Virtual Machine ID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DeleteVPSSnapshotV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#DeleteVPSSnapshotV1Request" + }, + "output": { + "target": "com.hostinger.api#VPSV1ActionActionResource" + }, + "traits": { + "smithy.api#http": { + "method": "DELETE", + "uri": "/api/vps/v1/virtual-machines/{virtualMachineId}/snapshot", + "code": 200 + }, + "smithy.api#documentation": "Delete snapshot\n\nDelete a snapshot of a specified virtual machine.\n\nUse this endpoint to remove VPS snapshots." + } + }, + "com.hostinger.api#RestoreVPSSnapshotV1Request": { + "type": "structure", + "members": { + "virtualMachineId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Virtual Machine ID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#RestoreVPSSnapshotV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#RestoreVPSSnapshotV1Request" + }, + "output": { + "target": "com.hostinger.api#VPSV1ActionActionResource" + }, + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/vps/v1/virtual-machines/{virtualMachineId}/snapshot/restore", + "code": 200 + }, + "smithy.api#documentation": "Restore snapshot\n\nRestore a specified virtual machine to a previous state using a snapshot.\n\nRestoring from a snapshot allows users to revert the virtual machine to that state,\nwhich is useful for system recovery, undoing changes, or testing.\n\nUse this endpoint to revert VPS instances to previous saved states." + } + }, + "com.hostinger.api#StartVPSVirtualMachineV1Request": { + "type": "structure", + "members": { + "virtualMachineId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Virtual Machine ID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#StartVPSVirtualMachineV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#StartVPSVirtualMachineV1Request" + }, + "output": { + "target": "com.hostinger.api#VPSV1ActionActionResource" + }, + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/vps/v1/virtual-machines/{virtualMachineId}/start", + "code": 200 + }, + "smithy.api#documentation": "Start virtual machine\n\nStart a specified virtual machine.\n\nIf the virtual machine is already running, the request will still be processed without any effect.\n\nUse this endpoint to power on stopped VPS instances." + } + }, + "com.hostinger.api#StopVPSVirtualMachineV1Request": { + "type": "structure", + "members": { + "virtualMachineId": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Virtual Machine ID" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#StopVPSVirtualMachineV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#StopVPSVirtualMachineV1Request" + }, + "output": { + "target": "com.hostinger.api#VPSV1ActionActionResource" + }, + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/vps/v1/virtual-machines/{virtualMachineId}/stop", + "code": 200 + }, + "smithy.api#documentation": "Stop virtual machine\n\nStop a specified virtual machine.\n\nIf the virtual machine is already stopped, the request will still be processed without any effect.\n\nThis is a compute-only power state change and does not affect billing. To stop future charges,\ndisable auto-renewal on the owning subscription.\n\nUse this endpoint to power off running VPS instances." + } + }, + "com.hostinger.api#GetHostingAIOptionStatusV1RequestOption": { + "type": "enum", + "members": { + "LLMSTXT": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "llmstxt" + } + }, + "WEB2AGENT": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "web2agent" + } + } + }, + "traits": {} + }, + "com.hostinger.api#GetHostingAIOptionStatusV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "software": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "WordPress installation (software) identifier" + } + }, + "option": { + "target": "com.hostinger.api#GetHostingAIOptionStatusV1RequestOption", + "traits": { + "smithy.api#httpQuery": "option", + "smithy.api#documentation": "Filter the status by a single AI option." + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#WordPressV1HostingerPluginsAiOptionStatusResource": { + "type": "structure", + "members": { + "is_llmstxt_enabled": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether the llms.txt AI option is enabled.\nPresent when the option is requested or when no specific option filter is provided.", + "com.distilled.openapi#nullable": {} + } + }, + "is_web2agent_enabled": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether the Web2Agent AI option is enabled.\nPresent when the option is requested or when no specific option filter is provided.", + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#GetHostingAIOptionStatusV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#GetHostingAIOptionStatusV1Request" + }, + "output": { + "target": "com.hostinger.api#WordPressV1HostingerPluginsAiOptionStatusResource" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/hosting/v1/accounts/{username}/wordpress/{software}/hostinger-plugins/ai-option/status", + "code": 200 + }, + "smithy.api#documentation": "Show AI option status\n\nShow the current AI option status for the Hostinger Tools plugin on the\nspecified WordPress installation. Filter by `option` to return a single\noption, or omit it to return all options.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field)." + } + }, + "com.hostinger.api#SetHostingAIOptionStatusV1RequestOption": { + "type": "enum", + "members": { + "LLMSTXT": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "llmstxt" + } + }, + "WEB2AGENT": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "web2agent" + } + } + }, + "traits": { + "smithy.api#documentation": "AI option name" + } + }, + "com.hostinger.api#SetHostingAIOptionStatusV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "software": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "WordPress installation (software) identifier" + } + }, + "option": { + "target": "com.hostinger.api#SetHostingAIOptionStatusV1RequestOption", + "traits": { + "smithy.api#documentation": "AI option name", + "smithy.api#required": {} + } + }, + "enable": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Enable (true) or disable (false) the AI option.", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#SetHostingAIOptionStatusV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#SetHostingAIOptionStatusV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "PATCH", + "uri": "/api/hosting/v1/accounts/{username}/wordpress/{software}/hostinger-plugins/ai-option/status", + "code": 200 + }, + "smithy.api#documentation": "Set AI option status\n\nEnable or disable an AI option for the Hostinger Tools plugin on the specified\nWordPress installation.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field)." + } + }, + "com.hostinger.api#CheckHostingIfWordPressInstallationsAreValidV1RequestSoftwareIdsList": { + "type": "list", + "member": { + "target": "smithy.api#String" + }, + "traits": { + "smithy.api#documentation": "WordPress installation (software) identifiers to validate." + } + }, + "com.hostinger.api#CheckHostingIfWordPressInstallationsAreValidV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "software_ids": { + "target": "com.hostinger.api#CheckHostingIfWordPressInstallationsAreValidV1RequestSoftwareIdsList", + "traits": { + "smithy.api#documentation": "WordPress installation (software) identifiers to validate.", + "smithy.api#required": {} + } + }, + "force": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Force fresh validation without cache. Preferable for troubleshooting purposes." + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#WordPressV1InstallationsCheckIsValidResultCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#WordPressV1InstallationsCheckIsValidResultResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`WordPress.V1.Installations.CheckIsValidResultResource`](#model/wordpressv1installationscheckisvalidresultresource)" + } + }, + "com.hostinger.api#WordPressV1InstallationsCheckIsValidResultResource": { + "type": "structure", + "members": { + "software_id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "WordPress installation (software) identifier" + } + }, + "is_valid": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether the WordPress installation is valid and working correctly" + } + } + }, + "traits": {} + }, + "com.hostinger.api#CheckHostingIfWordPressInstallationsAreValidV1Response": { + "type": "structure", + "members": { + "body": { + "target": "com.hostinger.api#WordPressV1InstallationsCheckIsValidResultCollection", + "traits": { + "com.distilled.openapi#rawResponse": {}, + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#CheckHostingIfWordPressInstallationsAreValidV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#CheckHostingIfWordPressInstallationsAreValidV1Request" + }, + "output": { + "target": "com.hostinger.api#CheckHostingIfWordPressInstallationsAreValidV1Response" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/hosting/v1/accounts/{username}/wordpress/installations/check-is-valid", + "code": 200 + }, + "smithy.api#documentation": "Check if WordPress installations are valid\n\nCheck whether one or more WordPress installations are valid and working\ncorrectly. Detects broken installations caused by missing files, broken\nplugins, themes and similar issues.\n\nProvide the WordPress installation (software) identifiers in the body. They\ncan be obtained from GET /api/hosting/v1/wordpress/installations (the `id`\nfield)." + } + }, + "com.hostinger.api#DeleteHostingWordPressInstallationV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "software": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "WordPress installation (software) identifier" + } + }, + "delete_files": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Delete installation files from disk." + } + }, + "delete_database": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Delete the installation database." + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DeleteHostingWordPressInstallationV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#DeleteHostingWordPressInstallationV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "DELETE", + "uri": "/api/hosting/v1/accounts/{username}/wordpress/{software}", + "code": 200 + }, + "smithy.api#documentation": "Delete WordPress installation\n\nDelete the specified WordPress installation, with optional file and database\nremoval. This removes all associated components including plugins, themes,\nstaging websites and any other related data.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field)." + } + }, + "com.hostinger.api#HostingDetectWordPressInstallationsV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#HostingDetectWordPressInstallationsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#HostingDetectWordPressInstallationsV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/hosting/v1/accounts/{username}/wordpress/installations/detect", + "code": 200 + }, + "smithy.api#documentation": "Detect WordPress installations\n\nTrigger a background scan to detect WordPress installations for the account.\n\nThis operation is asynchronous: a successful response only means the scan has\nbeen queued. Poll GET /api/hosting/v1/wordpress/installations to fetch the\ndetected installations once the scan completes." + } + }, + "com.hostinger.api#ImportHostingWordPressWebsiteV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + }, + "archive_path": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Path to the WordPress archive file (relative to website root)", + "smithy.api#required": {} + } + }, + "sql_path": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Path to the database SQL file (relative to website root)", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#ImportHostingWordPressWebsiteV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ImportHostingWordPressWebsiteV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/hosting/v1/accounts/{username}/websites/{domain}/wordpress/import", + "code": 200 + }, + "smithy.api#documentation": "Import WordPress website\n\nImport WordPress website to the specified domain.\n\nWARNING: this overwrites the website's existing contents and cannot be undone —\nverify this is intended before calling this endpoint.\n\nThis endpoint allows you to import a WordPress website from archive and\ndatabase files that have been uploaded to the website's directory." + } + }, + "com.hostinger.api#InstallHostingWordPressV1RequestAutoUpdates": { + "type": "enum", + "members": { + "ALL": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "all" + } + }, + "NONE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "none" + } + }, + "MINOR": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "minor" + } + } + }, + "traits": { + "smithy.api#documentation": "WordPress core auto-update policy" + } + }, + "com.hostinger.api#InstallHostingWordPressV1RequestCredentials": { + "type": "structure", + "members": { + "email": { + "target": "smithy.api#String", + "traits": { + "smithy.api#required": {} + } + }, + "login": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "WordPress admin username", + "smithy.api#required": {} + } + }, + "password": { + "target": "smithy.api#String", + "traits": { + "smithy.api#required": {}, + "smithy.api#sensitive": {} + } + } + }, + "traits": { + "smithy.api#documentation": "WordPress admin credentials" + } + }, + "com.hostinger.api#InstallHostingWordPressV1RequestDatabase": { + "type": "structure", + "members": { + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Database name (username prefix added if missing)" + } + }, + "password": { + "target": "smithy.api#String", + "traits": { + "com.distilled.openapi#nullable": {}, + "smithy.api#sensitive": {} + } + } + }, + "traits": { + "smithy.api#documentation": "Optional. If the named database already exists, it will be used for this WordPress install. Otherwise a new database is created with a generated name and random credentials." + } + }, + "com.hostinger.api#InstallHostingWordPressV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Domain of the existing website where WordPress will be installed", + "smithy.api#required": {} + } + }, + "site_title": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Title of the WordPress site", + "smithy.api#required": {} + } + }, + "language": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "WordPress locale. Defaults to en_US when omitted.", + "com.distilled.openapi#nullable": {} + } + }, + "directory": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Relative directory to install WordPress into. Defaults to the website root when omitted.", + "com.distilled.openapi#nullable": {} + } + }, + "overwrite": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "When false (default), does not replace an existing installation. If WordPress is already installed on the domain/path, the async install job fails unless true.", + "com.distilled.openapi#nullable": {} + } + }, + "auto_updates": { + "target": "com.hostinger.api#InstallHostingWordPressV1RequestAutoUpdates", + "traits": { + "smithy.api#documentation": "WordPress core auto-update policy", + "com.distilled.openapi#nullable": {} + } + }, + "version": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "WordPress core version to install. If omitted, the latest core version compatible with the account vhost PHP version is selected.", + "com.distilled.openapi#nullable": {} + } + }, + "credentials": { + "target": "com.hostinger.api#InstallHostingWordPressV1RequestCredentials", + "traits": { + "smithy.api#documentation": "WordPress admin credentials", + "smithy.api#required": {} + } + }, + "database": { + "target": "com.hostinger.api#InstallHostingWordPressV1RequestDatabase", + "traits": { + "smithy.api#documentation": "Optional. If the named database already exists, it will be used for this WordPress install. Otherwise a new database is created with a generated name and random credentials.", + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#InstallHostingWordPressV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#InstallHostingWordPressV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/hosting/v1/accounts/{username}/wordpress/installations", + "code": 200 + }, + "smithy.api#documentation": "Install WordPress\n\nInstall WordPress on an existing website.\n\nThe website must already exist before calling this endpoint. To create a new\nwebsite first, use POST /api/hosting/v1/websites and poll\nGET /api/hosting/v1/websites until it appears.\n\nCall GET /api/hosting/v1/wordpress/installations filtered by username and\ndomain before proceeding to check whether WordPress is already installed on\nthe target domain/path. If WordPress already exists and `overwrite` is false\n(the default), the async job will fail.\n\nThis operation is asynchronous: a successful response only means the install\njob has been queued, not that WordPress is ready. Installation typically\ntakes 1-2 minutes. Poll GET /api/hosting/v1/wordpress/installations filtered\nby username and domain to track progress. When the installation appears in\nthat list, WordPress is ready." + } + }, + "com.hostinger.api#ListHostingWordPressInstallationsV1RequestOwnership": { + "type": "enum", + "members": { + "OWNED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "owned" + } + }, + "MANAGED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "managed" + } + }, + "ALL": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "all" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListHostingWordPressInstallationsV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpQuery": "username", + "smithy.api#documentation": "Filter by specific username" + } + }, + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpQuery": "domain", + "smithy.api#documentation": "Filter by domain name (case-insensitive substring match)" + } + }, + "ownership": { + "target": "com.hostinger.api#ListHostingWordPressInstallationsV1RequestOwnership", + "traits": { + "smithy.api#httpQuery": "ownership", + "smithy.api#documentation": "Filter by ownership type. Defaults to \"owned\". Use \"all\" to include both owned and managed installations." + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#WordPressV1InstallationsWordPressInstallationCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#WordPressV1InstallationsWordPressInstallationResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`WordPress.V1.Installations.WordPressInstallationResource`](#model/wordpressv1installationswordpressinstallationresource)" + } + }, + "com.hostinger.api#WordPressV1InstallationsWordPressInstallationResource": { + "type": "structure", + "members": { + "id": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "WordPress installation (software) id" + } + }, + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Hosting account username" + } + }, + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Domain the installation belongs to" + } + }, + "site_title": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "WordPress site title" + } + }, + "url": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "WordPress site URL" + } + }, + "directory": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Installation directory" + } + }, + "language": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "WordPress locale" + } + }, + "login": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "WordPress admin username" + } + }, + "email": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "WordPress admin email" + } + }, + "is_valid": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether the installation is considered valid" + } + }, + "validation_error": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Reason the installation is invalid, if any", + "com.distilled.openapi#nullable": {} + } + }, + "created_at": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Installation creation timestamp" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListHostingWordPressInstallationsV1Response": { + "type": "structure", + "members": { + "body": { + "target": "com.hostinger.api#WordPressV1InstallationsWordPressInstallationCollection", + "traits": { + "com.distilled.openapi#rawResponse": {}, + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListHostingWordPressInstallationsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListHostingWordPressInstallationsV1Request" + }, + "output": { + "target": "com.hostinger.api#ListHostingWordPressInstallationsV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/hosting/v1/wordpress/installations", + "code": 200 + }, + "smithy.api#documentation": "List WordPress installations\n\nList WordPress installations accessible to the authenticated client.\n\nUse this endpoint to discover existing WordPress installations and to poll\nfor installation status after calling the install endpoint. When a newly\nrequested installation appears in this list, WordPress is ready. Filter by\nusername and domain to narrow results to a specific website.\n\nEach installation includes a `valid` flag and, when invalid, a\n`validationError` describing why." + } + }, + "com.hostinger.api#ListHostingAvailableWordPressCoreUpdatesV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "software": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "WordPress installation (software) identifier" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#WordPressV1InstallationsUpdateCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#WordPressV1InstallationsUpdateResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`WordPress.V1.Installations.UpdateResource`](#model/wordpressv1installationsupdateresource)" + } + }, + "com.hostinger.api#WordPressV1InstallationsUpdateResource": { + "type": "structure", + "members": { + "version": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Available WordPress core version" + } + }, + "type": { + "target": "com.hostinger.api#WordPressV1InstallationsUpdateResourceType", + "traits": { + "smithy.api#documentation": "Update type" + } + }, + "url": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Download URL for the update package" + } + } + }, + "traits": {} + }, + "com.hostinger.api#WordPressV1InstallationsUpdateResourceType": { + "type": "enum", + "members": { + "MAJOR": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "major" + } + }, + "MINOR": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "minor" + } + } + }, + "traits": { + "smithy.api#documentation": "Update type" + } + }, + "com.hostinger.api#ListHostingAvailableWordPressCoreUpdatesV1Response": { + "type": "structure", + "members": { + "body": { + "target": "com.hostinger.api#WordPressV1InstallationsUpdateCollection", + "traits": { + "com.distilled.openapi#rawResponse": {}, + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListHostingAvailableWordPressCoreUpdatesV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListHostingAvailableWordPressCoreUpdatesV1Request" + }, + "output": { + "target": "com.hostinger.api#ListHostingAvailableWordPressCoreUpdatesV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/hosting/v1/accounts/{username}/wordpress/{software}/updates", + "code": 200 + }, + "smithy.api#documentation": "List available WordPress core updates\n\nList available WordPress core updates for the specified installation.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field)." + } + }, + "com.hostinger.api#GetHostingInstallationJWTTokenV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "software": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "WordPress installation (software) identifier" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#WordPressV1InstallationsJwtTokenResource": { + "type": "structure", + "members": { + "token": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Signed JWT used to authenticate requests against the WordPress installation" + } + }, + "expires_in": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#documentation": "Token lifetime in seconds from the moment it was issued" + } + }, + "expires_at": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Date-time at which the token expires, or null when not provided", + "com.distilled.openapi#nullable": {} + } + }, + "mcp_url": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "MCP (Model Context Protocol) endpoint URL for the WordPress installation, or null when not provided", + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#GetHostingInstallationJWTTokenV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#GetHostingInstallationJWTTokenV1Request" + }, + "output": { + "target": "com.hostinger.api#WordPressV1InstallationsJwtTokenResource" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/hosting/v1/accounts/{username}/wordpress/{software}/jwt-token", + "code": 200 + }, + "smithy.api#documentation": "Get installation JWT token\n\nReturn a JWT token used to authenticate requests against the specified\nWordPress installation, including its MCP (Model Context Protocol) endpoint.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field)." + } + }, + "com.hostinger.api#GetHostingWordPressCoreVersionV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "software": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "WordPress installation (software) identifier" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#WordPressV1InstallationsVersionResource": { + "type": "structure", + "members": { + "version": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Installed WordPress core version" + } + }, + "vulnerabilities": { + "target": "com.hostinger.api#WordPressV1InstallationsVersionResourceVulnerabilitiesList", + "traits": { + "smithy.api#documentation": "Known vulnerabilities affecting the installed core version" + } + } + }, + "traits": {} + }, + "com.hostinger.api#WordPressV1CommonVulnerabilityResource": { + "type": "structure", + "members": { + "title": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Short title of the vulnerability" + } + }, + "description": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Details about the vulnerability" + } + }, + "affected_in": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Version in which the vulnerability was introduced or is present" + } + }, + "fixed_in": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Version in which the vulnerability was fixed" + } + }, + "direct_url": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Link to the vulnerability advisory" + } + } + }, + "traits": {} + }, + "com.hostinger.api#WordPressV1InstallationsVersionResourceVulnerabilitiesList": { + "type": "list", + "member": { + "target": "com.hostinger.api#WordPressV1CommonVulnerabilityResource" + }, + "traits": { + "smithy.api#documentation": "Known vulnerabilities affecting the installed core version" + } + }, + "com.hostinger.api#GetHostingWordPressCoreVersionV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#GetHostingWordPressCoreVersionV1Request" + }, + "output": { + "target": "com.hostinger.api#WordPressV1InstallationsVersionResource" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/hosting/v1/accounts/{username}/wordpress/{software}/version", + "code": 200 + }, + "smithy.api#documentation": "Show WordPress core version\n\nShow the WordPress core version for the specified installation, along with\nknown vulnerabilities affecting it.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field)." + } + }, + "com.hostinger.api#UpdateHostingWordPressCoreV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "software": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "WordPress installation (software) identifier" + } + }, + "minor": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Update the minor version only." + } + }, + "version": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Update to a specific WordPress core version.", + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#UpdateHostingWordPressCoreV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#UpdateHostingWordPressCoreV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/hosting/v1/accounts/{username}/wordpress/{software}/update", + "code": 200 + }, + "smithy.api#documentation": "Update WordPress core\n\nUpdate the WordPress core for the specified installation (minor update or a\nspecific version).\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field).\n\nThis operation is asynchronous: a successful response only means the update\njob has been queued." + } + }, + "com.hostinger.api#PurgeHostingLiteSpeedCacheV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "software": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "WordPress installation (software) identifier" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#PurgeHostingLiteSpeedCacheV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#PurgeHostingLiteSpeedCacheV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/hosting/v1/accounts/{username}/wordpress/{software}/litespeed-cache/purge", + "code": 200 + }, + "smithy.api#documentation": "Purge LiteSpeed Cache\n\nPurge the LiteSpeed Cache for the specified WordPress installation.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field)." + } + }, + "com.hostinger.api#GetHostingLiteSpeedCacheStatusV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "software": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "WordPress installation (software) identifier" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#WordPressV1LitespeedLitespeedCacheStatusResource": { + "type": "structure", + "members": { + "is_installed": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether the LiteSpeed Cache plugin is installed on the WordPress installation" + } + }, + "is_active": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether the LiteSpeed Cache plugin is active on the WordPress installation" + } + } + }, + "traits": {} + }, + "com.hostinger.api#GetHostingLiteSpeedCacheStatusV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#GetHostingLiteSpeedCacheStatusV1Request" + }, + "output": { + "target": "com.hostinger.api#WordPressV1LitespeedLitespeedCacheStatusResource" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/hosting/v1/accounts/{username}/wordpress/{software}/litespeed-cache/status", + "code": 200 + }, + "smithy.api#documentation": "Show LiteSpeed Cache status\n\nShow the LiteSpeed Cache status for the specified WordPress installation.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field)." + } + }, + "com.hostinger.api#CreateHostingLoginLinksV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "software": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "WordPress installation (software) identifier" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#WordPressV1LoginLoginLinksResource": { + "type": "structure", + "members": { + "login": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Primary auto-login URL for the WordPress installation", + "com.distilled.openapi#nullable": {} + } + }, + "fallback": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Fallback auto-login URL using the temporary Hostinger domain", + "com.distilled.openapi#nullable": {} + } + }, + "default": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Default WordPress admin URL used when auto-login is unavailable", + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": {} + }, + "com.hostinger.api#CreateHostingLoginLinksV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#CreateHostingLoginLinksV1Request" + }, + "output": { + "target": "com.hostinger.api#WordPressV1LoginLoginLinksResource" + }, + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/hosting/v1/accounts/{username}/wordpress/{software}/login/links", + "code": 200 + }, + "smithy.api#documentation": "Create login links\n\nCreate temporary auto-login links for the specified WordPress installation.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field)." + } + }, + "com.hostinger.api#GetHostingMaintenanceStatusV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "software": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "WordPress installation (software) identifier" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#WordPressV1MaintenanceMaintenanceStatusResource": { + "type": "structure", + "members": { + "status": { + "target": "com.hostinger.api#WordPressV1MaintenanceMaintenanceStatusResourceStatus", + "traits": { + "smithy.api#documentation": "Current maintenance mode status for the WordPress installation" + } + } + }, + "traits": {} + }, + "com.hostinger.api#WordPressV1MaintenanceMaintenanceStatusResourceStatus": { + "type": "enum", + "members": { + "ENABLED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "enabled" + } + }, + "DISABLED": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "disabled" + } + } + }, + "traits": { + "smithy.api#documentation": "Current maintenance mode status for the WordPress installation" + } + }, + "com.hostinger.api#GetHostingMaintenanceStatusV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#GetHostingMaintenanceStatusV1Request" + }, + "output": { + "target": "com.hostinger.api#WordPressV1MaintenanceMaintenanceStatusResource" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/hosting/v1/accounts/{username}/wordpress/{software}/maintenance/status", + "code": 200 + }, + "smithy.api#documentation": "Show maintenance status\n\nShow the maintenance mode status for the specified WordPress installation.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field)." + } + }, + "com.hostinger.api#ToggleHostingMaintenanceModeV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "software": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "WordPress installation (software) identifier" + } + }, + "enabled": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Enable (true) or disable (false) maintenance mode for the WordPress installation.", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#ToggleHostingMaintenanceModeV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ToggleHostingMaintenanceModeV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "PATCH", + "uri": "/api/hosting/v1/accounts/{username}/wordpress/{software}/maintenance/toggle", + "code": 200 + }, + "smithy.api#documentation": "Toggle maintenance mode\n\nEnable or disable maintenance mode for the specified WordPress installation,\nbased on the `enabled` flag.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field)." + } + }, + "com.hostinger.api#GetHostingMemcachedObjectCacheStatusV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "software": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "WordPress installation (software) identifier" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#WordPressV1MemcachedMemcachedStatusResource": { + "type": "structure", + "members": { + "status": { + "target": "com.hostinger.api#WordPressV1MemcachedMemcachedStatusResourceStatus", + "traits": { + "smithy.api#documentation": "Current Memcached object cache status for the WordPress installation" + } + } + }, + "traits": {} + }, + "com.hostinger.api#WordPressV1MemcachedMemcachedStatusResourceStatus": { + "type": "enum", + "members": { + "ACTIVE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "active" + } + }, + "INACTIVE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "inactive" + } + } + }, + "traits": { + "smithy.api#documentation": "Current Memcached object cache status for the WordPress installation" + } + }, + "com.hostinger.api#GetHostingMemcachedObjectCacheStatusV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#GetHostingMemcachedObjectCacheStatusV1Request" + }, + "output": { + "target": "com.hostinger.api#WordPressV1MemcachedMemcachedStatusResource" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/hosting/v1/accounts/{username}/wordpress/{software}/memcached/status", + "code": 200 + }, + "smithy.api#documentation": "Show Memcached object cache status\n\nShow the Memcached object cache status for the specified WordPress\ninstallation.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field)." + } + }, + "com.hostinger.api#ToggleHostingMemcachedObjectCacheV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "software": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "WordPress installation (software) identifier" + } + }, + "enabled": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Activate (true) or deactivate (false) the Memcached object cache for the WordPress installation.", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#ToggleHostingMemcachedObjectCacheV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ToggleHostingMemcachedObjectCacheV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "PATCH", + "uri": "/api/hosting/v1/accounts/{username}/wordpress/{software}/memcached/toggle", + "code": 200 + }, + "smithy.api#documentation": "Toggle Memcached object cache\n\nActivate or deactivate the Memcached object cache for the specified WordPress\ninstallation, based on the `enabled` flag.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field)." + } + }, + "com.hostinger.api#ActivateHostingWordPressPluginV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "software": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "WordPress installation (software) identifier" + } + }, + "plugin": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Slug of the installed plugin to activate.", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#ActivateHostingWordPressPluginV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ActivateHostingWordPressPluginV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/hosting/v1/accounts/{username}/wordpress/{software}/plugins/activate", + "code": 200 + }, + "smithy.api#documentation": "Activate WordPress plugin\n\nActivate an installed plugin on a WordPress installation.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field).\n\nThis operation is asynchronous: a successful response only means the activation\njob has been queued." + } + }, + "com.hostinger.api#DeactivateHostingWordPressPluginV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "software": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "WordPress installation (software) identifier" + } + }, + "plugin": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Slug of the installed plugin to deactivate.", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DeactivateHostingWordPressPluginV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#DeactivateHostingWordPressPluginV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/hosting/v1/accounts/{username}/wordpress/{software}/plugins/deactivate", + "code": 200 + }, + "smithy.api#documentation": "Deactivate WordPress plugin\n\nDeactivate an installed plugin on a WordPress installation.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field).\n\nThis operation is asynchronous: a successful response only means the\ndeactivation job has been queued." + } + }, + "com.hostinger.api#DeployHostingWordPressPluginV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + }, + "slug": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Slug of the plugin", + "smithy.api#required": {} + } + }, + "plugin_path": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Relative path to the plugin directory from wp-content/plugins", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DeployHostingWordPressPluginV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#DeployHostingWordPressPluginV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/hosting/v1/accounts/{username}/websites/{domain}/wordpress/plugins/deploy", + "code": 200 + }, + "smithy.api#documentation": "Deploy WordPress plugin\n\nDeploy a WordPress plugin from an already uploaded directory.\n\nThis endpoint allows you to deploy a WordPress plugin that has been uploaded to the website's directory.\nThe plugin will be activated and made available in the WordPress admin panel." + } + }, + "com.hostinger.api#InstallHostingWordPressPluginsV1RequestPluginsList": { + "type": "list", + "member": { + "target": "smithy.api#String" + }, + "traits": { + "smithy.api#documentation": "Plugin slugs to install. Use GET /api/hosting/v1/wordpress/plugins to discover available slugs." + } + }, + "com.hostinger.api#InstallHostingWordPressPluginsV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "software": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "WordPress installation (software) identifier" + } + }, + "plugins": { + "target": "com.hostinger.api#InstallHostingWordPressPluginsV1RequestPluginsList", + "traits": { + "smithy.api#documentation": "Plugin slugs to install. Use GET /api/hosting/v1/wordpress/plugins to discover available slugs.", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#InstallHostingWordPressPluginsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#InstallHostingWordPressPluginsV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/hosting/v1/accounts/{username}/wordpress/{software}/plugins/install", + "code": 200 + }, + "smithy.api#documentation": "Install WordPress plugins\n\nInstall one or more plugins on an existing WordPress installation.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id`\nfield). Use GET /api/hosting/v1/wordpress/plugins to discover the plugin\nslugs available for installation.\n\nThis operation is asynchronous: a successful response only means the install\njob has been queued, not that the plugins are ready." + } + }, + "com.hostinger.api#ListHostingAvailableWordPressPluginsV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "software": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "WordPress installation (software) identifier" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#WordPressV1PluginsAvailablePluginCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#WordPressV1PluginsAvailablePluginResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`WordPress.V1.Plugins.AvailablePluginResource`](#model/wordpressv1pluginsavailablepluginresource)" + } + }, + "com.hostinger.api#WordPressV1PluginsAvailablePluginResource": { + "type": "structure", + "members": { + "slug": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Plugin slug used when installing the plugin" + } + }, + "title": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Human readable plugin name" + } + }, + "description": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Short plugin description" + } + }, + "onboarding_description_slug": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Translation slug for the onboarding description", + "com.distilled.openapi#nullable": {} + } + }, + "recommended_description_slug": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Translation slug for the recommended description", + "com.distilled.openapi#nullable": {} + } + }, + "link": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Link to the plugin page on WordPress.org" + } + }, + "version": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Latest available plugin version" + } + }, + "required_wordpress_version": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Minimum WordPress version required by the plugin" + } + }, + "required_php_version": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Minimum PHP version required by the plugin" + } + }, + "is_plan_upgrade_needed": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether a hosting plan upgrade is required to use the plugin" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListHostingAvailableWordPressPluginsV1Response": { + "type": "structure", + "members": { + "body": { + "target": "com.hostinger.api#WordPressV1PluginsAvailablePluginCollection", + "traits": { + "com.distilled.openapi#rawResponse": {}, + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListHostingAvailableWordPressPluginsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListHostingAvailableWordPressPluginsV1Request" + }, + "output": { + "target": "com.hostinger.api#ListHostingAvailableWordPressPluginsV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/hosting/v1/accounts/{username}/wordpress/{software}/plugins/available", + "code": 200 + }, + "smithy.api#documentation": "List available WordPress plugins\n\nList plugins recommended for installation on a WordPress installation that are\nnot yet installed.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field)." + } + }, + "com.hostinger.api#ListHostingInstalledWordPressPluginsV1RequestCategory": { + "type": "enum", + "members": { + "CACHE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "cache" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListHostingInstalledWordPressPluginsV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "software": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "WordPress installation (software) identifier" + } + }, + "category": { + "target": "com.hostinger.api#ListHostingInstalledWordPressPluginsV1RequestCategory", + "traits": { + "smithy.api#httpQuery": "category", + "smithy.api#documentation": "Filter installed plugins by category." + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#WordPressV1PluginsInstalledPluginCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#WordPressV1PluginsInstalledPluginResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`WordPress.V1.Plugins.InstalledPluginResource`](#model/wordpressv1pluginsinstalledpluginresource)" + } + }, + "com.hostinger.api#WordPressV1PluginsInstalledPluginResource": { + "type": "structure", + "members": { + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Plugin slug" + } + }, + "title": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Human readable plugin name" + } + }, + "version": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Installed plugin version" + } + }, + "status": { + "target": "com.hostinger.api#WordPressV1PluginsInstalledPluginResourceStatus", + "traits": { + "smithy.api#documentation": "Whether the plugin is active or inactive" + } + }, + "update": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Available update version, or \"none\" when up to date" + } + }, + "vulnerabilities": { + "target": "com.hostinger.api#WordPressV1PluginsInstalledPluginResourceVulnerabilitiesList", + "traits": { + "smithy.api#documentation": "Known vulnerabilities affecting the installed version" + } + } + }, + "traits": {} + }, + "com.hostinger.api#WordPressV1PluginsInstalledPluginResourceStatus": { + "type": "enum", + "members": { + "ACTIVE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "active" + } + }, + "INACTIVE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "inactive" + } + } + }, + "traits": { + "smithy.api#documentation": "Whether the plugin is active or inactive" + } + }, + "com.hostinger.api#WordPressV1PluginsInstalledPluginResourceVulnerabilitiesList": { + "type": "list", + "member": { + "target": "com.hostinger.api#WordPressV1CommonVulnerabilityResource" + }, + "traits": { + "smithy.api#documentation": "Known vulnerabilities affecting the installed version" + } + }, + "com.hostinger.api#ListHostingInstalledWordPressPluginsV1Response": { + "type": "structure", + "members": { + "body": { + "target": "com.hostinger.api#WordPressV1PluginsInstalledPluginCollection", + "traits": { + "com.distilled.openapi#rawResponse": {}, + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListHostingInstalledWordPressPluginsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListHostingInstalledWordPressPluginsV1Request" + }, + "output": { + "target": "com.hostinger.api#ListHostingInstalledWordPressPluginsV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/hosting/v1/accounts/{username}/wordpress/{software}/plugins", + "code": 200 + }, + "smithy.api#documentation": "List installed WordPress plugins\n\nList plugins installed on a WordPress installation, including their status,\navailable updates and known vulnerabilities.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field)." + } + }, + "com.hostinger.api#SearchHostingWordPressPluginsV1Request": { + "type": "structure", + "members": { + "search": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpQuery": "search", + "smithy.api#required": {}, + "smithy.api#documentation": "Search term to match against plugin names. Minimum 3 characters." + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#WordPressV1PluginsPluginCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#WordPressV1PluginsPluginResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`WordPress.V1.Plugins.PluginResource`](#model/wordpressv1pluginspluginresource)" + } + }, + "com.hostinger.api#WordPressV1PluginsPluginResource": { + "type": "structure", + "members": { + "slug": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Plugin slug used when installing the plugin" + } + }, + "title": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Human readable plugin name" + } + }, + "icons": { + "target": "com.hostinger.api#WordPressV1PluginsPluginResourceIcons", + "traits": { + "smithy.api#documentation": "Plugin icon URLs keyed by resolution", + "com.distilled.openapi#nullable": {} + } + }, + "description": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Short plugin description" + } + } + }, + "traits": {} + }, + "com.hostinger.api#WordPressV1PluginsPluginResourceIcons": { + "type": "structure", + "members": { + "_1x": { + "target": "smithy.api#String", + "traits": { + "smithy.api#jsonName": "1x" + } + }, + "_2x": { + "target": "smithy.api#String", + "traits": { + "smithy.api#jsonName": "2x" + } + } + }, + "traits": { + "smithy.api#documentation": "Plugin icon URLs keyed by resolution" + } + }, + "com.hostinger.api#SearchHostingWordPressPluginsV1Response": { + "type": "structure", + "members": { + "body": { + "target": "com.hostinger.api#WordPressV1PluginsPluginCollection", + "traits": { + "com.distilled.openapi#rawResponse": {}, + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#SearchHostingWordPressPluginsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#SearchHostingWordPressPluginsV1Request" + }, + "output": { + "target": "com.hostinger.api#SearchHostingWordPressPluginsV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/hosting/v1/wordpress/plugins", + "code": 200 + }, + "smithy.api#documentation": "Search WordPress plugins\n\nSearch the WordPress.org plugin directory for plugins available to install.\n\nUse the returned `slug` values with\nPOST /api/hosting/v1/accounts/{username}/wordpress/{software}/plugins/install." + } + }, + "com.hostinger.api#ListHostingSuggestedWordPressPluginsV1Request": { + "type": "structure", + "members": { + "order_id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "order_id", + "smithy.api#documentation": "Optionally scope suggestions to a specific order." + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#WordPressV1PluginsSuggestedPluginGroupCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#WordPressV1PluginsSuggestedPluginGroupResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`WordPress.V1.Plugins.SuggestedPluginGroupResource`](#model/wordpressv1pluginssuggestedplugingroupresource)" + } + }, + "com.hostinger.api#WordPressV1PluginsSuggestedPluginGroupResource": { + "type": "structure", + "members": { + "website_type": { + "target": "com.hostinger.api#WordPressV1PluginsSuggestedPluginGroupResourceWebsiteType", + "traits": { + "smithy.api#documentation": "Website type the suggested plugins are grouped by" + } + }, + "plugins": { + "target": "com.hostinger.api#WordPressV1PluginsSuggestedPluginGroupResourcePluginsList", + "traits": { + "smithy.api#documentation": "Plugins suggested for the website type" + } + } + }, + "traits": {} + }, + "com.hostinger.api#WordPressV1PluginsSuggestedPluginGroupResourceWebsiteType": { + "type": "enum", + "members": { + "BUSINESS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "business" + } + }, + "ONLINE_STORE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "online-store" + } + }, + "BLOG": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "blog" + } + }, + "PORTFOLIO": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "portfolio" + } + }, + "AFFILIATE_MARKETING": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "affiliate-marketing" + } + }, + "OTHER": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "other" + } + }, + "DEFAULT": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "default" + } + } + }, + "traits": { + "smithy.api#documentation": "Website type the suggested plugins are grouped by" + } + }, + "com.hostinger.api#WordPressV1PluginsSuggestedPluginResource": { + "type": "structure", + "members": { + "slug": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Plugin slug used when installing the plugin" + } + }, + "title": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Human readable plugin name" + } + }, + "description": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Short plugin description" + } + }, + "onboarding_description_slug": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Translation slug for the onboarding description", + "com.distilled.openapi#nullable": {} + } + }, + "recommended_description_slug": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Translation slug for the recommended description", + "com.distilled.openapi#nullable": {} + } + }, + "link": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Link to the plugin page on WordPress.org" + } + }, + "version": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Latest available plugin version" + } + }, + "required_wordpress_version": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Minimum WordPress version required by the plugin" + } + }, + "required_php_version": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Minimum PHP version required by the plugin" + } + }, + "is_preselected": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether the plugin is preselected during onboarding" + } + }, + "is_plan_upgrade_needed": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether a hosting plan upgrade is required to use the plugin" + } + } + }, + "traits": {} + }, + "com.hostinger.api#WordPressV1PluginsSuggestedPluginGroupResourcePluginsList": { + "type": "list", + "member": { + "target": "com.hostinger.api#WordPressV1PluginsSuggestedPluginResource" + }, + "traits": { + "smithy.api#documentation": "Plugins suggested for the website type" + } + }, + "com.hostinger.api#ListHostingSuggestedWordPressPluginsV1Response": { + "type": "structure", + "members": { + "body": { + "target": "com.hostinger.api#WordPressV1PluginsSuggestedPluginGroupCollection", + "traits": { + "com.distilled.openapi#rawResponse": {}, + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListHostingSuggestedWordPressPluginsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListHostingSuggestedWordPressPluginsV1Request" + }, + "output": { + "target": "com.hostinger.api#ListHostingSuggestedWordPressPluginsV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/hosting/v1/wordpress/plugins/suggested", + "code": 200 + }, + "smithy.api#documentation": "List suggested WordPress plugins\n\nList curated plugin suggestions grouped by website type.\n\nUse the returned `slug` values with\nPOST /api/hosting/v1/accounts/{username}/wordpress/{software}/plugins/install." + } + }, + "com.hostinger.api#CheckHostingIfWooCommerceIsInstalledV1Request": { + "type": "structure", + "members": { + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpQuery": "domain", + "smithy.api#documentation": "Filter by domain name (case-insensitive substring match)" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#WordPressV1PluginsWoocommerceInstalledResource": { + "type": "structure", + "members": { + "is_installed": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether WooCommerce is installed on any WordPress installation of the domain" + } + } + }, + "traits": {} + }, + "com.hostinger.api#CheckHostingIfWooCommerceIsInstalledV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#CheckHostingIfWooCommerceIsInstalledV1Request" + }, + "output": { + "target": "com.hostinger.api#WordPressV1PluginsWoocommerceInstalledResource" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/hosting/v1/wordpress/plugins/is-woocommerce-installed", + "code": 200 + }, + "smithy.api#documentation": "Check if WooCommerce is installed\n\nCheck whether WooCommerce is installed on any WordPress installation of a\ndomain. Optionally filter by domain to scope the check." + } + }, + "com.hostinger.api#UninstallHostingWordPressPluginsV1RequestPluginsList": { + "type": "list", + "member": { + "target": "smithy.api#String" + }, + "traits": { + "smithy.api#documentation": "Slugs of the installed plugins to uninstall." + } + }, + "com.hostinger.api#UninstallHostingWordPressPluginsV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "software": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "WordPress installation (software) identifier" + } + }, + "plugins": { + "target": "com.hostinger.api#UninstallHostingWordPressPluginsV1RequestPluginsList", + "traits": { + "smithy.api#documentation": "Slugs of the installed plugins to uninstall.", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#UninstallHostingWordPressPluginsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#UninstallHostingWordPressPluginsV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/hosting/v1/accounts/{username}/wordpress/{software}/plugins/uninstall", + "code": 200 + }, + "smithy.api#documentation": "Uninstall WordPress plugins\n\nUninstall one or more plugins from a WordPress installation.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field).\n\nThis operation is asynchronous: a successful response only means the uninstall\njob has been queued." + } + }, + "com.hostinger.api#UpdateHostingHostingerWordPressPluginV1RequestSlug": { + "type": "enum", + "members": { + "HOSTINGER": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "hostinger" + } + }, + "HOSTINGER_AI_ASSISTANT": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "hostinger-ai-assistant" + } + }, + "HOSTINGER_AFFILIATE_PLUGIN": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "hostinger-affiliate-plugin" + } + }, + "HOSTINGER_EASY_ONBOARDING": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "hostinger-easy-onboarding" + } + }, + "HOSTINGER_REACH": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "hostinger-reach" + } + } + }, + "traits": { + "smithy.api#documentation": "Slug of the Hostinger plugin to update to its latest version." + } + }, + "com.hostinger.api#UpdateHostingHostingerWordPressPluginV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "software": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "WordPress installation (software) identifier" + } + }, + "slug": { + "target": "com.hostinger.api#UpdateHostingHostingerWordPressPluginV1RequestSlug", + "traits": { + "smithy.api#documentation": "Slug of the Hostinger plugin to update to its latest version.", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#UpdateHostingHostingerWordPressPluginV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#UpdateHostingHostingerWordPressPluginV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/hosting/v1/accounts/{username}/wordpress/{software}/plugins/hostinger/update", + "code": 200 + }, + "smithy.api#documentation": "Update Hostinger WordPress plugin\n\nUpdate a Hostinger plugin to its latest version on a WordPress installation.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field).\n\nThis operation is asynchronous: a successful response only means the update job\nhas been queued." + } + }, + "com.hostinger.api#UpdateHostingWordPressPluginsV1RequestPluginsList": { + "type": "list", + "member": { + "target": "smithy.api#String" + }, + "traits": { + "smithy.api#documentation": "Slugs of the installed plugins to update to their latest version." + } + }, + "com.hostinger.api#UpdateHostingWordPressPluginsV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "software": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "WordPress installation (software) identifier" + } + }, + "plugins": { + "target": "com.hostinger.api#UpdateHostingWordPressPluginsV1RequestPluginsList", + "traits": { + "smithy.api#documentation": "Slugs of the installed plugins to update to their latest version.", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#UpdateHostingWordPressPluginsV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#UpdateHostingWordPressPluginsV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/hosting/v1/accounts/{username}/wordpress/{software}/plugins/update", + "code": 200 + }, + "smithy.api#documentation": "Update WordPress plugins\n\nUpdate one or more installed plugins to their latest version on a WordPress\ninstallation.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field).\n\nThis operation is asynchronous: a successful response only means the update job\nhas been queued." + } + }, + "com.hostinger.api#ActivateHostingWordPressThemeV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "software": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "WordPress installation (software) identifier" + } + }, + "theme": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Slug of the installed theme to activate.", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#ActivateHostingWordPressThemeV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ActivateHostingWordPressThemeV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/hosting/v1/accounts/{username}/wordpress/{software}/themes/activate", + "code": 200 + }, + "smithy.api#documentation": "Activate WordPress theme\n\nActivate an installed theme on a WordPress installation.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field).\n\nThis operation is asynchronous: a successful response only means the activation\njob has been queued." + } + }, + "com.hostinger.api#DeployHostingWordPressThemeV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "domain": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "Domain name" + } + }, + "slug": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Slug of the theme", + "smithy.api#required": {} + } + }, + "theme_path": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Relative path to the theme directory from wp-content/themes", + "smithy.api#required": {} + } + }, + "is_activated": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether to activate the theme after deployment", + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#DeployHostingWordPressThemeV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#DeployHostingWordPressThemeV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/hosting/v1/accounts/{username}/websites/{domain}/wordpress/themes/deploy", + "code": 200 + }, + "smithy.api#documentation": "Deploy WordPress theme\n\nDeploy a WordPress theme from an already uploaded directory.\n\nThis endpoint allows you to deploy a WordPress theme that has been uploaded to the website's directory.\nThe theme can be optionally activated after deployment." + } + }, + "com.hostinger.api#InstallHostingWordPressThemeV1RequestFont": { + "type": "enum", + "members": { + "PROFESSIONAL": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "professional" + } + }, + "MODERN": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "modern" + } + }, + "ELEGANT": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "elegant" + } + }, + "CREATIVE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "creative" + } + }, + "DYNAMIC": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "dynamic" + } + }, + "DEFAULT": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "default" + } + } + }, + "traits": { + "smithy.api#documentation": "Font identifier. Only applied when the theme is a Hostinger theme; the default is used when omitted." + } + }, + "com.hostinger.api#InstallHostingWordPressThemeV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "software": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "WordPress installation (software) identifier" + } + }, + "theme": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Slug of the theme to install. Hostinger theme slugs (hostinger-blog, hostinger-affiliate-theme, hostinger-ai-theme) trigger the custom installer and forward the optional palette/layout/font fields; any other WordPress theme slug uses the standard installer and ignores those fields.", + "smithy.api#required": {} + } + }, + "palette": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Palette identifier. Only applied when the theme is a Hostinger theme; the default is used when omitted.", + "com.distilled.openapi#nullable": {} + } + }, + "layout": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Layout identifier. Only applied when the theme is a Hostinger theme; the default is used when omitted.", + "com.distilled.openapi#nullable": {} + } + }, + "font": { + "target": "com.hostinger.api#InstallHostingWordPressThemeV1RequestFont", + "traits": { + "smithy.api#documentation": "Font identifier. Only applied when the theme is a Hostinger theme; the default is used when omitted.", + "com.distilled.openapi#nullable": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#InstallHostingWordPressThemeV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#InstallHostingWordPressThemeV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/hosting/v1/accounts/{username}/wordpress/{software}/themes/install", + "code": 200 + }, + "smithy.api#documentation": "Install WordPress theme\n\nInstall a theme on an existing WordPress installation.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id`\nfield).\n\nWhen the theme is one of the Hostinger themes (hostinger-blog,\nhostinger-affiliate-theme, hostinger-ai-theme), the optional `palette`,\n`layout`, and `font` fields are forwarded to the custom installer (defaults:\npalette1, layout1, default). For any other theme they are ignored.\n\nThis operation is asynchronous: a successful response only means the install\njob has been queued, not that the theme is ready." + } + }, + "com.hostinger.api#ListHostingInstalledWordPressThemesV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "software": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "WordPress installation (software) identifier" + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#WordPressV1ThemesInstalledThemeCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#WordPressV1ThemesInstalledThemeResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`WordPress.V1.Themes.InstalledThemeResource`](#model/wordpressv1themesinstalledthemeresource)" + } + }, + "com.hostinger.api#WordPressV1ThemesInstalledThemeResource": { + "type": "structure", + "members": { + "name": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Theme slug" + } + }, + "title": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Human readable theme name" + } + }, + "version": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Installed theme version" + } + }, + "status": { + "target": "com.hostinger.api#WordPressV1ThemesInstalledThemeResourceStatus", + "traits": { + "smithy.api#documentation": "Whether the theme is active or inactive" + } + }, + "update": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Available update version, or \"none\" when up to date" + } + }, + "vulnerabilities": { + "target": "com.hostinger.api#WordPressV1ThemesInstalledThemeResourceVulnerabilitiesList", + "traits": { + "smithy.api#documentation": "Known vulnerabilities affecting the installed version" + } + } + }, + "traits": {} + }, + "com.hostinger.api#WordPressV1ThemesInstalledThemeResourceStatus": { + "type": "enum", + "members": { + "ACTIVE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "active" + } + }, + "INACTIVE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "inactive" + } + } + }, + "traits": { + "smithy.api#documentation": "Whether the theme is active or inactive" + } + }, + "com.hostinger.api#WordPressV1ThemesInstalledThemeResourceVulnerabilitiesList": { + "type": "list", + "member": { + "target": "com.hostinger.api#WordPressV1CommonVulnerabilityResource" + }, + "traits": { + "smithy.api#documentation": "Known vulnerabilities affecting the installed version" + } + }, + "com.hostinger.api#ListHostingInstalledWordPressThemesV1Response": { + "type": "structure", + "members": { + "body": { + "target": "com.hostinger.api#WordPressV1ThemesInstalledThemeCollection", + "traits": { + "com.distilled.openapi#rawResponse": {}, + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListHostingInstalledWordPressThemesV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListHostingInstalledWordPressThemesV1Request" + }, + "output": { + "target": "com.hostinger.api#ListHostingInstalledWordPressThemesV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/hosting/v1/accounts/{username}/wordpress/{software}/themes", + "code": 200 + }, + "smithy.api#documentation": "List installed WordPress themes\n\nList themes installed on a WordPress installation, including their status,\navailable updates and known vulnerabilities.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field)." + } + }, + "com.hostinger.api#ListHostingWordPressThemesV1Request": { + "type": "structure", + "members": { + "order_id": { + "target": "smithy.api#Integer", + "traits": { + "smithy.api#httpQuery": "order_id", + "smithy.api#documentation": "Optionally scope themes to a specific order." + } + }, + "search": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpQuery": "search", + "smithy.api#documentation": "Search term to match against theme names." + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#WordPressV1ThemesThemeCollection": { + "type": "list", + "member": { + "target": "com.hostinger.api#WordPressV1ThemesThemeResource" + }, + "traits": { + "smithy.api#documentation": "Array of [`WordPress.V1.Themes.ThemeResource`](#model/wordpressv1themesthemeresource)" + } + }, + "com.hostinger.api#WordPressV1ThemesThemeResource": { + "type": "structure", + "members": { + "slug": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Theme slug used when installing the theme" + } + }, + "title": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Human readable theme name" + } + }, + "url": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Link to the theme page on WordPress.org" + } + }, + "featured_image_url": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "URL of the theme preview thumbnail", + "com.distilled.openapi#nullable": {} + } + }, + "full_image_url": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "URL of the full-size theme preview image", + "com.distilled.openapi#nullable": {} + } + }, + "description": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "Short theme description", + "com.distilled.openapi#nullable": {} + } + }, + "logo_url": { + "target": "smithy.api#String", + "traits": { + "smithy.api#documentation": "URL of the theme logo", + "com.distilled.openapi#nullable": {} + } + }, + "is_plan_upgrade_needed": { + "target": "smithy.api#Boolean", + "traits": { + "smithy.api#documentation": "Whether a hosting plan upgrade is required to use the theme" + } + } + }, + "traits": {} + }, + "com.hostinger.api#ListHostingWordPressThemesV1Response": { + "type": "structure", + "members": { + "body": { + "target": "com.hostinger.api#WordPressV1ThemesThemeCollection", + "traits": { + "com.distilled.openapi#rawResponse": {}, + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#output": {} + } + }, + "com.hostinger.api#ListHostingWordPressThemesV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#ListHostingWordPressThemesV1Request" + }, + "output": { + "target": "com.hostinger.api#ListHostingWordPressThemesV1Response" + }, + "traits": { + "smithy.api#http": { + "method": "GET", + "uri": "/api/hosting/v1/wordpress/themes", + "code": 200 + }, + "smithy.api#documentation": "List WordPress themes\n\nList WordPress themes available to install.\n\nUse the returned `slug` values with\nPOST /api/hosting/v1/accounts/{username}/wordpress/{software}/themes/install." + } + }, + "com.hostinger.api#UninstallHostingWordPressThemesV1RequestThemesList": { + "type": "list", + "member": { + "target": "smithy.api#String" + }, + "traits": { + "smithy.api#documentation": "Slugs of the installed themes to uninstall." + } + }, + "com.hostinger.api#UninstallHostingWordPressThemesV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "software": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "WordPress installation (software) identifier" + } + }, + "themes": { + "target": "com.hostinger.api#UninstallHostingWordPressThemesV1RequestThemesList", + "traits": { + "smithy.api#documentation": "Slugs of the installed themes to uninstall.", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#UninstallHostingWordPressThemesV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#UninstallHostingWordPressThemesV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/hosting/v1/accounts/{username}/wordpress/{software}/themes/uninstall", + "code": 200 + }, + "smithy.api#documentation": "Uninstall WordPress themes\n\nUninstall one or more themes from a WordPress installation.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field).\n\nThis operation is asynchronous: a successful response only means the uninstall\njob has been queued." + } + }, + "com.hostinger.api#UpdateHostingWordPressThemesV1RequestThemesList": { + "type": "list", + "member": { + "target": "smithy.api#String" + }, + "traits": { + "smithy.api#documentation": "Slugs of the installed themes to update to their latest version." + } + }, + "com.hostinger.api#UpdateHostingWordPressThemesV1Request": { + "type": "structure", + "members": { + "username": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + }, + "software": { + "target": "smithy.api#String", + "traits": { + "smithy.api#httpLabel": {}, + "smithy.api#required": {}, + "smithy.api#documentation": "WordPress installation (software) identifier" + } + }, + "themes": { + "target": "com.hostinger.api#UpdateHostingWordPressThemesV1RequestThemesList", + "traits": { + "smithy.api#documentation": "Slugs of the installed themes to update to their latest version.", + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#input": {} + } + }, + "com.hostinger.api#UpdateHostingWordPressThemesV1": { + "type": "operation", + "input": { + "target": "com.hostinger.api#UpdateHostingWordPressThemesV1Request" + }, + "output": { + "target": "com.hostinger.api#CommonSuccessEmptyResource" + }, + "errors": [ + { + "target": "com.hostinger.api#UnprocessableEntity" + } + ], + "traits": { + "smithy.api#http": { + "method": "POST", + "uri": "/api/hosting/v1/accounts/{username}/wordpress/{software}/themes/update", + "code": 200 + }, + "smithy.api#documentation": "Update WordPress themes\n\nUpdate one or more installed themes to their latest version on a WordPress\ninstallation.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field).\n\nThis operation is asynchronous: a successful response only means the update job\nhas been queued." + } + }, + "com.hostinger.api#UnprocessableEntity": { + "type": "structure", + "members": {}, + "traits": { + "smithy.api#error": "client", + "smithy.api#httpError": 422, + "com.distilled.openapi#errorMatchers": [ + { + "status": 422 + } + ] + } + }, + "com.hostinger.api#NotFound": { + "type": "structure", + "members": {}, + "traits": { + "smithy.api#error": "client", + "smithy.api#httpError": 404, + "com.distilled.openapi#errorMatchers": [ + { + "status": 404 + } + ] + } + }, + "com.hostinger.api#Conflict": { + "type": "structure", + "members": {}, + "traits": { + "smithy.api#error": "client", + "smithy.api#httpError": 409, + "com.distilled.openapi#errorMatchers": [ + { + "status": 409 + } + ] + } + }, + "com.hostinger.api#BadRequest": { + "type": "structure", + "members": {}, + "traits": { + "smithy.api#error": "client", + "smithy.api#httpError": 400, + "com.distilled.openapi#errorMatchers": [ + { + "status": 400 + } + ] + } + }, + "com.hostinger.api#Hostinger": { + "type": "service", + "version": "1.46.1", + "operations": [ + { + "target": "com.hostinger.api#ListAgencyHostingAvailableDatacentersV1" + }, + { + "target": "com.hostinger.api#AgencyHostingChangeWebsiteDomainV1" + }, + { + "target": "com.hostinger.api#AgencyHostingLinkDomainToWebsiteV1" + }, + { + "target": "com.hostinger.api#ListAgencyHostingDomainsV1" + }, + { + "target": "com.hostinger.api#UnlinkAgencyHostingDomainFromWebsiteV1" + }, + { + "target": "com.hostinger.api#AgencyHostingGenerateUploadURLV1" + }, + { + "target": "com.hostinger.api#AgencyHostingImportWebsiteFromArchiveV1" + }, + { + "target": "com.hostinger.api#ListAgencyHostingAgencyPlanOrderDiskUsageMetricsV1" + }, + { + "target": "com.hostinger.api#ListAgencyHostingOrdersV1" + }, + { + "target": "com.hostinger.api#ListAgencyHostingOrderResourceUsageMetricsV1" + }, + { + "target": "com.hostinger.api#ListAgencyHostingPHPExtensionsForAWebsiteV1" + }, + { + "target": "com.hostinger.api#ReplaceAgencyHostingWebsitePHPExtensionsV1" + }, + { + "target": "com.hostinger.api#ListAgencyHostingPHPOptionsForAWebsiteV1" + }, + { + "target": "com.hostinger.api#ReplaceAgencyHostingWebsitePHPOptionsV1" + }, + { + "target": "com.hostinger.api#ListAgencyHostingAvailablePHPVersionsForAnOrderV1" + }, + { + "target": "com.hostinger.api#ListAgencyHostingAvailablePHPVersionsForAWebsiteV1" + }, + { + "target": "com.hostinger.api#UpdateAgencyHostingWebsitePHPVersionV1" + }, + { + "target": "com.hostinger.api#CreateAgencyHostingANewWebsiteV1" + }, + { + "target": "com.hostinger.api#GetAgencyHostingWebsiteSetupStatusV1" + }, + { + "target": "com.hostinger.api#AgencyHostingBuildWebsiteNodeJSAssetsV1" + }, + { + "target": "com.hostinger.api#ClearAgencyHostingWebsiteCacheV1" + }, + { + "target": "com.hostinger.api#ListAgencyHostingWebsiteCronJobsV1" + }, + { + "target": "com.hostinger.api#CreateAgencyHostingWebsiteCronJobV1" + }, + { + "target": "com.hostinger.api#DeleteAgencyHostingWebsiteCronJobV1" + }, + { + "target": "com.hostinger.api#ListAgencyHostingWebsiteDatabasesV1" + }, + { + "target": "com.hostinger.api#CreateAgencyHostingWebsiteDatabaseV1" + }, + { + "target": "com.hostinger.api#DeleteAgencyHostingWebsiteDatabaseV1" + }, + { + "target": "com.hostinger.api#CreateAgencyHostingWebsiteDatabaseUserV1" + }, + { + "target": "com.hostinger.api#DeleteAgencyHostingWebsiteDatabaseUserV1" + }, + { + "target": "com.hostinger.api#GetAgencyHostingWebsiteDetailsV1" + }, + { + "target": "com.hostinger.api#DeleteAgencyHostingWebsiteV1" + }, + { + "target": "com.hostinger.api#ListAgencyHostingAgencyPlanWebsitesV1" + }, + { + "target": "com.hostinger.api#ListAgencyHostingWebsiteProcessesV1" + }, + { + "target": "com.hostinger.api#AgencyHostingChangeWordPressVersionV1" + }, + { + "target": "com.hostinger.api#GetAgencyHostingWordPressSettingsV1" + }, + { + "target": "com.hostinger.api#ListAgencyHostingAvailableWordPressVersionsV1" + }, + { + "target": "com.hostinger.api#BillingGetCatalogItemListV1" + }, + { + "target": "com.hostinger.api#CreateBillingPurchaseOrderV1" + }, + { + "target": "com.hostinger.api#SetBillingDefaultPaymentMethodV1" + }, + { + "target": "com.hostinger.api#DeleteBillingPaymentMethodV1" + }, + { + "target": "com.hostinger.api#BillingGetPaymentMethodListV1" + }, + { + "target": "com.hostinger.api#BillingGetSubscriptionListV1" + }, + { + "target": "com.hostinger.api#DisableBillingAutoRenewalV1" + }, + { + "target": "com.hostinger.api#EnableBillingAutoRenewalV1" + }, + { + "target": "com.hostinger.api#RenewBillingSubscriptionV1" + }, + { + "target": "com.hostinger.api#GetDNSDNSSnapshotV1" + }, + { + "target": "com.hostinger.api#DNSGetDNSSnapshotListV1" + }, + { + "target": "com.hostinger.api#RestoreDNSDNSSnapshotV1" + }, + { + "target": "com.hostinger.api#GetDNSDNSRecordsV1" + }, + { + "target": "com.hostinger.api#UpdateDNSDNSRecordsV1" + }, + { + "target": "com.hostinger.api#DeleteDNSDNSRecordsV1" + }, + { + "target": "com.hostinger.api#ResetDNSDNSRecordsV1" + }, + { + "target": "com.hostinger.api#ValidateDNSDNSRecordsV1" + }, + { + "target": "com.hostinger.api#GetV2DomainVerificationsDIRECT" + }, + { + "target": "com.hostinger.api#DomainsSuggestDomainNamesFromADescriptionV1" + }, + { + "target": "com.hostinger.api#DomainsSuggestDomainNamesFromADomainV1" + }, + { + "target": "com.hostinger.api#CheckDomainDomainAvailabilityV1" + }, + { + "target": "com.hostinger.api#GetDomainDomainForwardingV1" + }, + { + "target": "com.hostinger.api#UpdateDomainDomainForwardingV1" + }, + { + "target": "com.hostinger.api#DeleteDomainDomainForwardingV1" + }, + { + "target": "com.hostinger.api#CreateDomainDomainForwardingV1" + }, + { + "target": "com.hostinger.api#GetDomainPendingIRTPVerificationV1" + }, + { + "target": "com.hostinger.api#CancelDomainPendingIRTPVerificationV1" + }, + { + "target": "com.hostinger.api#DomainsGetIncomingDomainMoveV1" + }, + { + "target": "com.hostinger.api#DomainsAcceptIncomingDomainMoveV1" + }, + { + "target": "com.hostinger.api#DomainsRejectIncomingDomainMoveV1" + }, + { + "target": "com.hostinger.api#DomainsGetIncomingDomainMoveListV1" + }, + { + "target": "com.hostinger.api#DomainsGetOutgoingDomainMoveV1" + }, + { + "target": "com.hostinger.api#DomainsStartOutgoingDomainMoveV1" + }, + { + "target": "com.hostinger.api#DomainsCancelOutgoingDomainMoveV1" + }, + { + "target": "com.hostinger.api#DomainsGetOutgoingDomainMoveListV1" + }, + { + "target": "com.hostinger.api#GetDomainDomainAuthorizationCodeV1" + }, + { + "target": "com.hostinger.api#ClaimDomainFreeDomainV1" + }, + { + "target": "com.hostinger.api#EnableDomainDomainLockV1" + }, + { + "target": "com.hostinger.api#DisableDomainDomainLockV1" + }, + { + "target": "com.hostinger.api#GetDomainDomainDetailsV1" + }, + { + "target": "com.hostinger.api#DomainsGetDomainListV1" + }, + { + "target": "com.hostinger.api#DomainsPurchaseNewDomainV1" + }, + { + "target": "com.hostinger.api#EnableDomainPrivacyProtectionV1" + }, + { + "target": "com.hostinger.api#DisableDomainPrivacyProtectionV1" + }, + { + "target": "com.hostinger.api#GetDomainDomainRenewalInformationV1" + }, + { + "target": "com.hostinger.api#UpdateDomainDomainNameserversV1" + }, + { + "target": "com.hostinger.api#ClaimDomainFreeDomainTransferV1" + }, + { + "target": "com.hostinger.api#GetDomainTransferV1" + }, + { + "target": "com.hostinger.api#DomainsGetTransferListV1" + }, + { + "target": "com.hostinger.api#DomainsChangeWHOISProfileForDomainV1" + }, + { + "target": "com.hostinger.api#SetDomainWHOISProfileAsDefaultV1" + }, + { + "target": "com.hostinger.api#DomainsUnsetDefaultWHOISProfileV1" + }, + { + "target": "com.hostinger.api#GetDomainWHOISProfileV1" + }, + { + "target": "com.hostinger.api#DeleteDomainWHOISProfileV1" + }, + { + "target": "com.hostinger.api#DomainsGetWHOISProfileListV1" + }, + { + "target": "com.hostinger.api#CreateDomainWHOISProfileV1" + }, + { + "target": "com.hostinger.api#GetDomainWHOISProfileUsageV1" + }, + { + "target": "com.hostinger.api#ListEcommerceDiscountsV1" + }, + { + "target": "com.hostinger.api#CreateEcommerceADiscountV1" + }, + { + "target": "com.hostinger.api#GetEcommerceCustomStorefrontSetupInstructionsV1" + }, + { + "target": "com.hostinger.api#CancelEcommerceAnOrderV1" + }, + { + "target": "com.hostinger.api#EcommerceFulfilAnOrderV1" + }, + { + "target": "com.hostinger.api#ListEcommerceStoreOrdersV1" + }, + { + "target": "com.hostinger.api#GetEcommerceAnOrderV1" + }, + { + "target": "com.hostinger.api#EnableEcommerceManualPaymentMethodV1" + }, + { + "target": "com.hostinger.api#EcommerceCreateAPaymentProviderConnectLinkV1" + }, + { + "target": "com.hostinger.api#ListEcommerceStorePaymentProvidersV1" + }, + { + "target": "com.hostinger.api#EcommerceCreateAProductImageUploadURLV1" + }, + { + "target": "com.hostinger.api#UpdateEcommerceAProductV1" + }, + { + "target": "com.hostinger.api#DeleteEcommerceAProductV1" + }, + { + "target": "com.hostinger.api#CreateEcommerceDigitalProductV1" + }, + { + "target": "com.hostinger.api#ListEcommerceProductsV1" + }, + { + "target": "com.hostinger.api#CreateEcommercePhysicalProductV1" + }, + { + "target": "com.hostinger.api#EcommerceUploadAndAttachAProductImageV1" + }, + { + "target": "com.hostinger.api#ListEcommerceSalesChannelsV1" + }, + { + "target": "com.hostinger.api#CreateEcommerceASalesChannelV1" + }, + { + "target": "com.hostinger.api#UpdateEcommerceSalesChannelV1" + }, + { + "target": "com.hostinger.api#SetEcommerceStoreShippingV1" + }, + { + "target": "com.hostinger.api#DeleteEcommerceStoreV1" + }, + { + "target": "com.hostinger.api#GetEcommerceStoresV1" + }, + { + "target": "com.hostinger.api#CreateEcommerceStoreV1" + }, + { + "target": "com.hostinger.api#GetEcommerceStoreMetadataV1" + }, + { + "target": "com.hostinger.api#UpdateEcommerceProductVariantsInBatchV1" + }, + { + "target": "com.hostinger.api#DeleteEcommerceAProductVariantV1" + }, + { + "target": "com.hostinger.api#ListEcommerceProductVariantsV1" + }, + { + "target": "com.hostinger.api#CreateEcommerceAProductVariantV1" + }, + { + "target": "com.hostinger.api#CreateHorizonWebsiteV1" + }, + { + "target": "com.hostinger.api#GetHorizonWebsiteV1" + }, + { + "target": "com.hostinger.api#ClearHostingWebsiteCacheV1" + }, + { + "target": "com.hostinger.api#ToggleHostingCachelessModeV1" + }, + { + "target": "com.hostinger.api#ToggleHostingWebsiteCacheV1" + }, + { + "target": "com.hostinger.api#ListHostingAccountCronJobsV1" + }, + { + "target": "com.hostinger.api#CreateHostingAccountCronJobV1" + }, + { + "target": "com.hostinger.api#DeleteHostingAccountCronJobV1" + }, + { + "target": "com.hostinger.api#GetHostingCronJobOutputV1" + }, + { + "target": "com.hostinger.api#HostingChangeDatabasePasswordV1" + }, + { + "target": "com.hostinger.api#ListHostingAccountDatabasesV1" + }, + { + "target": "com.hostinger.api#CreateHostingAccountDatabaseV1" + }, + { + "target": "com.hostinger.api#DeleteHostingAccountDatabaseV1" + }, + { + "target": "com.hostinger.api#CreateHostingDatabaseRemoteConnectionV1" + }, + { + "target": "com.hostinger.api#DeleteHostingDatabaseRemoteConnectionV1" + }, + { + "target": "com.hostinger.api#ListHostingDatabaseRemoteConnectionsV1" + }, + { + "target": "com.hostinger.api#HostingRepairDatabaseV1" + }, + { + "target": "com.hostinger.api#GetHostingPhpMyAdminLinkV1" + }, + { + "target": "com.hostinger.api#ListHostingAvailableDatacentersV1" + }, + { + "target": "com.hostinger.api#GenerateHostingAFreeSubdomainV1" + }, + { + "target": "com.hostinger.api#ListHostingWebsiteParkedDomainsV1" + }, + { + "target": "com.hostinger.api#CreateHostingWebsiteParkedDomainV1" + }, + { + "target": "com.hostinger.api#DeleteHostingWebsiteParkedDomainV1" + }, + { + "target": "com.hostinger.api#ListHostingWebsiteSubdomainsV1" + }, + { + "target": "com.hostinger.api#CreateHostingWebsiteSubdomainV1" + }, + { + "target": "com.hostinger.api#DeleteHostingWebsiteSubdomainV1" + }, + { + "target": "com.hostinger.api#VerifyHostingDomainOwnershipV1" + }, + { + "target": "com.hostinger.api#HostingGenerateUploadURLV1" + }, + { + "target": "com.hostinger.api#HostingListWebsiteFilesAndDirectoriesV1" + }, + { + "target": "com.hostinger.api#GetHostingWebsiteFileContentV1" + }, + { + "target": "com.hostinger.api#ListHostingNodeJSBuildsV1" + }, + { + "target": "com.hostinger.api#StartHostingNodeJsBuildV1" + }, + { + "target": "com.hostinger.api#HostingGetNodeJsBuildSettingsFromArchiveV1" + }, + { + "target": "com.hostinger.api#ListHostingNodeJsEnvironmentVariablesV1" + }, + { + "target": "com.hostinger.api#ReplaceHostingNodeJsEnvironmentVariablesV1" + }, + { + "target": "com.hostinger.api#GetHostingNodeJSBuildLogsV1" + }, + { + "target": "com.hostinger.api#RestartHostingNodeJsApplicationV1" + }, + { + "target": "com.hostinger.api#ListHostingNodeJsVulnerabilitiesV1" + }, + { + "target": "com.hostinger.api#PatchHostingNodeJsVulnerabilitiesV1" + }, + { + "target": "com.hostinger.api#ListHostingOrdersV1" + }, + { + "target": "com.hostinger.api#ResetHostingPHPExtensionsV1" + }, + { + "target": "com.hostinger.api#GetHostingPHPDetailsV1" + }, + { + "target": "com.hostinger.api#GetHostingPHPInfoV1" + }, + { + "target": "com.hostinger.api#UpdateHostingPHPExtensionsV1" + }, + { + "target": "com.hostinger.api#UpdateHostingPHPOptionsV1" + }, + { + "target": "com.hostinger.api#UpdateHostingPHPVersionV1" + }, + { + "target": "com.hostinger.api#ListHostingWebsiteRedirectsV1" + }, + { + "target": "com.hostinger.api#CreateHostingWebsiteRedirectV1" + }, + { + "target": "com.hostinger.api#DeleteHostingWebsiteRedirectV1" + }, + { + "target": "com.hostinger.api#ListHostingWebsitesV1" + }, + { + "target": "com.hostinger.api#CreateHostingWebsiteV1" + }, + { + "target": "com.hostinger.api#HostingDeployStaticSiteArchiveV1" + }, + { + "target": "com.hostinger.api#DeleteHostingWebsiteV1" + }, + { + "target": "com.hostinger.api#CreateMailAliasV1" + }, + { + "target": "com.hostinger.api#DeleteMailAliasV1" + }, + { + "target": "com.hostinger.api#ListMailAliasesV1" + }, + { + "target": "com.hostinger.api#CreateMailAPITokenV1" + }, + { + "target": "com.hostinger.api#RevokeMailAPITokenV1" + }, + { + "target": "com.hostinger.api#ListMailAPITokensV1" + }, + { + "target": "com.hostinger.api#CreateMailAutoreplyV1" + }, + { + "target": "com.hostinger.api#UpdateMailAutoreplyV1" + }, + { + "target": "com.hostinger.api#DeleteMailAutoreplyV1" + }, + { + "target": "com.hostinger.api#ListMailAutorepliesV1" + }, + { + "target": "com.hostinger.api#CreateMailCatchAllV1" + }, + { + "target": "com.hostinger.api#DeleteMailCatchAllV1" + }, + { + "target": "com.hostinger.api#ListMailCatchAllsV1" + }, + { + "target": "com.hostinger.api#ResendMailCatchAllConfirmationV1" + }, + { + "target": "com.hostinger.api#CreateMailForwarderV1" + }, + { + "target": "com.hostinger.api#DeleteMailForwarderV1" + }, + { + "target": "com.hostinger.api#ListMailForwardersV1" + }, + { + "target": "com.hostinger.api#ResendMailForwarderConfirmationV1" + }, + { + "target": "com.hostinger.api#MailUpdateForwarderKeepCopySettingV1" + }, + { + "target": "com.hostinger.api#ListMailAccessLogsV1" + }, + { + "target": "com.hostinger.api#ListMailActionLogsV1" + }, + { + "target": "com.hostinger.api#ListMailInboundLogsV1" + }, + { + "target": "com.hostinger.api#ListMailMailboxActionLogsV1" + }, + { + "target": "com.hostinger.api#ListMailOutboundLogsV1" + }, + { + "target": "com.hostinger.api#ListMailMailboxesV1" + }, + { + "target": "com.hostinger.api#CreateMailMailboxV1" + }, + { + "target": "com.hostinger.api#DeleteMailMailboxV1" + }, + { + "target": "com.hostinger.api#MailChangeMailboxPasswordV1" + }, + { + "target": "com.hostinger.api#ListMailOrdersV1" + }, + { + "target": "com.hostinger.api#GetMailOrderPlanV1" + }, + { + "target": "com.hostinger.api#CreateMailWebhookV1" + }, + { + "target": "com.hostinger.api#ListMailWebhookDeliveryLogsV1" + }, + { + "target": "com.hostinger.api#GetMailWebhookV1" + }, + { + "target": "com.hostinger.api#UpdateMailWebhookV1" + }, + { + "target": "com.hostinger.api#DeleteMailWebhookV1" + }, + { + "target": "com.hostinger.api#ListMailWebhooksV1" + }, + { + "target": "com.hostinger.api#RegenerateMailWebhookSecretV1" + }, + { + "target": "com.hostinger.api#TestMailWebhookV1" + }, + { + "target": "com.hostinger.api#GetReachAutomationDetailsV1" + }, + { + "target": "com.hostinger.api#ListReachAutomationsV1" + }, + { + "target": "com.hostinger.api#ListReachAutomationStepsV1" + }, + { + "target": "com.hostinger.api#GetReachCampaignDetailsV1" + }, + { + "target": "com.hostinger.api#ListReachCampaignsV1" + }, + { + "target": "com.hostinger.api#GetReachCampaignPerformanceV1" + }, + { + "target": "com.hostinger.api#UpdateReachAContactFieldV1" + }, + { + "target": "com.hostinger.api#DeleteReachAContactFieldV1" + }, + { + "target": "com.hostinger.api#ListReachContactFieldsV1" + }, + { + "target": "com.hostinger.api#CreateReachAContactFieldV1" + }, + { + "target": "com.hostinger.api#GetReachContactDetailsV1" + }, + { + "target": "com.hostinger.api#UpdateReachAContactV1" + }, + { + "target": "com.hostinger.api#DeleteReachAProfileContactV1" + }, + { + "target": "com.hostinger.api#ReachCreateContactsInBulkV1" + }, + { + "target": "com.hostinger.api#ListReachProfileContactsV1" + }, + { + "target": "com.hostinger.api#CreateReachNewContactsV1" + }, + { + "target": "com.hostinger.api#ReachCountProfileSegmentContactsV1" + }, + { + "target": "com.hostinger.api#ListReachProfileSegmentContactsV1" + }, + { + "target": "com.hostinger.api#GetReachProfileSegmentDetailsV1" + }, + { + "target": "com.hostinger.api#UpdateReachAProfileSegmentV1" + }, + { + "target": "com.hostinger.api#DeleteReachAProfileSegmentV1" + }, + { + "target": "com.hostinger.api#ListReachSegmentFilterAttributesV1" + }, + { + "target": "com.hostinger.api#PreviewReachContactsMatchingConditionsV1" + }, + { + "target": "com.hostinger.api#ListReachProfileSegmentsV1" + }, + { + "target": "com.hostinger.api#CreateReachAProfileSegmentV1" + }, + { + "target": "com.hostinger.api#AssignReachAContactToATagV1" + }, + { + "target": "com.hostinger.api#RemoveReachAContactFromATagV1" + }, + { + "target": "com.hostinger.api#AssignReachContactsToATagV1" + }, + { + "target": "com.hostinger.api#RemoveReachContactsFromATagV1" + }, + { + "target": "com.hostinger.api#RenameReachATagV1" + }, + { + "target": "com.hostinger.api#DeleteReachATagV1" + }, + { + "target": "com.hostinger.api#ListReachProfileTagsV1" + }, + { + "target": "com.hostinger.api#ReachCreateOrFindTagsV1" + }, + { + "target": "com.hostinger.api#GetReachFormDetailsV1" + }, + { + "target": "com.hostinger.api#DeleteReachFormV1" + }, + { + "target": "com.hostinger.api#ListReachFormsV1" + }, + { + "target": "com.hostinger.api#GetReachProfileDomainDNSStatusV1" + }, + { + "target": "com.hostinger.api#GetReachConnectedSendingDomainV1" + }, + { + "target": "com.hostinger.api#ListReachPlanFeatureAccessV1" + }, + { + "target": "com.hostinger.api#GetReachRemainingPlanLimitsV1" + }, + { + "target": "com.hostinger.api#ListReachProfilesV1" + }, + { + "target": "com.hostinger.api#VPSGetDataCenterListV1" + }, + { + "target": "com.hostinger.api#GetVPSProjectContainersV1" + }, + { + "target": "com.hostinger.api#GetVPSProjectContentsV1" + }, + { + "target": "com.hostinger.api#DeleteVPSProjectV1" + }, + { + "target": "com.hostinger.api#VPSGetProjectListV1" + }, + { + "target": "com.hostinger.api#CreateVPSNewProjectV1" + }, + { + "target": "com.hostinger.api#GetVPSProjectLogsV1" + }, + { + "target": "com.hostinger.api#RestartVPSProjectV1" + }, + { + "target": "com.hostinger.api#StartVPSProjectV1" + }, + { + "target": "com.hostinger.api#StopVPSProjectV1" + }, + { + "target": "com.hostinger.api#UpdateVPSProjectV1" + }, + { + "target": "com.hostinger.api#ActivateVPSFirewallV1" + }, + { + "target": "com.hostinger.api#DeactivateVPSFirewallV1" + }, + { + "target": "com.hostinger.api#GetVPSFirewallDetailsV1" + }, + { + "target": "com.hostinger.api#DeleteVPSFirewallV1" + }, + { + "target": "com.hostinger.api#VPSGetFirewallListV1" + }, + { + "target": "com.hostinger.api#CreateVPSNewFirewallV1" + }, + { + "target": "com.hostinger.api#UpdateVPSFirewallRuleV1" + }, + { + "target": "com.hostinger.api#DeleteVPSFirewallRuleV1" + }, + { + "target": "com.hostinger.api#CreateVPSFirewallRuleV1" + }, + { + "target": "com.hostinger.api#ReplaceVPSAllFirewallRulesInGroupV1" + }, + { + "target": "com.hostinger.api#SyncVPSFirewallV1" + }, + { + "target": "com.hostinger.api#VPSGetPostInstallScriptV1" + }, + { + "target": "com.hostinger.api#VPSUpdatePostInstallScriptV1" + }, + { + "target": "com.hostinger.api#VPSDeletePostInstallScriptV1" + }, + { + "target": "com.hostinger.api#VPSGetPostInstallScriptsV1" + }, + { + "target": "com.hostinger.api#VPSCreatePostInstallScriptV1" + }, + { + "target": "com.hostinger.api#AttachVPSPublicKeyV1" + }, + { + "target": "com.hostinger.api#DeleteVPSPublicKeyV1" + }, + { + "target": "com.hostinger.api#GetVPSPublicKeysV1" + }, + { + "target": "com.hostinger.api#CreateVPSPublicKeyV1" + }, + { + "target": "com.hostinger.api#GetVPSTemplateDetailsV1" + }, + { + "target": "com.hostinger.api#GetVPSTemplatesV1" + }, + { + "target": "com.hostinger.api#GetVPSActionDetailsV1" + }, + { + "target": "com.hostinger.api#GetVPSActionsV1" + }, + { + "target": "com.hostinger.api#GetVPSAttachedPublicKeysV1" + }, + { + "target": "com.hostinger.api#GetVPSBackupsV1" + }, + { + "target": "com.hostinger.api#RestoreVPSBackupV1" + }, + { + "target": "com.hostinger.api#SetVPSHostnameV1" + }, + { + "target": "com.hostinger.api#ResetVPSHostnameV1" + }, + { + "target": "com.hostinger.api#GetVPSVirtualMachineDetailsV1" + }, + { + "target": "com.hostinger.api#GetVPSVirtualMachinesV1" + }, + { + "target": "com.hostinger.api#VPSPurchaseNewVirtualMachineV1" + }, + { + "target": "com.hostinger.api#GetVPSScanMetricsV1" + }, + { + "target": "com.hostinger.api#InstallVPSMonarxV1" + }, + { + "target": "com.hostinger.api#UninstallVPSMonarxV1" + }, + { + "target": "com.hostinger.api#GetVPSMetricsV1" + }, + { + "target": "com.hostinger.api#SetVPSNameserversV1" + }, + { + "target": "com.hostinger.api#CreateVPSPTRRecordV1" + }, + { + "target": "com.hostinger.api#DeleteVPSPTRRecordV1" + }, + { + "target": "com.hostinger.api#SetVPSPanelPasswordV1" + }, + { + "target": "com.hostinger.api#StartVPSRecoveryModeV1" + }, + { + "target": "com.hostinger.api#StopVPSRecoveryModeV1" + }, + { + "target": "com.hostinger.api#RecreateVPSVirtualMachineV1" + }, + { + "target": "com.hostinger.api#RestartVPSVirtualMachineV1" + }, + { + "target": "com.hostinger.api#SetVPSRootPasswordV1" + }, + { + "target": "com.hostinger.api#VPSSetupPurchasedVirtualMachineV1" + }, + { + "target": "com.hostinger.api#GetVPSSnapshotV1" + }, + { + "target": "com.hostinger.api#CreateVPSSnapshotV1" + }, + { + "target": "com.hostinger.api#DeleteVPSSnapshotV1" + }, + { + "target": "com.hostinger.api#RestoreVPSSnapshotV1" + }, + { + "target": "com.hostinger.api#StartVPSVirtualMachineV1" + }, + { + "target": "com.hostinger.api#StopVPSVirtualMachineV1" + }, + { + "target": "com.hostinger.api#GetHostingAIOptionStatusV1" + }, + { + "target": "com.hostinger.api#SetHostingAIOptionStatusV1" + }, + { + "target": "com.hostinger.api#CheckHostingIfWordPressInstallationsAreValidV1" + }, + { + "target": "com.hostinger.api#DeleteHostingWordPressInstallationV1" + }, + { + "target": "com.hostinger.api#HostingDetectWordPressInstallationsV1" + }, + { + "target": "com.hostinger.api#ImportHostingWordPressWebsiteV1" + }, + { + "target": "com.hostinger.api#InstallHostingWordPressV1" + }, + { + "target": "com.hostinger.api#ListHostingWordPressInstallationsV1" + }, + { + "target": "com.hostinger.api#ListHostingAvailableWordPressCoreUpdatesV1" + }, + { + "target": "com.hostinger.api#GetHostingInstallationJWTTokenV1" + }, + { + "target": "com.hostinger.api#GetHostingWordPressCoreVersionV1" + }, + { + "target": "com.hostinger.api#UpdateHostingWordPressCoreV1" + }, + { + "target": "com.hostinger.api#PurgeHostingLiteSpeedCacheV1" + }, + { + "target": "com.hostinger.api#GetHostingLiteSpeedCacheStatusV1" + }, + { + "target": "com.hostinger.api#CreateHostingLoginLinksV1" + }, + { + "target": "com.hostinger.api#GetHostingMaintenanceStatusV1" + }, + { + "target": "com.hostinger.api#ToggleHostingMaintenanceModeV1" + }, + { + "target": "com.hostinger.api#GetHostingMemcachedObjectCacheStatusV1" + }, + { + "target": "com.hostinger.api#ToggleHostingMemcachedObjectCacheV1" + }, + { + "target": "com.hostinger.api#ActivateHostingWordPressPluginV1" + }, + { + "target": "com.hostinger.api#DeactivateHostingWordPressPluginV1" + }, + { + "target": "com.hostinger.api#DeployHostingWordPressPluginV1" + }, + { + "target": "com.hostinger.api#InstallHostingWordPressPluginsV1" + }, + { + "target": "com.hostinger.api#ListHostingAvailableWordPressPluginsV1" + }, + { + "target": "com.hostinger.api#ListHostingInstalledWordPressPluginsV1" + }, + { + "target": "com.hostinger.api#SearchHostingWordPressPluginsV1" + }, + { + "target": "com.hostinger.api#ListHostingSuggestedWordPressPluginsV1" + }, + { + "target": "com.hostinger.api#CheckHostingIfWooCommerceIsInstalledV1" + }, + { + "target": "com.hostinger.api#UninstallHostingWordPressPluginsV1" + }, + { + "target": "com.hostinger.api#UpdateHostingHostingerWordPressPluginV1" + }, + { + "target": "com.hostinger.api#UpdateHostingWordPressPluginsV1" + }, + { + "target": "com.hostinger.api#ActivateHostingWordPressThemeV1" + }, + { + "target": "com.hostinger.api#DeployHostingWordPressThemeV1" + }, + { + "target": "com.hostinger.api#InstallHostingWordPressThemeV1" + }, + { + "target": "com.hostinger.api#ListHostingInstalledWordPressThemesV1" + }, + { + "target": "com.hostinger.api#ListHostingWordPressThemesV1" + }, + { + "target": "com.hostinger.api#UninstallHostingWordPressThemesV1" + }, + { + "target": "com.hostinger.api#UpdateHostingWordPressThemesV1" + } + ], + "traits": { + "smithy.api#title": "Hostinger API", + "smithy.api#documentation": "# Overview\nThe Hostinger API provides a comprehensive set of endpoints that allow developers\nto interact with Hostinger's services programmatically.\nThis API enables you to manage various aspects of your Hostinger account.\n\nThe Hostinger API is a (mostly) RESTful API that uses standard HTTP methods and status codes.\n# Authentication\nThe Hostinger API uses tokens for authentication. To authenticate your requests,\nyou need to include a valid bearer token in the Authorization header of your HTTP requests:\n```yaml\nAuthorization: Bearer YOUR_API_TOKEN\n```\nAPI tokens for individual users can be created and managed from\nthe [Account page](https://hpanel.hostinger.com/profile/api) of the Hostinger Panel.\nTokens will have same permissions as the owning user.\nOptionally, tokens can be set to expire after a certain period of time.\n# Rate Limiting\nTo ensure fair usage and prevent abuse,\nthe API enforces rate limits on the number of requests that can be made within a certain time period.\nIf you exceed the rate limit, you will receive a 429 Too Many Requests response.\nRate limit headers are included in the response to help you manage your requests.\nYour IP address might get temporarily blocked if you exceed the rate limit multiple times.\n# Parameters\nAll requests sent to API must have the content type `application/json`.\n`POST`, `PUT`, `PATCH` methods may include a JSON object in the request body.\nDocumentation provides required structure and examples of the object.\nSome endpoints require path parameters.\nThese parameters are included in the URL path and are marked with curly braces.\n# Pagination\nSome endpoints return a large number of items.\nTo make these responses more manageable, the API uses pagination.\nBy default, the API returns50 items per page.\n\n The page number can be specified using the `page` query parameter,\n for example: `/api/vps/v1/public-keys?page=2`\n# Errors\nThe Hostinger API uses standard HTTP status codes to indicate the success or failure of a request.\nIn case of an error, the API will return a JSON response with an `error` field,\ncontaining a human-readable error message.\nError responses also contain a `correlation_id` field\nwhich can be used to identify the request in case you need to contact support.\n# SDKs & Tools\nTo help you get started with the Hostinger API,we provide SDKs and tools in various programming languages.\nThe usage & documentation for each SDK can be found in the respective repositories:\n- Ansible - https://github.com/hostinger/ansible-collection-hostinger\n- CLI - https://github.com/hostinger/api-cli\n- n8n node - https://github.com/hostinger/api-n8n-node\n- MCP server - https://github.com/hostinger/api-mcp-server\n- PHP - https://github.com/hostinger/api-php-sdk\n- Python - https://github.com/hostinger/api-python-sdk\n- Terraform - https://github.com/hostinger/terraform-provider-hostinger\n- Node / TypeScript - https://github.com/hostinger/api-typescript-sdk\n- Postman collection - https://www.postman.com/hostinger-api\n- WHMCS module - https://github.com/hostinger/api-whmcs-plugin\n# Change log\nFor information on the latest changes to the API,\nplease refer to the [change log](https://github.com/hostinger/api/blob/main/CHANGELOG.md).\n# Support\nIf you have any questions, feedback or feature requests,\nplease create an [issue](https://github.com/hostinger/api/issues)\nor [discussion](https://github.com/hostinger/api/discussions) on the repository.\n\nFor any support take a look at our [Github Repository](https://github.com/hostinger/api/),\ndedicated to the Hostinger API." + } + } + } +} diff --git a/packages/hostinger/package.json b/packages/hostinger/package.json new file mode 100644 index 0000000000..abbe685db0 --- /dev/null +++ b/packages/hostinger/package.json @@ -0,0 +1,85 @@ +{ + "name": "@distilled.cloud/hostinger", + "version": "1.0.0-rc.8", + "repository": { + "type": "git", + "url": "https://github.com/alchemy-run/distilled", + "directory": "packages/hostinger" + }, + "license": "Apache-2.0", + "type": "module", + "sideEffects": false, + "files": [ + "lib", + "src" + ], + "exports": { + ".": { + "types": "./lib/index.d.ts", + "bun": "./src/index.ts", + "worker": "./src/index.ts", + "default": "./lib/index.js" + }, + "./Credentials": { + "types": "./lib/credentials.d.ts", + "bun": "./src/credentials.ts", + "worker": "./src/credentials.ts", + "default": "./lib/credentials.js" + }, + "./Errors": { + "types": "./lib/errors.d.ts", + "bun": "./src/errors.ts", + "worker": "./src/errors.ts", + "default": "./lib/errors.js" + }, + "./Traits": { + "types": "./lib/traits.d.ts", + "bun": "./src/traits.ts", + "worker": "./src/traits.ts", + "default": "./lib/traits.js" + }, + "./Pagination": { + "types": "./lib/pagination.d.ts", + "bun": "./src/pagination.ts", + "worker": "./src/pagination.ts", + "default": "./lib/pagination.js" + }, + "./Protocol": { + "types": "./lib/protocol.d.ts", + "bun": "./src/protocol.ts", + "worker": "./src/protocol.ts", + "default": "./lib/protocol.js" + }, + "./Retry": { + "types": "./lib/retry.d.ts", + "bun": "./src/retry.ts", + "worker": "./src/retry.ts", + "default": "./lib/retry.js" + }, + "./*": { + "types": "./lib/services/*.d.ts", + "bun": "./src/services/*.ts", + "worker": "./src/services/*.ts", + "default": "./lib/services/*.js" + } + }, + "scripts": { + "build": "tsc -b", + "convert": "bun scripts/convert.ts", + "generate": "bun scripts/convert.ts && bun scripts/generate.ts", + "typecheck": "tsc -p tsconfig.json", + "specs:fetch": "git submodule update --force --init --depth=1 specs/spec-mirror-hostinger", + "specs:update": "git submodule update --remote --force --depth=1 specs/spec-mirror-hostinger" + }, + "dependencies": { + "@distilled.cloud/core": "workspace:*" + }, + "devDependencies": { + "@types/bun": "catalog:tooling", + "@types/node": "catalog:tooling", + "@effect/platform-bun": "catalog:effect" + }, + "peerDependencies": { + "effect": "catalog:effect" + } +} diff --git a/packages/hostinger/scripts/convert.ts b/packages/hostinger/scripts/convert.ts new file mode 100644 index 0000000000..d46b0cb083 --- /dev/null +++ b/packages/hostinger/scripts/convert.ts @@ -0,0 +1,32 @@ +#!/usr/bin/env bun +/** + * convert — turn the Hostinger OpenAPI spec into a Smithy 2.0 JSON model. + * + * Input: specs/spec-mirror-hostinger/specs/openapi.json (spec submodule) + * patches/*.patch.json (RFC-6902 patches to the OpenAPI document) + * Output: .generated-specs/hostinger.json + * + * The OpenAPI→Smithy converter lives in + * `@distilled.cloud/core/codegen/openapi`; this script is Hostinger's + * pipeline config. `scripts/generate.ts` compiles the model into src/services. + */ +import * as path from "node:path"; +import { runOpenApiConvert } from "@distilled.cloud/core/codegen/openapi-cli"; + +await runOpenApiConvert({ + root: path.resolve(import.meta.dir, ".."), + specs: [ + { + name: "hostinger", + specPath: "specs/spec-mirror-hostinger/specs/openapi.json", + }, + ], + // OpenAPI-document patches (v0 layout: flat patches/*.patch.json). The + // smithy-model patch chain in generate.ts is disabled (`patchesDir: false`). + patchesDir: "patches", + options: { + namespace: "com.hostinger.api", + serviceName: "Hostinger", + skipDeprecated: true, + }, +}); diff --git a/packages/hostinger/scripts/generate.ts b/packages/hostinger/scripts/generate.ts new file mode 100644 index 0000000000..50e105fc9d --- /dev/null +++ b/packages/hostinger/scripts/generate.ts @@ -0,0 +1,98 @@ +#!/usr/bin/env bun +/** + * generate — turn the Smithy JSON model in .generated-specs into the + * Hostinger Effect SDK. + * + * Input: .generated-specs/hostinger.json (written by scripts/convert.ts) + * Output: src/services/hostinger.ts + src/services/index.ts + * + * The smithy→SDK compiler and CLI pipeline live in + * `@distilled.cloud/core/codegen`; this script is Hostinger's provider spec. + * Hostinger keeps the wire's snake_case member names on the TS surface, so + * no member renaming or wire dictionaries appear here. + */ +import type { SdkSpec } from "@distilled.cloud/core/codegen/generator"; +import { runGeneratorCli } from "@distilled.cloud/core/codegen/cli"; + +const NULLABLE_TRAIT = "com.distilled.openapi#nullable"; +const ERROR_MATCHERS_TRAIT = "com.distilled.openapi#errorMatchers"; +const RAW_RESPONSE_TRAIT = "com.distilled.openapi#rawResponse"; +const SENSITIVE_TRAIT = "smithy.api#sensitive"; + +/** Hostinger's provider spec for the shared smithy→SDK compiler. */ +const hostingerSpec: SdkSpec = { + nullableTrait: NULLABLE_TRAIT, + errorMatchersTrait: ERROR_MATCHERS_TRAIT, + + extraBindings: [ + { + // Sole member of a synthesized wrapper for bare array/scalar response + // bodies; as the response's only member, the response IS the payload. + trait: RAW_RESPONSE_TRAIT, + binding: "rawResponse", + pipe: "T.RawResponse()", + rootPipe: "T.RawResponseRoot()", + }, + ], + + // Sensitive strings (API keys, passwords, tokens): the schema member + // carries T.SensitiveValue; the REST protocol delivers Redacted values + // and accepts string | Redacted on input. + memberTraitPipes: { + [SENSITIVE_TRAIT]: "T.SensitiveValue", + }, + memberTsType: (m) => + SENSITIVE_TRAIT in m.traits + ? `string | Redacted.Redacted${m.nullable ? " | null" : ""}` + : undefined, + + // Unions surface as TS type unions over an opaque schema — the REST + // protocol passes union content through verbatim (wire names ARE the TS + // names for Hostinger), so no runtime case discrimination is needed. + union: ({ name, caseTargets, tsRef }) => [ + `export type ${name} = ${caseTargets.map(tsRef).join(" | ") || "unknown"};`, + `export const ${name} = /*@__PURE__*/ S.Unknown as any as S.Schema<${name}>;\n`, + ], + + // Converter-stamped traits pick a profile. Hostinger list endpoints page + // with `page`/`per_page` and `{ data, meta }`; some specs stamp cursor. + paginationProfiles: { + cursor: { + strategy: "paginateCursor", + itemsFallback: "items", + }, + page: { + strategy: "paginatePageNumber", + itemsFallback: "data", + }, + }, + paginationProfileFor: (trait) => (trait.mode === "page" ? "page" : "cursor"), + + operationDecl: { + contextType: "HostingerOpContext", + commonErrorType: "HostingerOpError", + commonErrorClasses: ["UnknownHostingerError"], + protocol: "HostingerProtocol", + retry: "Retry.Retry", + }, + + sourceNote: ".generated-specs (specs/spec-mirror-hostinger)", + + // Sensitive member types reference Redacted; pull the import in when used. + postProcess: (code) => + code.includes("Redacted.Redacted<") + ? code.replace( + `import * as S from "@distilled.cloud/core/schema";\n`, + `import * as S from "@distilled.cloud/core/schema";\nimport * as Redacted from "effect/Redacted";\n`, + ) + : code, +}; + +runGeneratorCli({ + description: "Generate the Hostinger Effect SDK from the Smithy model", + root: `${import.meta.dir}/..`, + // patches/ holds OpenAPI-document patches consumed by scripts/convert.ts; + // there is no smithy-model patch chain. + patchesDir: false, + spec: () => hostingerSpec, +}); diff --git a/packages/hostinger/src/credentials.ts b/packages/hostinger/src/credentials.ts new file mode 100644 index 0000000000..be98194fcc --- /dev/null +++ b/packages/hostinger/src/credentials.ts @@ -0,0 +1,58 @@ +/** + * Hostinger credentials — hand-written. + * + * API tokens are created on the Account page of the Hostinger Panel + * (https://hpanel.hostinger.com/profile/api) and sent as + * `Authorization: Bearer `. The `Credentials` service holds an + * *effect* that resolves the current credentials on every request (the + * protocol layer resolves it per request on the calling fiber). + */ +import * as Context from "effect/Context"; +import * as Effect from "effect/Effect"; +import * as Layer from "effect/Layer"; +import * as Redacted from "effect/Redacted"; +import { ConfigError } from "@distilled.cloud/core/errors"; + +export const DEFAULT_API_BASE_URL = "https://developers.hostinger.com"; + +export interface Config { + readonly apiKey: Redacted.Redacted; + readonly apiBaseUrl: string; +} + +export class Credentials extends Context.Service< + Credentials, + Effect.Effect +>()("HostingerCredentials") {} + +/** Layer from a plain API key + optional base URL. */ +export const fromApiKey = (config: { + readonly apiKey: string; + readonly apiBaseUrl?: string; +}): Layer.Layer => + Layer.succeed( + Credentials, + Effect.succeed({ + apiKey: Redacted.make(config.apiKey), + apiBaseUrl: config.apiBaseUrl ?? DEFAULT_API_BASE_URL, + }), + ); + +/** Reads HOSTINGER_API_KEY (required) and HOSTINGER_API_BASE_URL (optional). */ +export const CredentialsFromEnv: Layer.Layer = Layer.succeed( + Credentials, + Effect.gen(function* () { + const apiKey = process.env.HOSTINGER_API_KEY; + + if (!apiKey) { + return yield* new ConfigError({ + message: "HOSTINGER_API_KEY environment variable is required", + }); + } + + return { + apiKey: Redacted.make(apiKey), + apiBaseUrl: process.env.HOSTINGER_API_BASE_URL ?? DEFAULT_API_BASE_URL, + }; + }).pipe(Effect.orDie), +); diff --git a/packages/hostinger/src/errors.ts b/packages/hostinger/src/errors.ts new file mode 100644 index 0000000000..4d9a4584ea --- /dev/null +++ b/packages/hostinger/src/errors.ts @@ -0,0 +1,50 @@ +/** + * Hostinger-specific error types. + * + * Re-exports the common HTTP errors from core and adds the Hostinger fallback + * errors. Note the generated service module additionally defines its own + * per-status matcher classes (BadRequest/NotFound/…) for the statuses each + * operation declares — those share `_tag`s with the core classes here, so + * `catchTag` works against either. + */ +export { + BadGateway, + BadRequest, + Conflict, + ConfigError, + Forbidden, + GatewayTimeout, + InternalServerError, + Locked, + NotFound, + ServiceUnavailable, + TooManyRequests, + Unauthorized, + UnprocessableEntity, + HTTP_STATUS_MAP, + DEFAULT_ERRORS, + API_ERRORS, +} from "@distilled.cloud/core/errors"; +export type { DefaultErrors } from "@distilled.cloud/core/errors"; + +import * as Schema from "effect/Schema"; +import * as Category from "@distilled.cloud/core/category"; + +/** Unknown Hostinger error — returned when nothing else matches the failure. */ +export class UnknownHostingerError extends Schema.TaggedError()( + "UnknownHostingerError", + { + code: Schema.optional(Schema.String), + message: Schema.optional(Schema.String), + body: Schema.Unknown, + }, +).pipe(Category.withServerError) {} + +/** Schema parse error wrapper. */ +export class HostingerParseError extends Schema.TaggedError()( + "HostingerParseError", + { + body: Schema.Unknown, + cause: Schema.Unknown, + }, +).pipe(Category.withParseError) {} diff --git a/packages/hostinger/src/index.ts b/packages/hostinger/src/index.ts new file mode 100644 index 0000000000..b723d5a3cf --- /dev/null +++ b/packages/hostinger/src/index.ts @@ -0,0 +1,36 @@ +/** + * @distilled.cloud/hostinger — Hostinger SDK for Effect. + * + * `./services` is generated by `scripts/generate.ts` from the Smithy model + * in `.generated-specs` (written by `scripts/convert.ts` from the OpenAPI + * spec). Everything else in this folder is hand-written. + * + * @example + * ```ts + * import * as Hostinger from "@distilled.cloud/hostinger"; + * + * const domains = yield* Hostinger.Services.hostinger.domainsGetDomainListV1({}); + * ``` + */ +export * from "./credentials.ts"; +export * from "./errors.ts"; +export * as T from "./traits.ts"; +export { + HostingerProtocol, + type HostingerOpError, + type HostingerOpContext, +} from "./protocol.ts"; +export { paginateCursor, paginatePageNumber } from "./pagination.ts"; +export * as Retry from "./retry.ts"; +export * as Services from "./services/index.ts"; +// Operations (and their request/response types) are importable straight off +// the package root. The service-local typed error classes shadow the +// same-named shared ones from ./errors.ts — the ops actually raise the +// service-local classes. +export * from "./services/hostinger.ts"; +export { + BadRequest, + Conflict, + NotFound, + UnprocessableEntity, +} from "./services/hostinger.ts"; diff --git a/packages/hostinger/src/pagination.ts b/packages/hostinger/src/pagination.ts new file mode 100644 index 0000000000..e1e0a80710 --- /dev/null +++ b/packages/hostinger/src/pagination.ts @@ -0,0 +1,13 @@ +/** + * Hostinger pagination — hand-written. + * + * Hostinger's paginated list operations are page-number mode (`page` / + * `per_page` in, `{ data, meta: { current_page, per_page, total } }` out). + * Generated operations that the converter stamps as paginated pass core's + * {@link paginatePageNumber} or {@link paginateCursor} strategy to + * `API.makePaginated`. + */ +export { + paginateCursor, + paginatePageNumber, +} from "@distilled.cloud/core/pagination"; diff --git a/packages/hostinger/src/protocol.ts b/packages/hostinger/src/protocol.ts new file mode 100644 index 0000000000..49ee954406 --- /dev/null +++ b/packages/hostinger/src/protocol.ts @@ -0,0 +1,68 @@ +/** + * HostingerProtocol — hand-written. + * + * Hostinger speaks plain bearer-authenticated JSON REST (no response + * envelope), so the whole protocol is one `makeRestProtocol` call from + * `core/protocol-rest`: + * + * request: credentials → `Authorization: Bearer ` + base URL + * (default https://developers.hostinger.com), resolved from the + * calling fiber on every request + * + * response: 2xx JSON is the payload (sensitive members delivered as + * `Redacted`); non-2xx `{ message, correlation_id? }` bodies map + * to the operation's typed error classes by status, then the + * shared HTTP-status classes, then {@link UnknownHostingerError}. + */ +import * as Effect from "effect/Effect"; +import type * as Layer from "effect/Layer"; +import * as Redacted from "effect/Redacted"; +import type * as HttpClient from "effect/unstable/http/HttpClient"; +import type * as HttpClientError from "effect/unstable/http/HttpClientError"; +import type * as API from "@distilled.cloud/core/api"; +import { makeRestProtocol } from "@distilled.cloud/core/protocol-rest"; +import type { API_ERRORS, ConfigError } from "@distilled.cloud/core/errors"; +import { Credentials, type Config } from "./credentials.ts"; +import { UnknownHostingerError } from "./errors.ts"; + +/** + * Error channel shared by every generated Hostinger operation. Generated + * service files annotate operations with `API.OperationMethod` explicitly so the compiler never + * infers these back out of the schema generics. + */ +export type HostingerOpError = + | InstanceType<(typeof API_ERRORS)[number]> + | UnknownHostingerError + | ConfigError + | HttpClientError.HttpClientError; + +/** Context (requirements) shared by every generated Hostinger operation. */ +export type HostingerOpContext = Credentials | HttpClient.HttpClient; + +export const HostingerProtocol: Layer.Layer = + makeRestProtocol({ + // The Credentials service holds an effect — resolving it here (per + // request, on the calling fiber) picks up context-provided credentials. + credentials: Effect.gen(function* () { + const resolve = yield* Credentials; + return yield* resolve; + }), + baseUrl: (creds) => creds.apiBaseUrl, + headers: (creds) => ({ + Authorization: `Bearer ${Redacted.value(creds.apiKey)}`, + }), + // Hostinger's error body is `{ message: string, correlation_id?: string }` + // — the factory's default lenient envelope covers `message`. + unknownError: ({ code, message, body }) => + new UnknownHostingerError({ + code: + typeof code === "string" + ? code + : code !== undefined + ? String(code) + : undefined, + message, + body, + }), + }); diff --git a/packages/hostinger/src/retry.ts b/packages/hostinger/src/retry.ts new file mode 100644 index 0000000000..963a165923 --- /dev/null +++ b/packages/hostinger/src/retry.ts @@ -0,0 +1,54 @@ +/** + * Hostinger retry configuration. + * + * Defines the per-SDK `Retry` Context.Service tag that generated operations + * wire into `API.make`. Callers can install a blanket retry policy at the + * layer level and have every Hostinger API call below it pick it up: + * + * @example + * ```ts + * import * as Hostinger from "@distilled.cloud/hostinger"; + * + * myEffect.pipe(Hostinger.Retry.transient); + * Effect.provide(myEffect, Layer.succeed(Hostinger.Retry.Retry, customPolicy)); + * ``` + */ +import * as Context from "effect/Context"; +import * as Effect from "effect/Effect"; +import * as Layer from "effect/Layer"; +import { + type Policy, + throttlingFactory, + transientFactory, +} from "@distilled.cloud/core/retry"; + +export { + type Options, + type Factory, + type Policy, + makeDefault, + jittered, + capped, + throttlingOptions, + transientOptions, + throttlingFactory, + transientFactory, +} from "@distilled.cloud/core/retry"; + +/** Context tag for configuring retry behavior of Hostinger API calls. */ +export class Retry extends Context.Service()("HostingerRetry") {} + +/** Provides a custom retry policy to every Hostinger API call below it. */ +export const policy = (optionsOrFactory: Policy) => + Effect.provide(Layer.succeed(Retry, optionsOrFactory)); + +/** Disables all automatic retries. */ +export const none = Effect.provide( + Layer.succeed(Retry, { while: () => false }), +); + +/** Apply the throttling retry policy (retries throttling errors indefinitely). */ +export const throttling = policy(throttlingFactory); + +/** Apply the transient retry policy (retries all transient errors indefinitely). */ +export const transient = policy(transientFactory); diff --git a/packages/hostinger/src/services/hostinger.ts b/packages/hostinger/src/services/hostinger.ts new file mode 100644 index 0000000000..d8448bb2dc --- /dev/null +++ b/packages/hostinger/src/services/hostinger.ts @@ -0,0 +1,25066 @@ +// AUTO-GENERATED by scripts/generate.ts from .generated-specs (specs/spec-mirror-hostinger). Do not edit. +import * as S from "@distilled.cloud/core/schema"; +import * as Redacted from "effect/Redacted"; +import * as API from "@distilled.cloud/core/api"; +import * as C from "@distilled.cloud/core/category"; +import * as T from "../traits.ts"; +import { + HostingerProtocol, + type HostingerOpError, + type HostingerOpContext, +} from "../protocol.ts"; +import { UnknownHostingerError } from "../errors.ts"; +import * as Retry from "../retry.ts"; + +export type { HostingerOpError, HostingerOpContext }; + +export class BadRequest + extends /*@__PURE__*/ T.applyErrorMatchers( + /*@__PURE__*/ S.TaggedError()("BadRequest", { + code: S.Number, + message: S.String, + }).pipe(C.withBadRequestError), + [{ status: 400 }], + ) {} + +export class Conflict + extends /*@__PURE__*/ T.applyErrorMatchers( + /*@__PURE__*/ S.TaggedError()("Conflict", { + code: S.Number, + message: S.String, + }).pipe(C.withConflictError), + [{ status: 409 }], + ) {} + +export class NotFound + extends /*@__PURE__*/ T.applyErrorMatchers( + /*@__PURE__*/ S.TaggedError()("NotFound", { + code: S.Number, + message: S.String, + }).pipe(C.withBadRequestError), + [{ status: 404 }], + ) {} + +export class UnprocessableEntity + extends /*@__PURE__*/ T.applyErrorMatchers( + /*@__PURE__*/ S.TaggedError()("UnprocessableEntity", { + code: S.Number, + message: S.String, + }).pipe(C.withBadRequestError), + [{ status: 422 }], + ) {} + +export interface ActivateHostingWordPressPluginV1Request { + username: string; + /** WordPress installation (software) identifier */ + software: string; + /** Slug of the installed plugin to activate. */ + plugin: string; +} +export const ActivateHostingWordPressPluginV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + username: S.String.pipe(T.Label()), + software: S.String.pipe(T.Label()), + plugin: S.String, + }).pipe( + T.Http({ + method: "POST", + uri: "/api/hosting/v1/accounts/{username}/wordpress/{software}/plugins/activate", + code: 200, + }), + ), +).annotate({ + identifier: "ActivateHostingWordPressPluginV1Request", +}) as any as S.Schema; + +export interface CommonSuccessEmptyResource { + message?: string; +} +export const CommonSuccessEmptyResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + message: S.optional(S.String), + }), +).annotate({ + identifier: "CommonSuccessEmptyResource", +}) as any as S.Schema; + +export interface ActivateHostingWordPressThemeV1Request { + username: string; + /** WordPress installation (software) identifier */ + software: string; + /** Slug of the installed theme to activate. */ + theme: string; +} +export const ActivateHostingWordPressThemeV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + username: S.String.pipe(T.Label()), + software: S.String.pipe(T.Label()), + theme: S.String, + }).pipe( + T.Http({ + method: "POST", + uri: "/api/hosting/v1/accounts/{username}/wordpress/{software}/themes/activate", + code: 200, + }), + ), +).annotate({ + identifier: "ActivateHostingWordPressThemeV1Request", +}) as any as S.Schema; + +export interface ActivateVPSFirewallV1Request { + /** Firewall ID */ + firewallId: number; + /** Virtual Machine ID */ + virtualMachineId: number; +} +export const ActivateVPSFirewallV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + firewallId: S.Number.pipe(T.Label()), + virtualMachineId: S.Number.pipe(T.Label()), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/vps/v1/firewall/{firewallId}/activate/{virtualMachineId}", + code: 200, + }), + ), +).annotate({ + identifier: "ActivateVPSFirewallV1Request", +}) as any as S.Schema; + +/** Action state */ +export type VPSV1ActionActionResourceState = + | "success" + | "error" + | "delayed" + | "sent" + | "created"; +export const VPSV1ActionActionResourceState = /*@__PURE__*/ S.String; + +export interface VPSV1ActionActionResource { + /** Action ID */ + id?: number; + /** Action name */ + name?: string; + /** Action state */ + state?: VPSV1ActionActionResourceState; + created_at?: string; + updated_at?: string; +} +export const VPSV1ActionActionResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + id: S.optional(S.Number), + name: S.optional(S.String), + state: S.optional(VPSV1ActionActionResourceState), + created_at: S.optional(S.String), + updated_at: S.optional(S.String), + }), +).annotate({ + identifier: "VPSV1ActionActionResource", +}) as any as S.Schema; + +export interface AgencyHostingBuildWebsiteNodeJSAssetsV1Request { + /** Agency Plan website UID */ + website_uid: string; + /** Directory, relative to the website document root, where the uploaded site archive currently lives. Most commonly this is simply `public_html`. */ + archive_path: string; +} +export const AgencyHostingBuildWebsiteNodeJSAssetsV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + website_uid: S.String.pipe(T.Label()), + archive_path: S.String, + }).pipe( + T.Http({ + method: "POST", + uri: "/api/agency-hosting/v1/websites/{website_uid}/build-assets", + code: 200, + }), + ), + ).annotate({ + identifier: "AgencyHostingBuildWebsiteNodeJSAssetsV1Request", + }) as any as S.Schema; + +export interface AgencyHostingChangeWebsiteDomainV1Request { + /** Agency Plan website UID */ + website_uid: string; + /** Current domain name to change from */ + from_domain: string; + /** New domain to assign to the website. Set to null to revert to the temporary domain. */ + domain: string | null; +} +export const AgencyHostingChangeWebsiteDomainV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + website_uid: S.String.pipe(T.Label()), + from_domain: S.String.pipe(T.Label()), + domain: S.NullOr(S.String), + }).pipe( + T.Http({ + method: "PUT", + uri: "/api/agency-hosting/v1/websites/{website_uid}/domains/{from_domain}", + code: 200, + }), + ), + ).annotate({ + identifier: "AgencyHostingChangeWebsiteDomainV1Request", + }) as any as S.Schema; + +export interface AgencyHostingChangeWordPressVersionV1Request { + /** Agency Plan website UID */ + website_uid: string; + /** Target WordPress core version to install. Must be one of the available versions. */ + version: string; +} +export const AgencyHostingChangeWordPressVersionV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + website_uid: S.String.pipe(T.Label()), + version: S.String, + }).pipe( + T.Http({ + method: "PATCH", + uri: "/api/agency-hosting/v1/websites/{website_uid}/wordpress/settings/version", + code: 200, + }), + ), + ).annotate({ + identifier: "AgencyHostingChangeWordPressVersionV1Request", + }) as any as S.Schema; + +export interface AgencyHostingGenerateUploadURLV1Request { + /** Agency Plan website UID */ + website_uid: string; +} +export const AgencyHostingGenerateUploadURLV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + website_uid: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/agency-hosting/v1/websites/{website_uid}/files/upload-urls", + code: 200, + }), + ), +).annotate({ + identifier: "AgencyHostingGenerateUploadURLV1Request", +}) as any as S.Schema; + +export interface AgencyHostingV1FilesUploadUrlResource { + /** The TUS upload endpoint URL to send upload requests to */ + url: string; + /** Authentication token to pass as the `X-Auth` header in TUS upload requests */ + auth_key: string; + /** Authentication token to pass as the `X-Auth-Rest` header in TUS upload requests */ + rest_auth_key: string; +} +export const AgencyHostingV1FilesUploadUrlResource = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + url: S.String, + auth_key: S.String, + rest_auth_key: S.String, + }), +).annotate({ + identifier: "AgencyHostingV1FilesUploadUrlResource", +}) as any as S.Schema; + +export interface AgencyHostingImportWebsiteFromArchiveV1Request { + /** Agency Plan website UID */ + website_uid: string; + /** Archive filename (e.g., archive.zip). The file must already be uploaded to the website's .h5g/ directory. */ + archive_name: string; +} +export const AgencyHostingImportWebsiteFromArchiveV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + website_uid: S.String.pipe(T.Label()), + archive_name: S.String, + }).pipe( + T.Http({ + method: "POST", + uri: "/api/agency-hosting/v1/websites/{website_uid}/files/import-archive", + code: 200, + }), + ), + ).annotate({ + identifier: "AgencyHostingImportWebsiteFromArchiveV1Request", + }) as any as S.Schema; + +export interface AgencyHostingLinkDomainToWebsiteV1Request { + /** Agency Plan website UID */ + website_uid: string; + /** Fully qualified domain name to link to the website */ + domain: string; +} +export const AgencyHostingLinkDomainToWebsiteV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + website_uid: S.String.pipe(T.Label()), + domain: S.String, + }).pipe( + T.Http({ + method: "POST", + uri: "/api/agency-hosting/v1/websites/{website_uid}/domains", + code: 200, + }), + ), + ).annotate({ + identifier: "AgencyHostingLinkDomainToWebsiteV1Request", + }) as any as S.Schema; + +export interface AssignReachAContactToATagV1Request { + /** Profile uuid parameter */ + profileUuid: string; + /** Tag uuid parameter */ + tagUuid: string; + /** Contact uuid parameter */ + contactUuid: string; +} +export const AssignReachAContactToATagV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + profileUuid: S.String.pipe(T.Label()), + tagUuid: S.String.pipe(T.Label()), + contactUuid: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/reach/v1/profiles/{profileUuid}/tags/{tagUuid}/contacts/{contactUuid}", + code: 200, + }), + ), +).annotate({ + identifier: "AssignReachAContactToATagV1Request", +}) as any as S.Schema; + +/** How the tag came about. `custom` covers the tags you create yourself, `form` covers the ones Reach creates for its forms. */ +export type ReachV1ContactsTagsTagResourceType = "form" | "custom"; +export const ReachV1ContactsTagsTagResourceType = /*@__PURE__*/ S.String; + +export interface ReachV1ContactsTagsTagResource { + uuid?: string; + /** How the tag came about. `custom` covers the tags you create yourself, `form` covers the ones Reach creates for its forms. */ + type?: ReachV1ContactsTagsTagResourceType; + value?: string; + created_at?: string; +} +export const ReachV1ContactsTagsTagResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + uuid: S.optional(S.String), + type: S.optional(ReachV1ContactsTagsTagResourceType), + value: S.optional(S.String), + created_at: S.optional(S.String), + }), +).annotate({ + identifier: "ReachV1ContactsTagsTagResource", +}) as any as S.Schema; + +/** Contacts to apply the change to. Required unless all_contacts is true. */ +export type AssignReachContactsToATagV1RequestContactUuidsList = Array; +export const AssignReachContactsToATagV1RequestContactUuidsList = + /*@__PURE__*/ S.Array( + S.String, + ) as any as S.Schema; + +export interface AssignReachContactsToATagV1Request { + /** Profile uuid parameter */ + profileUuid: string; + /** Tag uuid parameter */ + tagUuid: string; + /** Contacts to apply the change to. Required unless all_contacts is true. */ + contact_uuids?: AssignReachContactsToATagV1RequestContactUuidsList; + /** Apply to every contact in the profile */ + all_contacts?: boolean; +} +export const AssignReachContactsToATagV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + profileUuid: S.String.pipe(T.Label()), + tagUuid: S.String.pipe(T.Label()), + contact_uuids: S.optional( + AssignReachContactsToATagV1RequestContactUuidsList, + ), + all_contacts: S.optional(S.Boolean), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/reach/v1/profiles/{profileUuid}/tags/{tagUuid}/contacts", + code: 200, + }), + ), +).annotate({ + identifier: "AssignReachContactsToATagV1Request", +}) as any as S.Schema; + +/** Public Key IDs to attach */ +export type AttachVPSPublicKeyV1RequestIdsList = Array; +export const AttachVPSPublicKeyV1RequestIdsList = /*@__PURE__*/ S.Array( + S.Number, +) as any as S.Schema; + +export interface AttachVPSPublicKeyV1Request { + /** Virtual Machine ID */ + virtualMachineId: number; + /** Public Key IDs to attach */ + ids: AttachVPSPublicKeyV1RequestIdsList; +} +export const AttachVPSPublicKeyV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + virtualMachineId: S.Number.pipe(T.Label()), + ids: AttachVPSPublicKeyV1RequestIdsList, + }).pipe( + T.Http({ + method: "POST", + uri: "/api/vps/v1/public-keys/attach/{virtualMachineId}", + code: 200, + }), + ), +).annotate({ + identifier: "AttachVPSPublicKeyV1Request", +}) as any as S.Schema; + +export type BillingGetCatalogItemListV1RequestCategory = + | "DOMAIN" + | "VPS" + | "EMAIL"; +export const BillingGetCatalogItemListV1RequestCategory = + /*@__PURE__*/ S.String; + +export interface BillingGetCatalogItemListV1Request { + /** Filter catalog items by category */ + category?: BillingGetCatalogItemListV1RequestCategory | (string & {}); + /** Filter catalog items by name. Use `*` for wildcard search, e.g. `.COM*` to find .com domain */ + name?: string; +} +export const BillingGetCatalogItemListV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + category: S.optional( + BillingGetCatalogItemListV1RequestCategory.pipe(T.Query()), + ), + name: S.optional(S.String.pipe(T.Query())), + }).pipe(T.Http({ method: "GET", uri: "/api/billing/v1/catalog", code: 200 })), +).annotate({ + identifier: "BillingGetCatalogItemListV1Request", +}) as any as S.Schema; + +/** Period unit */ +export type BillingV1CatalogCatalogItemPriceResourcePeriodUnit = + | "day" + | "week" + | "month" + | "year" + | "none"; +export const BillingV1CatalogCatalogItemPriceResourcePeriodUnit = + /*@__PURE__*/ S.String; + +export interface BillingV1CatalogCatalogItemPriceResource { + /** Price item ID */ + id?: string; + /** Price item name */ + name?: string; + /** Currency code */ + currency?: string; + /** Price in cents */ + price?: number; + /** First period price in cents */ + first_period_price?: number; + /** Period */ + period?: number; + /** Period unit */ + period_unit?: BillingV1CatalogCatalogItemPriceResourcePeriodUnit; +} +export const BillingV1CatalogCatalogItemPriceResource = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + id: S.optional(S.String), + name: S.optional(S.String), + currency: S.optional(S.String), + price: S.optional(S.Number), + first_period_price: S.optional(S.Number), + period: S.optional(S.Number), + period_unit: S.optional( + BillingV1CatalogCatalogItemPriceResourcePeriodUnit, + ), + }), +).annotate({ + identifier: "BillingV1CatalogCatalogItemPriceResource", +}) as any as S.Schema; + +/** Array of [`Billing.V1.Catalog.CatalogItemPriceResource`](#model/billingv1catalogcatalogitempriceresource) */ +export type BillingV1CatalogCatalogItemPriceCollection = + Array; +export const BillingV1CatalogCatalogItemPriceCollection = /*@__PURE__*/ S.Array( + BillingV1CatalogCatalogItemPriceResource, +) as any as S.Schema; + +export interface BillingV1CatalogCatalogItemResource { + /** Catalog item ID */ + id?: string; + name?: string; + category?: string; + /** Flexible key-value storage containing category-specific metadata for the catalog item. The structure and available fields vary depending on the item category. */ + metadata?: unknown | null; + prices?: BillingV1CatalogCatalogItemPriceCollection; +} +export const BillingV1CatalogCatalogItemResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + id: S.optional(S.String), + name: S.optional(S.String), + category: S.optional(S.String), + metadata: S.optional(S.NullOr(S.Unknown)), + prices: S.optional(BillingV1CatalogCatalogItemPriceCollection), + }), +).annotate({ + identifier: "BillingV1CatalogCatalogItemResource", +}) as any as S.Schema; + +/** Array of [`Billing.V1.Catalog.CatalogItemResource`](#model/billingv1catalogcatalogitemresource) */ +export type BillingV1CatalogCatalogItemCollection = + Array; +export const BillingV1CatalogCatalogItemCollection = /*@__PURE__*/ S.Array( + BillingV1CatalogCatalogItemResource, +) as any as S.Schema; + +export type BillingGetCatalogItemListV1Response = + BillingV1CatalogCatalogItemCollection; +export const BillingGetCatalogItemListV1Response = /*@__PURE__*/ S.suspend(() => + BillingV1CatalogCatalogItemCollection.pipe(T.RawResponseRoot()), +).annotate({ + identifier: "BillingGetCatalogItemListV1Response", +}) as any as S.Schema; + +export interface BillingGetPaymentMethodListV1Request {} +export const BillingGetPaymentMethodListV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({}).pipe( + T.Http({ + method: "GET", + uri: "/api/billing/v1/payment-methods", + code: 200, + }), + ), +).annotate({ + identifier: "BillingGetPaymentMethodListV1Request", +}) as any as S.Schema; + +export interface BillingV1PaymentMethodPaymentMethodResource { + /** Payment method ID */ + id?: number; + name?: string; + identifier?: string; + payment_method?: string; + is_default?: boolean; + is_expired?: boolean; + is_suspended?: boolean; + created_at?: string; + expires_at?: string; + suspended_at?: string | null; +} +export const BillingV1PaymentMethodPaymentMethodResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + id: S.optional(S.Number), + name: S.optional(S.String), + identifier: S.optional(S.String), + payment_method: S.optional(S.String), + is_default: S.optional(S.Boolean), + is_expired: S.optional(S.Boolean), + is_suspended: S.optional(S.Boolean), + created_at: S.optional(S.String), + expires_at: S.optional(S.String), + suspended_at: S.optional(S.NullOr(S.String)), + }), + ).annotate({ + identifier: "BillingV1PaymentMethodPaymentMethodResource", + }) as any as S.Schema; + +/** Array of [`Billing.V1.PaymentMethod.PaymentMethodResource`](#model/billingv1paymentmethodpaymentmethodresource) */ +export type BillingV1PaymentMethodPaymentMethodCollection = + Array; +export const BillingV1PaymentMethodPaymentMethodCollection = + /*@__PURE__*/ S.Array( + BillingV1PaymentMethodPaymentMethodResource, + ) as any as S.Schema; + +export type BillingGetPaymentMethodListV1Response = + BillingV1PaymentMethodPaymentMethodCollection; +export const BillingGetPaymentMethodListV1Response = /*@__PURE__*/ S.suspend( + () => BillingV1PaymentMethodPaymentMethodCollection.pipe(T.RawResponseRoot()), +).annotate({ + identifier: "BillingGetPaymentMethodListV1Response", +}) as any as S.Schema; + +export interface BillingGetSubscriptionListV1Request {} +export const BillingGetSubscriptionListV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({}).pipe( + T.Http({ method: "GET", uri: "/api/billing/v1/subscriptions", code: 200 }), + ), +).annotate({ + identifier: "BillingGetSubscriptionListV1Request", +}) as any as S.Schema; + +export type BillingV1SubscriptionSubscriptionResourceStatus = + | "active" + | "paused" + | "cancelled" + | "not_renewing" + | "transferred" + | "in_trial" + | "future"; +export const BillingV1SubscriptionSubscriptionResourceStatus = + /*@__PURE__*/ S.String; + +export interface BillingV1SubscriptionSubscriptionResource { + /** Subscription ID */ + id?: string; + name?: string; + status?: BillingV1SubscriptionSubscriptionResourceStatus; + billing_period?: number; + billing_period_unit?: string; + currency_code?: string; + /** Total price in cents */ + total_price?: number; + /** Renewal price in cents */ + renewal_price?: number; + is_auto_renewed?: boolean; + created_at?: string; + expires_at?: string | null; + next_billing_at?: string | null; +} +export const BillingV1SubscriptionSubscriptionResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + id: S.optional(S.String), + name: S.optional(S.String), + status: S.optional(BillingV1SubscriptionSubscriptionResourceStatus), + billing_period: S.optional(S.Number), + billing_period_unit: S.optional(S.String), + currency_code: S.optional(S.String), + total_price: S.optional(S.Number), + renewal_price: S.optional(S.Number), + is_auto_renewed: S.optional(S.Boolean), + created_at: S.optional(S.String), + expires_at: S.optional(S.NullOr(S.String)), + next_billing_at: S.optional(S.NullOr(S.String)), + }), + ).annotate({ + identifier: "BillingV1SubscriptionSubscriptionResource", + }) as any as S.Schema; + +/** Array of [`Billing.V1.Subscription.SubscriptionResource`](#model/billingv1subscriptionsubscriptionresource) */ +export type BillingV1SubscriptionSubscriptionCollection = + Array; +export const BillingV1SubscriptionSubscriptionCollection = + /*@__PURE__*/ S.Array( + BillingV1SubscriptionSubscriptionResource, + ) as any as S.Schema; + +export type BillingGetSubscriptionListV1Response = + BillingV1SubscriptionSubscriptionCollection; +export const BillingGetSubscriptionListV1Response = /*@__PURE__*/ S.suspend( + () => BillingV1SubscriptionSubscriptionCollection.pipe(T.RawResponseRoot()), +).annotate({ + identifier: "BillingGetSubscriptionListV1Response", +}) as any as S.Schema; + +export interface CancelDomainPendingIRTPVerificationV1Request { + /** Domain name */ + domain: string; +} +export const CancelDomainPendingIRTPVerificationV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + domain: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "DELETE", + uri: "/api/domains/v1/irtp/{domain}", + code: 200, + }), + ), + ).annotate({ + identifier: "CancelDomainPendingIRTPVerificationV1Request", + }) as any as S.Schema; + +export interface CancelEcommerceAnOrderV1Request { + /** The ID of the store that owns the order. */ + store_id: string; + /** The ID of the order to cancel. */ + order_id: string; + /** Whether to email the customer about the cancellation. Defaults to true. */ + notify_customer?: boolean; +} +export const CancelEcommerceAnOrderV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + store_id: S.String.pipe(T.Label()), + order_id: S.String.pipe(T.Label()), + notify_customer: S.optional(S.Boolean), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/ecommerce/v1/stores/{store_id}/orders/{order_id}/cancel", + code: 200, + }), + ), +).annotate({ + identifier: "CancelEcommerceAnOrderV1Request", +}) as any as S.Schema; + +export interface EcommerceV1OrderOrderResource { + /** The order ID, required by every other order endpoint. */ + id?: string; + /** The order number the merchant and customer see. */ + display_id?: number; + /** The order status. */ + status?: string; + /** The payment status. A paid order is "captured". */ + payment_status?: string; + /** The fulfilment status. */ + fulfillment_status?: string; + /** Order total in the smallest currency unit. */ + total?: number; + /** The order currency code. */ + currency_code?: string; + /** The customer email. */ + customer_email?: string | null; + /** Number of distinct line items. Retrieve the order for the items themselves. */ + item_count?: number; + /** ISO timestamp of when the order was created. */ + created_at?: string; +} +export const EcommerceV1OrderOrderResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + id: S.optional(S.String), + display_id: S.optional(S.Number), + status: S.optional(S.String), + payment_status: S.optional(S.String), + fulfillment_status: S.optional(S.String), + total: S.optional(S.Number), + currency_code: S.optional(S.String), + customer_email: S.optional(S.NullOr(S.String)), + item_count: S.optional(S.Number), + created_at: S.optional(S.String), + }), +).annotate({ + identifier: "EcommerceV1OrderOrderResource", +}) as any as S.Schema; + +export interface EcommerceV1OrderOrderResponseResource { + data?: EcommerceV1OrderOrderResource; +} +export const EcommerceV1OrderOrderResponseResource = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + data: S.optional(EcommerceV1OrderOrderResource), + }), +).annotate({ + identifier: "EcommerceV1OrderOrderResponseResource", +}) as any as S.Schema; + +/** TLDs list */ +export type CheckDomainDomainAvailabilityV1RequestTldsList = Array; +export const CheckDomainDomainAvailabilityV1RequestTldsList = + /*@__PURE__*/ S.Array( + S.String, + ) as any as S.Schema; + +export interface CheckDomainDomainAvailabilityV1Request { + /** Domain name (without TLD) */ + domain: string; + /** TLDs list */ + tlds: CheckDomainDomainAvailabilityV1RequestTldsList; + /** Should response include alternatives */ + with_alternatives?: boolean; +} +export const CheckDomainDomainAvailabilityV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + domain: S.String, + tlds: CheckDomainDomainAvailabilityV1RequestTldsList, + with_alternatives: S.optional(S.Boolean), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/domains/v1/availability", + code: 200, + }), + ), +).annotate({ + identifier: "CheckDomainDomainAvailabilityV1Request", +}) as any as S.Schema; + +export interface DomainsV1AvailabilityAvailabilityResource { + /** Domain name, `null` when not claimed free domain */ + domain?: string | null; + /** `true` if domain is available for registration */ + is_available?: boolean; + /** `true` if domain is provided as an alternative */ + is_alternative?: boolean; + /** Special rules and/or restrictions applied for registering TLD */ + restriction?: string | null; +} +export const DomainsV1AvailabilityAvailabilityResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + domain: S.optional(S.NullOr(S.String)), + is_available: S.optional(S.Boolean), + is_alternative: S.optional(S.Boolean), + restriction: S.optional(S.NullOr(S.String)), + }), + ).annotate({ + identifier: "DomainsV1AvailabilityAvailabilityResource", + }) as any as S.Schema; + +/** Array of [`Domains.V1.Availability.AvailabilityResource`](#model/domainsv1availabilityavailabilityresource) */ +export type DomainsV1AvailabilityAvailabilityCollection = + Array; +export const DomainsV1AvailabilityAvailabilityCollection = + /*@__PURE__*/ S.Array( + DomainsV1AvailabilityAvailabilityResource, + ) as any as S.Schema; + +export type CheckDomainDomainAvailabilityV1Response = + DomainsV1AvailabilityAvailabilityCollection; +export const CheckDomainDomainAvailabilityV1Response = /*@__PURE__*/ S.suspend( + () => DomainsV1AvailabilityAvailabilityCollection.pipe(T.RawResponseRoot()), +).annotate({ + identifier: "CheckDomainDomainAvailabilityV1Response", +}) as any as S.Schema; + +export interface CheckHostingIfWooCommerceIsInstalledV1Request { + /** Filter by domain name (case-insensitive substring match) */ + domain?: string; +} +export const CheckHostingIfWooCommerceIsInstalledV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + domain: S.optional(S.String.pipe(T.Query())), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/hosting/v1/wordpress/plugins/is-woocommerce-installed", + code: 200, + }), + ), + ).annotate({ + identifier: "CheckHostingIfWooCommerceIsInstalledV1Request", + }) as any as S.Schema; + +export interface WordPressV1PluginsWoocommerceInstalledResource { + /** Whether WooCommerce is installed on any WordPress installation of the domain */ + is_installed?: boolean; +} +export const WordPressV1PluginsWoocommerceInstalledResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + is_installed: S.optional(S.Boolean), + }), + ).annotate({ + identifier: "WordPressV1PluginsWoocommerceInstalledResource", + }) as any as S.Schema; + +/** WordPress installation (software) identifiers to validate. */ +export type CheckHostingIfWordPressInstallationsAreValidV1RequestSoftwareIdsList = + Array; +export const CheckHostingIfWordPressInstallationsAreValidV1RequestSoftwareIdsList = + /*@__PURE__*/ S.Array( + S.String, + ) as any as S.Schema; + +export interface CheckHostingIfWordPressInstallationsAreValidV1Request { + username: string; + /** WordPress installation (software) identifiers to validate. */ + software_ids: CheckHostingIfWordPressInstallationsAreValidV1RequestSoftwareIdsList; + /** Force fresh validation without cache. Preferable for troubleshooting purposes. */ + force?: boolean; +} +export const CheckHostingIfWordPressInstallationsAreValidV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + username: S.String.pipe(T.Label()), + software_ids: + CheckHostingIfWordPressInstallationsAreValidV1RequestSoftwareIdsList, + force: S.optional(S.Boolean), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/hosting/v1/accounts/{username}/wordpress/installations/check-is-valid", + code: 200, + }), + ), + ).annotate({ + identifier: "CheckHostingIfWordPressInstallationsAreValidV1Request", + }) as any as S.Schema; + +export interface WordPressV1InstallationsCheckIsValidResultResource { + /** WordPress installation (software) identifier */ + software_id?: string; + /** Whether the WordPress installation is valid and working correctly */ + is_valid?: boolean; +} +export const WordPressV1InstallationsCheckIsValidResultResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + software_id: S.optional(S.String), + is_valid: S.optional(S.Boolean), + }), + ).annotate({ + identifier: "WordPressV1InstallationsCheckIsValidResultResource", + }) as any as S.Schema; + +/** Array of [`WordPress.V1.Installations.CheckIsValidResultResource`](#model/wordpressv1installationscheckisvalidresultresource) */ +export type WordPressV1InstallationsCheckIsValidResultCollection = + Array; +export const WordPressV1InstallationsCheckIsValidResultCollection = + /*@__PURE__*/ S.Array( + WordPressV1InstallationsCheckIsValidResultResource, + ) as any as S.Schema; + +export type CheckHostingIfWordPressInstallationsAreValidV1Response = + WordPressV1InstallationsCheckIsValidResultCollection; +export const CheckHostingIfWordPressInstallationsAreValidV1Response = + /*@__PURE__*/ S.suspend(() => + WordPressV1InstallationsCheckIsValidResultCollection.pipe( + T.RawResponseRoot(), + ), + ).annotate({ + identifier: "CheckHostingIfWordPressInstallationsAreValidV1Response", + }) as any as S.Schema; + +/** Domain contact information */ +export interface ClaimDomainFreeDomainTransferV1RequestDomainContacts { + /** Owner contact WHOIS record ID */ + owner_id?: number; + /** Administrative contact WHOIS record ID */ + admin_id?: number; + /** Billing contact WHOIS record ID */ + billing_id?: number; + /** Technical contact WHOIS record ID */ + tech_id?: number; +} +export const ClaimDomainFreeDomainTransferV1RequestDomainContacts = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + owner_id: S.optional(S.Number), + admin_id: S.optional(S.Number), + billing_id: S.optional(S.Number), + tech_id: S.optional(S.Number), + }), + ).annotate({ + identifier: "ClaimDomainFreeDomainTransferV1RequestDomainContacts", + }) as any as S.Schema; + +export interface ClaimDomainFreeDomainTransferV1Request { + /** Domain name */ + domain: string; + /** Authorization code from the current registrar */ + auth_code: string; + /** Domain contact information */ + domain_contacts?: ClaimDomainFreeDomainTransferV1RequestDomainContacts; + /** Keep the existing nameservers of the domain */ + should_keep_ns?: boolean; +} +export const ClaimDomainFreeDomainTransferV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + domain: S.String, + auth_code: S.String, + domain_contacts: S.optional( + ClaimDomainFreeDomainTransferV1RequestDomainContacts, + ), + should_keep_ns: S.optional(S.Boolean), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/domains/v1/transfers/claim", + code: 200, + }), + ), +).annotate({ + identifier: "ClaimDomainFreeDomainTransferV1Request", +}) as any as S.Schema; + +export interface DomainsV1TransferTransferResource { + /** Domain name */ + domain?: string; + /** Transfer status */ + status?: string; + /** When the transfer was initiated */ + initiated_at?: string | null; + /** When the transfer completed */ + completed_at?: string | null; +} +export const DomainsV1TransferTransferResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + domain: S.optional(S.String), + status: S.optional(S.String), + initiated_at: S.optional(S.NullOr(S.String)), + completed_at: S.optional(S.NullOr(S.String)), + }), +).annotate({ + identifier: "DomainsV1TransferTransferResource", +}) as any as S.Schema; + +/** Domain contact information */ +export type ClaimDomainFreeDomainV1RequestDomainContacts = + ClaimDomainFreeDomainTransferV1RequestDomainContacts; +export const ClaimDomainFreeDomainV1RequestDomainContacts = + ClaimDomainFreeDomainTransferV1RequestDomainContacts; + +export interface ClaimDomainFreeDomainV1Request { + /** Domain name */ + domain: string; + /** Domain contact information */ + domain_contacts?: ClaimDomainFreeDomainTransferV1RequestDomainContacts; + /** Additional registration data, possible values depends on TLD */ + additional_details?: unknown; +} +export const ClaimDomainFreeDomainV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + domain: S.String, + domain_contacts: S.optional( + ClaimDomainFreeDomainTransferV1RequestDomainContacts, + ), + additional_details: S.optional(S.Unknown), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/domains/v1/portfolio/claim", + code: 200, + }), + ), +).annotate({ + identifier: "ClaimDomainFreeDomainV1Request", +}) as any as S.Schema; + +/** Domain status */ +export type DomainsV1PortfolioClaimResourceStatus = + | "active" + | "pending_setup" + | "expired" + | "requested" + | "pending_verification" + | "deleted" + | "suspended" + | "failed"; +export const DomainsV1PortfolioClaimResourceStatus = /*@__PURE__*/ S.String; + +export interface DomainsV1PortfolioClaimResource { + /** Domain name */ + domain?: string | null; + /** Domain status */ + status?: DomainsV1PortfolioClaimResourceStatus | null; + created_at?: string | null; +} +export const DomainsV1PortfolioClaimResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + domain: S.optional(S.NullOr(S.String)), + status: S.optional(S.NullOr(DomainsV1PortfolioClaimResourceStatus)), + created_at: S.optional(S.NullOr(S.String)), + }), +).annotate({ + identifier: "DomainsV1PortfolioClaimResource", +}) as any as S.Schema; + +export interface ClearAgencyHostingWebsiteCacheV1Request { + /** Agency Plan website UID */ + website_uid: string; +} +export const ClearAgencyHostingWebsiteCacheV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + website_uid: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "DELETE", + uri: "/api/agency-hosting/v1/websites/{website_uid}/cache", + code: 200, + }), + ), +).annotate({ + identifier: "ClearAgencyHostingWebsiteCacheV1Request", +}) as any as S.Schema; + +export interface ClearHostingWebsiteCacheV1Request { + username: string; + /** Domain name */ + domain: string; + /** Directory of the website installation to clear, relative to the website root. Defaults to the website root. */ + directory?: string; +} +export const ClearHostingWebsiteCacheV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + username: S.String.pipe(T.Label()), + domain: S.String.pipe(T.Label()), + directory: S.optional(S.String.pipe(T.Query())), + }).pipe( + T.Http({ + method: "DELETE", + uri: "/api/hosting/v1/accounts/{username}/websites/{domain}/cache/clear", + code: 200, + }), + ), +).annotate({ + identifier: "ClearHostingWebsiteCacheV1Request", +}) as any as S.Schema; + +export interface CreateAgencyHostingANewWebsiteV1RequestSettingsPhp { + /** PHP version */ + version: string; +} +export const CreateAgencyHostingANewWebsiteV1RequestSettingsPhp = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + version: S.String, + }), + ).annotate({ + identifier: "CreateAgencyHostingANewWebsiteV1RequestSettingsPhp", + }) as any as S.Schema; + +/** Website settings */ +export interface CreateAgencyHostingANewWebsiteV1RequestSettings { + php: CreateAgencyHostingANewWebsiteV1RequestSettingsPhp; +} +export const CreateAgencyHostingANewWebsiteV1RequestSettings = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + php: CreateAgencyHostingANewWebsiteV1RequestSettingsPhp, + }), + ).annotate({ + identifier: "CreateAgencyHostingANewWebsiteV1RequestSettings", + }) as any as S.Schema; + +/** Website type */ +export type CreateAgencyHostingANewWebsiteV1RequestType = + | "horizons" + | "node-static"; +export const CreateAgencyHostingANewWebsiteV1RequestType = + /*@__PURE__*/ S.String; + +export interface CreateAgencyHostingANewWebsiteV1RequestWordpressAdmin { + user: string; + password: string | Redacted.Redacted; + email: string; +} +export const CreateAgencyHostingANewWebsiteV1RequestWordpressAdmin = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + user: S.String, + password: S.String.pipe(T.SensitiveValue({})), + email: S.String, + }), + ).annotate({ + identifier: "CreateAgencyHostingANewWebsiteV1RequestWordpressAdmin", + }) as any as S.Schema; + +/** WordPress installation options */ +export interface CreateAgencyHostingANewWebsiteV1RequestWordpress { + language: string; + title: string; + admin: CreateAgencyHostingANewWebsiteV1RequestWordpressAdmin; +} +export const CreateAgencyHostingANewWebsiteV1RequestWordpress = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + language: S.String, + title: S.String, + admin: CreateAgencyHostingANewWebsiteV1RequestWordpressAdmin, + }), + ).annotate({ + identifier: "CreateAgencyHostingANewWebsiteV1RequestWordpress", + }) as any as S.Schema; + +/** Clone the new website from an existing website */ +export interface CreateAgencyHostingANewWebsiteV1RequestClone { + website_uid: string; +} +export const CreateAgencyHostingANewWebsiteV1RequestClone = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + website_uid: S.String, + }), + ).annotate({ + identifier: "CreateAgencyHostingANewWebsiteV1RequestClone", + }) as any as S.Schema; + +export interface CreateAgencyHostingANewWebsiteV1RequestDeriveDomainFromVhost { + username: string; + vhost: string; +} +export const CreateAgencyHostingANewWebsiteV1RequestDeriveDomainFromVhost = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + username: S.String, + vhost: S.String, + }), + ).annotate({ + identifier: "CreateAgencyHostingANewWebsiteV1RequestDeriveDomainFromVhost", + }) as any as S.Schema; + +/** Derive the domain from an existing vhost */ +export interface CreateAgencyHostingANewWebsiteV1RequestDeriveDomain { + from_vhost: CreateAgencyHostingANewWebsiteV1RequestDeriveDomainFromVhost; +} +export const CreateAgencyHostingANewWebsiteV1RequestDeriveDomain = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + from_vhost: CreateAgencyHostingANewWebsiteV1RequestDeriveDomainFromVhost, + }), + ).annotate({ + identifier: "CreateAgencyHostingANewWebsiteV1RequestDeriveDomain", + }) as any as S.Schema; + +export interface CreateAgencyHostingANewWebsiteV1Request { + /** Agency Plan order ID */ + order_id: number; + /** Datacenter code where the website should be provisioned. Available codes depend on live capacity and are not a fixed set. */ + datacenter_code: string; + /** Setup flavor: a specific WordPress version in the format `wp-.` or `wp-..` (e.g. `wp-6.8.2`), or `php-fpm` for a plain PHP stack. Generic versions like `wp-latest` are not allowed. */ + flavor: string; + /** Website settings */ + settings: CreateAgencyHostingANewWebsiteV1RequestSettings; + /** Primary domain to attach to the website. Omit or set to null to get a free auto-generated *.hostingersite.com subdomain instead. */ + domain?: string | null; + /** Website type */ + type?: CreateAgencyHostingANewWebsiteV1RequestType | (string & {}) | null; + /** WordPress installation options */ + wordpress?: CreateAgencyHostingANewWebsiteV1RequestWordpress; + /** Clone the new website from an existing website */ + clone?: CreateAgencyHostingANewWebsiteV1RequestClone; + /** Derive the domain from an existing vhost */ + derive_domain?: CreateAgencyHostingANewWebsiteV1RequestDeriveDomain; +} +export const CreateAgencyHostingANewWebsiteV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + order_id: S.Number.pipe(T.Label()), + datacenter_code: S.String, + flavor: S.String, + settings: CreateAgencyHostingANewWebsiteV1RequestSettings, + domain: S.optional(S.NullOr(S.String)), + type: S.optional(S.NullOr(CreateAgencyHostingANewWebsiteV1RequestType)), + wordpress: S.optional(CreateAgencyHostingANewWebsiteV1RequestWordpress), + clone: S.optional(CreateAgencyHostingANewWebsiteV1RequestClone), + derive_domain: S.optional( + CreateAgencyHostingANewWebsiteV1RequestDeriveDomain, + ), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/agency-hosting/v1/orders/{order_id}/websites/setups", + code: 200, + }), + ), +).annotate({ + identifier: "CreateAgencyHostingANewWebsiteV1Request", +}) as any as S.Schema; + +export interface AgencyHostingV1SetupsWebsiteSetupResource { + /** UUID tracking the asynchronous website setup process */ + setup_uuid?: string; +} +export const AgencyHostingV1SetupsWebsiteSetupResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + setup_uuid: S.optional(S.String), + }), + ).annotate({ + identifier: "AgencyHostingV1SetupsWebsiteSetupResource", + }) as any as S.Schema; + +export interface CreateAgencyHostingWebsiteCronJobV1Request { + /** Agency Plan website UID */ + website_uid: string; + /** Cron schedule expression (standard 5-field crontab syntax). */ + time: string; + /** Command to run on the schedule. Must not contain pipe (|) or redirection (<, >) characters. */ + command: string; +} +export const CreateAgencyHostingWebsiteCronJobV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + website_uid: S.String.pipe(T.Label()), + time: S.String, + command: S.String, + }).pipe( + T.Http({ + method: "POST", + uri: "/api/agency-hosting/v1/websites/{website_uid}/cron-jobs", + code: 200, + }), + ), + ).annotate({ + identifier: "CreateAgencyHostingWebsiteCronJobV1Request", + }) as any as S.Schema; + +export interface AgencyHostingV1WebsitesCronJobsCronJobResource { + /** Unique identifier of the cron job. Use it to delete the cron job. */ + uuid?: string; + /** Cron schedule expression. */ + time?: string; + /** Command executed on the configured schedule. */ + command?: string; + /** Cron job creation timestamp. */ + created_at?: string; +} +export const AgencyHostingV1WebsitesCronJobsCronJobResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + uuid: S.optional(S.String), + time: S.optional(S.String), + command: S.optional(S.String), + created_at: S.optional(S.String), + }), + ).annotate({ + identifier: "AgencyHostingV1WebsitesCronJobsCronJobResource", + }) as any as S.Schema; + +export interface CreateAgencyHostingWebsiteDatabaseUserV1Request { + /** Agency Plan website UID */ + website_uid: string; + /** Full database name as returned by the list databases endpoint. */ + database_name: string; + /** Database username to create (alphanumeric and underscores). */ + database_user: string; + /** Password for the database user (requires mixed case, letters, and numbers). */ + password: string | Redacted.Redacted; + /** Host the user connects from (IPv4, IPv6, % wildcard, or localhost). Defaults to localhost. */ + host?: string | null; +} +export const CreateAgencyHostingWebsiteDatabaseUserV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + website_uid: S.String.pipe(T.Label()), + database_name: S.String.pipe(T.Label()), + database_user: S.String, + password: S.String.pipe(T.SensitiveValue({})), + host: S.optional(S.NullOr(S.String)), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/agency-hosting/v1/websites/{website_uid}/databases/{database_name}/users", + code: 200, + }), + ), + ).annotate({ + identifier: "CreateAgencyHostingWebsiteDatabaseUserV1Request", + }) as any as S.Schema; + +export interface AgencyHostingV1WebsitesDatabasesDatabaseUserResource { + /** Database username. */ + name?: string; + /** Database host the user is allowed to connect from. */ + host?: string; + /** Database user creation date in ISO 8601 format. */ + created_at?: string; +} +export const AgencyHostingV1WebsitesDatabasesDatabaseUserResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + name: S.optional(S.String), + host: S.optional(S.String), + created_at: S.optional(S.String), + }), + ).annotate({ + identifier: "AgencyHostingV1WebsitesDatabasesDatabaseUserResource", + }) as any as S.Schema; + +export interface CreateAgencyHostingWebsiteDatabaseV1Request { + /** Agency Plan website UID */ + website_uid: string; + /** Database name to create (alphanumeric characters). */ + database_name: string; + /** Database username to create alongside the database (alphanumeric characters). */ + database_user: string; + /** Password for the database user (requires mixed case, letters, and numbers). */ + password: string | Redacted.Redacted; +} +export const CreateAgencyHostingWebsiteDatabaseV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + website_uid: S.String.pipe(T.Label()), + database_name: S.String, + database_user: S.String, + password: S.String.pipe(T.SensitiveValue({})), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/agency-hosting/v1/websites/{website_uid}/databases", + code: 200, + }), + ), + ).annotate({ + identifier: "CreateAgencyHostingWebsiteDatabaseV1Request", + }) as any as S.Schema; + +/** Non-system users that can access the database. */ +export type AgencyHostingV1WebsitesDatabasesDatabaseResourceUsersList = + Array; +export const AgencyHostingV1WebsitesDatabasesDatabaseResourceUsersList = + /*@__PURE__*/ S.Array( + AgencyHostingV1WebsitesDatabasesDatabaseUserResource, + ) as any as S.Schema; + +export interface AgencyHostingV1WebsitesDatabasesDatabaseResource { + /** Database name. */ + name?: string; + /** Database creation date in ISO 8601 format. */ + created_at?: string; + /** Non-system users that can access the database. */ + users?: AgencyHostingV1WebsitesDatabasesDatabaseResourceUsersList; +} +export const AgencyHostingV1WebsitesDatabasesDatabaseResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + name: S.optional(S.String), + created_at: S.optional(S.String), + users: S.optional( + AgencyHostingV1WebsitesDatabasesDatabaseResourceUsersList, + ), + }), + ).annotate({ + identifier: "AgencyHostingV1WebsitesDatabasesDatabaseResource", + }) as any as S.Schema; + +export interface CreateBillingPurchaseOrderV1RequestItemsItem { + /** Catalog price item ID */ + item_id: string; + /** Quantity to purchase */ + quantity?: number; +} +export const CreateBillingPurchaseOrderV1RequestItemsItem = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + item_id: S.String, + quantity: S.optional(S.Number), + }), + ).annotate({ + identifier: "CreateBillingPurchaseOrderV1RequestItemsItem", + }) as any as S.Schema; + +/** Catalog price items to purchase */ +export type CreateBillingPurchaseOrderV1RequestItemsList = + Array; +export const CreateBillingPurchaseOrderV1RequestItemsList = + /*@__PURE__*/ S.Array( + CreateBillingPurchaseOrderV1RequestItemsItem, + ) as any as S.Schema; + +/** Discount coupon codes */ +export type CreateBillingPurchaseOrderV1RequestCouponsList = Array; +export const CreateBillingPurchaseOrderV1RequestCouponsList = + /*@__PURE__*/ S.Array( + S.Unknown, + ) as any as S.Schema; + +export interface CreateBillingPurchaseOrderV1Request { + /** Payment method ID, default will be used if not provided */ + payment_method_id?: number; + /** Catalog price items to purchase */ + items: CreateBillingPurchaseOrderV1RequestItemsList; + /** Discount coupon codes */ + coupons?: CreateBillingPurchaseOrderV1RequestCouponsList; +} +export const CreateBillingPurchaseOrderV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + payment_method_id: S.optional(S.Number), + items: CreateBillingPurchaseOrderV1RequestItemsList, + coupons: S.optional(CreateBillingPurchaseOrderV1RequestCouponsList), + }).pipe(T.Http({ method: "POST", uri: "/api/billing/v1/orders", code: 200 })), +).annotate({ + identifier: "CreateBillingPurchaseOrderV1Request", +}) as any as S.Schema; + +export type BillingV1OrderOrderResourceStatus = + | "completed" + | "pending" + | "processing" + | "failed" + | "refunded" + | "cancelled" + | "awaiting_payment" + | "payment_initiated" + | "fraud_refund"; +export const BillingV1OrderOrderResourceStatus = /*@__PURE__*/ S.String; + +export interface BillingV1OrderOrderBillingAddressResource { + first_name?: string; + last_name?: string; + company?: string | null; + address_1?: string | null; + address_2?: string | null; + city?: string | null; + state?: string | null; + zip?: string | null; + country?: string | null; + phone?: string | null; + email?: string; +} +export const BillingV1OrderOrderBillingAddressResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + first_name: S.optional(S.String), + last_name: S.optional(S.String), + company: S.optional(S.NullOr(S.String)), + address_1: S.optional(S.NullOr(S.String)), + address_2: S.optional(S.NullOr(S.String)), + city: S.optional(S.NullOr(S.String)), + state: S.optional(S.NullOr(S.String)), + zip: S.optional(S.NullOr(S.String)), + country: S.optional(S.NullOr(S.String)), + phone: S.optional(S.NullOr(S.String)), + email: S.optional(S.String), + }), + ).annotate({ + identifier: "BillingV1OrderOrderBillingAddressResource", + }) as any as S.Schema; + +export interface BillingV1OrderOrderResource { + /** Order ID */ + id?: number; + /** Subscription ID */ + subscription_id?: string; + status?: BillingV1OrderOrderResourceStatus; + /** Currency code */ + currency?: string; + /** Subtotal price (exc. VAT) in cents */ + subtotal?: number; + /** Total price (inc. VAT) in cents */ + total?: number; + billing_address?: BillingV1OrderOrderBillingAddressResource; + created_at?: string; + updated_at?: string; +} +export const BillingV1OrderOrderResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + id: S.optional(S.Number), + subscription_id: S.optional(S.String), + status: S.optional(BillingV1OrderOrderResourceStatus), + currency: S.optional(S.String), + subtotal: S.optional(S.Number), + total: S.optional(S.Number), + billing_address: S.optional(BillingV1OrderOrderBillingAddressResource), + created_at: S.optional(S.String), + updated_at: S.optional(S.String), + }), +).annotate({ + identifier: "BillingV1OrderOrderResource", +}) as any as S.Schema; + +/** Redirect type */ +export type CreateDomainDomainForwardingV1RequestRedirectType = "301" | "302"; +export const CreateDomainDomainForwardingV1RequestRedirectType = + /*@__PURE__*/ S.String; + +export interface CreateDomainDomainForwardingV1Request { + /** Domain name */ + domain: string; + /** Redirect type */ + redirect_type: + | CreateDomainDomainForwardingV1RequestRedirectType + | (string & {}); + /** URL to forward domain to */ + redirect_url: string; +} +export const CreateDomainDomainForwardingV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + domain: S.String, + redirect_type: CreateDomainDomainForwardingV1RequestRedirectType, + redirect_url: S.String, + }).pipe( + T.Http({ method: "POST", uri: "/api/domains/v1/forwarding", code: 200 }), + ), +).annotate({ + identifier: "CreateDomainDomainForwardingV1Request", +}) as any as S.Schema; + +/** Redirect type */ +export type DomainsV1ForwardingForwardingResourceRedirectType = "301" | "302"; +export const DomainsV1ForwardingForwardingResourceRedirectType = + /*@__PURE__*/ S.String; + +export interface DomainsV1ForwardingForwardingResource { + /** Domain name */ + domain?: string | null; + /** Redirect type */ + redirect_type?: DomainsV1ForwardingForwardingResourceRedirectType; + /** URL domain is forwarded to */ + redirect_url?: string; + created_at?: string; + updated_at?: string | null; +} +export const DomainsV1ForwardingForwardingResource = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + domain: S.optional(S.NullOr(S.String)), + redirect_type: S.optional( + DomainsV1ForwardingForwardingResourceRedirectType, + ), + redirect_url: S.optional(S.String), + created_at: S.optional(S.String), + updated_at: S.optional(S.NullOr(S.String)), + }), +).annotate({ + identifier: "DomainsV1ForwardingForwardingResource", +}) as any as S.Schema; + +/** Legal entity type */ +export type CreateDomainWHOISProfileV1RequestEntityType = + | "individual" + | "organization"; +export const CreateDomainWHOISProfileV1RequestEntityType = + /*@__PURE__*/ S.String; + +export interface CreateDomainWHOISProfileV1Request { + /** TLD of the domain (without leading dot) */ + tld: string; + /** ISO 3166 2-letter country code */ + country: string; + /** Legal entity type */ + entity_type: CreateDomainWHOISProfileV1RequestEntityType | (string & {}); + /** TLD details */ + tld_details?: unknown; + /** WHOIS details */ + whois_details: unknown; +} +export const CreateDomainWHOISProfileV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + tld: S.String, + country: S.String, + entity_type: CreateDomainWHOISProfileV1RequestEntityType, + tld_details: S.optional(S.Unknown), + whois_details: S.Unknown, + }).pipe(T.Http({ method: "POST", uri: "/api/domains/v1/whois", code: 200 })), +).annotate({ + identifier: "CreateDomainWHOISProfileV1Request", +}) as any as S.Schema; + +/** WHOIS profile entity type */ +export type DomainsV1WHOISProfileResourceEntityType = + | "individual" + | "organization"; +export const DomainsV1WHOISProfileResourceEntityType = /*@__PURE__*/ S.String; + +export interface DomainsV1WHOISProfileResource { + /** WHOIS Profile ID */ + id?: number; + /** TLD to which contact profile can be applied to */ + tld?: string; + /** ISO 3166 2-letter country code */ + country?: string; + /** WHOIS profile entity type */ + entity_type?: DomainsV1WHOISProfileResourceEntityType; + /** WHOIS profile details */ + whois_details?: unknown; + /** TLD details */ + tld_details?: unknown; + created_at?: string; + updated_at?: string; +} +export const DomainsV1WHOISProfileResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + id: S.optional(S.Number), + tld: S.optional(S.String), + country: S.optional(S.String), + entity_type: S.optional(DomainsV1WHOISProfileResourceEntityType), + whois_details: S.optional(S.Unknown), + tld_details: S.optional(S.Unknown), + created_at: S.optional(S.String), + updated_at: S.optional(S.String), + }), +).annotate({ + identifier: "DomainsV1WHOISProfileResource", +}) as any as S.Schema; + +/** The discount type. */ +export type CreateEcommerceADiscountV1RequestType = + | "percentage" + | "fixed" + | "free_shipping"; +export const CreateEcommerceADiscountV1RequestType = /*@__PURE__*/ S.String; + +/** Whether the discount applies to the cart total or to each eligible item. */ +export type CreateEcommerceADiscountV1RequestAllocation = "total" | "item"; +export const CreateEcommerceADiscountV1RequestAllocation = + /*@__PURE__*/ S.String; + +export interface CreateEcommerceADiscountV1Request { + /** The ID of the store to create the discount for. */ + store_id: string; + /** The discount code customers enter at checkout. */ + code: string; + /** A human-friendly discount name. */ + name?: string; + /** The discount type. */ + type: CreateEcommerceADiscountV1RequestType | (string & {}); + /** For percentage discounts a whole number 1-100; for fixed discounts an amount in the smallest currency unit (e.g. $10 is 1000). Ignored for free_shipping. */ + value: number; + /** Whether the discount applies to the cart total or to each eligible item. */ + allocation?: CreateEcommerceADiscountV1RequestAllocation | (string & {}); + /** When the discount becomes active. A bare date (2026-11-27) anchors to time_zone. Defaults to now when omitted. */ + starts_at?: string; + /** When the discount expires. A bare date runs to the end of that day in time_zone. Never expires when omitted. */ + ends_at?: string; + /** Maximum number of times the discount can be redeemed. */ + usage_limit?: number; + /** Minimum cart value in the smallest currency unit required for the discount to apply. */ + min_cart_value?: number; + /** IANA time zone used to interpret starts_at and ends_at. */ + time_zone?: string; +} +export const CreateEcommerceADiscountV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + store_id: S.String.pipe(T.Label()), + code: S.String, + name: S.optional(S.String), + type: CreateEcommerceADiscountV1RequestType, + value: S.Number, + allocation: S.optional(CreateEcommerceADiscountV1RequestAllocation), + starts_at: S.optional(S.String), + ends_at: S.optional(S.String), + usage_limit: S.optional(S.Number), + min_cart_value: S.optional(S.Number), + time_zone: S.optional(S.String), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/ecommerce/v1/stores/{store_id}/discounts", + code: 200, + }), + ), +).annotate({ + identifier: "CreateEcommerceADiscountV1Request", +}) as any as S.Schema; + +/** The discount type, or null. */ +export type EcommerceV1DiscountDiscountResourceType = + | "percentage" + | "fixed" + | "free_shipping"; +export const EcommerceV1DiscountDiscountResourceType = /*@__PURE__*/ S.String; + +/** Whether the discount applies to the cart total or to each item, or null. */ +export type EcommerceV1DiscountDiscountResourceAllocation = "total" | "item"; +export const EcommerceV1DiscountDiscountResourceAllocation = + /*@__PURE__*/ S.String; + +export interface EcommerceV1DiscountDiscountResource { + /** The discount ID, required by every other discount endpoint. */ + id?: string; + /** The discount code customers enter at checkout. */ + code?: string; + /** The discount name, or null. */ + name?: string | null; + /** The discount type, or null. */ + type?: EcommerceV1DiscountDiscountResourceType | null; + /** The discount value, or null. Percentage is 1-100; fixed is in the smallest currency unit. */ + value?: number | null; + /** Whether the discount applies to the cart total or to each item, or null. */ + allocation?: EcommerceV1DiscountDiscountResourceAllocation | null; + /** Whether the discount is disabled. */ + is_disabled?: boolean; + /** When the discount becomes active. */ + starts_at?: string; + /** When the discount expires, or null. */ + ends_at?: string | null; + /** Maximum number of redemptions, or null for unlimited. */ + usage_limit?: number | null; + /** Number of times the discount has been redeemed. */ + usage_count?: number; +} +export const EcommerceV1DiscountDiscountResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + id: S.optional(S.String), + code: S.optional(S.String), + name: S.optional(S.NullOr(S.String)), + type: S.optional(S.NullOr(EcommerceV1DiscountDiscountResourceType)), + value: S.optional(S.NullOr(S.Number)), + allocation: S.optional( + S.NullOr(EcommerceV1DiscountDiscountResourceAllocation), + ), + is_disabled: S.optional(S.Boolean), + starts_at: S.optional(S.String), + ends_at: S.optional(S.NullOr(S.String)), + usage_limit: S.optional(S.NullOr(S.Number)), + usage_count: S.optional(S.Number), + }), +).annotate({ + identifier: "EcommerceV1DiscountDiscountResource", +}) as any as S.Schema; + +export interface EcommerceV1DiscountDiscountResponseResource { + data?: EcommerceV1DiscountDiscountResource; +} +export const EcommerceV1DiscountDiscountResponseResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + data: S.optional(EcommerceV1DiscountDiscountResource), + }), + ).annotate({ + identifier: "EcommerceV1DiscountDiscountResponseResource", + }) as any as S.Schema; + +export interface CreateEcommerceAProductVariantV1RequestOptionsItem { + /** Option name, e.g. Size. */ + name: string; + /** Option value for this variant, e.g. M. */ + value: string; +} +export const CreateEcommerceAProductVariantV1RequestOptionsItem = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + name: S.String, + value: S.String, + }), + ).annotate({ + identifier: "CreateEcommerceAProductVariantV1RequestOptionsItem", + }) as any as S.Schema; + +/** Option name/value pairs that distinguish this variant, e.g. [{name: Size, value: M}]. Options missing from the product are created; provide a value for every option the product already has. */ +export type CreateEcommerceAProductVariantV1RequestOptionsList = + Array; +export const CreateEcommerceAProductVariantV1RequestOptionsList = + /*@__PURE__*/ S.Array( + CreateEcommerceAProductVariantV1RequestOptionsItem, + ) as any as S.Schema; + +export interface CreateEcommerceAProductVariantV1RequestPricesItem { + /** Price in the smallest currency unit (e.g. cents). */ + amount: number; + /** Optional sale price in the smallest currency unit; must be lower than amount. */ + sale_amount?: number; + /** ISO 4217 currency code. Defaults to the store's default currency when omitted. */ + currency?: string; +} +export const CreateEcommerceAProductVariantV1RequestPricesItem = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + amount: S.Number, + sale_amount: S.optional(S.Number), + currency: S.optional(S.String), + }), + ).annotate({ + identifier: "CreateEcommerceAProductVariantV1RequestPricesItem", + }) as any as S.Schema; + +/** Prices per currency. Amounts are integers in the smallest currency unit. A free item is amount: 0. */ +export type CreateEcommerceAProductVariantV1RequestPricesList = + Array; +export const CreateEcommerceAProductVariantV1RequestPricesList = + /*@__PURE__*/ S.Array( + CreateEcommerceAProductVariantV1RequestPricesItem, + ) as any as S.Schema; + +export interface CreateEcommerceAProductVariantV1Request { + /** The ID of the store that owns the product. */ + store_id: string; + /** The ID of the product to add the variant to. */ + product_id: string; + /** The variant title. Defaults to the option values joined with ' / ' (e.g. 'Red / L'). */ + title?: string; + /** The variant SKU. */ + sku?: string; + /** Option name/value pairs that distinguish this variant, e.g. [{name: Size, value: M}]. Options missing from the product are created; provide a value for every option the product already has. */ + options: CreateEcommerceAProductVariantV1RequestOptionsList; + /** Prices per currency. Amounts are integers in the smallest currency unit. A free item is amount: 0. */ + prices?: CreateEcommerceAProductVariantV1RequestPricesList; + /** Units in stock. Defaults to 0. */ + inventory_quantity?: number; + /** Whether stock is tracked for this variant. Defaults to false. */ + manage_inventory?: boolean; +} +export const CreateEcommerceAProductVariantV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + store_id: S.String.pipe(T.Label()), + product_id: S.String.pipe(T.Label()), + title: S.optional(S.String), + sku: S.optional(S.String), + options: CreateEcommerceAProductVariantV1RequestOptionsList, + prices: S.optional(CreateEcommerceAProductVariantV1RequestPricesList), + inventory_quantity: S.optional(S.Number), + manage_inventory: S.optional(S.Boolean), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/ecommerce/v1/stores/{store_id}/products/{product_id}/variants", + code: 200, + }), + ), +).annotate({ + identifier: "CreateEcommerceAProductVariantV1Request", +}) as any as S.Schema; + +export interface EcommerceV1VariantVariantResourceOptionsItem { + /** Option name, e.g. Size. */ + name?: string | null; + /** Option value, e.g. M. */ + value?: string; +} +export const EcommerceV1VariantVariantResourceOptionsItem = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + name: S.optional(S.NullOr(S.String)), + value: S.optional(S.String), + }), + ).annotate({ + identifier: "EcommerceV1VariantVariantResourceOptionsItem", + }) as any as S.Schema; + +/** The variant's option values. */ +export type EcommerceV1VariantVariantResourceOptionsList = + Array; +export const EcommerceV1VariantVariantResourceOptionsList = + /*@__PURE__*/ S.Array( + EcommerceV1VariantVariantResourceOptionsItem, + ) as any as S.Schema; + +export interface EcommerceV1VariantVariantResourcePricesItem { + /** Price in the smallest currency unit. */ + amount?: number; + /** Sale price in the smallest currency unit, or null. */ + sale_amount?: number | null; + /** The price currency code. */ + currency_code?: string; +} +export const EcommerceV1VariantVariantResourcePricesItem = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + amount: S.optional(S.Number), + sale_amount: S.optional(S.NullOr(S.Number)), + currency_code: S.optional(S.String), + }), + ).annotate({ + identifier: "EcommerceV1VariantVariantResourcePricesItem", + }) as any as S.Schema; + +/** Prices per currency, in the smallest currency unit. */ +export type EcommerceV1VariantVariantResourcePricesList = + Array; +export const EcommerceV1VariantVariantResourcePricesList = + /*@__PURE__*/ S.Array( + EcommerceV1VariantVariantResourcePricesItem, + ) as any as S.Schema; + +export interface EcommerceV1VariantVariantResource { + /** The variant ID, required by every other variant endpoint. */ + id?: string; + /** The variant title, or null. */ + title?: string | null; + /** The variant SKU, or null. */ + sku?: string | null; + /** The variant's option values. */ + options?: EcommerceV1VariantVariantResourceOptionsList; + /** Prices per currency, in the smallest currency unit. */ + prices?: EcommerceV1VariantVariantResourcePricesList; + /** Units in stock. */ + inventory_quantity?: number; + /** Whether stock is tracked for this variant. */ + manage_inventory?: boolean; +} +export const EcommerceV1VariantVariantResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + id: S.optional(S.String), + title: S.optional(S.NullOr(S.String)), + sku: S.optional(S.NullOr(S.String)), + options: S.optional(EcommerceV1VariantVariantResourceOptionsList), + prices: S.optional(EcommerceV1VariantVariantResourcePricesList), + inventory_quantity: S.optional(S.Number), + manage_inventory: S.optional(S.Boolean), + }), +).annotate({ + identifier: "EcommerceV1VariantVariantResource", +}) as any as S.Schema; + +export interface EcommerceV1VariantVariantResponseResource { + data?: EcommerceV1VariantVariantResource; +} +export const EcommerceV1VariantVariantResponseResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + data: S.optional(EcommerceV1VariantVariantResource), + }), + ).annotate({ + identifier: "EcommerceV1VariantVariantResponseResource", + }) as any as S.Schema; + +/** Sales channel type. "custom" is a headless channel: it requires a name and takes an optional public url. "quick-link" is a one-page store whose handle is auto-generated; it supports neither name nor url. */ +export type CreateEcommerceASalesChannelV1RequestType = "custom" | "quick-link"; +export const CreateEcommerceASalesChannelV1RequestType = /*@__PURE__*/ S.String; + +export interface CreateEcommerceASalesChannelV1Request { + /** The ID of the store to create the sales channel for. */ + store_id: string; + /** Sales channel type. "custom" is a headless channel: it requires a name and takes an optional public url. "quick-link" is a one-page store whose handle is auto-generated; it supports neither name nor url. */ + type: CreateEcommerceASalesChannelV1RequestType | (string & {}); + /** Merchant-facing custom name. Required for custom channels; not supported for quick-link. */ + name?: string; + /** Optional public url for the channel. Custom channels only; not supported for quick-link. */ + url?: string | null; +} +export const CreateEcommerceASalesChannelV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + store_id: S.String.pipe(T.Label()), + type: CreateEcommerceASalesChannelV1RequestType, + name: S.optional(S.String), + url: S.optional(S.NullOr(S.String)), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/ecommerce/v1/stores/{store_id}/sales-channels", + code: 200, + }), + ), +).annotate({ + identifier: "CreateEcommerceASalesChannelV1Request", +}) as any as S.Schema; + +/** Sales channel type */ +export type EcommerceV1SalesChannelSalesChannelCreationResourceSalesChannelType = + | "builder" + | "horizons" + | "tiktok" + | "custom" + | "quick-link" + | "wordpress"; +export const EcommerceV1SalesChannelSalesChannelCreationResourceSalesChannelType = + /*@__PURE__*/ S.String; + +export interface EcommerceV1SalesChannelSalesChannelCreationResourceSalesChannel { + /** Sales channel ID */ + id?: string; + /** Sales channel type */ + type?: EcommerceV1SalesChannelSalesChannelCreationResourceSalesChannelType; + /** Whether this is the primary sales channel. */ + is_primary?: boolean; + /** Whether the sales channel is active. */ + is_active?: boolean; + /** External identifier for the sales channel. */ + external_id?: string | null; + /** Merchant-facing custom name. */ + name?: string | null; + /** Public address where the custom sales channel lives. */ + domain?: string | null; +} +export const EcommerceV1SalesChannelSalesChannelCreationResourceSalesChannel = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + id: S.optional(S.String), + type: S.optional( + EcommerceV1SalesChannelSalesChannelCreationResourceSalesChannelType, + ), + is_primary: S.optional(S.Boolean), + is_active: S.optional(S.Boolean), + external_id: S.optional(S.NullOr(S.String)), + name: S.optional(S.NullOr(S.String)), + domain: S.optional(S.NullOr(S.String)), + }), + ).annotate({ + identifier: + "EcommerceV1SalesChannelSalesChannelCreationResourceSalesChannel", + }) as any as S.Schema; + +export interface EcommerceV1SalesChannelSalesChannelCreationResource { + sales_channel?: EcommerceV1SalesChannelSalesChannelCreationResourceSalesChannel; +} +export const EcommerceV1SalesChannelSalesChannelCreationResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + sales_channel: S.optional( + EcommerceV1SalesChannelSalesChannelCreationResourceSalesChannel, + ), + }), + ).annotate({ + identifier: "EcommerceV1SalesChannelSalesChannelCreationResource", + }) as any as S.Schema; + +export interface CreateEcommerceDigitalProductV1Request { + /** The ID of the store to create the product in. */ + store_id: string; + /** The product name. */ + name: string; + /** Price in the smallest currency unit (e.g. cents). Must be positive. */ + price: number; + /** The product description. */ + description?: string | null; + /** ISO 4217 currency code. Defaults to the store's default currency when omitted. */ + currency?: string | null; + /** Optional external download link delivered to the customer after purchase. */ + download_url?: string | null; +} +export const CreateEcommerceDigitalProductV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + store_id: S.String.pipe(T.Label()), + name: S.String, + price: S.Number, + description: S.optional(S.NullOr(S.String)), + currency: S.optional(S.NullOr(S.String)), + download_url: S.optional(S.NullOr(S.String)), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/ecommerce/v1/stores/{store_id}/products/digital", + code: 200, + }), + ), +).annotate({ + identifier: "CreateEcommerceDigitalProductV1Request", +}) as any as S.Schema; + +/** Product type. */ +export type EcommerceV1ProductProductCreationResourceProductType = + | "physical" + | "digital"; +export const EcommerceV1ProductProductCreationResourceProductType = + /*@__PURE__*/ S.String; + +export interface EcommerceV1ProductProductCreationResourceProduct { + /** Product ID. */ + id?: string; + /** Product name. */ + title?: string; + /** Product type. */ + type?: EcommerceV1ProductProductCreationResourceProductType; + /** Product status. */ + status?: string; + /** Price in the smallest currency unit (e.g. cents). */ + price?: number; + /** Currency the product is priced in (ISO 4217, lowercase). */ + currency_code?: string; +} +export const EcommerceV1ProductProductCreationResourceProduct = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + id: S.optional(S.String), + title: S.optional(S.String), + type: S.optional(EcommerceV1ProductProductCreationResourceProductType), + status: S.optional(S.String), + price: S.optional(S.Number), + currency_code: S.optional(S.String), + }), + ).annotate({ + identifier: "EcommerceV1ProductProductCreationResourceProduct", + }) as any as S.Schema; + +export interface EcommerceV1ProductProductCreationResource { + product?: EcommerceV1ProductProductCreationResourceProduct; + /** Admin UI deep-link to manage the product. */ + admin_url?: string; +} +export const EcommerceV1ProductProductCreationResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + product: S.optional(EcommerceV1ProductProductCreationResourceProduct), + admin_url: S.optional(S.String), + }), + ).annotate({ + identifier: "EcommerceV1ProductProductCreationResource", + }) as any as S.Schema; + +export interface CreateEcommercePhysicalProductV1Request { + /** The ID of the store to create the product in. */ + store_id: string; + /** The product name. */ + name: string; + /** Price in the smallest currency unit (e.g. cents). Must be positive. */ + price: number; + /** The product description. */ + description?: string | null; + /** ISO 4217 currency code. Defaults to the store's default currency when omitted. */ + currency?: string | null; +} +export const CreateEcommercePhysicalProductV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + store_id: S.String.pipe(T.Label()), + name: S.String, + price: S.Number, + description: S.optional(S.NullOr(S.String)), + currency: S.optional(S.NullOr(S.String)), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/ecommerce/v1/stores/{store_id}/products/physical", + code: 200, + }), + ), +).annotate({ + identifier: "CreateEcommercePhysicalProductV1Request", +}) as any as S.Schema; + +/** Sales channel type. Only "custom" channels can be created via the API. */ +export type CreateEcommerceStoreV1RequestSalesChannelType = "custom"; +export const CreateEcommerceStoreV1RequestSalesChannelType = + /*@__PURE__*/ S.String; + +export interface CreateEcommerceStoreV1RequestSalesChannel { + /** Sales channel type. Only "custom" channels can be created via the API. */ + type?: CreateEcommerceStoreV1RequestSalesChannelType | (string & {}); + /** External identifier for the sales channel. */ + external_id?: string | null; +} +export const CreateEcommerceStoreV1RequestSalesChannel = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + type: S.optional(CreateEcommerceStoreV1RequestSalesChannelType), + external_id: S.optional(S.NullOr(S.String)), + }), + ).annotate({ + identifier: "CreateEcommerceStoreV1RequestSalesChannel", + }) as any as S.Schema; + +export interface CreateEcommerceStoreV1Request { + name?: string; + /** ISO 3166-1 alpha-2 country code. */ + country_code?: string; + company_email?: string; + company_name?: string; + /** ISO 639-1 language code. */ + language?: string; + sales_channel?: CreateEcommerceStoreV1RequestSalesChannel; +} +export const CreateEcommerceStoreV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + name: S.optional(S.String), + country_code: S.optional(S.String), + company_email: S.optional(S.String), + company_name: S.optional(S.String), + language: S.optional(S.String), + sales_channel: S.optional(CreateEcommerceStoreV1RequestSalesChannel), + }).pipe( + T.Http({ method: "POST", uri: "/api/ecommerce/v1/stores", code: 200 }), + ), +).annotate({ + identifier: "CreateEcommerceStoreV1Request", +}) as any as S.Schema; + +export interface EcommerceV1StoreStoreCreationResourceStore { + /** Store ID */ + id?: string; + /** Store name */ + name?: string | null; + /** Company name */ + company_name?: string | null; + /** Identifier of the hPanel account that owns the store. */ + h_panel_id?: string; + /** Creation date */ + created_at?: string; + /** Default currency code (ISO 4217), in lowercase. */ + default_currency_code?: string; +} +export const EcommerceV1StoreStoreCreationResourceStore = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + id: S.optional(S.String), + name: S.optional(S.NullOr(S.String)), + company_name: S.optional(S.NullOr(S.String)), + h_panel_id: S.optional(S.String), + created_at: S.optional(S.String), + default_currency_code: S.optional(S.String), + }), + ).annotate({ + identifier: "EcommerceV1StoreStoreCreationResourceStore", + }) as any as S.Schema; + +/** Sales channel type */ +export type EcommerceV1StoreStoreCreationResourceSalesChannelType = + | "builder" + | "horizons" + | "tiktok" + | "custom" + | "quick-link" + | "wordpress"; +export const EcommerceV1StoreStoreCreationResourceSalesChannelType = + /*@__PURE__*/ S.String; + +export interface EcommerceV1StoreStoreCreationResourceSalesChannel { + /** Sales channel ID */ + id?: string; + /** Sales channel type */ + type?: EcommerceV1StoreStoreCreationResourceSalesChannelType; + /** External identifier for the sales channel */ + external_id?: string | null; +} +export const EcommerceV1StoreStoreCreationResourceSalesChannel = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + id: S.optional(S.String), + type: S.optional(EcommerceV1StoreStoreCreationResourceSalesChannelType), + external_id: S.optional(S.NullOr(S.String)), + }), + ).annotate({ + identifier: "EcommerceV1StoreStoreCreationResourceSalesChannel", + }) as any as S.Schema; + +export interface EcommerceV1StoreStoreCreationResource { + store?: EcommerceV1StoreStoreCreationResourceStore; + sales_channel?: EcommerceV1StoreStoreCreationResourceSalesChannel; +} +export const EcommerceV1StoreStoreCreationResource = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + store: S.optional(EcommerceV1StoreStoreCreationResourceStore), + sales_channel: S.optional( + EcommerceV1StoreStoreCreationResourceSalesChannel, + ), + }), +).annotate({ + identifier: "EcommerceV1StoreStoreCreationResource", +}) as any as S.Schema; + +export type CreateHorizonWebsiteV1RequestMessageItemType = "text"; +export const CreateHorizonWebsiteV1RequestMessageItemType = + /*@__PURE__*/ S.String; + +export interface CreateHorizonWebsiteV1RequestMessageItem { + type: CreateHorizonWebsiteV1RequestMessageItemType | (string & {}); + /** Detailed project specification. Include purpose, key features, user flows, data models, and design preferences. The specification should be detailed and comprehensive, covering all aspects of the project. */ + text: string; +} +export const CreateHorizonWebsiteV1RequestMessageItem = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + type: CreateHorizonWebsiteV1RequestMessageItemType, + text: S.String, + }), +).annotate({ + identifier: "CreateHorizonWebsiteV1RequestMessageItem", +}) as any as S.Schema; + +export type CreateHorizonWebsiteV1RequestMessageList = + Array; +export const CreateHorizonWebsiteV1RequestMessageList = /*@__PURE__*/ S.Array( + CreateHorizonWebsiteV1RequestMessageItem, +) as any as S.Schema; + +export interface CreateHorizonWebsiteV1Request { + message: CreateHorizonWebsiteV1RequestMessageList; +} +export const CreateHorizonWebsiteV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + message: CreateHorizonWebsiteV1RequestMessageList, + }).pipe( + T.Http({ method: "POST", uri: "/api/horizons/v1/websites", code: 200 }), + ), +).annotate({ + identifier: "CreateHorizonWebsiteV1Request", +}) as any as S.Schema; + +export interface HorizonsV1WebsitesCreatedWebsiteResource { + /** The website URL for the user to access their website in Hostinger Horizons interface */ + website_url: string; + /** The website ID */ + website_id: string; +} +export const HorizonsV1WebsitesCreatedWebsiteResource = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + website_url: S.String, + website_id: S.String, + }), +).annotate({ + identifier: "HorizonsV1WebsitesCreatedWebsiteResource", +}) as any as S.Schema; + +export interface CreateHostingAccountCronJobV1Request { + username: string; + /** Cron schedule expression (for example "0 2 * * *" runs daily at 02:00). */ + time: string; + /** Command to execute on the schedule. */ + command: string; +} +export const CreateHostingAccountCronJobV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + username: S.String.pipe(T.Label()), + time: S.String, + command: S.String, + }).pipe( + T.Http({ + method: "POST", + uri: "/api/hosting/v1/accounts/{username}/cron-jobs", + code: 200, + }), + ), +).annotate({ + identifier: "CreateHostingAccountCronJobV1Request", +}) as any as S.Schema; + +export interface HostingV1CronJobsCronJobResource { + /** Unique identifier of the cron job. Use it to delete the cron job or fetch its output. */ + uid?: string; + /** Username of the account that owns the cron job. */ + username?: string; + /** Cron schedule expression. */ + time?: string; + /** Command executed on the schedule. */ + command?: string; +} +export const HostingV1CronJobsCronJobResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + uid: S.optional(S.String), + username: S.optional(S.String), + time: S.optional(S.String), + command: S.optional(S.String), + }), +).annotate({ + identifier: "HostingV1CronJobsCronJobResource", +}) as any as S.Schema; + +export interface CreateHostingAccountDatabaseV1Request { + username: string; + /** Database name. If the account username prefix is omitted, it is added automatically. */ + name: string; + /** Database user. If the account username prefix is omitted, it is added automatically. */ + user: string; + /** Database user password. */ + password: string | Redacted.Redacted; + /** Website domain assigned to the database. */ + website_domain: string; +} +export const CreateHostingAccountDatabaseV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + username: S.String.pipe(T.Label()), + name: S.String, + user: S.String, + password: S.String.pipe(T.SensitiveValue({})), + website_domain: S.String, + }).pipe( + T.Http({ + method: "POST", + uri: "/api/hosting/v1/accounts/{username}/databases", + code: 200, + }), + ), +).annotate({ + identifier: "CreateHostingAccountDatabaseV1Request", +}) as any as S.Schema; + +export interface CreateHostingDatabaseRemoteConnectionV1Request { + username: string; + /** Full database name as returned by the list databases endpoint. */ + name: string; + /** Remote host to allow: an IPv4/IPv6 address, or "%" for any host. */ + ip: string; +} +export const CreateHostingDatabaseRemoteConnectionV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + username: S.String.pipe(T.Label()), + name: S.String.pipe(T.Label()), + ip: S.String, + }).pipe( + T.Http({ + method: "POST", + uri: "/api/hosting/v1/accounts/{username}/databases/{name}/remote-connections", + code: 200, + }), + ), + ).annotate({ + identifier: "CreateHostingDatabaseRemoteConnectionV1Request", + }) as any as S.Schema; + +export interface CreateHostingLoginLinksV1Request { + username: string; + /** WordPress installation (software) identifier */ + software: string; +} +export const CreateHostingLoginLinksV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + username: S.String.pipe(T.Label()), + software: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/hosting/v1/accounts/{username}/wordpress/{software}/login/links", + code: 200, + }), + ), +).annotate({ + identifier: "CreateHostingLoginLinksV1Request", +}) as any as S.Schema; + +export interface WordPressV1LoginLoginLinksResource { + /** Primary auto-login URL for the WordPress installation */ + login?: string | null; + /** Fallback auto-login URL using the temporary Hostinger domain */ + fallback?: string | null; + /** Default WordPress admin URL used when auto-login is unavailable */ + default?: string | null; +} +export const WordPressV1LoginLoginLinksResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + login: S.optional(S.NullOr(S.String)), + fallback: S.optional(S.NullOr(S.String)), + default: S.optional(S.NullOr(S.String)), + }), +).annotate({ + identifier: "WordPressV1LoginLoginLinksResource", +}) as any as S.Schema; + +export interface CreateHostingWebsiteParkedDomainV1Request { + username: string; + /** Domain name */ + domain: string; + /** Domain name or IP address to park on the selected website */ + parked_domain: string; +} +export const CreateHostingWebsiteParkedDomainV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + username: S.String.pipe(T.Label()), + domain: S.String.pipe(T.Label()), + parked_domain: S.String, + }).pipe( + T.Http({ + method: "POST", + uri: "/api/hosting/v1/accounts/{username}/websites/{domain}/parked-domains", + code: 200, + }), + ), + ).annotate({ + identifier: "CreateHostingWebsiteParkedDomainV1Request", + }) as any as S.Schema; + +export interface CreateHostingWebsiteRedirectV1Request { + username: string; + /** Domain name */ + domain: string; + /** Source URL on the selected website */ + from: string; + /** Destination URL or IP address */ + to: string; +} +export const CreateHostingWebsiteRedirectV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + username: S.String.pipe(T.Label()), + domain: S.String.pipe(T.Label()), + from: S.String, + to: S.String, + }).pipe( + T.Http({ + method: "POST", + uri: "/api/hosting/v1/accounts/{username}/websites/{domain}/redirects", + code: 200, + }), + ), +).annotate({ + identifier: "CreateHostingWebsiteRedirectV1Request", +}) as any as S.Schema; + +export interface HostingV1RedirectsRedirectResource { + /** Source URL */ + from?: string; + /** Destination URL */ + to?: string; +} +export const HostingV1RedirectsRedirectResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + from: S.optional(S.String), + to: S.optional(S.String), + }), +).annotate({ + identifier: "HostingV1RedirectsRedirectResource", +}) as any as S.Schema; + +export interface CreateHostingWebsiteSubdomainV1Request { + username: string; + /** Domain name */ + domain: string; + /** Subdomain prefix to create under the selected website */ + subdomain: string; + /** Directory name for the subdomain relative to the website root */ + directory?: string | null; + /** Use the website public directory as the subdomain root directory */ + is_using_public_directory?: boolean; +} +export const CreateHostingWebsiteSubdomainV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + username: S.String.pipe(T.Label()), + domain: S.String.pipe(T.Label()), + subdomain: S.String, + directory: S.optional(S.NullOr(S.String)), + is_using_public_directory: S.optional(S.Boolean), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/hosting/v1/accounts/{username}/websites/{domain}/subdomains", + code: 200, + }), + ), +).annotate({ + identifier: "CreateHostingWebsiteSubdomainV1Request", +}) as any as S.Schema; + +export interface CreateHostingWebsiteV1Request { + /** Domain name for the website. Cannot start with "www." */ + domain: string; + /** ID of the associated order */ + order_id: number; + /** Datacenter code. This parameter is required when creating the first website on a new hosting plan. */ + datacenter_code?: string | null; +} +export const CreateHostingWebsiteV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + domain: S.String, + order_id: S.Number, + datacenter_code: S.optional(S.NullOr(S.String)), + }).pipe( + T.Http({ method: "POST", uri: "/api/hosting/v1/websites", code: 200 }), + ), +).annotate({ + identifier: "CreateHostingWebsiteV1Request", +}) as any as S.Schema; + +export interface CreateMailAliasV1Request { + /** Mailbox resource ID */ + mailboxId: string; + /** Local part of the alias address (the part before the @). The domain is taken from the mailbox. Case-insensitive and stored lowercase; must start and end with a letter or digit; single dots, underscores and hyphens are allowed in between. */ + local_part: string; +} +export const CreateMailAliasV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + mailboxId: S.String.pipe(T.Label()), + local_part: S.String, + }).pipe( + T.Http({ + method: "POST", + uri: "/api/mail/v1/mailboxes/{mailboxId}/aliases", + code: 200, + }), + ), +).annotate({ + identifier: "CreateMailAliasV1Request", +}) as any as S.Schema; + +export interface MailV1AliasesAliasMailboxResource { + /** Mailbox resource ID */ + id?: string; + address?: string; +} +export const MailV1AliasesAliasMailboxResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + id: S.optional(S.String), + address: S.optional(S.String), + }), +).annotate({ + identifier: "MailV1AliasesAliasMailboxResource", +}) as any as S.Schema; + +export interface MailV1AliasesAliasResource { + /** Unique alias identifier */ + id?: string; + /** Email address of the alias */ + address?: string; + mailbox?: MailV1AliasesAliasMailboxResource; + /** Whether the alias is active and not suspended */ + is_active?: boolean; + created_at?: string | null; + updated_at?: string; +} +export const MailV1AliasesAliasResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + id: S.optional(S.String), + address: S.optional(S.String), + mailbox: S.optional(MailV1AliasesAliasMailboxResource), + is_active: S.optional(S.Boolean), + created_at: S.optional(S.NullOr(S.String)), + updated_at: S.optional(S.String), + }), +).annotate({ + identifier: "MailV1AliasesAliasResource", +}) as any as S.Schema; + +/** Required when `has_all_mailboxes` is false. Mailbox resource IDs of this order. */ +export type CreateMailAPITokenV1RequestScopeMailboxIdsList = Array; +export const CreateMailAPITokenV1RequestScopeMailboxIdsList = + /*@__PURE__*/ S.Array( + S.String, + ) as any as S.Schema; + +/** Mailbox scope this token can access */ +export interface CreateMailAPITokenV1RequestScope { + /** Grant access to all current and future mailboxes of the order */ + has_all_mailboxes: boolean; + /** Required when `has_all_mailboxes` is false. Mailbox resource IDs of this order. */ + mailbox_ids?: CreateMailAPITokenV1RequestScopeMailboxIdsList; +} +export const CreateMailAPITokenV1RequestScope = /*@__PURE__*/ S.suspend(() => + S.Struct({ + has_all_mailboxes: S.Boolean, + mailbox_ids: S.optional(CreateMailAPITokenV1RequestScopeMailboxIdsList), + }), +).annotate({ + identifier: "CreateMailAPITokenV1RequestScope", +}) as any as S.Schema; + +export interface CreateMailAPITokenV1Request { + /** Order resource ID */ + orderId: string; + /** Human-readable label for this token */ + name: string; + /** Mailbox scope this token can access */ + scope: CreateMailAPITokenV1RequestScope; +} +export const CreateMailAPITokenV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + orderId: S.String.pipe(T.Label()), + name: S.String, + scope: CreateMailAPITokenV1RequestScope, + }).pipe( + T.Http({ + method: "POST", + uri: "/api/mail/v1/orders/{orderId}/api-tokens", + code: 200, + }), + ), +).annotate({ + identifier: "CreateMailAPITokenV1Request", +}) as any as S.Schema; + +export type MailV1ApiTokensApiTokenMailboxResource = + MailV1AliasesAliasMailboxResource; +export const MailV1ApiTokensApiTokenMailboxResource = + MailV1AliasesAliasMailboxResource; + +/** Mailboxes this token grants access to. Empty when `has_all_mailboxes` is true. */ +export type MailV1ApiTokensApiTokenScopeResourceMailboxesList = + Array; +export const MailV1ApiTokensApiTokenScopeResourceMailboxesList = + /*@__PURE__*/ S.Array( + MailV1AliasesAliasMailboxResource, + ) as any as S.Schema; + +export interface MailV1ApiTokensApiTokenScopeResource { + /** Whether the token covers all current and future mailboxes of the order */ + has_all_mailboxes?: boolean; + /** Mailboxes this token grants access to. Empty when `has_all_mailboxes` is true. */ + mailboxes?: MailV1ApiTokensApiTokenScopeResourceMailboxesList; +} +export const MailV1ApiTokensApiTokenScopeResource = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + has_all_mailboxes: S.optional(S.Boolean), + mailboxes: S.optional(MailV1ApiTokensApiTokenScopeResourceMailboxesList), + }), +).annotate({ + identifier: "MailV1ApiTokensApiTokenScopeResource", +}) as any as S.Schema; + +export type MailV1ApiTokensApiTokenCreatedResourceType = "api_token" | "oauth"; +export const MailV1ApiTokensApiTokenCreatedResourceType = + /*@__PURE__*/ S.String; + +export interface MailV1ApiTokensApiTokenCreatedResource { + /** Unique API token identifier */ + id?: string; + /** Plaintext API token, returned only in this response. Grants access to the [Hostinger Email API](https://api.mail.hostinger.com/) for mailbox provisioning and management. */ + token?: string; + /** Human-readable label for this token */ + name?: string | null; + scope?: MailV1ApiTokensApiTokenScopeResource; + created_at?: string; + type?: MailV1ApiTokensApiTokenCreatedResourceType; +} +export const MailV1ApiTokensApiTokenCreatedResource = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + id: S.optional(S.String), + token: S.optional(S.String), + name: S.optional(S.NullOr(S.String)), + scope: S.optional(MailV1ApiTokensApiTokenScopeResource), + created_at: S.optional(S.String), + type: S.optional(MailV1ApiTokensApiTokenCreatedResourceType), + }), +).annotate({ + identifier: "MailV1ApiTokensApiTokenCreatedResource", +}) as any as S.Schema; + +export interface CreateMailAutoreplyV1Request { + /** Mailbox resource ID */ + mailboxId: string; + /** Subject of the automatic reply */ + subject: string; + /** Body of the automatic reply */ + body: string; + /** Sender display name used for the reply */ + display_name?: string | null; + /** When the autoreply becomes active. Defaults to now. */ + starts_at?: string | null; + /** When the autoreply stops. Omit for an indefinite autoreply. */ + ends_at?: string | null; +} +export const CreateMailAutoreplyV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + mailboxId: S.String.pipe(T.Label()), + subject: S.String, + body: S.String, + display_name: S.optional(S.NullOr(S.String)), + starts_at: S.optional(S.NullOr(S.String)), + ends_at: S.optional(S.NullOr(S.String)), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/mail/v1/mailboxes/{mailboxId}/autoreplies", + code: 200, + }), + ), +).annotate({ + identifier: "CreateMailAutoreplyV1Request", +}) as any as S.Schema; + +export type MailV1AutorepliesAutoreplyMailboxResource = + MailV1AliasesAliasMailboxResource; +export const MailV1AutorepliesAutoreplyMailboxResource = + MailV1AliasesAliasMailboxResource; + +export interface MailV1AutorepliesAutoreplyResource { + /** Unique autoreply identifier */ + id?: string; + mailbox?: MailV1AliasesAliasMailboxResource; + /** Subject of the automatic reply */ + subject?: string; + /** Body of the automatic reply */ + body?: string; + /** Sender display name used for the reply */ + display_name?: string | null; + /** When the autoreply becomes active */ + starts_at?: string; + /** When the autoreply stops */ + ends_at?: string | null; + created_at?: string; + updated_at?: string; +} +export const MailV1AutorepliesAutoreplyResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + id: S.optional(S.String), + mailbox: S.optional(MailV1AliasesAliasMailboxResource), + subject: S.optional(S.String), + body: S.optional(S.String), + display_name: S.optional(S.NullOr(S.String)), + starts_at: S.optional(S.String), + ends_at: S.optional(S.NullOr(S.String)), + created_at: S.optional(S.String), + updated_at: S.optional(S.String), + }), +).annotate({ + identifier: "MailV1AutorepliesAutoreplyResource", +}) as any as S.Schema; + +export interface CreateMailCatchAllV1Request { + /** Mailbox resource ID */ + mailboxId: string; +} +export const CreateMailCatchAllV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + mailboxId: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/mail/v1/mailboxes/{mailboxId}/catchalls", + code: 200, + }), + ), +).annotate({ + identifier: "CreateMailCatchAllV1Request", +}) as any as S.Schema; + +export type MailV1CatchallsCatchallMailboxResource = + MailV1AliasesAliasMailboxResource; +export const MailV1CatchallsCatchallMailboxResource = + MailV1AliasesAliasMailboxResource; + +export interface MailV1CatchallsCatchallResource { + /** Unique catch-all identifier */ + id?: string; + mailbox?: MailV1AliasesAliasMailboxResource; + /** Domain whose unrouted messages are caught */ + domain?: string; + /** Whether the catch-all is active */ + is_active?: boolean; + /** Whether the mailbox address has confirmed the catch-all */ + is_confirmed?: boolean; + created_at?: string; + updated_at?: string; +} +export const MailV1CatchallsCatchallResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + id: S.optional(S.String), + mailbox: S.optional(MailV1AliasesAliasMailboxResource), + domain: S.optional(S.String), + is_active: S.optional(S.Boolean), + is_confirmed: S.optional(S.Boolean), + created_at: S.optional(S.String), + updated_at: S.optional(S.String), + }), +).annotate({ + identifier: "MailV1CatchallsCatchallResource", +}) as any as S.Schema; + +export interface CreateMailForwarderV1Request { + /** Mailbox resource ID */ + mailboxId: string; + /** Email address the messages will be forwarded to */ + destination: string; + /** Whether to keep a copy of forwarded messages in the mailbox. Defaults to false. */ + is_keep_copy_enabled?: boolean; +} +export const CreateMailForwarderV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + mailboxId: S.String.pipe(T.Label()), + destination: S.String, + is_keep_copy_enabled: S.optional(S.Boolean), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/mail/v1/mailboxes/{mailboxId}/forwarders", + code: 200, + }), + ), +).annotate({ + identifier: "CreateMailForwarderV1Request", +}) as any as S.Schema; + +export type MailV1ForwardersForwarderMailboxResource = + MailV1AliasesAliasMailboxResource; +export const MailV1ForwardersForwarderMailboxResource = + MailV1AliasesAliasMailboxResource; + +export interface MailV1ForwardersForwarderResource { + /** Unique forwarder identifier */ + id?: string; + mailbox?: MailV1AliasesAliasMailboxResource; + /** Email address the messages are forwarded to */ + destination?: string; + /** Whether a copy of forwarded messages is kept in the mailbox */ + is_keep_copy_enabled?: boolean; + /** Whether the forwarder is active */ + is_active?: boolean; + /** Whether the destination address has confirmed the forwarding */ + is_confirmed?: boolean; + created_at?: string; + updated_at?: string; +} +export const MailV1ForwardersForwarderResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + id: S.optional(S.String), + mailbox: S.optional(MailV1AliasesAliasMailboxResource), + destination: S.optional(S.String), + is_keep_copy_enabled: S.optional(S.Boolean), + is_active: S.optional(S.Boolean), + is_confirmed: S.optional(S.Boolean), + created_at: S.optional(S.String), + updated_at: S.optional(S.String), + }), +).annotate({ + identifier: "MailV1ForwardersForwarderResource", +}) as any as S.Schema; + +export interface CreateMailMailboxV1Request { + /** Order resource ID */ + orderId: string; + /** Local part of the mailbox address (the part before the @). The domain is taken from the order. Must start and end with a letter or digit; single dots, underscores and hyphens are allowed in between. */ + local_part: string; + /** Mailbox password. Minimum 8 characters with uppercase, lowercase, number and special character. */ + password: string | Redacted.Redacted; +} +export const CreateMailMailboxV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + orderId: S.String.pipe(T.Label()), + local_part: S.String, + password: S.String.pipe(T.SensitiveValue({})), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/mail/v1/orders/{orderId}/mailboxes", + code: 200, + }), + ), +).annotate({ + identifier: "CreateMailMailboxV1Request", +}) as any as S.Schema; + +/** Mailbox status */ +export type MailV1MailboxesMailboxResourceStatus = "active" | "suspended"; +export const MailV1MailboxesMailboxResourceStatus = /*@__PURE__*/ S.String; + +export interface MailV1MailboxesMailboxProtocolsResource { + is_imap_enabled?: boolean; + is_pop3_enabled?: boolean; + is_smtp_in_enabled?: boolean; + is_smtp_out_enabled?: boolean; +} +export const MailV1MailboxesMailboxProtocolsResource = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + is_imap_enabled: S.optional(S.Boolean), + is_pop3_enabled: S.optional(S.Boolean), + is_smtp_in_enabled: S.optional(S.Boolean), + is_smtp_out_enabled: S.optional(S.Boolean), + }), +).annotate({ + identifier: "MailV1MailboxesMailboxProtocolsResource", +}) as any as S.Schema; + +export interface MailV1MailboxesMailboxCountsResource { + /** Number of attached forwarders */ + forwarders?: number; + /** Number of attached aliases */ + aliases?: number; + /** Number of attached auto-replies */ + autoreplies?: number; +} +export const MailV1MailboxesMailboxCountsResource = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + forwarders: S.optional(S.Number), + aliases: S.optional(S.Number), + autoreplies: S.optional(S.Number), + }), +).annotate({ + identifier: "MailV1MailboxesMailboxCountsResource", +}) as any as S.Schema; + +/** Periodically synced usage numbers (may lag behind live values) */ +export interface MailV1MailboxesMailboxUsageResource { + /** Storage used in kilobytes */ + storage_used?: number; + /** Storage quota in kilobytes */ + storage_quota?: number; + messages_used?: number; + messages_quota?: number; + /** When the usage numbers were last synced; null if never synced */ + synced_at?: string | null; +} +export const MailV1MailboxesMailboxUsageResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + storage_used: S.optional(S.Number), + storage_quota: S.optional(S.Number), + messages_used: S.optional(S.Number), + messages_quota: S.optional(S.Number), + synced_at: S.optional(S.NullOr(S.String)), + }), +).annotate({ + identifier: "MailV1MailboxesMailboxUsageResource", +}) as any as S.Schema; + +export interface MailV1MailboxesMailboxResource { + /** Mailbox resource ID */ + id?: string; + /** Email address of the mailbox */ + address?: string; + /** Mailbox status */ + status?: MailV1MailboxesMailboxResourceStatus; + /** Reason the mailbox was suspended */ + status_reason?: string | null; + protocols?: MailV1MailboxesMailboxProtocolsResource; + counts?: MailV1MailboxesMailboxCountsResource; + /** Whether the mailbox is the catch-all destination for its domain */ + is_catchall?: boolean; + usage?: MailV1MailboxesMailboxUsageResource; + created_at?: string; + updated_at?: string; +} +export const MailV1MailboxesMailboxResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + id: S.optional(S.String), + address: S.optional(S.String), + status: S.optional(MailV1MailboxesMailboxResourceStatus), + status_reason: S.optional(S.NullOr(S.String)), + protocols: S.optional(MailV1MailboxesMailboxProtocolsResource), + counts: S.optional(MailV1MailboxesMailboxCountsResource), + is_catchall: S.optional(S.Boolean), + usage: S.optional(MailV1MailboxesMailboxUsageResource), + created_at: S.optional(S.String), + updated_at: S.optional(S.String), + }), +).annotate({ + identifier: "MailV1MailboxesMailboxResource", +}) as any as S.Schema; + +export type CreateMailWebhookV1RequestEventsItem = "message.received"; +export const CreateMailWebhookV1RequestEventsItem = /*@__PURE__*/ S.String; + +/** Events that trigger this webhook */ +export type CreateMailWebhookV1RequestEventsList = Array< + CreateMailWebhookV1RequestEventsItem | (string & {}) +>; +export const CreateMailWebhookV1RequestEventsList = /*@__PURE__*/ S.Array( + CreateMailWebhookV1RequestEventsItem, +) as any as S.Schema; + +/** Initial status of the webhook */ +export type CreateMailWebhookV1RequestStatus = "active" | "disabled" | "paused"; +export const CreateMailWebhookV1RequestStatus = /*@__PURE__*/ S.String; + +export interface CreateMailWebhookV1Request { + /** Mailbox resource ID */ + mailboxId: string; + /** Human-readable name for this webhook */ + name: string; + /** Optional description of the webhook's purpose */ + description?: string | null; + /** Events that trigger this webhook */ + events: CreateMailWebhookV1RequestEventsList; + /** Initial status of the webhook */ + status?: CreateMailWebhookV1RequestStatus | (string & {}); + /** Publicly reachable URL that receives the webhook POST requests */ + url: string; +} +export const CreateMailWebhookV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + mailboxId: S.String.pipe(T.Label()), + name: S.String, + description: S.optional(S.NullOr(S.String)), + events: CreateMailWebhookV1RequestEventsList, + status: S.optional(CreateMailWebhookV1RequestStatus), + url: S.String, + }).pipe( + T.Http({ + method: "POST", + uri: "/api/mail/v1/mailboxes/{mailboxId}/webhooks", + code: 200, + }), + ), +).annotate({ + identifier: "CreateMailWebhookV1Request", +}) as any as S.Schema; + +export interface MailV1WebhooksWebhookMailboxResource { + id?: string; + address?: string; +} +export const MailV1WebhooksWebhookMailboxResource = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + id: S.optional(S.String), + address: S.optional(S.String), + }), +).annotate({ + identifier: "MailV1WebhooksWebhookMailboxResource", +}) as any as S.Schema; + +export type MailV1WebhooksWebhookCreatedResourceEventsItem = "message.received"; +export const MailV1WebhooksWebhookCreatedResourceEventsItem = + /*@__PURE__*/ S.String; + +/** Events that trigger this webhook */ +export type MailV1WebhooksWebhookCreatedResourceEventsList = + Array; +export const MailV1WebhooksWebhookCreatedResourceEventsList = + /*@__PURE__*/ S.Array( + MailV1WebhooksWebhookCreatedResourceEventsItem, + ) as any as S.Schema; + +/** Current status of the webhook */ +export type MailV1WebhooksWebhookCreatedResourceStatus = + | "active" + | "disabled" + | "paused"; +export const MailV1WebhooksWebhookCreatedResourceStatus = + /*@__PURE__*/ S.String; + +export interface MailV1WebhooksWebhookCreatedResource { + /** Unique webhook identifier */ + id?: string; + mailbox?: MailV1WebhooksWebhookMailboxResource; + /** Human-readable name for this webhook */ + name?: string; + /** Optional description of the webhook's purpose */ + description?: string | null; + /** Events that trigger this webhook */ + events?: MailV1WebhooksWebhookCreatedResourceEventsList; + /** Current status of the webhook */ + status?: MailV1WebhooksWebhookCreatedResourceStatus; + /** URL that receives webhook POST requests */ + url?: string; + /** One-time webhook secret, returned only on creation. Sent as `Authorization: Bearer ` with every delivery. */ + secret?: string | Redacted.Redacted; + created_at?: string; + updated_at?: string; +} +export const MailV1WebhooksWebhookCreatedResource = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + id: S.optional(S.String), + mailbox: S.optional(MailV1WebhooksWebhookMailboxResource), + name: S.optional(S.String), + description: S.optional(S.NullOr(S.String)), + events: S.optional(MailV1WebhooksWebhookCreatedResourceEventsList), + status: S.optional(MailV1WebhooksWebhookCreatedResourceStatus), + url: S.optional(S.String), + secret: S.optional(S.String.pipe(T.SensitiveValue({}))), + created_at: S.optional(S.String), + updated_at: S.optional(S.String), + }), +).annotate({ + identifier: "MailV1WebhooksWebhookCreatedResource", +}) as any as S.Schema; + +/** Immutable once the field exists */ +export type CreateReachAContactFieldV1RequestType = + | "text" + | "number" + | "date" + | "single_choice" + | "multi_choice"; +export const CreateReachAContactFieldV1RequestType = /*@__PURE__*/ S.String; + +/** Required for single_choice and multi_choice, ignored for the scalar types. Labels must be unique regardless of casing. */ +export type CreateReachAContactFieldV1RequestOptionsList = Array; +export const CreateReachAContactFieldV1RequestOptionsList = + /*@__PURE__*/ S.Array( + S.String, + ) as any as S.Schema; + +export interface CreateReachAContactFieldV1Request { + /** Profile uuid parameter */ + profileUuid: string; + /** Immutable once the field exists */ + type: CreateReachAContactFieldV1RequestType | (string & {}); + label: string; + /** Required for single_choice and multi_choice, ignored for the scalar types. Labels must be unique regardless of casing. */ + options?: CreateReachAContactFieldV1RequestOptionsList; +} +export const CreateReachAContactFieldV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + profileUuid: S.String.pipe(T.Label()), + type: CreateReachAContactFieldV1RequestType, + label: S.String, + options: S.optional(CreateReachAContactFieldV1RequestOptionsList), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/reach/v1/profiles/{profileUuid}/contacts/fields", + code: 200, + }), + ), +).annotate({ + identifier: "CreateReachAContactFieldV1Request", +}) as any as S.Schema; + +export type ReachV1ContactsFieldsContactFieldResourceType = + | "text" + | "number" + | "date" + | "single_choice" + | "multi_choice"; +export const ReachV1ContactsFieldsContactFieldResourceType = + /*@__PURE__*/ S.String; + +export interface ReachV1ContactsFieldsContactFieldOptionResource { + uuid?: string; + label?: string; + sort_order?: number; +} +export const ReachV1ContactsFieldsContactFieldOptionResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + uuid: S.optional(S.String), + label: S.optional(S.String), + sort_order: S.optional(S.Number), + }), + ).annotate({ + identifier: "ReachV1ContactsFieldsContactFieldOptionResource", + }) as any as S.Schema; + +/** Available choices. Always empty for the scalar field types. */ +export type ReachV1ContactsFieldsContactFieldResourceOptionsList = + Array; +export const ReachV1ContactsFieldsContactFieldResourceOptionsList = + /*@__PURE__*/ S.Array( + ReachV1ContactsFieldsContactFieldOptionResource, + ) as any as S.Schema; + +export interface ReachV1ContactsFieldsContactFieldResource { + uuid?: string; + type?: ReachV1ContactsFieldsContactFieldResourceType; + label?: string; + /** Derived from the label on creation and immutable afterwards */ + slug?: string; + /** Available choices. Always empty for the scalar field types. */ + options?: ReachV1ContactsFieldsContactFieldResourceOptionsList; + created_at?: string; +} +export const ReachV1ContactsFieldsContactFieldResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + uuid: S.optional(S.String), + type: S.optional(ReachV1ContactsFieldsContactFieldResourceType), + label: S.optional(S.String), + slug: S.optional(S.String), + options: S.optional(ReachV1ContactsFieldsContactFieldResourceOptionsList), + created_at: S.optional(S.String), + }), + ).annotate({ + identifier: "ReachV1ContactsFieldsContactFieldResource", + }) as any as S.Schema; + +export type CreateReachAProfileSegmentV1RequestConditionsItemOperator = + | "equals" + | "not_equals" + | "contains" + | "not_contains" + | "gte" + | "lte" + | "exists" + | "within_last_days" + | "not_within_last_days" + | "older_than_days" + | "processed" + | "not_processed" + | "delivered" + | "not_delivered" + | "dropped" + | "not_dropped" + | "bounced" + | "not_bounced" + | "soft_bounced" + | "not_soft_bounced" + | "opened" + | "not_opened" + | "clicked" + | "not_clicked" + | "unsubscribed" + | "not_unsubscribed"; +export const CreateReachAProfileSegmentV1RequestConditionsItemOperator = + /*@__PURE__*/ S.String; + +export interface CreateReachAProfileSegmentV1RequestConditionsItem { + /** A built-in contact attribute, or `cf:{fieldUuid}` to target a custom contact field. Custom fields are addressed by field UUID; their slug is not accepted. Built-in attributes: `email`, `note`, `domain`, `source`, `opt_in_method`, `subscription_status`, `subscribed_at`, `unsubscribed_at`, `created_at`, `tag`, `campaigns`, `processed`, `opened`, `clicked`, `delivered`, `bounced`, `soft_bounced`, `dropped`. Which operators are accepted depends on the attribute. */ + attribute: string; + operator: + | CreateReachAProfileSegmentV1RequestConditionsItemOperator + | (string & {}); + /** Always a string, including for numeric and date comparisons */ + value: string; +} +export const CreateReachAProfileSegmentV1RequestConditionsItem = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + attribute: S.String, + operator: CreateReachAProfileSegmentV1RequestConditionsItemOperator, + value: S.String, + }), + ).annotate({ + identifier: "CreateReachAProfileSegmentV1RequestConditionsItem", + }) as any as S.Schema; + +/** Conditions a contact must satisfy to fall into the segment */ +export type CreateReachAProfileSegmentV1RequestConditionsList = + Array; +export const CreateReachAProfileSegmentV1RequestConditionsList = + /*@__PURE__*/ S.Array( + CreateReachAProfileSegmentV1RequestConditionsItem, + ) as any as S.Schema; + +/** How to combine multiple conditions */ +export type CreateReachAProfileSegmentV1RequestLogic = "AND" | "OR"; +export const CreateReachAProfileSegmentV1RequestLogic = /*@__PURE__*/ S.String; + +export interface CreateReachAProfileSegmentV1Request { + /** Profile uuid parameter */ + profileUuid: string; + name: string; + /** Conditions a contact must satisfy to fall into the segment */ + conditions: CreateReachAProfileSegmentV1RequestConditionsList; + /** How to combine multiple conditions */ + logic: CreateReachAProfileSegmentV1RequestLogic | (string & {}); +} +export const CreateReachAProfileSegmentV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + profileUuid: S.String.pipe(T.Label()), + name: S.String, + conditions: CreateReachAProfileSegmentV1RequestConditionsList, + logic: CreateReachAProfileSegmentV1RequestLogic, + }).pipe( + T.Http({ + method: "POST", + uri: "/api/reach/v1/profiles/{profileUuid}/segmentation/segments", + code: 200, + }), + ), +).annotate({ + identifier: "CreateReachAProfileSegmentV1Request", +}) as any as S.Schema; + +export type ReachV1ContactsSegmentsSegmentResourceQueryList = Array; +export const ReachV1ContactsSegmentsSegmentResourceQueryList = + /*@__PURE__*/ S.Array( + S.Unknown, + ) as any as S.Schema; + +export interface ReachV1ContactsSegmentsSegmentResource { + uuid?: string; + name?: string; + query?: ReachV1ContactsSegmentsSegmentResourceQueryList; + created_at?: string; + updated_at?: string; +} +export const ReachV1ContactsSegmentsSegmentResource = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + uuid: S.optional(S.String), + name: S.optional(S.String), + query: S.optional(ReachV1ContactsSegmentsSegmentResourceQueryList), + created_at: S.optional(S.String), + updated_at: S.optional(S.String), + }), +).annotate({ + identifier: "ReachV1ContactsSegmentsSegmentResource", +}) as any as S.Schema; + +/** Existing tags to attach to the created contact */ +export type CreateReachNewContactsV1RequestTagUuidsList = Array; +export const CreateReachNewContactsV1RequestTagUuidsList = + /*@__PURE__*/ S.Array( + S.String, + ) as any as S.Schema; + +export interface CreateReachNewContactsV1Request { + /** Profile uuid parameter */ + profileUuid: string; + email: string; + name?: string | null; + surname?: string | null; + /** Phone number in E.164 format (leading "+" then 7-15 digits) */ + phone?: string | null; + note?: string | null; + /** Existing tags to attach to the created contact */ + tag_uuids?: CreateReachNewContactsV1RequestTagUuidsList; +} +export const CreateReachNewContactsV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + profileUuid: S.String.pipe(T.Label()), + email: S.String, + name: S.optional(S.NullOr(S.String)), + surname: S.optional(S.NullOr(S.String)), + phone: S.optional(S.NullOr(S.String)), + note: S.optional(S.NullOr(S.String)), + tag_uuids: S.optional(CreateReachNewContactsV1RequestTagUuidsList), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/reach/v1/profiles/{profileUuid}/contacts", + code: 200, + }), + ), +).annotate({ + identifier: "CreateReachNewContactsV1Request", +}) as any as S.Schema; + +export type CreateVPSFirewallRuleV1RequestProtocol = + | "TCP" + | "UDP" + | "ICMP" + | "GRE" + | "any" + | "ESP" + | "AH" + | "ICMPv6" + | "SSH" + | "HTTP" + | "HTTPS" + | "MySQL" + | "PostgreSQL"; +export const CreateVPSFirewallRuleV1RequestProtocol = /*@__PURE__*/ S.String; + +export type CreateVPSFirewallRuleV1RequestSource = "any" | "custom"; +export const CreateVPSFirewallRuleV1RequestSource = /*@__PURE__*/ S.String; + +export interface CreateVPSFirewallRuleV1Request { + /** Firewall ID */ + firewallId: number; + protocol: CreateVPSFirewallRuleV1RequestProtocol | (string & {}); + /** Port or port range, ex: 1024:2048 */ + port: string; + source: CreateVPSFirewallRuleV1RequestSource | (string & {}); + /** IP range, CIDR, single IP or `any` */ + source_detail: string; +} +export const CreateVPSFirewallRuleV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + firewallId: S.Number.pipe(T.Label()), + protocol: CreateVPSFirewallRuleV1RequestProtocol, + port: S.String, + source: CreateVPSFirewallRuleV1RequestSource, + source_detail: S.String, + }).pipe( + T.Http({ + method: "POST", + uri: "/api/vps/v1/firewall/{firewallId}/rules", + code: 200, + }), + ), +).annotate({ + identifier: "CreateVPSFirewallRuleV1Request", +}) as any as S.Schema; + +/** Firewall rule action */ +export type VPSV1FirewallFirewallRuleResourceAction = "accept" | "drop"; +export const VPSV1FirewallFirewallRuleResourceAction = /*@__PURE__*/ S.String; + +/** Firewall rule protocol */ +export type VPSV1FirewallFirewallRuleResourceProtocol = + | "TCP" + | "UDP" + | "ICMP" + | "GRE" + | "any" + | "ESP" + | "AH" + | "ICMPv6" + | "SSH" + | "HTTP" + | "HTTPS" + | "MySQL" + | "PostgreSQL"; +export const VPSV1FirewallFirewallRuleResourceProtocol = /*@__PURE__*/ S.String; + +export interface VPSV1FirewallFirewallRuleResource { + /** Firewall rule ID */ + id?: number; + /** Firewall rule action */ + action?: VPSV1FirewallFirewallRuleResourceAction; + /** Firewall rule protocol */ + protocol?: VPSV1FirewallFirewallRuleResourceProtocol; + /** Firewall rule destination port: single or port range */ + port?: string; + /** Firewall rule source. Can be `any` or `custom` */ + source?: string; + /** Firewall rule source detail. Can be `any` or IP address, CIDR or range */ + source_detail?: string; +} +export const VPSV1FirewallFirewallRuleResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + id: S.optional(S.Number), + action: S.optional(VPSV1FirewallFirewallRuleResourceAction), + protocol: S.optional(VPSV1FirewallFirewallRuleResourceProtocol), + port: S.optional(S.String), + source: S.optional(S.String), + source_detail: S.optional(S.String), + }), +).annotate({ + identifier: "VPSV1FirewallFirewallRuleResource", +}) as any as S.Schema; + +export interface CreateVPSNewFirewallV1Request { + name: string; +} +export const CreateVPSNewFirewallV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + name: S.String, + }).pipe(T.Http({ method: "POST", uri: "/api/vps/v1/firewall", code: 200 })), +).annotate({ + identifier: "CreateVPSNewFirewallV1Request", +}) as any as S.Schema; + +/** Array of [`VPS.V1.Firewall.FirewallRuleResource`](#model/vpsv1firewallfirewallruleresource) */ +export type VPSV1FirewallFirewallRuleCollection = + Array; +export const VPSV1FirewallFirewallRuleCollection = /*@__PURE__*/ S.Array( + VPSV1FirewallFirewallRuleResource, +) as any as S.Schema; + +export interface VPSV1FirewallFirewallResource { + /** Firewall ID */ + id?: number; + /** Firewall name */ + name?: string; + /** Is current firewall synced with VPS */ + is_synced?: boolean; + rules?: VPSV1FirewallFirewallRuleCollection; + created_at?: string; + updated_at?: string; +} +export const VPSV1FirewallFirewallResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + id: S.optional(S.Number), + name: S.optional(S.String), + is_synced: S.optional(S.Boolean), + rules: S.optional(VPSV1FirewallFirewallRuleCollection), + created_at: S.optional(S.String), + updated_at: S.optional(S.String), + }), +).annotate({ + identifier: "VPSV1FirewallFirewallResource", +}) as any as S.Schema; + +export interface CreateVPSNewProjectV1Request { + /** Virtual Machine ID */ + virtualMachineId: number; + /** Docker Compose project name using alphanumeric characters, dashes, and underscores only */ + project_name: string; + /** URL pointing to docker-compose.yaml file, Github repository or raw YAML content of the compose file */ + content: string; + /** Project environment variables */ + environment?: string | null; +} +export const CreateVPSNewProjectV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + virtualMachineId: S.Number.pipe(T.Label()), + project_name: S.String, + content: S.String, + environment: S.optional(S.NullOr(S.String)), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/vps/v1/virtual-machines/{virtualMachineId}/docker", + code: 200, + }), + ), +).annotate({ + identifier: "CreateVPSNewProjectV1Request", +}) as any as S.Schema; + +export interface CreateVPSPTRRecordV1Request { + /** Virtual Machine ID */ + virtualMachineId: number; + /** IP Address ID */ + ipAddressId: number; + /** Pointer record domain */ + domain: string; +} +export const CreateVPSPTRRecordV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + virtualMachineId: S.Number.pipe(T.Label()), + ipAddressId: S.Number.pipe(T.Label()), + domain: S.String, + }).pipe( + T.Http({ + method: "POST", + uri: "/api/vps/v1/virtual-machines/{virtualMachineId}/ptr/{ipAddressId}", + code: 200, + }), + ), +).annotate({ + identifier: "CreateVPSPTRRecordV1Request", +}) as any as S.Schema; + +export interface CreateVPSPublicKeyV1Request { + name: string; + key: string; +} +export const CreateVPSPublicKeyV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + name: S.String, + key: S.String, + }).pipe( + T.Http({ method: "POST", uri: "/api/vps/v1/public-keys", code: 200 }), + ), +).annotate({ + identifier: "CreateVPSPublicKeyV1Request", +}) as any as S.Schema; + +export interface VPSV1PublicKeyPublicKeyResource { + /** Public key ID */ + id?: number; + /** Public key name */ + name?: string; + /** Public key content */ + key?: string; +} +export const VPSV1PublicKeyPublicKeyResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + id: S.optional(S.Number), + name: S.optional(S.String), + key: S.optional(S.String), + }), +).annotate({ + identifier: "VPSV1PublicKeyPublicKeyResource", +}) as any as S.Schema; + +export interface CreateVPSSnapshotV1Request { + /** Virtual Machine ID */ + virtualMachineId: number; +} +export const CreateVPSSnapshotV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + virtualMachineId: S.Number.pipe(T.Label()), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/vps/v1/virtual-machines/{virtualMachineId}/snapshot", + code: 200, + }), + ), +).annotate({ + identifier: "CreateVPSSnapshotV1Request", +}) as any as S.Schema; + +export interface DeactivateHostingWordPressPluginV1Request { + username: string; + /** WordPress installation (software) identifier */ + software: string; + /** Slug of the installed plugin to deactivate. */ + plugin: string; +} +export const DeactivateHostingWordPressPluginV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + username: S.String.pipe(T.Label()), + software: S.String.pipe(T.Label()), + plugin: S.String, + }).pipe( + T.Http({ + method: "POST", + uri: "/api/hosting/v1/accounts/{username}/wordpress/{software}/plugins/deactivate", + code: 200, + }), + ), + ).annotate({ + identifier: "DeactivateHostingWordPressPluginV1Request", + }) as any as S.Schema; + +export interface DeactivateVPSFirewallV1Request { + /** Firewall ID */ + firewallId: number; + /** Virtual Machine ID */ + virtualMachineId: number; +} +export const DeactivateVPSFirewallV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + firewallId: S.Number.pipe(T.Label()), + virtualMachineId: S.Number.pipe(T.Label()), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/vps/v1/firewall/{firewallId}/deactivate/{virtualMachineId}", + code: 200, + }), + ), +).annotate({ + identifier: "DeactivateVPSFirewallV1Request", +}) as any as S.Schema; + +export interface DeleteAgencyHostingWebsiteCronJobV1Request { + /** Agency Plan website UID */ + website_uid: string; + /** Unique identifier of the cron job as returned by the list cron jobs endpoint. */ + uuid: string; +} +export const DeleteAgencyHostingWebsiteCronJobV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + website_uid: S.String.pipe(T.Label()), + uuid: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "DELETE", + uri: "/api/agency-hosting/v1/websites/{website_uid}/cron-jobs/{uuid}", + code: 200, + }), + ), + ).annotate({ + identifier: "DeleteAgencyHostingWebsiteCronJobV1Request", + }) as any as S.Schema; + +export interface DeleteAgencyHostingWebsiteDatabaseUserV1Request { + /** Agency Plan website UID */ + website_uid: string; + /** Full database name as returned by the list databases endpoint. */ + database_name: string; + /** Database username as returned by the list databases endpoint. */ + database_user_name: string; +} +export const DeleteAgencyHostingWebsiteDatabaseUserV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + website_uid: S.String.pipe(T.Label()), + database_name: S.String.pipe(T.Label()), + database_user_name: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "DELETE", + uri: "/api/agency-hosting/v1/websites/{website_uid}/databases/{database_name}/users/{database_user_name}", + code: 200, + }), + ), + ).annotate({ + identifier: "DeleteAgencyHostingWebsiteDatabaseUserV1Request", + }) as any as S.Schema; + +export interface DeleteAgencyHostingWebsiteDatabaseV1Request { + /** Agency Plan website UID */ + website_uid: string; + /** Full database name as returned by the list databases endpoint. */ + database_name: string; +} +export const DeleteAgencyHostingWebsiteDatabaseV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + website_uid: S.String.pipe(T.Label()), + database_name: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "DELETE", + uri: "/api/agency-hosting/v1/websites/{website_uid}/databases/{database_name}", + code: 200, + }), + ), + ).annotate({ + identifier: "DeleteAgencyHostingWebsiteDatabaseV1Request", + }) as any as S.Schema; + +export interface DeleteAgencyHostingWebsiteV1Request { + /** Agency Plan website UID */ + website_uid: string; +} +export const DeleteAgencyHostingWebsiteV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + website_uid: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "DELETE", + uri: "/api/agency-hosting/v1/websites/{website_uid}", + code: 200, + }), + ), +).annotate({ + identifier: "DeleteAgencyHostingWebsiteV1Request", +}) as any as S.Schema; + +export interface DeleteBillingPaymentMethodV1Request { + /** Payment method ID */ + paymentMethodId: number; +} +export const DeleteBillingPaymentMethodV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + paymentMethodId: S.Number.pipe(T.Label()), + }).pipe( + T.Http({ + method: "DELETE", + uri: "/api/billing/v1/payment-methods/{paymentMethodId}", + code: 200, + }), + ), +).annotate({ + identifier: "DeleteBillingPaymentMethodV1Request", +}) as any as S.Schema; + +/** Type of the record */ +export type DeleteDNSDNSRecordsV1RequestFiltersItemType = + | "A" + | "AAAA" + | "CNAME" + | "ALIAS" + | "MX" + | "TXT" + | "NS" + | "SOA" + | "SRV" + | "CAA"; +export const DeleteDNSDNSRecordsV1RequestFiltersItemType = + /*@__PURE__*/ S.String; + +export interface DeleteDNSDNSRecordsV1RequestFiltersItem { + /** Name of the record */ + name: string; + /** Type of the record */ + type: DeleteDNSDNSRecordsV1RequestFiltersItemType | (string & {}); +} +export const DeleteDNSDNSRecordsV1RequestFiltersItem = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + name: S.String, + type: DeleteDNSDNSRecordsV1RequestFiltersItemType, + }), +).annotate({ + identifier: "DeleteDNSDNSRecordsV1RequestFiltersItem", +}) as any as S.Schema; + +/** Filter records for deletion */ +export type DeleteDNSDNSRecordsV1RequestFiltersList = + Array; +export const DeleteDNSDNSRecordsV1RequestFiltersList = /*@__PURE__*/ S.Array( + DeleteDNSDNSRecordsV1RequestFiltersItem, +) as any as S.Schema; + +export interface DeleteDNSDNSRecordsV1Request { + /** Domain name */ + domain: string; + /** Filter records for deletion */ + filters: DeleteDNSDNSRecordsV1RequestFiltersList; +} +export const DeleteDNSDNSRecordsV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + domain: S.String.pipe(T.Label()), + filters: DeleteDNSDNSRecordsV1RequestFiltersList, + }).pipe( + T.Http({ method: "DELETE", uri: "/api/dns/v1/zones/{domain}", code: 200 }), + ), +).annotate({ + identifier: "DeleteDNSDNSRecordsV1Request", +}) as any as S.Schema; + +export interface DeleteDomainDomainForwardingV1Request { + /** Domain name */ + domain: string; +} +export const DeleteDomainDomainForwardingV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + domain: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "DELETE", + uri: "/api/domains/v1/forwarding/{domain}", + code: 200, + }), + ), +).annotate({ + identifier: "DeleteDomainDomainForwardingV1Request", +}) as any as S.Schema; + +export interface DeleteDomainWHOISProfileV1Request { + /** WHOIS ID */ + whoisId: number; +} +export const DeleteDomainWHOISProfileV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + whoisId: S.Number.pipe(T.Label()), + }).pipe( + T.Http({ + method: "DELETE", + uri: "/api/domains/v1/whois/{whoisId}", + code: 200, + }), + ), +).annotate({ + identifier: "DeleteDomainWHOISProfileV1Request", +}) as any as S.Schema; + +export interface DeleteEcommerceAProductV1Request { + /** The ID of the store that owns the product. */ + store_id: string; + /** The ID of the product to delete. */ + product_id: string; +} +export const DeleteEcommerceAProductV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + store_id: S.String.pipe(T.Label()), + product_id: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "DELETE", + uri: "/api/ecommerce/v1/stores/{store_id}/products/{product_id}", + code: 200, + }), + ), +).annotate({ + identifier: "DeleteEcommerceAProductV1Request", +}) as any as S.Schema; + +export interface EcommerceV1ProductProductDeletedResourceData { + /** The ID of the product. */ + id?: string; + /** True when the product was deleted. */ + is_deleted?: boolean; + /** True when the product was archived instead of deleted (a subscription product with active subscribers). */ + is_archived?: boolean; +} +export const EcommerceV1ProductProductDeletedResourceData = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + id: S.optional(S.String), + is_deleted: S.optional(S.Boolean), + is_archived: S.optional(S.Boolean), + }), + ).annotate({ + identifier: "EcommerceV1ProductProductDeletedResourceData", + }) as any as S.Schema; + +export interface EcommerceV1ProductProductDeletedResource { + data?: EcommerceV1ProductProductDeletedResourceData; +} +export const EcommerceV1ProductProductDeletedResource = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + data: S.optional(EcommerceV1ProductProductDeletedResourceData), + }), +).annotate({ + identifier: "EcommerceV1ProductProductDeletedResource", +}) as any as S.Schema; + +export interface DeleteEcommerceAProductVariantV1Request { + /** The ID of the store that owns the product. */ + store_id: string; + /** The ID of the product that owns the variant. */ + product_id: string; + /** The ID of the variant to delete. */ + variant_id: string; +} +export const DeleteEcommerceAProductVariantV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + store_id: S.String.pipe(T.Label()), + product_id: S.String.pipe(T.Label()), + variant_id: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "DELETE", + uri: "/api/ecommerce/v1/stores/{store_id}/products/{product_id}/variants/{variant_id}", + code: 200, + }), + ), +).annotate({ + identifier: "DeleteEcommerceAProductVariantV1Request", +}) as any as S.Schema; + +export interface EcommerceV1VariantVariantDeletedResourceData { + /** The ID of the variant. */ + id?: string; + /** True when the variant was deleted. */ + is_deleted?: boolean; +} +export const EcommerceV1VariantVariantDeletedResourceData = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + id: S.optional(S.String), + is_deleted: S.optional(S.Boolean), + }), + ).annotate({ + identifier: "EcommerceV1VariantVariantDeletedResourceData", + }) as any as S.Schema; + +export interface EcommerceV1VariantVariantDeletedResource { + data?: EcommerceV1VariantVariantDeletedResourceData; +} +export const EcommerceV1VariantVariantDeletedResource = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + data: S.optional(EcommerceV1VariantVariantDeletedResourceData), + }), +).annotate({ + identifier: "EcommerceV1VariantVariantDeletedResource", +}) as any as S.Schema; + +export interface DeleteEcommerceStoreV1Request { + /** The ID of the store to delete. */ + store_id: string; +} +export const DeleteEcommerceStoreV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + store_id: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "DELETE", + uri: "/api/ecommerce/v1/stores/{store_id}", + code: 200, + }), + ), +).annotate({ + identifier: "DeleteEcommerceStoreV1Request", +}) as any as S.Schema; + +export interface EcommerceV1StoreStoreDeleteResource { + /** The ID of the deleted store. */ + id?: string; + /** Always true when the store was soft-deleted. */ + is_deleted?: boolean; +} +export const EcommerceV1StoreStoreDeleteResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + id: S.optional(S.String), + is_deleted: S.optional(S.Boolean), + }), +).annotate({ + identifier: "EcommerceV1StoreStoreDeleteResource", +}) as any as S.Schema; + +export interface DeleteHostingAccountCronJobV1Request { + username: string; + /** Unique identifier of the cron job as returned by the list cron jobs endpoint. */ + uid: string; +} +export const DeleteHostingAccountCronJobV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + username: S.String.pipe(T.Label()), + uid: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "DELETE", + uri: "/api/hosting/v1/accounts/{username}/cron-jobs/{uid}", + code: 200, + }), + ), +).annotate({ + identifier: "DeleteHostingAccountCronJobV1Request", +}) as any as S.Schema; + +export interface DeleteHostingAccountDatabaseV1Request { + username: string; + /** Full database name as returned by the list databases endpoint. */ + name: string; +} +export const DeleteHostingAccountDatabaseV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + username: S.String.pipe(T.Label()), + name: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "DELETE", + uri: "/api/hosting/v1/accounts/{username}/databases/{name}", + code: 200, + }), + ), +).annotate({ + identifier: "DeleteHostingAccountDatabaseV1Request", +}) as any as S.Schema; + +export interface DeleteHostingDatabaseRemoteConnectionV1Request { + username: string; + /** Full database name as returned by the list databases endpoint. */ + name: string; + /** Remote host to revoke: the IPv4/IPv6 address, or "%", exactly as returned by the list remote connections endpoint. */ + ip: string; +} +export const DeleteHostingDatabaseRemoteConnectionV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + username: S.String.pipe(T.Label()), + name: S.String.pipe(T.Label()), + ip: S.String.pipe(T.Query()), + }).pipe( + T.Http({ + method: "DELETE", + uri: "/api/hosting/v1/accounts/{username}/databases/{name}/remote-connections", + code: 200, + }), + ), + ).annotate({ + identifier: "DeleteHostingDatabaseRemoteConnectionV1Request", + }) as any as S.Schema; + +export interface DeleteHostingWebsiteParkedDomainV1Request { + username: string; + /** Domain name */ + domain: string; + parkedDomain: string; +} +export const DeleteHostingWebsiteParkedDomainV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + username: S.String.pipe(T.Label()), + domain: S.String.pipe(T.Label()), + parkedDomain: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "DELETE", + uri: "/api/hosting/v1/accounts/{username}/websites/{domain}/parked-domains/{parkedDomain}", + code: 200, + }), + ), + ).annotate({ + identifier: "DeleteHostingWebsiteParkedDomainV1Request", + }) as any as S.Schema; + +export interface DeleteHostingWebsiteRedirectV1Request { + username: string; + /** Domain name */ + domain: string; + /** Source URL returned by the list redirects endpoint. */ + from: string; +} +export const DeleteHostingWebsiteRedirectV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + username: S.String.pipe(T.Label()), + domain: S.String.pipe(T.Label()), + from: S.String.pipe(T.Query()), + }).pipe( + T.Http({ + method: "DELETE", + uri: "/api/hosting/v1/accounts/{username}/websites/{domain}/redirects", + code: 200, + }), + ), +).annotate({ + identifier: "DeleteHostingWebsiteRedirectV1Request", +}) as any as S.Schema; + +export interface DeleteHostingWebsiteSubdomainV1Request { + username: string; + /** Domain name */ + domain: string; + subdomain: string; +} +export const DeleteHostingWebsiteSubdomainV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + username: S.String.pipe(T.Label()), + domain: S.String.pipe(T.Label()), + subdomain: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "DELETE", + uri: "/api/hosting/v1/accounts/{username}/websites/{domain}/subdomains/{subdomain}", + code: 200, + }), + ), +).annotate({ + identifier: "DeleteHostingWebsiteSubdomainV1Request", +}) as any as S.Schema; + +export interface DeleteHostingWebsiteV1Request { + /** Domain name */ + domain: string; +} +export const DeleteHostingWebsiteV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + domain: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "DELETE", + uri: "/api/hosting/v1/websites/{domain}", + code: 200, + }), + ), +).annotate({ + identifier: "DeleteHostingWebsiteV1Request", +}) as any as S.Schema; + +export interface DeleteHostingWordPressInstallationV1Request { + username: string; + /** WordPress installation (software) identifier */ + software: string; + /** Delete installation files from disk. */ + delete_files?: boolean; + /** Delete the installation database. */ + delete_database?: boolean; +} +export const DeleteHostingWordPressInstallationV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + username: S.String.pipe(T.Label()), + software: S.String.pipe(T.Label()), + delete_files: S.optional(S.Boolean), + delete_database: S.optional(S.Boolean), + }).pipe( + T.Http({ + method: "DELETE", + uri: "/api/hosting/v1/accounts/{username}/wordpress/{software}", + code: 200, + }), + ), + ).annotate({ + identifier: "DeleteHostingWordPressInstallationV1Request", + }) as any as S.Schema; + +export interface DeleteMailAliasV1Request { + /** Alias resource ID */ + aliasId: string; +} +export const DeleteMailAliasV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + aliasId: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "DELETE", + uri: "/api/mail/v1/aliases/{aliasId}", + code: 200, + }), + ), +).annotate({ + identifier: "DeleteMailAliasV1Request", +}) as any as S.Schema; + +export interface DeleteMailAutoreplyV1Request { + /** Autoreply resource ID */ + autoreplyId: string; +} +export const DeleteMailAutoreplyV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + autoreplyId: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "DELETE", + uri: "/api/mail/v1/autoreplies/{autoreplyId}", + code: 200, + }), + ), +).annotate({ + identifier: "DeleteMailAutoreplyV1Request", +}) as any as S.Schema; + +export interface DeleteMailCatchAllV1Request { + /** Catch-all resource ID */ + catchallId: string; +} +export const DeleteMailCatchAllV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + catchallId: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "DELETE", + uri: "/api/mail/v1/catchalls/{catchallId}", + code: 200, + }), + ), +).annotate({ + identifier: "DeleteMailCatchAllV1Request", +}) as any as S.Schema; + +export interface DeleteMailForwarderV1Request { + /** Forwarder resource ID */ + forwarderId: string; +} +export const DeleteMailForwarderV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + forwarderId: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "DELETE", + uri: "/api/mail/v1/forwarders/{forwarderId}", + code: 200, + }), + ), +).annotate({ + identifier: "DeleteMailForwarderV1Request", +}) as any as S.Schema; + +export interface DeleteMailMailboxV1Request { + /** Mailbox resource ID */ + mailboxId: string; +} +export const DeleteMailMailboxV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + mailboxId: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "DELETE", + uri: "/api/mail/v1/mailboxes/{mailboxId}", + code: 200, + }), + ), +).annotate({ + identifier: "DeleteMailMailboxV1Request", +}) as any as S.Schema; + +export interface DeleteMailWebhookV1Request { + /** Webhook ID (returned when the webhook was created) */ + webhookId: string; +} +export const DeleteMailWebhookV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + webhookId: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "DELETE", + uri: "/api/mail/v1/webhooks/{webhookId}", + code: 200, + }), + ), +).annotate({ + identifier: "DeleteMailWebhookV1Request", +}) as any as S.Schema; + +export interface DeleteReachAContactFieldV1Request { + /** Profile uuid parameter */ + profileUuid: string; + /** Contact field uuid parameter */ + fieldUuid: string; +} +export const DeleteReachAContactFieldV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + profileUuid: S.String.pipe(T.Label()), + fieldUuid: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "DELETE", + uri: "/api/reach/v1/profiles/{profileUuid}/contacts/fields/{fieldUuid}", + code: 200, + }), + ), +).annotate({ + identifier: "DeleteReachAContactFieldV1Request", +}) as any as S.Schema; + +export interface DeleteReachAProfileContactV1Request { + /** Profile uuid parameter */ + profileUuid: string; + /** Contact uuid parameter */ + contactUuid: string; +} +export const DeleteReachAProfileContactV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + profileUuid: S.String.pipe(T.Label()), + contactUuid: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "DELETE", + uri: "/api/reach/v1/profiles/{profileUuid}/contacts/{contactUuid}", + code: 200, + }), + ), +).annotate({ + identifier: "DeleteReachAProfileContactV1Request", +}) as any as S.Schema; + +export interface DeleteReachAProfileSegmentV1Request { + /** Profile uuid parameter */ + profileUuid: string; + /** Segment uuid parameter */ + segmentUuid: string; +} +export const DeleteReachAProfileSegmentV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + profileUuid: S.String.pipe(T.Label()), + segmentUuid: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "DELETE", + uri: "/api/reach/v1/profiles/{profileUuid}/segmentation/segments/{segmentUuid}", + code: 200, + }), + ), +).annotate({ + identifier: "DeleteReachAProfileSegmentV1Request", +}) as any as S.Schema; + +export interface DeleteReachATagV1Request { + /** Profile uuid parameter */ + profileUuid: string; + /** Tag uuid parameter */ + tagUuid: string; +} +export const DeleteReachATagV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + profileUuid: S.String.pipe(T.Label()), + tagUuid: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "DELETE", + uri: "/api/reach/v1/profiles/{profileUuid}/tags/{tagUuid}", + code: 200, + }), + ), +).annotate({ + identifier: "DeleteReachATagV1Request", +}) as any as S.Schema; + +export interface DeleteReachFormV1Request { + /** Profile uuid parameter */ + profileUuid: string; + /** Form uuid parameter */ + formUuid: string; +} +export const DeleteReachFormV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + profileUuid: S.String.pipe(T.Label()), + formUuid: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "DELETE", + uri: "/api/reach/v1/profiles/{profileUuid}/forms/{formUuid}", + code: 200, + }), + ), +).annotate({ + identifier: "DeleteReachFormV1Request", +}) as any as S.Schema; + +export interface DeleteVPSFirewallRuleV1Request { + /** Firewall ID */ + firewallId: number; + /** Firewall Rule ID */ + ruleId: number; +} +export const DeleteVPSFirewallRuleV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + firewallId: S.Number.pipe(T.Label()), + ruleId: S.Number.pipe(T.Label()), + }).pipe( + T.Http({ + method: "DELETE", + uri: "/api/vps/v1/firewall/{firewallId}/rules/{ruleId}", + code: 200, + }), + ), +).annotate({ + identifier: "DeleteVPSFirewallRuleV1Request", +}) as any as S.Schema; + +export interface DeleteVPSFirewallV1Request { + /** Firewall ID */ + firewallId: number; +} +export const DeleteVPSFirewallV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + firewallId: S.Number.pipe(T.Label()), + }).pipe( + T.Http({ + method: "DELETE", + uri: "/api/vps/v1/firewall/{firewallId}", + code: 200, + }), + ), +).annotate({ + identifier: "DeleteVPSFirewallV1Request", +}) as any as S.Schema; + +export interface DeleteVPSProjectV1Request { + /** Virtual Machine ID */ + virtualMachineId: number; + /** Docker Compose project name using alphanumeric characters, dashes, and underscores only */ + projectName: string; +} +export const DeleteVPSProjectV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + virtualMachineId: S.Number.pipe(T.Label()), + projectName: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "DELETE", + uri: "/api/vps/v1/virtual-machines/{virtualMachineId}/docker/{projectName}/down", + code: 200, + }), + ), +).annotate({ + identifier: "DeleteVPSProjectV1Request", +}) as any as S.Schema; + +export interface DeleteVPSPTRRecordV1Request { + /** Virtual Machine ID */ + virtualMachineId: number; + /** IP Address ID */ + ipAddressId: number; +} +export const DeleteVPSPTRRecordV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + virtualMachineId: S.Number.pipe(T.Label()), + ipAddressId: S.Number.pipe(T.Label()), + }).pipe( + T.Http({ + method: "DELETE", + uri: "/api/vps/v1/virtual-machines/{virtualMachineId}/ptr/{ipAddressId}", + code: 200, + }), + ), +).annotate({ + identifier: "DeleteVPSPTRRecordV1Request", +}) as any as S.Schema; + +export interface DeleteVPSPublicKeyV1Request { + /** Public Key ID */ + publicKeyId: number; +} +export const DeleteVPSPublicKeyV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + publicKeyId: S.Number.pipe(T.Label()), + }).pipe( + T.Http({ + method: "DELETE", + uri: "/api/vps/v1/public-keys/{publicKeyId}", + code: 200, + }), + ), +).annotate({ + identifier: "DeleteVPSPublicKeyV1Request", +}) as any as S.Schema; + +export interface DeleteVPSSnapshotV1Request { + /** Virtual Machine ID */ + virtualMachineId: number; +} +export const DeleteVPSSnapshotV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + virtualMachineId: S.Number.pipe(T.Label()), + }).pipe( + T.Http({ + method: "DELETE", + uri: "/api/vps/v1/virtual-machines/{virtualMachineId}/snapshot", + code: 200, + }), + ), +).annotate({ + identifier: "DeleteVPSSnapshotV1Request", +}) as any as S.Schema; + +export interface DeployHostingWordPressPluginV1Request { + username: string; + /** Domain name */ + domain: string; + /** Slug of the plugin */ + slug: string; + /** Relative path to the plugin directory from wp-content/plugins */ + plugin_path: string; +} +export const DeployHostingWordPressPluginV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + username: S.String.pipe(T.Label()), + domain: S.String.pipe(T.Label()), + slug: S.String, + plugin_path: S.String, + }).pipe( + T.Http({ + method: "POST", + uri: "/api/hosting/v1/accounts/{username}/websites/{domain}/wordpress/plugins/deploy", + code: 200, + }), + ), +).annotate({ + identifier: "DeployHostingWordPressPluginV1Request", +}) as any as S.Schema; + +export interface DeployHostingWordPressThemeV1Request { + username: string; + /** Domain name */ + domain: string; + /** Slug of the theme */ + slug: string; + /** Relative path to the theme directory from wp-content/themes */ + theme_path: string; + /** Whether to activate the theme after deployment */ + is_activated?: boolean | null; +} +export const DeployHostingWordPressThemeV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + username: S.String.pipe(T.Label()), + domain: S.String.pipe(T.Label()), + slug: S.String, + theme_path: S.String, + is_activated: S.optional(S.NullOr(S.Boolean)), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/hosting/v1/accounts/{username}/websites/{domain}/wordpress/themes/deploy", + code: 200, + }), + ), +).annotate({ + identifier: "DeployHostingWordPressThemeV1Request", +}) as any as S.Schema; + +export interface DisableBillingAutoRenewalV1Request { + /** Subscription ID */ + subscriptionId: string; +} +export const DisableBillingAutoRenewalV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + subscriptionId: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "DELETE", + uri: "/api/billing/v1/subscriptions/{subscriptionId}/auto-renewal/disable", + code: 200, + }), + ), +).annotate({ + identifier: "DisableBillingAutoRenewalV1Request", +}) as any as S.Schema; + +export interface DisableDomainDomainLockV1Request { + /** Domain name */ + domain: string; +} +export const DisableDomainDomainLockV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + domain: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "DELETE", + uri: "/api/domains/v1/portfolio/{domain}/domain-lock", + code: 200, + }), + ), +).annotate({ + identifier: "DisableDomainDomainLockV1Request", +}) as any as S.Schema; + +export interface DisableDomainPrivacyProtectionV1Request { + /** Domain name */ + domain: string; +} +export const DisableDomainPrivacyProtectionV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + domain: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "DELETE", + uri: "/api/domains/v1/portfolio/{domain}/privacy-protection", + code: 200, + }), + ), +).annotate({ + identifier: "DisableDomainPrivacyProtectionV1Request", +}) as any as S.Schema; + +export interface DNSGetDNSSnapshotListV1Request { + /** Domain name */ + domain: string; +} +export const DNSGetDNSSnapshotListV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + domain: S.String.pipe(T.Label()), + }).pipe( + T.Http({ method: "GET", uri: "/api/dns/v1/snapshots/{domain}", code: 200 }), + ), +).annotate({ + identifier: "DNSGetDNSSnapshotListV1Request", +}) as any as S.Schema; + +export interface DNSV1SnapshotSnapshotResource { + /** Snapshot ID */ + id?: number; + /** Reason of the update */ + reason?: string; + created_at?: string; +} +export const DNSV1SnapshotSnapshotResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + id: S.optional(S.Number), + reason: S.optional(S.String), + created_at: S.optional(S.String), + }), +).annotate({ + identifier: "DNSV1SnapshotSnapshotResource", +}) as any as S.Schema; + +/** Array of [`DNS.V1.Snapshot.SnapshotResource`](#model/dnsv1snapshotsnapshotresource) */ +export type DNSV1SnapshotSnapshotCollection = + Array; +export const DNSV1SnapshotSnapshotCollection = /*@__PURE__*/ S.Array( + DNSV1SnapshotSnapshotResource, +) as any as S.Schema; + +export type DNSGetDNSSnapshotListV1Response = DNSV1SnapshotSnapshotCollection; +export const DNSGetDNSSnapshotListV1Response = /*@__PURE__*/ S.suspend(() => + DNSV1SnapshotSnapshotCollection.pipe(T.RawResponseRoot()), +).annotate({ + identifier: "DNSGetDNSSnapshotListV1Response", +}) as any as S.Schema; + +/** WHOIS profiles of the accepting account. Only the contact types required by the TLD are applied, but all four IDs must be provided. */ +export interface DomainsAcceptIncomingDomainMoveV1RequestDomainContacts { + /** Owner contact WHOIS record ID */ + owner_id: number; + /** Administrative contact WHOIS record ID */ + admin_id: number; + /** Billing contact WHOIS record ID */ + billing_id: number; + /** Technical contact WHOIS record ID */ + tech_id: number; +} +export const DomainsAcceptIncomingDomainMoveV1RequestDomainContacts = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + owner_id: S.Number, + admin_id: S.Number, + billing_id: S.Number, + tech_id: S.Number, + }), + ).annotate({ + identifier: "DomainsAcceptIncomingDomainMoveV1RequestDomainContacts", + }) as any as S.Schema; + +export interface DomainsAcceptIncomingDomainMoveV1Request { + /** Domain name */ + domain: string; + /** WHOIS profiles of the accepting account. Only the contact types required by the TLD are applied, but all four IDs must be provided. */ + domain_contacts: DomainsAcceptIncomingDomainMoveV1RequestDomainContacts; +} +export const DomainsAcceptIncomingDomainMoveV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + domain: S.String.pipe(T.Label()), + domain_contacts: DomainsAcceptIncomingDomainMoveV1RequestDomainContacts, + }).pipe( + T.Http({ + method: "PUT", + uri: "/api/domains/v1/move/incoming/{domain}", + code: 200, + }), + ), +).annotate({ + identifier: "DomainsAcceptIncomingDomainMoveV1Request", +}) as any as S.Schema; + +export interface DomainsCancelOutgoingDomainMoveV1Request { + /** Domain name */ + domain: string; +} +export const DomainsCancelOutgoingDomainMoveV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + domain: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "DELETE", + uri: "/api/domains/v1/move/outgoing/{domain}", + code: 200, + }), + ), +).annotate({ + identifier: "DomainsCancelOutgoingDomainMoveV1Request", +}) as any as S.Schema; + +export type DomainsChangeWHOISProfileForDomainV1RequestChangeForItem = + | "owner" + | "admin" + | "billing" + | "tech"; +export const DomainsChangeWHOISProfileForDomainV1RequestChangeForItem = + /*@__PURE__*/ S.String; + +/** Contact roles to repoint to the new WHOIS profile */ +export type DomainsChangeWHOISProfileForDomainV1RequestChangeForList = Array< + DomainsChangeWHOISProfileForDomainV1RequestChangeForItem | (string & {}) +>; +export const DomainsChangeWHOISProfileForDomainV1RequestChangeForList = + /*@__PURE__*/ S.Array( + DomainsChangeWHOISProfileForDomainV1RequestChangeForItem, + ) as any as S.Schema; + +export interface DomainsChangeWHOISProfileForDomainV1Request { + /** WHOIS profile ID to assign to the domain */ + new_whois_id: number; + /** Domain name */ + domain: string; + /** Contact roles to repoint to the new WHOIS profile */ + change_for: DomainsChangeWHOISProfileForDomainV1RequestChangeForList; +} +export const DomainsChangeWHOISProfileForDomainV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + new_whois_id: S.Number, + domain: S.String, + change_for: DomainsChangeWHOISProfileForDomainV1RequestChangeForList, + }).pipe( + T.Http({ method: "PUT", uri: "/api/domains/v1/whois/change", code: 200 }), + ), + ).annotate({ + identifier: "DomainsChangeWHOISProfileForDomainV1Request", + }) as any as S.Schema; + +export interface DomainsGetDomainListV1Request {} +export const DomainsGetDomainListV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({}).pipe( + T.Http({ method: "GET", uri: "/api/domains/v1/portfolio", code: 200 }), + ), +).annotate({ + identifier: "DomainsGetDomainListV1Request", +}) as any as S.Schema; + +export type DomainsV1DomainDomainResourceType = + | "domain" + | "free_domain" + | "domain_transfer" + | "free_domain_transfer"; +export const DomainsV1DomainDomainResourceType = /*@__PURE__*/ S.String; + +export type DomainsV1DomainDomainResourceStatus = + | "active" + | "pending_setup" + | "expired" + | "requested" + | "pending_verification" + | "deleted" + | "suspended" + | "failed"; +export const DomainsV1DomainDomainResourceStatus = /*@__PURE__*/ S.String; + +export interface DomainsV1DomainDomainResource { + /** Domain ID */ + id?: number; + /** Domain name, `null` when not claimed free domain */ + domain?: string | null; + type?: DomainsV1DomainDomainResourceType; + status?: DomainsV1DomainDomainResourceStatus; + created_at?: string; + expires_at?: string | null; +} +export const DomainsV1DomainDomainResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + id: S.optional(S.Number), + domain: S.optional(S.NullOr(S.String)), + type: S.optional(DomainsV1DomainDomainResourceType), + status: S.optional(DomainsV1DomainDomainResourceStatus), + created_at: S.optional(S.String), + expires_at: S.optional(S.NullOr(S.String)), + }), +).annotate({ + identifier: "DomainsV1DomainDomainResource", +}) as any as S.Schema; + +/** Array of [`Domains.V1.Domain.DomainResource`](#model/domainsv1domaindomainresource) */ +export type DomainsV1DomainDomainCollection = + Array; +export const DomainsV1DomainDomainCollection = /*@__PURE__*/ S.Array( + DomainsV1DomainDomainResource, +) as any as S.Schema; + +export type DomainsGetDomainListV1Response = DomainsV1DomainDomainCollection; +export const DomainsGetDomainListV1Response = /*@__PURE__*/ S.suspend(() => + DomainsV1DomainDomainCollection.pipe(T.RawResponseRoot()), +).annotate({ + identifier: "DomainsGetDomainListV1Response", +}) as any as S.Schema; + +export interface DomainsGetIncomingDomainMoveListV1Request {} +export const DomainsGetIncomingDomainMoveListV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({}).pipe( + T.Http({ + method: "GET", + uri: "/api/domains/v1/move/incoming", + code: 200, + }), + ), + ).annotate({ + identifier: "DomainsGetIncomingDomainMoveListV1Request", + }) as any as S.Schema; + +/** Status of the move */ +export type DomainsV1MoveMoveResourceStatus = + | "initiated" + | "activating" + | "completed"; +export const DomainsV1MoveMoveResourceStatus = /*@__PURE__*/ S.String; + +export interface DomainsV1MoveMoveResource { + /** Domain name */ + domain?: string; + /** Status of the move */ + status?: DomainsV1MoveMoveResourceStatus; + created_at?: string; + updated_at?: string; +} +export const DomainsV1MoveMoveResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + domain: S.optional(S.String), + status: S.optional(DomainsV1MoveMoveResourceStatus), + created_at: S.optional(S.String), + updated_at: S.optional(S.String), + }), +).annotate({ + identifier: "DomainsV1MoveMoveResource", +}) as any as S.Schema; + +/** Array of [`Domains.V1.Move.MoveResource`](#model/domainsv1movemoveresource) */ +export type DomainsV1MoveMoveCollection = Array; +export const DomainsV1MoveMoveCollection = /*@__PURE__*/ S.Array( + DomainsV1MoveMoveResource, +) as any as S.Schema; + +export type DomainsGetIncomingDomainMoveListV1Response = + DomainsV1MoveMoveCollection; +export const DomainsGetIncomingDomainMoveListV1Response = + /*@__PURE__*/ S.suspend(() => + DomainsV1MoveMoveCollection.pipe(T.RawResponseRoot()), + ).annotate({ + identifier: "DomainsGetIncomingDomainMoveListV1Response", + }) as any as S.Schema; + +export interface DomainsGetIncomingDomainMoveV1Request { + /** Domain name */ + domain: string; + /** Re-check the move against the registry before responding. Only has an effect while the move is in the `activating` status. */ + force_sync?: boolean; +} +export const DomainsGetIncomingDomainMoveV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + domain: S.String.pipe(T.Label()), + force_sync: S.optional(S.Boolean.pipe(T.Query())), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/domains/v1/move/incoming/{domain}", + code: 200, + }), + ), +).annotate({ + identifier: "DomainsGetIncomingDomainMoveV1Request", +}) as any as S.Schema; + +export interface DomainsGetOutgoingDomainMoveListV1Request {} +export const DomainsGetOutgoingDomainMoveListV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({}).pipe( + T.Http({ + method: "GET", + uri: "/api/domains/v1/move/outgoing", + code: 200, + }), + ), + ).annotate({ + identifier: "DomainsGetOutgoingDomainMoveListV1Request", + }) as any as S.Schema; + +export type DomainsGetOutgoingDomainMoveListV1Response = + DomainsV1MoveMoveCollection; +export const DomainsGetOutgoingDomainMoveListV1Response = + /*@__PURE__*/ S.suspend(() => + DomainsV1MoveMoveCollection.pipe(T.RawResponseRoot()), + ).annotate({ + identifier: "DomainsGetOutgoingDomainMoveListV1Response", + }) as any as S.Schema; + +export interface DomainsGetOutgoingDomainMoveV1Request { + /** Domain name */ + domain: string; +} +export const DomainsGetOutgoingDomainMoveV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + domain: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/domains/v1/move/outgoing/{domain}", + code: 200, + }), + ), +).annotate({ + identifier: "DomainsGetOutgoingDomainMoveV1Request", +}) as any as S.Schema; + +export interface DomainsGetTransferListV1Request {} +export const DomainsGetTransferListV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({}).pipe( + T.Http({ method: "GET", uri: "/api/domains/v1/transfers", code: 200 }), + ), +).annotate({ + identifier: "DomainsGetTransferListV1Request", +}) as any as S.Schema; + +/** Array of [`Domains.V1.Transfer.TransferResource`](#model/domainsv1transfertransferresource) */ +export type DomainsV1TransferTransferCollection = + Array; +export const DomainsV1TransferTransferCollection = /*@__PURE__*/ S.Array( + DomainsV1TransferTransferResource, +) as any as S.Schema; + +export type DomainsGetTransferListV1Response = + DomainsV1TransferTransferCollection; +export const DomainsGetTransferListV1Response = /*@__PURE__*/ S.suspend(() => + DomainsV1TransferTransferCollection.pipe(T.RawResponseRoot()), +).annotate({ + identifier: "DomainsGetTransferListV1Response", +}) as any as S.Schema; + +export interface DomainsGetWHOISProfileListV1Request { + /** Filter by TLD (without leading dot) */ + tld?: string; +} +export const DomainsGetWHOISProfileListV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + tld: S.optional(S.String.pipe(T.Query())), + }).pipe(T.Http({ method: "GET", uri: "/api/domains/v1/whois", code: 200 })), +).annotate({ + identifier: "DomainsGetWHOISProfileListV1Request", +}) as any as S.Schema; + +/** Array of [`Domains.V1.WHOIS.ProfileResource`](#model/domainsv1whoisprofileresource) */ +export type DomainsV1WHOISProfileCollection = + Array; +export const DomainsV1WHOISProfileCollection = /*@__PURE__*/ S.Array( + DomainsV1WHOISProfileResource, +) as any as S.Schema; + +export type DomainsGetWHOISProfileListV1Response = + DomainsV1WHOISProfileCollection; +export const DomainsGetWHOISProfileListV1Response = /*@__PURE__*/ S.suspend( + () => DomainsV1WHOISProfileCollection.pipe(T.RawResponseRoot()), +).annotate({ + identifier: "DomainsGetWHOISProfileListV1Response", +}) as any as S.Schema; + +/** Domain contact information */ +export type DomainsPurchaseNewDomainV1RequestDomainContacts = + ClaimDomainFreeDomainTransferV1RequestDomainContacts; +export const DomainsPurchaseNewDomainV1RequestDomainContacts = + ClaimDomainFreeDomainTransferV1RequestDomainContacts; + +/** Discount coupon codes */ +export type DomainsPurchaseNewDomainV1RequestCouponsList = Array; +export const DomainsPurchaseNewDomainV1RequestCouponsList = + /*@__PURE__*/ S.Array( + S.Unknown, + ) as any as S.Schema; + +export interface DomainsPurchaseNewDomainV1Request { + /** Domain name */ + domain: string; + /** Catalog price item ID */ + item_id: string; + /** Payment method ID, default will be used if not provided */ + payment_method_id?: number; + /** Domain contact information */ + domain_contacts?: ClaimDomainFreeDomainTransferV1RequestDomainContacts; + /** Additional registration data, possible values depends on TLD */ + additional_details?: unknown; + /** Discount coupon codes */ + coupons?: DomainsPurchaseNewDomainV1RequestCouponsList; +} +export const DomainsPurchaseNewDomainV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + domain: S.String, + item_id: S.String, + payment_method_id: S.optional(S.Number), + domain_contacts: S.optional( + ClaimDomainFreeDomainTransferV1RequestDomainContacts, + ), + additional_details: S.optional(S.Unknown), + coupons: S.optional(DomainsPurchaseNewDomainV1RequestCouponsList), + }).pipe( + T.Http({ method: "POST", uri: "/api/domains/v1/portfolio", code: 200 }), + ), +).annotate({ + identifier: "DomainsPurchaseNewDomainV1Request", +}) as any as S.Schema; + +export interface DomainsRejectIncomingDomainMoveV1Request { + /** Domain name */ + domain: string; +} +export const DomainsRejectIncomingDomainMoveV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + domain: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "DELETE", + uri: "/api/domains/v1/move/incoming/{domain}", + code: 200, + }), + ), +).annotate({ + identifier: "DomainsRejectIncomingDomainMoveV1Request", +}) as any as S.Schema; + +export interface DomainsStartOutgoingDomainMoveV1Request { + /** Domain name */ + domain: string; + /** Email address of the Hostinger account receiving the domain */ + new_customer_email: string; +} +export const DomainsStartOutgoingDomainMoveV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + domain: S.String.pipe(T.Label()), + new_customer_email: S.String, + }).pipe( + T.Http({ + method: "POST", + uri: "/api/domains/v1/move/outgoing/{domain}", + code: 200, + }), + ), +).annotate({ + identifier: "DomainsStartOutgoingDomainMoveV1Request", +}) as any as S.Schema; + +export interface DomainsSuggestDomainNamesFromADescriptionV1Request { + /** Free-text description of the project the domain is needed for */ + description: string; + /** Amount of domain names to suggest */ + limit: number; +} +export const DomainsSuggestDomainNamesFromADescriptionV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + description: S.String, + limit: S.Number, + }).pipe( + T.Http({ + method: "POST", + uri: "/api/domains/v1/availability/alternatives-from-description", + code: 200, + }), + ), + ).annotate({ + identifier: "DomainsSuggestDomainNamesFromADescriptionV1Request", + }) as any as S.Schema; + +/** Suggested domain names */ +export type DomainsV1AvailabilityAlternativeCollection = Array; +export const DomainsV1AvailabilityAlternativeCollection = /*@__PURE__*/ S.Array( + S.String, +) as any as S.Schema; + +export type DomainsSuggestDomainNamesFromADescriptionV1Response = + DomainsV1AvailabilityAlternativeCollection; +export const DomainsSuggestDomainNamesFromADescriptionV1Response = + /*@__PURE__*/ S.suspend(() => + DomainsV1AvailabilityAlternativeCollection.pipe(T.RawResponseRoot()), + ).annotate({ + identifier: "DomainsSuggestDomainNamesFromADescriptionV1Response", + }) as any as S.Schema; + +export interface DomainsSuggestDomainNamesFromADomainV1Request { + /** Domain name to base the suggestions on */ + domain: string; + /** Amount of domain names to suggest */ + limit: number; +} +export const DomainsSuggestDomainNamesFromADomainV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + domain: S.String, + limit: S.Number, + }).pipe( + T.Http({ + method: "POST", + uri: "/api/domains/v1/availability/alternatives-from-domain", + code: 200, + }), + ), + ).annotate({ + identifier: "DomainsSuggestDomainNamesFromADomainV1Request", + }) as any as S.Schema; + +export type DomainsSuggestDomainNamesFromADomainV1Response = + DomainsV1AvailabilityAlternativeCollection; +export const DomainsSuggestDomainNamesFromADomainV1Response = + /*@__PURE__*/ S.suspend(() => + DomainsV1AvailabilityAlternativeCollection.pipe(T.RawResponseRoot()), + ).annotate({ + identifier: "DomainsSuggestDomainNamesFromADomainV1Response", + }) as any as S.Schema; + +export interface DomainsUnsetDefaultWHOISProfileV1Request { + /** WHOIS ID */ + whoisId: number; +} +export const DomainsUnsetDefaultWHOISProfileV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + whoisId: S.Number.pipe(T.Label()), + }).pipe( + T.Http({ + method: "DELETE", + uri: "/api/domains/v1/whois/default/{whoisId}", + code: 200, + }), + ), +).annotate({ + identifier: "DomainsUnsetDefaultWHOISProfileV1Request", +}) as any as S.Schema; + +export interface EcommerceCreateAPaymentProviderConnectLinkV1Request { + /** The ID of the store to connect the payment provider to. */ + store_id: string; + /** The ID of the payment gateway to connect, e.g. stripe. */ + provider_id: string; +} +export const EcommerceCreateAPaymentProviderConnectLinkV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + store_id: S.String.pipe(T.Label()), + provider_id: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/ecommerce/v1/stores/{store_id}/payment-providers/{provider_id}/connect-link", + code: 200, + }), + ), + ).annotate({ + identifier: "EcommerceCreateAPaymentProviderConnectLinkV1Request", + }) as any as S.Schema; + +export interface EcommerceV1PaymentProviderPaymentProviderConnectLinkResourceData { + /** The gateway onboarding URL for the merchant to open. */ + url?: string; + /** A deep-link into the store admin for the provider. */ + admin_url?: string; +} +export const EcommerceV1PaymentProviderPaymentProviderConnectLinkResourceData = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + url: S.optional(S.String), + admin_url: S.optional(S.String), + }), + ).annotate({ + identifier: + "EcommerceV1PaymentProviderPaymentProviderConnectLinkResourceData", + }) as any as S.Schema; + +export interface EcommerceV1PaymentProviderPaymentProviderConnectLinkResource { + data?: EcommerceV1PaymentProviderPaymentProviderConnectLinkResourceData; +} +export const EcommerceV1PaymentProviderPaymentProviderConnectLinkResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + data: S.optional( + EcommerceV1PaymentProviderPaymentProviderConnectLinkResourceData, + ), + }), + ).annotate({ + identifier: "EcommerceV1PaymentProviderPaymentProviderConnectLinkResource", + }) as any as S.Schema; + +export interface EcommerceCreateAProductImageUploadURLV1Request { + /** The ID of the store the product belongs to. */ + store_id: string; + /** The ID of the product the image will be attached to. */ + product_id: string; +} +export const EcommerceCreateAProductImageUploadURLV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + store_id: S.String.pipe(T.Label()), + product_id: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/ecommerce/v1/stores/{store_id}/products/{product_id}/images/upload-url", + code: 200, + }), + ), + ).annotate({ + identifier: "EcommerceCreateAProductImageUploadURLV1Request", + }) as any as S.Schema; + +/** Form fields to send alongside the file in the multipart POST. */ +export type EcommerceV1ProductProductImageUploadUrlResourceFieldsMap = { + [key: string]: string | undefined; +}; +export const EcommerceV1ProductProductImageUploadUrlResourceFieldsMap = + /*@__PURE__*/ S.Record( + S.String, + S.String, + ) as any as S.Schema; + +export interface EcommerceV1ProductProductImageUploadUrlResource { + /** Signed URL to upload the image to with a multipart/form-data POST. */ + upload_url?: string; + /** Form fields to send alongside the file in the multipart POST. */ + fields?: EcommerceV1ProductProductImageUploadUrlResourceFieldsMap; + /** Key of the uploaded object — send it to the attach-image endpoint. */ + object_name?: string; + /** Maximum accepted upload size in bytes. */ + max_bytes?: number; +} +export const EcommerceV1ProductProductImageUploadUrlResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + upload_url: S.optional(S.String), + fields: S.optional( + EcommerceV1ProductProductImageUploadUrlResourceFieldsMap, + ), + object_name: S.optional(S.String), + max_bytes: S.optional(S.Number), + }), + ).annotate({ + identifier: "EcommerceV1ProductProductImageUploadUrlResource", + }) as any as S.Schema; + +export interface EcommerceFulfilAnOrderV1RequestItemsItem { + /** The line item to fulfil, from the order detail items[].id. */ + line_item_id: string; + /** Quantity of the line item to fulfil. */ + quantity: number; +} +export const EcommerceFulfilAnOrderV1RequestItemsItem = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + line_item_id: S.String, + quantity: S.Number, + }), +).annotate({ + identifier: "EcommerceFulfilAnOrderV1RequestItemsItem", +}) as any as S.Schema; + +/** Line items to fulfil. Omit to fulfil every remaining unfulfilled item. */ +export type EcommerceFulfilAnOrderV1RequestItemsList = + Array; +export const EcommerceFulfilAnOrderV1RequestItemsList = /*@__PURE__*/ S.Array( + EcommerceFulfilAnOrderV1RequestItemsItem, +) as any as S.Schema; + +export interface EcommerceFulfilAnOrderV1Request { + /** The ID of the store that owns the order. */ + store_id: string; + /** The ID of the order to fulfil. */ + order_id: string; + /** Line items to fulfil. Omit to fulfil every remaining unfulfilled item. */ + items?: EcommerceFulfilAnOrderV1RequestItemsList; + /** Carrier tracking number for the shipment. */ + tracking_number?: string; + /** Public tracking URL for the shipment. Requires tracking_number. */ + tracking_url?: string; + /** Whether to email the customer about the fulfilment. Defaults to true. */ + notify_customer?: boolean; +} +export const EcommerceFulfilAnOrderV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + store_id: S.String.pipe(T.Label()), + order_id: S.String.pipe(T.Label()), + items: S.optional(EcommerceFulfilAnOrderV1RequestItemsList), + tracking_number: S.optional(S.String), + tracking_url: S.optional(S.String), + notify_customer: S.optional(S.Boolean), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/ecommerce/v1/stores/{store_id}/orders/{order_id}/fulfill", + code: 200, + }), + ), +).annotate({ + identifier: "EcommerceFulfilAnOrderV1Request", +}) as any as S.Schema; + +export interface EcommerceUploadAndAttachAProductImageV1Request { + /** The ID of the store the product belongs to. */ + store_id: string; + /** The ID of the product to attach the image to. */ + product_id: string; + /** Publicly reachable URL of the raster image (JPEG, PNG, GIF or WebP), maximum 15MB. The image is fetched, virus-scanned and validated by content, then stored on the CDN. SVG is not accepted. Provide either this or object_name. */ + image_url?: string; + /** Key returned by the upload-url endpoint. Provide this instead of image_url to attach an uploaded image. */ + object_name?: string; + /** When true, the image becomes the product's thumbnail (primary image). When omitted, it becomes the thumbnail only if the product does not have one yet. */ + is_thumbnail?: boolean | null; +} +export const EcommerceUploadAndAttachAProductImageV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + store_id: S.String.pipe(T.Label()), + product_id: S.String.pipe(T.Label()), + image_url: S.optional(S.String), + object_name: S.optional(S.String), + is_thumbnail: S.optional(S.NullOr(S.Boolean)), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/ecommerce/v1/stores/{store_id}/products/{product_id}/images", + code: 200, + }), + ), + ).annotate({ + identifier: "EcommerceUploadAndAttachAProductImageV1Request", + }) as any as S.Schema; + +export interface EcommerceV1ProductProductImageUploadResource { + /** CDN URL of the uploaded image. */ + url?: string; + /** Whether the image was set as the product's thumbnail (primary image). */ + is_thumbnail?: boolean; +} +export const EcommerceV1ProductProductImageUploadResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + url: S.optional(S.String), + is_thumbnail: S.optional(S.Boolean), + }), + ).annotate({ + identifier: "EcommerceV1ProductProductImageUploadResource", + }) as any as S.Schema; + +export interface EnableBillingAutoRenewalV1Request { + /** Subscription ID */ + subscriptionId: string; +} +export const EnableBillingAutoRenewalV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + subscriptionId: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "PATCH", + uri: "/api/billing/v1/subscriptions/{subscriptionId}/auto-renewal/enable", + code: 200, + }), + ), +).annotate({ + identifier: "EnableBillingAutoRenewalV1Request", +}) as any as S.Schema; + +export interface EnableDomainDomainLockV1Request { + /** Domain name */ + domain: string; +} +export const EnableDomainDomainLockV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + domain: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "PUT", + uri: "/api/domains/v1/portfolio/{domain}/domain-lock", + code: 200, + }), + ), +).annotate({ + identifier: "EnableDomainDomainLockV1Request", +}) as any as S.Schema; + +export interface EnableDomainPrivacyProtectionV1Request { + /** Domain name */ + domain: string; +} +export const EnableDomainPrivacyProtectionV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + domain: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "PUT", + uri: "/api/domains/v1/portfolio/{domain}/privacy-protection", + code: 200, + }), + ), +).annotate({ + identifier: "EnableDomainPrivacyProtectionV1Request", +}) as any as S.Schema; + +export interface EnableEcommerceManualPaymentMethodV1Request { + /** The ID of the store to enable manual payment for. */ + store_id: string; + /** Optional display name shown to customers at checkout. */ + title?: string | null; +} +export const EnableEcommerceManualPaymentMethodV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + store_id: S.String.pipe(T.Label()), + title: S.optional(S.NullOr(S.String)), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/ecommerce/v1/stores/{store_id}/payment-methods/manual", + code: 200, + }), + ), + ).annotate({ + identifier: "EnableEcommerceManualPaymentMethodV1Request", + }) as any as S.Schema; + +export interface EcommerceV1PaymentManualPaymentResourcePaymentMethod { + /** Store payment provider ID. */ + id?: string; + /** The payment provider identifier. */ + provider_id?: string; + /** Whether the payment method is shown at checkout. */ + is_enabled?: boolean; + /** Display name shown to customers at checkout. */ + title?: string; +} +export const EcommerceV1PaymentManualPaymentResourcePaymentMethod = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + id: S.optional(S.String), + provider_id: S.optional(S.String), + is_enabled: S.optional(S.Boolean), + title: S.optional(S.String), + }), + ).annotate({ + identifier: "EcommerceV1PaymentManualPaymentResourcePaymentMethod", + }) as any as S.Schema; + +export interface EcommerceV1PaymentManualPaymentResource { + payment_method?: EcommerceV1PaymentManualPaymentResourcePaymentMethod; + /** Admin UI deep-link to manage payment settings. */ + admin_url?: string; +} +export const EcommerceV1PaymentManualPaymentResource = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + payment_method: S.optional( + EcommerceV1PaymentManualPaymentResourcePaymentMethod, + ), + admin_url: S.optional(S.String), + }), +).annotate({ + identifier: "EcommerceV1PaymentManualPaymentResource", +}) as any as S.Schema; + +export interface GenerateHostingAFreeSubdomainV1Request {} +export const GenerateHostingAFreeSubdomainV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({}).pipe( + T.Http({ + method: "POST", + uri: "/api/hosting/v1/domains/free-subdomains", + code: 200, + }), + ), +).annotate({ + identifier: "GenerateHostingAFreeSubdomainV1Request", +}) as any as S.Schema; + +export interface HostingV1DomainsFreeSubdomainResource { + /** Generated free subdomain */ + domain?: string; +} +export const HostingV1DomainsFreeSubdomainResource = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + domain: S.optional(S.String), + }), +).annotate({ + identifier: "HostingV1DomainsFreeSubdomainResource", +}) as any as S.Schema; + +export interface GetAgencyHostingWebsiteDetailsV1Request { + /** Agency Plan website UID */ + website_uid: string; +} +export const GetAgencyHostingWebsiteDetailsV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + website_uid: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/agency-hosting/v1/websites/{website_uid}", + code: 200, + }), + ), +).annotate({ + identifier: "GetAgencyHostingWebsiteDetailsV1Request", +}) as any as S.Schema; + +/** Website state */ +export type AgencyHostingV1WebsitesWebsiteResourceState = + | "active" + | "suspended"; +export const AgencyHostingV1WebsitesWebsiteResourceState = + /*@__PURE__*/ S.String; + +export type AgencyHostingV1WebsitesWebsiteDomainDetailsResourceNameserversList = + Array; +export const AgencyHostingV1WebsitesWebsiteDomainDetailsResourceNameserversList = + /*@__PURE__*/ S.Array( + S.String, + ) as any as S.Schema; + +/** SSL cert names */ +export type AgencyHostingV1WebsitesSslCertResourceNamesList = Array; +export const AgencyHostingV1WebsitesSslCertResourceNamesList = + /*@__PURE__*/ S.Array( + S.String, + ) as any as S.Schema; + +export interface AgencyHostingV1WebsitesSslCertResource { + /** SSL cert names */ + names?: AgencyHostingV1WebsitesSslCertResourceNamesList; + expires_at?: string; + created_at?: string; +} +export const AgencyHostingV1WebsitesSslCertResource = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + names: S.optional(AgencyHostingV1WebsitesSslCertResourceNamesList), + expires_at: S.optional(S.String), + created_at: S.optional(S.String), + }), +).annotate({ + identifier: "AgencyHostingV1WebsitesSslCertResource", +}) as any as S.Schema; + +export interface AgencyHostingV1WebsitesCustomSslCertResource { + /** Is the SSL certificate expired */ + is_expired?: boolean; + expires_at?: string | null; + created_at?: string; +} +export const AgencyHostingV1WebsitesCustomSslCertResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + is_expired: S.optional(S.Boolean), + expires_at: S.optional(S.NullOr(S.String)), + created_at: S.optional(S.String), + }), + ).annotate({ + identifier: "AgencyHostingV1WebsitesCustomSslCertResource", + }) as any as S.Schema; + +export interface AgencyHostingV1WebsitesWebsiteDomainDetailsResource { + /** Domain name */ + fqdn?: string; + /** Parent domain name if the domain is a subdomain */ + parent_fqdn?: string | null; + /** IPv6 address */ + ipv6?: string | null; + created_at?: string; + nameservers?: AgencyHostingV1WebsitesWebsiteDomainDetailsResourceNameserversList; + ssl_cert?: AgencyHostingV1WebsitesSslCertResource | null; + custom_ssl_cert?: AgencyHostingV1WebsitesCustomSslCertResource | null; +} +export const AgencyHostingV1WebsitesWebsiteDomainDetailsResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + fqdn: S.optional(S.String), + parent_fqdn: S.optional(S.NullOr(S.String)), + ipv6: S.optional(S.NullOr(S.String)), + created_at: S.optional(S.String), + nameservers: S.optional( + AgencyHostingV1WebsitesWebsiteDomainDetailsResourceNameserversList, + ), + ssl_cert: S.optional(S.NullOr(AgencyHostingV1WebsitesSslCertResource)), + custom_ssl_cert: S.optional( + S.NullOr(AgencyHostingV1WebsitesCustomSslCertResource), + ), + }), + ).annotate({ + identifier: "AgencyHostingV1WebsitesWebsiteDomainDetailsResource", + }) as any as S.Schema; + +/** Array of [`AgencyHosting.V1.Websites.WebsiteDomainDetailsResource`](#model/agencyhostingv1websiteswebsitedomaindetailsresource) */ +export type AgencyHostingV1WebsitesWebsiteDomainDetailsCollection = + Array; +export const AgencyHostingV1WebsitesWebsiteDomainDetailsCollection = + /*@__PURE__*/ S.Array( + AgencyHostingV1WebsitesWebsiteDomainDetailsResource, + ) as any as S.Schema; + +export interface AgencyHostingV1WebsitesWebsitePreviewDomainResource { + /** Preview domain name */ + fqdn?: string; + /** Creation date */ + created_at?: string; +} +export const AgencyHostingV1WebsitesWebsitePreviewDomainResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + fqdn: S.optional(S.String), + created_at: S.optional(S.String), + }), + ).annotate({ + identifier: "AgencyHostingV1WebsitesWebsitePreviewDomainResource", + }) as any as S.Schema; + +export interface AgencyHostingV1WebsitesWebsitePhpSettingsResource { + /** PHP version */ + version?: string; + /** Number of PHP workers */ + workers?: number; +} +export const AgencyHostingV1WebsitesWebsitePhpSettingsResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + version: S.optional(S.String), + workers: S.optional(S.Number), + }), + ).annotate({ + identifier: "AgencyHostingV1WebsitesWebsitePhpSettingsResource", + }) as any as S.Schema; + +export interface AgencyHostingV1WebsitesWebsiteSettingsResource { + /** PHP settings */ + php?: AgencyHostingV1WebsitesWebsitePhpSettingsResource | null; +} +export const AgencyHostingV1WebsitesWebsiteSettingsResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + php: S.optional( + S.NullOr(AgencyHostingV1WebsitesWebsitePhpSettingsResource), + ), + }), + ).annotate({ + identifier: "AgencyHostingV1WebsitesWebsiteSettingsResource", + }) as any as S.Schema; + +export interface AgencyHostingV1WebsitesWordPressInstallResource { + /** WordPress domain */ + domain?: string; + /** WordPress title */ + title?: string; + /** WordPress language */ + language?: string; + /** WordPress configuration lock status */ + is_config_locked?: boolean; + /** Creation date */ + created_at?: string; +} +export const AgencyHostingV1WebsitesWordPressInstallResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + domain: S.optional(S.String), + title: S.optional(S.String), + language: S.optional(S.String), + is_config_locked: S.optional(S.Boolean), + created_at: S.optional(S.String), + }), + ).annotate({ + identifier: "AgencyHostingV1WebsitesWordPressInstallResource", + }) as any as S.Schema; + +export interface AgencyHostingV1WebsitesWebsiteSshDetailsResource { + /** SSH username */ + username?: string; + /** SSH host */ + host?: string; + /** SSH port */ + port?: number; + /** Is SSH access enabled */ + is_enabled?: boolean; + /** Is SSH password access enabled */ + is_password_enabled?: boolean; +} +export const AgencyHostingV1WebsitesWebsiteSshDetailsResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + username: S.optional(S.String), + host: S.optional(S.String), + port: S.optional(S.Number), + is_enabled: S.optional(S.Boolean), + is_password_enabled: S.optional(S.Boolean), + }), + ).annotate({ + identifier: "AgencyHostingV1WebsitesWebsiteSshDetailsResource", + }) as any as S.Schema; + +export interface AgencyHostingV1WebsitesWebsiteSftpDetailsResource { + /** SFTP username */ + username?: string; + /** SFTP host */ + host?: string; + /** SFTP port */ + port?: number; + /** Is SFTP access enabled */ + is_enabled?: boolean; +} +export const AgencyHostingV1WebsitesWebsiteSftpDetailsResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + username: S.optional(S.String), + host: S.optional(S.String), + port: S.optional(S.Number), + is_enabled: S.optional(S.Boolean), + }), + ).annotate({ + identifier: "AgencyHostingV1WebsitesWebsiteSftpDetailsResource", + }) as any as S.Schema; + +export interface AgencyHostingV1WebsitesWebsiteRemoteAccessResource { + /** Remote access mode */ + mode?: string; + ssh?: AgencyHostingV1WebsitesWebsiteSshDetailsResource; + sftp?: AgencyHostingV1WebsitesWebsiteSftpDetailsResource; +} +export const AgencyHostingV1WebsitesWebsiteRemoteAccessResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + mode: S.optional(S.String), + ssh: S.optional(AgencyHostingV1WebsitesWebsiteSshDetailsResource), + sftp: S.optional(AgencyHostingV1WebsitesWebsiteSftpDetailsResource), + }), + ).annotate({ + identifier: "AgencyHostingV1WebsitesWebsiteRemoteAccessResource", + }) as any as S.Schema; + +export interface AgencyHostingV1WebsitesWebsiteServerResource { + /** Server hostname */ + hostname?: string; + /** Country code */ + country_code?: string; +} +export const AgencyHostingV1WebsitesWebsiteServerResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + hostname: S.optional(S.String), + country_code: S.optional(S.String), + }), + ).annotate({ + identifier: "AgencyHostingV1WebsitesWebsiteServerResource", + }) as any as S.Schema; + +/** Plan parameters */ +export interface AgencyHostingV1WebsitesWebsiteOrderPlanResourceParameters { + /** Disk quota in bytes */ + disk_quota_bytes?: number; + /** Inode quota */ + inode_quota?: number; + /** CPU cores */ + cpu_cores?: number; + /** Memory quota in bytes */ + memory_quota_bytes?: number; + /** Disk IOPs quota */ + disk_iops_quota?: number; + /** Process quota */ + process_quota?: number; + /** Website quota */ + website_quota?: number; + /** Maximum number of databases per website */ + max_databases_per_website?: number; + /** Is CDN available */ + is_cdn_available?: boolean; +} +export const AgencyHostingV1WebsitesWebsiteOrderPlanResourceParameters = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + disk_quota_bytes: S.optional(S.Number), + inode_quota: S.optional(S.Number), + cpu_cores: S.optional(S.Number), + memory_quota_bytes: S.optional(S.Number), + disk_iops_quota: S.optional(S.Number), + process_quota: S.optional(S.Number), + website_quota: S.optional(S.Number), + max_databases_per_website: S.optional(S.Number), + is_cdn_available: S.optional(S.Boolean), + }), + ).annotate({ + identifier: "AgencyHostingV1WebsitesWebsiteOrderPlanResourceParameters", + }) as any as S.Schema; + +export interface AgencyHostingV1WebsitesWebsiteOrderPlanResource { + /** Plan name */ + name?: string | null; + /** Plan parameters */ + parameters?: AgencyHostingV1WebsitesWebsiteOrderPlanResourceParameters; +} +export const AgencyHostingV1WebsitesWebsiteOrderPlanResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + name: S.optional(S.NullOr(S.String)), + parameters: S.optional( + AgencyHostingV1WebsitesWebsiteOrderPlanResourceParameters, + ), + }), + ).annotate({ + identifier: "AgencyHostingV1WebsitesWebsiteOrderPlanResource", + }) as any as S.Schema; + +export interface AgencyHostingV1WebsitesWebsiteOrderResource { + /** Order ID */ + id?: number; + /** Order status */ + status?: string | null; + created_at?: string; + plan?: AgencyHostingV1WebsitesWebsiteOrderPlanResource; +} +export const AgencyHostingV1WebsitesWebsiteOrderResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + id: S.optional(S.Number), + status: S.optional(S.NullOr(S.String)), + created_at: S.optional(S.String), + plan: S.optional(AgencyHostingV1WebsitesWebsiteOrderPlanResource), + }), + ).annotate({ + identifier: "AgencyHostingV1WebsitesWebsiteOrderResource", + }) as any as S.Schema; + +export interface AgencyHostingV1WebsitesWebsiteUserResource { + /** System username */ + username?: string; + /** User state */ + state?: string; +} +export const AgencyHostingV1WebsitesWebsiteUserResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + username: S.optional(S.String), + state: S.optional(S.String), + }), + ).annotate({ + identifier: "AgencyHostingV1WebsitesWebsiteUserResource", + }) as any as S.Schema; + +export interface AgencyHostingV1WebsitesWebsiteStagingRootResource { + /** UID of the website this is a staging environment of */ + uid?: string; +} +export const AgencyHostingV1WebsitesWebsiteStagingRootResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + uid: S.optional(S.String), + }), + ).annotate({ + identifier: "AgencyHostingV1WebsitesWebsiteStagingRootResource", + }) as any as S.Schema; + +export interface AgencyHostingV1WebsitesWebsiteResource { + /** Website UID */ + uid?: string; + /** IPv4 address */ + ipv4?: string; + /** Setup flavor */ + flavor?: string; + /** Website type */ + type?: string | null; + /** Description */ + description?: string | null; + /** Website state */ + state?: AgencyHostingV1WebsitesWebsiteResourceState; + created_at?: string; + domains?: AgencyHostingV1WebsitesWebsiteDomainDetailsCollection; + preview_domain?: AgencyHostingV1WebsitesWebsitePreviewDomainResource | null; + settings?: AgencyHostingV1WebsitesWebsiteSettingsResource; + wordpress?: AgencyHostingV1WebsitesWordPressInstallResource | null; + remote_access?: AgencyHostingV1WebsitesWebsiteRemoteAccessResource; + server?: AgencyHostingV1WebsitesWebsiteServerResource; + order?: AgencyHostingV1WebsitesWebsiteOrderResource; + user?: AgencyHostingV1WebsitesWebsiteUserResource; + staging_root?: AgencyHostingV1WebsitesWebsiteStagingRootResource | null; +} +export const AgencyHostingV1WebsitesWebsiteResource = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + uid: S.optional(S.String), + ipv4: S.optional(S.String), + flavor: S.optional(S.String), + type: S.optional(S.NullOr(S.String)), + description: S.optional(S.NullOr(S.String)), + state: S.optional(AgencyHostingV1WebsitesWebsiteResourceState), + created_at: S.optional(S.String), + domains: S.optional( + AgencyHostingV1WebsitesWebsiteDomainDetailsCollection, + ), + preview_domain: S.optional( + S.NullOr(AgencyHostingV1WebsitesWebsitePreviewDomainResource), + ), + settings: S.optional(AgencyHostingV1WebsitesWebsiteSettingsResource), + wordpress: S.optional( + S.NullOr(AgencyHostingV1WebsitesWordPressInstallResource), + ), + remote_access: S.optional( + AgencyHostingV1WebsitesWebsiteRemoteAccessResource, + ), + server: S.optional(AgencyHostingV1WebsitesWebsiteServerResource), + order: S.optional(AgencyHostingV1WebsitesWebsiteOrderResource), + user: S.optional(AgencyHostingV1WebsitesWebsiteUserResource), + staging_root: S.optional( + S.NullOr(AgencyHostingV1WebsitesWebsiteStagingRootResource), + ), + }), +).annotate({ + identifier: "AgencyHostingV1WebsitesWebsiteResource", +}) as any as S.Schema; + +export interface GetAgencyHostingWebsiteSetupStatusV1Request { + /** Agency Plan order ID */ + order_id: number; + /** Website setup UUID */ + setup_uuid: string; +} +export const GetAgencyHostingWebsiteSetupStatusV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + order_id: S.Number.pipe(T.Label()), + setup_uuid: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/agency-hosting/v1/orders/{order_id}/websites/setups/{setup_uuid}", + code: 200, + }), + ), + ).annotate({ + identifier: "GetAgencyHostingWebsiteSetupStatusV1Request", + }) as any as S.Schema; + +/** Website setup status */ +export type AgencyHostingV1SetupsWebsiteSetupStatusResourceStatus = + | "running" + | "completed"; +export const AgencyHostingV1SetupsWebsiteSetupStatusResourceStatus = + /*@__PURE__*/ S.String; + +export interface AgencyHostingV1SetupsWebsiteSetupStatusResource { + /** UID of the website created by the setup, available once provisioning completes */ + website_uid?: string | null; + /** Website setup status */ + status?: AgencyHostingV1SetupsWebsiteSetupStatusResourceStatus; +} +export const AgencyHostingV1SetupsWebsiteSetupStatusResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + website_uid: S.optional(S.NullOr(S.String)), + status: S.optional(AgencyHostingV1SetupsWebsiteSetupStatusResourceStatus), + }), + ).annotate({ + identifier: "AgencyHostingV1SetupsWebsiteSetupStatusResource", + }) as any as S.Schema; + +export interface GetAgencyHostingWordPressSettingsV1Request { + /** Agency Plan website UID */ + website_uid: string; +} +export const GetAgencyHostingWordPressSettingsV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + website_uid: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/agency-hosting/v1/websites/{website_uid}/wordpress/settings", + code: 200, + }), + ), + ).annotate({ + identifier: "GetAgencyHostingWordPressSettingsV1Request", + }) as any as S.Schema; + +export interface AgencyHostingV1WordPressSettingsResource { + /** Currently installed WordPress core version, or null when it cannot be determined. */ + core_version?: string | null; + /** Whether the LiteSpeed Cache plugin is active. */ + is_lite_speed_cache_enabled?: boolean; + /** Whether LiteSpeed object cache is enabled. */ + is_object_cache_enabled?: boolean; + /** Whether WordPress maintenance mode is currently enabled. */ + is_maintenance_mode_enabled?: boolean; +} +export const AgencyHostingV1WordPressSettingsResource = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + core_version: S.optional(S.NullOr(S.String)), + is_lite_speed_cache_enabled: S.optional(S.Boolean), + is_object_cache_enabled: S.optional(S.Boolean), + is_maintenance_mode_enabled: S.optional(S.Boolean), + }), +).annotate({ + identifier: "AgencyHostingV1WordPressSettingsResource", +}) as any as S.Schema; + +export interface GetDNSDNSRecordsV1Request { + /** Domain name */ + domain: string; +} +export const GetDNSDNSRecordsV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + domain: S.String.pipe(T.Label()), + }).pipe( + T.Http({ method: "GET", uri: "/api/dns/v1/zones/{domain}", code: 200 }), + ), +).annotate({ + identifier: "GetDNSDNSRecordsV1Request", +}) as any as S.Schema; + +export interface DNSV1ZoneNameRecordResource { + /** Content of the name record */ + content?: string; + /** Flag to mark name record as disabled */ + is_disabled?: boolean; +} +export const DNSV1ZoneNameRecordResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + content: S.optional(S.String), + is_disabled: S.optional(S.Boolean), + }), +).annotate({ + identifier: "DNSV1ZoneNameRecordResource", +}) as any as S.Schema; + +/** Array of [`DNS.V1.Zone.NameRecordResource`](#model/dnsv1zonenamerecordresource) */ +export type DNSV1ZoneNameRecordCollection = Array; +export const DNSV1ZoneNameRecordCollection = /*@__PURE__*/ S.Array( + DNSV1ZoneNameRecordResource, +) as any as S.Schema; + +/** Type of the record */ +export type DNSV1ZoneRecordResourceType = + | "A" + | "AAAA" + | "CNAME" + | "ALIAS" + | "MX" + | "TXT" + | "NS" + | "SOA" + | "SRV" + | "CAA"; +export const DNSV1ZoneRecordResourceType = /*@__PURE__*/ S.String; + +export interface DNSV1ZoneRecordResource { + /** Name of the record (use `@` for wildcard name) */ + name?: string; + records?: DNSV1ZoneNameRecordCollection; + /** TTL (Time-To-Live) of the record */ + ttl?: number; + /** Type of the record */ + type?: DNSV1ZoneRecordResourceType; +} +export const DNSV1ZoneRecordResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + name: S.optional(S.String), + records: S.optional(DNSV1ZoneNameRecordCollection), + ttl: S.optional(S.Number), + type: S.optional(DNSV1ZoneRecordResourceType), + }), +).annotate({ + identifier: "DNSV1ZoneRecordResource", +}) as any as S.Schema; + +/** Array of [`DNS.V1.Zone.RecordResource`](#model/dnsv1zonerecordresource) */ +export type DNSV1ZoneRecordCollection = Array; +export const DNSV1ZoneRecordCollection = /*@__PURE__*/ S.Array( + DNSV1ZoneRecordResource, +) as any as S.Schema; + +export type GetDNSDNSRecordsV1Response = DNSV1ZoneRecordCollection; +export const GetDNSDNSRecordsV1Response = /*@__PURE__*/ S.suspend(() => + DNSV1ZoneRecordCollection.pipe(T.RawResponseRoot()), +).annotate({ + identifier: "GetDNSDNSRecordsV1Response", +}) as any as S.Schema; + +export interface GetDNSDNSSnapshotV1Request { + /** Domain name */ + domain: string; + /** Snapshot ID */ + snapshotId: number; +} +export const GetDNSDNSSnapshotV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + domain: S.String.pipe(T.Label()), + snapshotId: S.Number.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/dns/v1/snapshots/{domain}/{snapshotId}", + code: 200, + }), + ), +).annotate({ + identifier: "GetDNSDNSSnapshotV1Request", +}) as any as S.Schema; + +export interface DNSV1SnapshotSnapshotWithContentResource { + /** Snapshot ID */ + id?: number; + /** Reason of the update */ + reason?: string; + snapshot?: DNSV1ZoneRecordCollection; + created_at?: string; +} +export const DNSV1SnapshotSnapshotWithContentResource = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + id: S.optional(S.Number), + reason: S.optional(S.String), + snapshot: S.optional(DNSV1ZoneRecordCollection), + created_at: S.optional(S.String), + }), +).annotate({ + identifier: "DNSV1SnapshotSnapshotWithContentResource", +}) as any as S.Schema; + +export interface GetDomainDomainAuthorizationCodeV1Request { + /** Domain name */ + domain: string; +} +export const GetDomainDomainAuthorizationCodeV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + domain: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/domains/v1/portfolio/{domain}/auth-code", + code: 200, + }), + ), + ).annotate({ + identifier: "GetDomainDomainAuthorizationCodeV1Request", + }) as any as S.Schema; + +export interface DomainsV1PortfolioAuthCodeAuthCodeResource { + /** Domain authorization code used to transfer the domain to another registrar. */ + auth_code?: string | null; +} +export const DomainsV1PortfolioAuthCodeAuthCodeResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + auth_code: S.optional(S.NullOr(S.String)), + }), + ).annotate({ + identifier: "DomainsV1PortfolioAuthCodeAuthCodeResource", + }) as any as S.Schema; + +export interface GetDomainDomainDetailsV1Request { + /** Domain name */ + domain: string; +} +export const GetDomainDomainDetailsV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + domain: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/domains/v1/portfolio/{domain}", + code: 200, + }), + ), +).annotate({ + identifier: "GetDomainDomainDetailsV1Request", +}) as any as S.Schema; + +/** Status of the domain */ +export type DomainsV1DomainDomainExtendedResourceStatus = + | "active" + | "pending_setup" + | "expired" + | "requested" + | "pending_verification" + | "deleted" + | "suspended" + | "failed"; +export const DomainsV1DomainDomainExtendedResourceStatus = + /*@__PURE__*/ S.String; + +/** Name servers */ +export interface DomainsV1DomainDomainExtendedResourceNameServers { + /** Name server 1 */ + ns1?: string; + /** Name server 2 */ + ns2?: string; +} +export const DomainsV1DomainDomainExtendedResourceNameServers = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + ns1: S.optional(S.String), + ns2: S.optional(S.String), + }), + ).annotate({ + identifier: "DomainsV1DomainDomainExtendedResourceNameServers", + }) as any as S.Schema; + +export type DomainsV1DomainDomainExtendedResourceChildNameServersItemList = + Array; +export const DomainsV1DomainDomainExtendedResourceChildNameServersItemList = + /*@__PURE__*/ S.Array( + S.String, + ) as any as S.Schema; + +/** Child name servers */ +export type DomainsV1DomainDomainExtendedResourceChildNameServersList = + Array; +export const DomainsV1DomainDomainExtendedResourceChildNameServersList = + /*@__PURE__*/ S.Array( + DomainsV1DomainDomainExtendedResourceChildNameServersItemList, + ) as any as S.Schema; + +/** WHOIS profiles */ +export interface DomainsV1DomainDomainExtendedResourceDomainContacts { + /** Admin WHOIS profile ID */ + admin_id?: number; + /** Owner WHOIS profile ID */ + owner_id?: number; + /** Billing WHOIS profile ID */ + billing_id?: number; + /** Technician WHOIS profile ID */ + tech_id?: number; +} +export const DomainsV1DomainDomainExtendedResourceDomainContacts = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + admin_id: S.optional(S.Number), + owner_id: S.optional(S.Number), + billing_id: S.optional(S.Number), + tech_id: S.optional(S.Number), + }), + ).annotate({ + identifier: "DomainsV1DomainDomainExtendedResourceDomainContacts", + }) as any as S.Schema; + +export interface DomainsV1DomainDomainExtendedResource { + /** Domain name */ + domain?: string; + /** Status of the domain */ + status?: DomainsV1DomainDomainExtendedResourceStatus; + message?: string | null; + /** Is privacy protection allowed for the domain */ + is_privacy_protection_allowed?: boolean; + /** Is privacy protection enabled for the domain */ + is_privacy_protected?: boolean; + /** Is domain allowed to be locked */ + is_lockable?: boolean; + /** Is domain locked */ + is_locked?: boolean; + /** Name servers */ + name_servers?: DomainsV1DomainDomainExtendedResourceNameServers; + /** Child name servers */ + child_name_servers?: DomainsV1DomainDomainExtendedResourceChildNameServersList; + /** WHOIS profiles */ + domain_contacts?: DomainsV1DomainDomainExtendedResourceDomainContacts; + created_at?: string; + updated_at?: string; + _60_days_lock_expires_at?: string | null; + registered_at?: string | null; + expires_at?: string | null; +} +export const DomainsV1DomainDomainExtendedResource = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + domain: S.optional(S.String), + status: S.optional(DomainsV1DomainDomainExtendedResourceStatus), + message: S.optional(S.NullOr(S.String)), + is_privacy_protection_allowed: S.optional(S.Boolean), + is_privacy_protected: S.optional(S.Boolean), + is_lockable: S.optional(S.Boolean), + is_locked: S.optional(S.Boolean), + name_servers: S.optional( + DomainsV1DomainDomainExtendedResourceNameServers, + ), + child_name_servers: S.optional( + DomainsV1DomainDomainExtendedResourceChildNameServersList, + ), + domain_contacts: S.optional( + DomainsV1DomainDomainExtendedResourceDomainContacts, + ), + created_at: S.optional(S.String), + updated_at: S.optional(S.String), + _60_days_lock_expires_at: S.optional( + S.NullOr(S.String).pipe(T.Body("60_days_lock_expires_at")), + ), + registered_at: S.optional(S.NullOr(S.String)), + expires_at: S.optional(S.NullOr(S.String)), + }), +).annotate({ + identifier: "DomainsV1DomainDomainExtendedResource", +}) as any as S.Schema; + +export interface GetDomainDomainForwardingV1Request { + /** Domain name */ + domain: string; +} +export const GetDomainDomainForwardingV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + domain: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/domains/v1/forwarding/{domain}", + code: 200, + }), + ), +).annotate({ + identifier: "GetDomainDomainForwardingV1Request", +}) as any as S.Schema; + +export interface GetDomainDomainRenewalInformationV1Request { + /** Domain name */ + domain: string; +} +export const GetDomainDomainRenewalInformationV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + domain: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/domains/v1/portfolio/{domain}/renewal", + code: 200, + }), + ), + ).annotate({ + identifier: "GetDomainDomainRenewalInformationV1Request", + }) as any as S.Schema; + +export interface DomainsV1PortfolioRenewalRenewalInformationResource { + /** Domain name */ + domain?: string; + /** Domain status */ + status?: string; + /** Domain expiration date */ + expires_at?: string; +} +export const DomainsV1PortfolioRenewalRenewalInformationResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + domain: S.optional(S.String), + status: S.optional(S.String), + expires_at: S.optional(S.String), + }), + ).annotate({ + identifier: "DomainsV1PortfolioRenewalRenewalInformationResource", + }) as any as S.Schema; + +export interface GetDomainPendingIRTPVerificationV1Request { + /** Domain name */ + domain: string; +} +export const GetDomainPendingIRTPVerificationV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + domain: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/domains/v1/irtp/{domain}", + code: 200, + }), + ), + ).annotate({ + identifier: "GetDomainPendingIRTPVerificationV1Request", + }) as any as S.Schema; + +/** IRTP verification status */ +export type DomainsV1IRTPVerificationResourceStatus = + | "pending" + | "completed" + | "canceled"; +export const DomainsV1IRTPVerificationResourceStatus = /*@__PURE__*/ S.String; + +export interface DomainsV1IRTPVerificationResource { + /** Domain name */ + domain?: string; + /** IRTP verification status */ + status?: DomainsV1IRTPVerificationResourceStatus; + /** When the old registrant confirmed the change */ + old_confirmed_at?: string | null; + /** When the new registrant confirmed the change */ + new_confirmed_at?: string | null; + /** Email the old registrant confirmation was sent to */ + old_whois_profile_email?: string; + /** Email the new registrant confirmation was sent to */ + new_whois_profile_email?: string; + /** When the verification auto-cancels if unconfirmed */ + expires_at?: string; +} +export const DomainsV1IRTPVerificationResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + domain: S.optional(S.String), + status: S.optional(DomainsV1IRTPVerificationResourceStatus), + old_confirmed_at: S.optional(S.NullOr(S.String)), + new_confirmed_at: S.optional(S.NullOr(S.String)), + old_whois_profile_email: S.optional(S.String), + new_whois_profile_email: S.optional(S.String), + expires_at: S.optional(S.String), + }), +).annotate({ + identifier: "DomainsV1IRTPVerificationResource", +}) as any as S.Schema; + +export interface GetDomainTransferV1Request { + /** Domain name */ + domain: string; +} +export const GetDomainTransferV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + domain: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/domains/v1/transfers/{domain}", + code: 200, + }), + ), +).annotate({ + identifier: "GetDomainTransferV1Request", +}) as any as S.Schema; + +export interface GetDomainWHOISProfileUsageV1Request { + /** WHOIS ID */ + whoisId: number; +} +export const GetDomainWHOISProfileUsageV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + whoisId: S.Number.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/domains/v1/whois/{whoisId}/usage", + code: 200, + }), + ), +).annotate({ + identifier: "GetDomainWHOISProfileUsageV1Request", +}) as any as S.Schema; + +/** Array of domains */ +export type DomainsV1WHOISProfileUsageResource = Array; +export const DomainsV1WHOISProfileUsageResource = /*@__PURE__*/ S.Array( + S.String, +) as any as S.Schema; + +export type GetDomainWHOISProfileUsageV1Response = + DomainsV1WHOISProfileUsageResource; +export const GetDomainWHOISProfileUsageV1Response = /*@__PURE__*/ S.suspend( + () => DomainsV1WHOISProfileUsageResource.pipe(T.RawResponseRoot()), +).annotate({ + identifier: "GetDomainWHOISProfileUsageV1Response", +}) as any as S.Schema; + +export interface GetDomainWHOISProfileV1Request { + /** WHOIS ID */ + whoisId: number; +} +export const GetDomainWHOISProfileV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + whoisId: S.Number.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/domains/v1/whois/{whoisId}", + code: 200, + }), + ), +).annotate({ + identifier: "GetDomainWHOISProfileV1Request", +}) as any as S.Schema; + +export interface GetEcommerceAnOrderV1Request { + /** The ID of the store that owns the order. */ + store_id: string; + /** The ID of the order to retrieve. */ + order_id: string; +} +export const GetEcommerceAnOrderV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + store_id: S.String.pipe(T.Label()), + order_id: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/ecommerce/v1/stores/{store_id}/orders/{order_id}", + code: 200, + }), + ), +).annotate({ + identifier: "GetEcommerceAnOrderV1Request", +}) as any as S.Schema; + +/** The shipping address, or null. */ +export interface EcommerceV1OrderOrderDetailResourceShippingAddress { + name?: string | null; + company?: string | null; + address_1?: string | null; + address_2?: string | null; + city?: string | null; + province_code?: string | null; + postal_code?: string | null; + country_code?: string | null; + phone?: string | null; +} +export const EcommerceV1OrderOrderDetailResourceShippingAddress = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + name: S.optional(S.NullOr(S.String)), + company: S.optional(S.NullOr(S.String)), + address_1: S.optional(S.NullOr(S.String)), + address_2: S.optional(S.NullOr(S.String)), + city: S.optional(S.NullOr(S.String)), + province_code: S.optional(S.NullOr(S.String)), + postal_code: S.optional(S.NullOr(S.String)), + country_code: S.optional(S.NullOr(S.String)), + phone: S.optional(S.NullOr(S.String)), + }), + ).annotate({ + identifier: "EcommerceV1OrderOrderDetailResourceShippingAddress", + }) as any as S.Schema; + +/** The billing address, or null. */ +export type EcommerceV1OrderOrderDetailResourceBillingAddress = + EcommerceV1OrderOrderDetailResourceShippingAddress; +export const EcommerceV1OrderOrderDetailResourceBillingAddress = + EcommerceV1OrderOrderDetailResourceShippingAddress; + +export interface EcommerceV1OrderOrderDetailResourceItemsItem { + /** The line item ID, required by the fulfil endpoint. */ + id?: string; + /** The line item title. */ + title?: string; + /** The variant SKU. */ + sku?: string | null; + /** The variant ID. */ + variant_id?: string | null; + /** Quantity ordered. */ + quantity?: number; + /** Quantity already fulfilled. */ + fulfilled_quantity?: number; + /** Quantity returned. */ + returned_quantity?: number; + /** Unit price in the smallest currency unit. */ + unit_price?: number; + /** Line total in the smallest currency unit. */ + total?: number; +} +export const EcommerceV1OrderOrderDetailResourceItemsItem = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + id: S.optional(S.String), + title: S.optional(S.String), + sku: S.optional(S.NullOr(S.String)), + variant_id: S.optional(S.NullOr(S.String)), + quantity: S.optional(S.Number), + fulfilled_quantity: S.optional(S.Number), + returned_quantity: S.optional(S.Number), + unit_price: S.optional(S.Number), + total: S.optional(S.Number), + }), + ).annotate({ + identifier: "EcommerceV1OrderOrderDetailResourceItemsItem", + }) as any as S.Schema; + +/** The order line items. */ +export type EcommerceV1OrderOrderDetailResourceItemsList = + Array; +export const EcommerceV1OrderOrderDetailResourceItemsList = + /*@__PURE__*/ S.Array( + EcommerceV1OrderOrderDetailResourceItemsItem, + ) as any as S.Schema; + +export interface EcommerceV1OrderOrderDetailResourceFulfillmentsItemTrackingItem { + /** Carrier tracking number. */ + tracking_number?: string; + /** Public tracking URL, when available. */ + url?: string | null; +} +export const EcommerceV1OrderOrderDetailResourceFulfillmentsItemTrackingItem = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + tracking_number: S.optional(S.String), + url: S.optional(S.NullOr(S.String)), + }), + ).annotate({ + identifier: + "EcommerceV1OrderOrderDetailResourceFulfillmentsItemTrackingItem", + }) as any as S.Schema; + +/** Tracking numbers attached to the fulfilment. */ +export type EcommerceV1OrderOrderDetailResourceFulfillmentsItemTrackingList = + Array; +export const EcommerceV1OrderOrderDetailResourceFulfillmentsItemTrackingList = + /*@__PURE__*/ S.Array( + EcommerceV1OrderOrderDetailResourceFulfillmentsItemTrackingItem, + ) as any as S.Schema; + +export interface EcommerceV1OrderOrderDetailResourceFulfillmentsItem { + /** The fulfilment ID. */ + id?: string; + /** ISO timestamp of when the fulfilment was created. */ + created_at?: string; + /** ISO timestamp of when the fulfilment shipped, if known. */ + shipped_at?: string | null; + /** ISO timestamp of when the fulfilment was canceled, if any. */ + canceled_at?: string | null; + /** Tracking numbers attached to the fulfilment. */ + tracking?: EcommerceV1OrderOrderDetailResourceFulfillmentsItemTrackingList; +} +export const EcommerceV1OrderOrderDetailResourceFulfillmentsItem = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + id: S.optional(S.String), + created_at: S.optional(S.String), + shipped_at: S.optional(S.NullOr(S.String)), + canceled_at: S.optional(S.NullOr(S.String)), + tracking: S.optional( + EcommerceV1OrderOrderDetailResourceFulfillmentsItemTrackingList, + ), + }), + ).annotate({ + identifier: "EcommerceV1OrderOrderDetailResourceFulfillmentsItem", + }) as any as S.Schema; + +/** The order fulfilments with tracking. */ +export type EcommerceV1OrderOrderDetailResourceFulfillmentsList = + Array; +export const EcommerceV1OrderOrderDetailResourceFulfillmentsList = + /*@__PURE__*/ S.Array( + EcommerceV1OrderOrderDetailResourceFulfillmentsItem, + ) as any as S.Schema; + +export interface EcommerceV1OrderOrderDetailResource { + /** The order ID. */ + id?: string; + /** The order number. */ + display_id?: number; + /** The order status. */ + status?: string; + /** The payment status. */ + payment_status?: string; + /** The fulfilment status. */ + fulfillment_status?: string; + /** Order total in the smallest currency unit. */ + total?: number; + /** The order currency code. */ + currency_code?: string; + /** The customer email. */ + customer_email?: string | null; + /** Number of distinct line items. */ + item_count?: number; + /** ISO timestamp of when the order was created. */ + created_at?: string; + /** Internal note visible only to the merchant. */ + merchant_note?: string | null; + /** Subtotal in the smallest currency unit. */ + subtotal?: number; + /** Discount total in the smallest currency unit. */ + discount_total?: number; + /** Tax total in the smallest currency unit. */ + tax_total?: number; + /** Shipping total in the smallest currency unit. */ + shipping_total?: number; + /** Amount paid in the smallest currency unit. */ + paid_total?: number; + /** Amount refunded in the smallest currency unit. */ + refunded_total?: number; + /** The shipping address, or null. */ + shipping_address?: EcommerceV1OrderOrderDetailResourceShippingAddress | null; + /** The billing address, or null. */ + billing_address?: EcommerceV1OrderOrderDetailResourceShippingAddress | null; + /** The order line items. */ + items?: EcommerceV1OrderOrderDetailResourceItemsList; + /** The order fulfilments with tracking. */ + fulfillments?: EcommerceV1OrderOrderDetailResourceFulfillmentsList; +} +export const EcommerceV1OrderOrderDetailResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + id: S.optional(S.String), + display_id: S.optional(S.Number), + status: S.optional(S.String), + payment_status: S.optional(S.String), + fulfillment_status: S.optional(S.String), + total: S.optional(S.Number), + currency_code: S.optional(S.String), + customer_email: S.optional(S.NullOr(S.String)), + item_count: S.optional(S.Number), + created_at: S.optional(S.String), + merchant_note: S.optional(S.NullOr(S.String)), + subtotal: S.optional(S.Number), + discount_total: S.optional(S.Number), + tax_total: S.optional(S.Number), + shipping_total: S.optional(S.Number), + paid_total: S.optional(S.Number), + refunded_total: S.optional(S.Number), + shipping_address: S.optional( + S.NullOr(EcommerceV1OrderOrderDetailResourceShippingAddress), + ), + billing_address: S.optional( + S.NullOr(EcommerceV1OrderOrderDetailResourceShippingAddress), + ), + items: S.optional(EcommerceV1OrderOrderDetailResourceItemsList), + fulfillments: S.optional( + EcommerceV1OrderOrderDetailResourceFulfillmentsList, + ), + }), +).annotate({ + identifier: "EcommerceV1OrderOrderDetailResource", +}) as any as S.Schema; + +export interface EcommerceV1OrderOrderDetailResponseResource { + data?: EcommerceV1OrderOrderDetailResource; +} +export const EcommerceV1OrderOrderDetailResponseResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + data: S.optional(EcommerceV1OrderOrderDetailResource), + }), + ).annotate({ + identifier: "EcommerceV1OrderOrderDetailResponseResource", + }) as any as S.Schema; + +export interface GetEcommerceCustomStorefrontSetupInstructionsV1Request {} +export const GetEcommerceCustomStorefrontSetupInstructionsV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({}).pipe( + T.Http({ + method: "GET", + uri: "/api/ecommerce/v1/miscellaneous/custom-storefront-instructions", + code: 200, + }), + ), + ).annotate({ + identifier: "GetEcommerceCustomStorefrontSetupInstructionsV1Request", + }) as any as S.Schema; + +export interface EcommerceV1MiscellaneousCustomStorefrontInstructionsResource { + /** Markdown setup instructions for connecting a custom sales channel to your store. */ + instructions?: string; +} +export const EcommerceV1MiscellaneousCustomStorefrontInstructionsResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + instructions: S.optional(S.String), + }), + ).annotate({ + identifier: "EcommerceV1MiscellaneousCustomStorefrontInstructionsResource", + }) as any as S.Schema; + +export interface GetEcommerceStoreMetadataV1Request { + /** The ID of the store to read metadata for. */ + store_id: string; +} +export const GetEcommerceStoreMetadataV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + store_id: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/ecommerce/v1/stores/{store_id}/metadata", + code: 200, + }), + ), +).annotate({ + identifier: "GetEcommerceStoreMetadataV1Request", +}) as any as S.Schema; + +/** The store's default currency, or null when unset. */ +export interface EcommerceV1StoreStoreMetadataResourceMetadataDefaultCurrency { + code?: string; + symbol?: string; + symbol_native?: string; + name?: string; + name_plural?: string; + decimal_digits?: number; + rounding?: number; + template?: string | null; + min_amount?: number | null; +} +export const EcommerceV1StoreStoreMetadataResourceMetadataDefaultCurrency = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + code: S.optional(S.String), + symbol: S.optional(S.String), + symbol_native: S.optional(S.String), + name: S.optional(S.String), + name_plural: S.optional(S.String), + decimal_digits: S.optional(S.Number), + rounding: S.optional(S.Number), + template: S.optional(S.NullOr(S.String)), + min_amount: S.optional(S.NullOr(S.Number)), + }), + ).annotate({ + identifier: "EcommerceV1StoreStoreMetadataResourceMetadataDefaultCurrency", + }) as any as S.Schema; + +export interface EcommerceV1StoreStoreMetadataResourceMetadata { + /** Whether the store has at least one payment method connected. */ + has_payment_methods?: boolean; + /** Whether the store has at least one shipping option configured. */ + has_shipping?: boolean; + /** The default currency code of the store. */ + default_currency_code?: string; + /** The store's default currency, or null when unset. */ + default_currency?: EcommerceV1StoreStoreMetadataResourceMetadataDefaultCurrency | null; +} +export const EcommerceV1StoreStoreMetadataResourceMetadata = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + has_payment_methods: S.optional(S.Boolean), + has_shipping: S.optional(S.Boolean), + default_currency_code: S.optional(S.String), + default_currency: S.optional( + S.NullOr(EcommerceV1StoreStoreMetadataResourceMetadataDefaultCurrency), + ), + }), + ).annotate({ + identifier: "EcommerceV1StoreStoreMetadataResourceMetadata", + }) as any as S.Schema; + +export interface EcommerceV1StoreStoreMetadataResource { + metadata?: EcommerceV1StoreStoreMetadataResourceMetadata; +} +export const EcommerceV1StoreStoreMetadataResource = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + metadata: S.optional(EcommerceV1StoreStoreMetadataResourceMetadata), + }), +).annotate({ + identifier: "EcommerceV1StoreStoreMetadataResource", +}) as any as S.Schema; + +export interface GetEcommerceStoresV1Request { + /** Page number */ + page?: number; +} +export const GetEcommerceStoresV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + page: S.optional(S.Number.pipe(T.Query())), + }).pipe( + T.Http({ method: "GET", uri: "/api/ecommerce/v1/stores", code: 200 }), + ), +).annotate({ + identifier: "GetEcommerceStoresV1Request", +}) as any as S.Schema; + +export interface EcommerceV1StoreStoreResource { + /** Store ID */ + id?: string; + /** Store name */ + name?: string | null; + /** Creation date */ + created_at?: string; + /** Last update date */ + updated_at?: string; + /** Store platform version identifier (e.g. "v2_standalone"). */ + version?: string; + /** Company name */ + company_name?: string | null; +} +export const EcommerceV1StoreStoreResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + id: S.optional(S.String), + name: S.optional(S.NullOr(S.String)), + created_at: S.optional(S.String), + updated_at: S.optional(S.String), + version: S.optional(S.String), + company_name: S.optional(S.NullOr(S.String)), + }), +).annotate({ + identifier: "EcommerceV1StoreStoreResource", +}) as any as S.Schema; + +/** Array of [`Ecommerce.V1.Store.StoreResource`](#model/ecommercev1storestoreresource) */ +export type EcommerceV1StoreStoreCollection = + Array; +export const EcommerceV1StoreStoreCollection = /*@__PURE__*/ S.Array( + EcommerceV1StoreStoreResource, +) as any as S.Schema; + +export interface CommonSchemaPaginationMetaSchema { + current_page?: number; + per_page?: number; + total?: number; +} +export const CommonSchemaPaginationMetaSchema = /*@__PURE__*/ S.suspend(() => + S.Struct({ + current_page: S.optional(S.Number), + per_page: S.optional(S.Number), + total: S.optional(S.Number), + }), +).annotate({ + identifier: "CommonSchemaPaginationMetaSchema", +}) as any as S.Schema; + +export interface GetEcommerceStoresV1Response { + data?: EcommerceV1StoreStoreCollection; + meta?: CommonSchemaPaginationMetaSchema; +} +export const GetEcommerceStoresV1Response = /*@__PURE__*/ S.suspend(() => + S.Struct({ + data: S.optional(EcommerceV1StoreStoreCollection), + meta: S.optional(CommonSchemaPaginationMetaSchema), + }), +).annotate({ + identifier: "GetEcommerceStoresV1Response", +}) as any as S.Schema; + +export interface GetHorizonWebsiteV1Request { + /** The website ID */ + websiteId: string; +} +export const GetHorizonWebsiteV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + websiteId: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/horizons/v1/websites/{websiteId}", + code: 200, + }), + ), +).annotate({ + identifier: "GetHorizonWebsiteV1Request", +}) as any as S.Schema; + +export interface HorizonsV1WebsitesWebsiteUrlResource { + /** The website URL for the user to access their website in Hostinger Horizons interface */ + website_url: string; +} +export const HorizonsV1WebsitesWebsiteUrlResource = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + website_url: S.String, + }), +).annotate({ + identifier: "HorizonsV1WebsitesWebsiteUrlResource", +}) as any as S.Schema; + +export type GetHostingAIOptionStatusV1RequestOption = "llmstxt" | "web2agent"; +export const GetHostingAIOptionStatusV1RequestOption = /*@__PURE__*/ S.String; + +export interface GetHostingAIOptionStatusV1Request { + username: string; + /** WordPress installation (software) identifier */ + software: string; + /** Filter the status by a single AI option. */ + option?: GetHostingAIOptionStatusV1RequestOption | (string & {}); +} +export const GetHostingAIOptionStatusV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + username: S.String.pipe(T.Label()), + software: S.String.pipe(T.Label()), + option: S.optional(GetHostingAIOptionStatusV1RequestOption.pipe(T.Query())), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/hosting/v1/accounts/{username}/wordpress/{software}/hostinger-plugins/ai-option/status", + code: 200, + }), + ), +).annotate({ + identifier: "GetHostingAIOptionStatusV1Request", +}) as any as S.Schema; + +export interface WordPressV1HostingerPluginsAiOptionStatusResource { + /** Whether the llms.txt AI option is enabled. Present when the option is requested or when no specific option filter is provided. */ + is_llmstxt_enabled?: boolean | null; + /** Whether the Web2Agent AI option is enabled. Present when the option is requested or when no specific option filter is provided. */ + is_web2agent_enabled?: boolean | null; +} +export const WordPressV1HostingerPluginsAiOptionStatusResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + is_llmstxt_enabled: S.optional(S.NullOr(S.Boolean)), + is_web2agent_enabled: S.optional(S.NullOr(S.Boolean)), + }), + ).annotate({ + identifier: "WordPressV1HostingerPluginsAiOptionStatusResource", + }) as any as S.Schema; + +export interface GetHostingCronJobOutputV1Request { + username: string; + /** Unique identifier of the cron job as returned by the list cron jobs endpoint. */ + uid: string; +} +export const GetHostingCronJobOutputV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + username: S.String.pipe(T.Label()), + uid: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/hosting/v1/accounts/{username}/cron-jobs/{uid}/output", + code: 200, + }), + ), +).annotate({ + identifier: "GetHostingCronJobOutputV1Request", +}) as any as S.Schema; + +export interface HostingV1CronJobsCronJobOutputResource { + /** Output captured from the last cron job execution. Empty when the cron job has not run yet. */ + output: string; +} +export const HostingV1CronJobsCronJobOutputResource = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + output: S.String, + }), +).annotate({ + identifier: "HostingV1CronJobsCronJobOutputResource", +}) as any as S.Schema; + +export interface GetHostingInstallationJWTTokenV1Request { + username: string; + /** WordPress installation (software) identifier */ + software: string; +} +export const GetHostingInstallationJWTTokenV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + username: S.String.pipe(T.Label()), + software: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/hosting/v1/accounts/{username}/wordpress/{software}/jwt-token", + code: 200, + }), + ), +).annotate({ + identifier: "GetHostingInstallationJWTTokenV1Request", +}) as any as S.Schema; + +export interface WordPressV1InstallationsJwtTokenResource { + /** Signed JWT used to authenticate requests against the WordPress installation */ + token?: string; + /** Token lifetime in seconds from the moment it was issued */ + expires_in?: number; + /** Date-time at which the token expires, or null when not provided */ + expires_at?: string | null; + /** MCP (Model Context Protocol) endpoint URL for the WordPress installation, or null when not provided */ + mcp_url?: string | null; +} +export const WordPressV1InstallationsJwtTokenResource = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + token: S.optional(S.String), + expires_in: S.optional(S.Number), + expires_at: S.optional(S.NullOr(S.String)), + mcp_url: S.optional(S.NullOr(S.String)), + }), +).annotate({ + identifier: "WordPressV1InstallationsJwtTokenResource", +}) as any as S.Schema; + +export interface GetHostingLiteSpeedCacheStatusV1Request { + username: string; + /** WordPress installation (software) identifier */ + software: string; +} +export const GetHostingLiteSpeedCacheStatusV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + username: S.String.pipe(T.Label()), + software: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/hosting/v1/accounts/{username}/wordpress/{software}/litespeed-cache/status", + code: 200, + }), + ), +).annotate({ + identifier: "GetHostingLiteSpeedCacheStatusV1Request", +}) as any as S.Schema; + +export interface WordPressV1LitespeedLitespeedCacheStatusResource { + /** Whether the LiteSpeed Cache plugin is installed on the WordPress installation */ + is_installed?: boolean; + /** Whether the LiteSpeed Cache plugin is active on the WordPress installation */ + is_active?: boolean; +} +export const WordPressV1LitespeedLitespeedCacheStatusResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + is_installed: S.optional(S.Boolean), + is_active: S.optional(S.Boolean), + }), + ).annotate({ + identifier: "WordPressV1LitespeedLitespeedCacheStatusResource", + }) as any as S.Schema; + +export interface GetHostingMaintenanceStatusV1Request { + username: string; + /** WordPress installation (software) identifier */ + software: string; +} +export const GetHostingMaintenanceStatusV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + username: S.String.pipe(T.Label()), + software: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/hosting/v1/accounts/{username}/wordpress/{software}/maintenance/status", + code: 200, + }), + ), +).annotate({ + identifier: "GetHostingMaintenanceStatusV1Request", +}) as any as S.Schema; + +/** Current maintenance mode status for the WordPress installation */ +export type WordPressV1MaintenanceMaintenanceStatusResourceStatus = + | "enabled" + | "disabled"; +export const WordPressV1MaintenanceMaintenanceStatusResourceStatus = + /*@__PURE__*/ S.String; + +export interface WordPressV1MaintenanceMaintenanceStatusResource { + /** Current maintenance mode status for the WordPress installation */ + status?: WordPressV1MaintenanceMaintenanceStatusResourceStatus; +} +export const WordPressV1MaintenanceMaintenanceStatusResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + status: S.optional(WordPressV1MaintenanceMaintenanceStatusResourceStatus), + }), + ).annotate({ + identifier: "WordPressV1MaintenanceMaintenanceStatusResource", + }) as any as S.Schema; + +export interface GetHostingMemcachedObjectCacheStatusV1Request { + username: string; + /** WordPress installation (software) identifier */ + software: string; +} +export const GetHostingMemcachedObjectCacheStatusV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + username: S.String.pipe(T.Label()), + software: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/hosting/v1/accounts/{username}/wordpress/{software}/memcached/status", + code: 200, + }), + ), + ).annotate({ + identifier: "GetHostingMemcachedObjectCacheStatusV1Request", + }) as any as S.Schema; + +/** Current Memcached object cache status for the WordPress installation */ +export type WordPressV1MemcachedMemcachedStatusResourceStatus = + | "active" + | "inactive"; +export const WordPressV1MemcachedMemcachedStatusResourceStatus = + /*@__PURE__*/ S.String; + +export interface WordPressV1MemcachedMemcachedStatusResource { + /** Current Memcached object cache status for the WordPress installation */ + status?: WordPressV1MemcachedMemcachedStatusResourceStatus; +} +export const WordPressV1MemcachedMemcachedStatusResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + status: S.optional(WordPressV1MemcachedMemcachedStatusResourceStatus), + }), + ).annotate({ + identifier: "WordPressV1MemcachedMemcachedStatusResource", + }) as any as S.Schema; + +export interface GetHostingNodeJSBuildLogsV1Request { + username: string; + /** Domain name */ + domain: string; + /** Build UUID */ + uuid: string; + /** Line from which to start retrieving logs */ + from_line?: number; +} +export const GetHostingNodeJSBuildLogsV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + username: S.String.pipe(T.Label()), + domain: S.String.pipe(T.Label()), + uuid: S.String.pipe(T.Label()), + from_line: S.optional(S.Number.pipe(T.Query())), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/builds/{uuid}/logs", + code: 200, + }), + ), +).annotate({ + identifier: "GetHostingNodeJSBuildLogsV1Request", +}) as any as S.Schema; + +export interface HostingV1NodeJsBuildLogsResource { + /** Logs from the build process, may contain ANSI escape sequences (for colors, etc.) */ + logs: string | null; + /** Number of log lines returned */ + lines: number; +} +export const HostingV1NodeJsBuildLogsResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + logs: S.NullOr(S.String), + lines: S.Number, + }), +).annotate({ + identifier: "HostingV1NodeJsBuildLogsResource", +}) as any as S.Schema; + +export interface GetHostingPHPDetailsV1Request { + username: string; + /** Domain name */ + domain: string; +} +export const GetHostingPHPDetailsV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + username: S.String.pipe(T.Label()), + domain: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/hosting/v1/accounts/{username}/websites/{domain}/php/details", + code: 200, + }), + ), +).annotate({ + identifier: "GetHostingPHPDetailsV1Request", +}) as any as S.Schema; + +export interface HostingV1PhpPhpVersionsResource { + /** Key-value pairs of supported versions */ + supported?: unknown; + /** Key-value pairs of unsupported versions */ + unsupported?: unknown; +} +export const HostingV1PhpPhpVersionsResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + supported: S.optional(S.Unknown), + unsupported: S.optional(S.Unknown), + }), +).annotate({ + identifier: "HostingV1PhpPhpVersionsResource", +}) as any as S.Schema; + +export interface HostingV1PhpPhpOptionResource { + /** Declared option type (e.g. bool, string) */ + type?: string; + /** Current value for this website */ + value?: string; + /** Human-readable description */ + comment?: string; + /** Default value */ + default?: string; + /** Allowed value range or limits, when applicable */ + range?: string | null; + /** Maximum value allowed by the account hosting plan, when applicable */ + max?: string | null; +} +export const HostingV1PhpPhpOptionResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + type: S.optional(S.String), + value: S.optional(S.String), + comment: S.optional(S.String), + default: S.optional(S.String), + range: S.optional(S.NullOr(S.String)), + max: S.optional(S.NullOr(S.String)), + }), +).annotate({ + identifier: "HostingV1PhpPhpOptionResource", +}) as any as S.Schema; + +/** PHP options keyed by option name */ +export type HostingV1PhpPhpDetailsResourceOptionsMap = { + [key: string]: HostingV1PhpPhpOptionResource | undefined; +}; +export const HostingV1PhpPhpDetailsResourceOptionsMap = /*@__PURE__*/ S.Record( + S.String, + HostingV1PhpPhpOptionResource, +) as any as S.Schema; + +export type HostingV1PhpPhpDetailsResourceConflictingExtensionsItemList = + Array; +export const HostingV1PhpPhpDetailsResourceConflictingExtensionsItemList = + /*@__PURE__*/ S.Array( + S.String, + ) as any as S.Schema; + +/** Groups of extensions that conflict with each other */ +export type HostingV1PhpPhpDetailsResourceConflictingExtensionsList = + Array; +export const HostingV1PhpPhpDetailsResourceConflictingExtensionsList = + /*@__PURE__*/ S.Array( + HostingV1PhpPhpDetailsResourceConflictingExtensionsItemList, + ) as any as S.Schema; + +export interface HostingV1PhpPhpDetailsResource { + /** Current PHP version name */ + php_version?: string; + /** Full PHP version name */ + php_version_full?: string; + php_versions?: HostingV1PhpPhpVersionsResource; + /** PHP options keyed by option name */ + options?: HostingV1PhpPhpDetailsResourceOptionsMap; + /** PHP extensions keyed by extension name */ + extensions?: unknown; + /** Groups of extensions that conflict with each other */ + conflicting_extensions?: HostingV1PhpPhpDetailsResourceConflictingExtensionsList; +} +export const HostingV1PhpPhpDetailsResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + php_version: S.optional(S.String), + php_version_full: S.optional(S.String), + php_versions: S.optional(HostingV1PhpPhpVersionsResource), + options: S.optional(HostingV1PhpPhpDetailsResourceOptionsMap), + extensions: S.optional(S.Unknown), + conflicting_extensions: S.optional( + HostingV1PhpPhpDetailsResourceConflictingExtensionsList, + ), + }), +).annotate({ + identifier: "HostingV1PhpPhpDetailsResource", +}) as any as S.Schema; + +export interface GetHostingPHPInfoV1Request { + username: string; + /** Domain name */ + domain: string; +} +export const GetHostingPHPInfoV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + username: S.String.pipe(T.Label()), + domain: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/hosting/v1/accounts/{username}/websites/{domain}/php/php-info", + code: 200, + }), + ), +).annotate({ + identifier: "GetHostingPHPInfoV1Request", +}) as any as S.Schema; + +export interface HostingV1PhpPhpInfoResource { + /** HTML string containing the full phpinfo page */ + info?: string; +} +export const HostingV1PhpPhpInfoResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + info: S.optional(S.String), + }), +).annotate({ + identifier: "HostingV1PhpPhpInfoResource", +}) as any as S.Schema; + +export interface GetHostingPhpMyAdminLinkV1Request { + username: string; + /** Full database name as returned by the list databases endpoint. */ + name: string; +} +export const GetHostingPhpMyAdminLinkV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + username: S.String.pipe(T.Label()), + name: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/hosting/v1/accounts/{username}/databases/{name}/phpmyadmin-link", + code: 200, + }), + ), +).annotate({ + identifier: "GetHostingPhpMyAdminLinkV1Request", +}) as any as S.Schema; + +export interface HostingV1DatabasesPhpMyAdminLinkResource { + /** Direct sign-on URL to phpMyAdmin for the specified database. */ + link: string; +} +export const HostingV1DatabasesPhpMyAdminLinkResource = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + link: S.String, + }), +).annotate({ + identifier: "HostingV1DatabasesPhpMyAdminLinkResource", +}) as any as S.Schema; + +export interface GetHostingWebsiteFileContentV1Request { + username: string; + /** Domain name */ + domain: string; + /** File path, relative to the document root. */ + path: string; + /** Line offset to start reading from. */ + from_line?: number; + /** Max number of lines to return. */ + max_lines?: number; +} +export const GetHostingWebsiteFileContentV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + username: S.String.pipe(T.Label()), + domain: S.String.pipe(T.Label()), + path: S.String.pipe(T.Query()), + from_line: S.optional(S.Number.pipe(T.Query())), + max_lines: S.optional(S.Number.pipe(T.Query())), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/hosting/v1/accounts/{username}/domains/{domain}/files/content", + code: 200, + }), + ), +).annotate({ + identifier: "GetHostingWebsiteFileContentV1Request", +}) as any as S.Schema; + +export interface HostingV1FilesFileContentResource { + /** File path, relative to the document root. */ + path: string; + /** File content for the requested line range. */ + content: string; + /** Line offset the returned content starts from. */ + from_line: number; + /** Total number of lines in the file. */ + total_lines: number; + /** Total file size in bytes. */ + size_bytes: number; +} +export const HostingV1FilesFileContentResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + path: S.String, + content: S.String, + from_line: S.Number, + total_lines: S.Number, + size_bytes: S.Number, + }), +).annotate({ + identifier: "HostingV1FilesFileContentResource", +}) as any as S.Schema; + +export interface GetHostingWordPressCoreVersionV1Request { + username: string; + /** WordPress installation (software) identifier */ + software: string; +} +export const GetHostingWordPressCoreVersionV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + username: S.String.pipe(T.Label()), + software: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/hosting/v1/accounts/{username}/wordpress/{software}/version", + code: 200, + }), + ), +).annotate({ + identifier: "GetHostingWordPressCoreVersionV1Request", +}) as any as S.Schema; + +export interface WordPressV1CommonVulnerabilityResource { + /** Short title of the vulnerability */ + title?: string; + /** Details about the vulnerability */ + description?: string; + /** Version in which the vulnerability was introduced or is present */ + affected_in?: string; + /** Version in which the vulnerability was fixed */ + fixed_in?: string; + /** Link to the vulnerability advisory */ + direct_url?: string; +} +export const WordPressV1CommonVulnerabilityResource = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + title: S.optional(S.String), + description: S.optional(S.String), + affected_in: S.optional(S.String), + fixed_in: S.optional(S.String), + direct_url: S.optional(S.String), + }), +).annotate({ + identifier: "WordPressV1CommonVulnerabilityResource", +}) as any as S.Schema; + +/** Known vulnerabilities affecting the installed core version */ +export type WordPressV1InstallationsVersionResourceVulnerabilitiesList = + Array; +export const WordPressV1InstallationsVersionResourceVulnerabilitiesList = + /*@__PURE__*/ S.Array( + WordPressV1CommonVulnerabilityResource, + ) as any as S.Schema; + +export interface WordPressV1InstallationsVersionResource { + /** Installed WordPress core version */ + version?: string; + /** Known vulnerabilities affecting the installed core version */ + vulnerabilities?: WordPressV1InstallationsVersionResourceVulnerabilitiesList; +} +export const WordPressV1InstallationsVersionResource = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + version: S.optional(S.String), + vulnerabilities: S.optional( + WordPressV1InstallationsVersionResourceVulnerabilitiesList, + ), + }), +).annotate({ + identifier: "WordPressV1InstallationsVersionResource", +}) as any as S.Schema; + +export interface GetMailOrderPlanV1Request { + /** Order resource ID */ + orderId: string; +} +export const GetMailOrderPlanV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + orderId: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/mail/v1/orders/{orderId}/plan", + code: 200, + }), + ), +).annotate({ + identifier: "GetMailOrderPlanV1Request", +}) as any as S.Schema; + +export interface MailV1OrdersPlanDomainResource { + /** Maximum number of mailboxes per domain */ + mailbox_quota?: number; + /** Maximum number of forwarders per domain */ + forwarder_quota?: number; + /** Maximum number of aliases per domain */ + alias_quota?: number; + /** Whether catch-all mailboxes are available */ + is_catchall_enabled?: boolean; + /** Whether IMAP access is available */ + is_imap_enabled?: boolean; + /** Whether POP3 access is available */ + is_pop3_enabled?: boolean; +} +export const MailV1OrdersPlanDomainResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + mailbox_quota: S.optional(S.Number), + forwarder_quota: S.optional(S.Number), + alias_quota: S.optional(S.Number), + is_catchall_enabled: S.optional(S.Boolean), + is_imap_enabled: S.optional(S.Boolean), + is_pop3_enabled: S.optional(S.Boolean), + }), +).annotate({ + identifier: "MailV1OrdersPlanDomainResource", +}) as any as S.Schema; + +export interface MailV1OrdersPlanMailboxResource { + /** Storage quota per mailbox in megabytes */ + storage_quota?: number; + /** Maximum number of stored messages per mailbox */ + messages_quota?: number; + /** Maximum number of forwarders per mailbox */ + forwarder_quota?: number; + /** Maximum number of aliases per mailbox */ + alias_quota?: number; + /** Maximum outbound message size in bytes */ + max_outbound_message_size?: number; + /** Maximum outbound attachment size in bytes */ + max_outbound_attachment_size?: number; + /** Maximum number of recipients per outbound message */ + max_outbound_recipient_limit?: number; + /** Inbound message rate limit as `messages/seconds` */ + rate_limit_inbound?: string; + /** Outbound message rate limit as `messages/seconds` */ + rate_limit_outbound?: string; +} +export const MailV1OrdersPlanMailboxResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + storage_quota: S.optional(S.Number), + messages_quota: S.optional(S.Number), + forwarder_quota: S.optional(S.Number), + alias_quota: S.optional(S.Number), + max_outbound_message_size: S.optional(S.Number), + max_outbound_attachment_size: S.optional(S.Number), + max_outbound_recipient_limit: S.optional(S.Number), + rate_limit_inbound: S.optional(S.String), + rate_limit_outbound: S.optional(S.String), + }), +).annotate({ + identifier: "MailV1OrdersPlanMailboxResource", +}) as any as S.Schema; + +export interface MailV1OrdersPlanResource { + /** Machine name of the plan */ + name?: string; + /** Human-readable plan title */ + title?: string; + domain?: MailV1OrdersPlanDomainResource; + mailbox?: MailV1OrdersPlanMailboxResource; +} +export const MailV1OrdersPlanResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + name: S.optional(S.String), + title: S.optional(S.String), + domain: S.optional(MailV1OrdersPlanDomainResource), + mailbox: S.optional(MailV1OrdersPlanMailboxResource), + }), +).annotate({ + identifier: "MailV1OrdersPlanResource", +}) as any as S.Schema; + +export interface GetMailWebhookV1Request { + /** Webhook ID (returned when the webhook was created) */ + webhookId: string; +} +export const GetMailWebhookV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + webhookId: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/mail/v1/webhooks/{webhookId}", + code: 200, + }), + ), +).annotate({ + identifier: "GetMailWebhookV1Request", +}) as any as S.Schema; + +export type MailV1WebhooksWebhookResourceEventsItem = "message.received"; +export const MailV1WebhooksWebhookResourceEventsItem = /*@__PURE__*/ S.String; + +/** Events that trigger this webhook */ +export type MailV1WebhooksWebhookResourceEventsList = + Array; +export const MailV1WebhooksWebhookResourceEventsList = /*@__PURE__*/ S.Array( + MailV1WebhooksWebhookResourceEventsItem, +) as any as S.Schema; + +/** Current status of the webhook */ +export type MailV1WebhooksWebhookResourceStatus = + | "active" + | "disabled" + | "paused"; +export const MailV1WebhooksWebhookResourceStatus = /*@__PURE__*/ S.String; + +export interface MailV1WebhooksWebhookResource { + /** Unique webhook identifier */ + id?: string; + mailbox?: MailV1WebhooksWebhookMailboxResource; + /** Human-readable name for this webhook */ + name?: string; + /** Optional description of the webhook's purpose */ + description?: string | null; + /** Events that trigger this webhook */ + events?: MailV1WebhooksWebhookResourceEventsList; + /** Current status of the webhook */ + status?: MailV1WebhooksWebhookResourceStatus; + /** URL that receives webhook POST requests */ + url?: string; + created_at?: string; + updated_at?: string; +} +export const MailV1WebhooksWebhookResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + id: S.optional(S.String), + mailbox: S.optional(MailV1WebhooksWebhookMailboxResource), + name: S.optional(S.String), + description: S.optional(S.NullOr(S.String)), + events: S.optional(MailV1WebhooksWebhookResourceEventsList), + status: S.optional(MailV1WebhooksWebhookResourceStatus), + url: S.optional(S.String), + created_at: S.optional(S.String), + updated_at: S.optional(S.String), + }), +).annotate({ + identifier: "MailV1WebhooksWebhookResource", +}) as any as S.Schema; + +export interface GetReachAutomationDetailsV1Request { + /** Profile uuid parameter */ + profileUuid: string; + /** Automation uuid parameter */ + automationUuid: string; +} +export const GetReachAutomationDetailsV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + profileUuid: S.String.pipe(T.Label()), + automationUuid: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/reach/v1/profiles/{profileUuid}/automations/{automationUuid}", + code: 200, + }), + ), +).annotate({ + identifier: "GetReachAutomationDetailsV1Request", +}) as any as S.Schema; + +/** There is no `completed` status. Use `events.completed` to see how many contacts finished. */ +export type ReachV1AutomationsAutomationResourceStatus = + | "active" + | "paused" + | "draft"; +export const ReachV1AutomationsAutomationResourceStatus = + /*@__PURE__*/ S.String; + +/** What kind of workflow this is. `custom` automations are the ones built from scratch. */ +export type ReachV1AutomationsAutomationResourceType = + | "welcome" + | "welcome_series" + | "promotional_series" + | "trust_building_series" + | "ecommerce_abandoned_cart" + | "ecommerce_recommend_after_purchase" + | "ecommerce_post_purchase" + | "ecommerce_discount_after_purchase" + | "re_engagement_non_openers" + | "re_engagement_non_clickers" + | "form_submitted" + | "custom"; +export const ReachV1AutomationsAutomationResourceType = /*@__PURE__*/ S.String; + +/** Counts of contacts moving through the automation. These are not email engagement metrics. Automations expose no sent, open or click counters - use the campaign statistics endpoint for those. */ +export interface ReachV1AutomationsAutomationEventsResource { + /** Contacts that ever entered the automation, including those that already left it. */ + started?: number; + /** Contacts currently moving through the automation, including those waiting on a delay step. */ + in_progress?: number; + /** Contacts that reached the end of the workflow. */ + completed?: number; + /** Contacts whose journey through the automation errored and stopped. */ + failed?: number; +} +export const ReachV1AutomationsAutomationEventsResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + started: S.optional(S.Number), + in_progress: S.optional(S.Number), + completed: S.optional(S.Number), + failed: S.optional(S.Number), + }), + ).annotate({ + identifier: "ReachV1AutomationsAutomationEventsResource", + }) as any as S.Schema; + +export interface ReachV1AutomationsAutomationResource { + uuid?: string; + name?: string; + /** There is no `completed` status. Use `events.completed` to see how many contacts finished. */ + status?: ReachV1AutomationsAutomationResourceStatus; + /** What kind of workflow this is. `custom` automations are the ones built from scratch. */ + type?: ReachV1AutomationsAutomationResourceType; + /** Trigger configuration of the automation. The shape depends on the type. */ + config?: unknown | null; + events?: ReachV1AutomationsAutomationEventsResource; + created_at?: string | null; + updated_at?: string | null; +} +export const ReachV1AutomationsAutomationResource = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + uuid: S.optional(S.String), + name: S.optional(S.String), + status: S.optional(ReachV1AutomationsAutomationResourceStatus), + type: S.optional(ReachV1AutomationsAutomationResourceType), + config: S.optional(S.NullOr(S.Unknown)), + events: S.optional(ReachV1AutomationsAutomationEventsResource), + created_at: S.optional(S.NullOr(S.String)), + updated_at: S.optional(S.NullOr(S.String)), + }), +).annotate({ + identifier: "ReachV1AutomationsAutomationResource", +}) as any as S.Schema; + +export interface GetReachCampaignDetailsV1Request { + /** Profile uuid parameter */ + profileUuid: string; + /** Campaign uuid parameter */ + campaignUuid: string; +} +export const GetReachCampaignDetailsV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + profileUuid: S.String.pipe(T.Label()), + campaignUuid: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/reach/v1/profiles/{profileUuid}/campaigns/{campaignUuid}", + code: 200, + }), + ), +).annotate({ + identifier: "GetReachCampaignDetailsV1Request", +}) as any as S.Schema; + +/** A fully sent campaign is `publish`. There is no `sent`, `paused` or `archived` status. */ +export type ReachV1CampaignsCampaignDetailsResourceStatus = + | "draft" + | "scheduled" + | "sending" + | "publish" + | "failed"; +export const ReachV1CampaignsCampaignDetailsResourceStatus = + /*@__PURE__*/ S.String; + +export type ReachV1CampaignsCampaignDetailsResourceType = + | "campaign" + | "automation" + | "double_opt_in"; +export const ReachV1CampaignsCampaignDetailsResourceType = + /*@__PURE__*/ S.String; + +/** Delivery progress. While the campaign is `sending`, `total_sent` climbs towards the estimate. */ +export interface ReachV1CampaignsCampaignDeliveryResource { + /** Emails sent so far. */ + total_sent?: number; + /** Recipients this campaign was estimated to reach when sending started. Null for campaigns that have not started sending. */ + estimated_total_recipients?: number | null; + /** Contacts currently targeted by this campaign. */ + subscribers_count?: number; +} +export const ReachV1CampaignsCampaignDeliveryResource = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + total_sent: S.optional(S.Number), + estimated_total_recipients: S.optional(S.NullOr(S.Number)), + subscribers_count: S.optional(S.Number), + }), +).annotate({ + identifier: "ReachV1CampaignsCampaignDeliveryResource", +}) as any as S.Schema; + +/** Segments this campaign targets. Empty when it targets all contacts. */ +export type ReachV1CampaignsCampaignDetailsResourceSegmentUuidsList = + Array; +export const ReachV1CampaignsCampaignDetailsResourceSegmentUuidsList = + /*@__PURE__*/ S.Array( + S.String, + ) as any as S.Schema; + +export interface ReachV1CampaignsCampaignDetailsResource { + uuid?: string; + title?: string; + subject?: string; + sender_name?: string; + sender_email?: string; + /** The email template this campaign uses. The template title is not exposed. */ + template_uuid?: string | null; + /** A fully sent campaign is `publish`. There is no `sent`, `paused` or `archived` status. */ + status?: ReachV1CampaignsCampaignDetailsResourceStatus; + type?: ReachV1CampaignsCampaignDetailsResourceType; + /** Set only while the status is `failed`. */ + failure_reason?: string | null; + /** Whether delivery time is picked per contact rather than sent to everyone at once. */ + is_smart_send?: boolean; + /** Whether the campaign targets every contact instead of the listed segments. */ + is_all_contacts?: boolean; + delivery?: ReachV1CampaignsCampaignDeliveryResource; + /** Segments this campaign targets. Empty when it targets all contacts. */ + segment_uuids?: ReachV1CampaignsCampaignDetailsResourceSegmentUuidsList; + created_at?: string; + updated_at?: string | null; + sent_at?: string | null; + scheduled_at?: string | null; +} +export const ReachV1CampaignsCampaignDetailsResource = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + uuid: S.optional(S.String), + title: S.optional(S.String), + subject: S.optional(S.String), + sender_name: S.optional(S.String), + sender_email: S.optional(S.String), + template_uuid: S.optional(S.NullOr(S.String)), + status: S.optional(ReachV1CampaignsCampaignDetailsResourceStatus), + type: S.optional(ReachV1CampaignsCampaignDetailsResourceType), + failure_reason: S.optional(S.NullOr(S.String)), + is_smart_send: S.optional(S.Boolean), + is_all_contacts: S.optional(S.Boolean), + delivery: S.optional(ReachV1CampaignsCampaignDeliveryResource), + segment_uuids: S.optional( + ReachV1CampaignsCampaignDetailsResourceSegmentUuidsList, + ), + created_at: S.optional(S.String), + updated_at: S.optional(S.NullOr(S.String)), + sent_at: S.optional(S.NullOr(S.String)), + scheduled_at: S.optional(S.NullOr(S.String)), + }), +).annotate({ + identifier: "ReachV1CampaignsCampaignDetailsResource", +}) as any as S.Schema; + +export interface GetReachCampaignPerformanceV1Request { + /** Profile uuid parameter */ + profileUuid: string; + /** Campaign uuid parameter */ + campaignUuid: string; +} +export const GetReachCampaignPerformanceV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + profileUuid: S.String.pipe(T.Label()), + campaignUuid: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/reach/v1/profiles/{profileUuid}/campaigns/{campaignUuid}/statistics", + code: 200, + }), + ), +).annotate({ + identifier: "GetReachCampaignPerformanceV1Request", +}) as any as S.Schema; + +/** Campaign performance. Every count is unique contacts rather than raw events, so a contact who opens the same email five times is counted once. */ +export interface ReachV1CampaignsCampaignStatisticsResource { + /** Emails sent for this campaign, and the denominator of every rate below. */ + total_sent?: number; + /** Recipients this campaign was estimated to reach when sending started. Null for campaigns that have not started sending. */ + estimated_total_recipients?: number | null; + processed_count?: number; + delivered_count?: number; + dropped_count?: number; + bounced_count?: number; + soft_bounced_count?: number; + /** Contacts who opened this campaign. */ + opened_count?: number; + /** Contacts who clicked a link. Only clicks from contacts who also registered an open count. */ + clicked_count?: number; + /** Contacts who unsubscribed through this campaign. */ + unsubscribed_count?: number; + /** Percentage of sent emails that were opened. */ + open_rate?: number; + /** Percentage of sent emails that got a click. */ + click_rate?: number; + /** Percentage of the contacts who opened that went on to click. */ + click_to_open_rate?: number; + /** Percentage of sent emails that led to an unsubscribe. */ + unsubscribe_rate?: number; + has_bounced_contacts?: boolean; +} +export const ReachV1CampaignsCampaignStatisticsResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + total_sent: S.optional(S.Number), + estimated_total_recipients: S.optional(S.NullOr(S.Number)), + processed_count: S.optional(S.Number), + delivered_count: S.optional(S.Number), + dropped_count: S.optional(S.Number), + bounced_count: S.optional(S.Number), + soft_bounced_count: S.optional(S.Number), + opened_count: S.optional(S.Number), + clicked_count: S.optional(S.Number), + unsubscribed_count: S.optional(S.Number), + open_rate: S.optional(S.Number), + click_rate: S.optional(S.Number), + click_to_open_rate: S.optional(S.Number), + unsubscribe_rate: S.optional(S.Number), + has_bounced_contacts: S.optional(S.Boolean), + }), + ).annotate({ + identifier: "ReachV1CampaignsCampaignStatisticsResource", + }) as any as S.Schema; + +export interface GetReachConnectedSendingDomainV1Request { + /** Profile uuid parameter */ + profileUuid: string; +} +export const GetReachConnectedSendingDomainV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + profileUuid: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/reach/v1/profiles/{profileUuid}/domains", + code: 200, + }), + ), +).annotate({ + identifier: "GetReachConnectedSendingDomainV1Request", +}) as any as S.Schema; + +/** Campaigns can only be sent while the domain is `active`. */ +export type ReachV1ProfilesDomainsSendingDomainResourceStatus = + | "active" + | "inactive" + | "pending" + | "blocked"; +export const ReachV1ProfilesDomainsSendingDomainResourceStatus = + /*@__PURE__*/ S.String; + +/** A sender address on the connected domain that is no longer allowed to send. */ +export interface ReachV1ProfilesDomainsSuspendedSenderEmailResource { + email?: string; + /** The part of the address before the @. */ + email_local_part?: string; + suspended_at?: string; +} +export const ReachV1ProfilesDomainsSuspendedSenderEmailResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + email: S.optional(S.String), + email_local_part: S.optional(S.String), + suspended_at: S.optional(S.String), + }), + ).annotate({ + identifier: "ReachV1ProfilesDomainsSuspendedSenderEmailResource", + }) as any as S.Schema; + +/** Sender addresses on this domain that have been suspended. A campaign using one of them will not go out even while the domain itself is active. */ +export type ReachV1ProfilesDomainsSendingDomainResourceSuspendedSenderEmailsList = + Array; +export const ReachV1ProfilesDomainsSendingDomainResourceSuspendedSenderEmailsList = + /*@__PURE__*/ S.Array( + ReachV1ProfilesDomainsSuspendedSenderEmailResource, + ) as any as S.Schema; + +/** The sending domain connected to the profile. When no domain is connected every field is `null` and `suspended_sender_emails` is empty, so the shape stays the same whether or not the profile is set up for sending. */ +export interface ReachV1ProfilesDomainsSendingDomainResource { + /** Domain campaigns are sent from. It may be a subdomain of the domain that was connected, so it will not always match the website domain. */ + domain?: string | null; + /** Campaigns can only be sent while the domain is `active`. */ + status?: ReachV1ProfilesDomainsSendingDomainResourceStatus | null; + /** When the domain was connected to the profile. */ + created_at?: string | null; + /** When the domain or its verification state last changed. */ + updated_at?: string | null; + /** Sender addresses on this domain that have been suspended. A campaign using one of them will not go out even while the domain itself is active. */ + suspended_sender_emails?: ReachV1ProfilesDomainsSendingDomainResourceSuspendedSenderEmailsList; +} +export const ReachV1ProfilesDomainsSendingDomainResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + domain: S.optional(S.NullOr(S.String)), + status: S.optional( + S.NullOr(ReachV1ProfilesDomainsSendingDomainResourceStatus), + ), + created_at: S.optional(S.NullOr(S.String)), + updated_at: S.optional(S.NullOr(S.String)), + suspended_sender_emails: S.optional( + ReachV1ProfilesDomainsSendingDomainResourceSuspendedSenderEmailsList, + ), + }), + ).annotate({ + identifier: "ReachV1ProfilesDomainsSendingDomainResource", + }) as any as S.Schema; + +export interface GetReachContactDetailsV1Request { + /** Profile uuid parameter */ + profileUuid: string; + /** Contact uuid parameter */ + contactUuid: string; +} +export const GetReachContactDetailsV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + profileUuid: S.String.pipe(T.Label()), + contactUuid: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/reach/v1/profiles/{profileUuid}/contacts/{contactUuid}", + code: 200, + }), + ), +).annotate({ + identifier: "GetReachContactDetailsV1Request", +}) as any as S.Schema; + +export type ReachV1ContactsContactDetailsResourceSubscriptionStatus = + | "subscribed" + | "unsubscribed" + | "confirmed" + | "pending"; +export const ReachV1ContactsContactDetailsResourceSubscriptionStatus = + /*@__PURE__*/ S.String; + +export type ReachV1ContactsContactDetailsResourceSource = + | "sync" + | "import" + | "manual" + | "api" + | "form" + | "checkout" + | "horizons"; +export const ReachV1ContactsContactDetailsResourceSource = + /*@__PURE__*/ S.String; + +export type ReachV1ContactsContactDetailsResourceTagsList = + Array; +export const ReachV1ContactsContactDetailsResourceTagsList = + /*@__PURE__*/ S.Array( + ReachV1ContactsTagsTagResource, + ) as any as S.Schema; + +export type ReachV1ContactsFieldsContactFieldValueResourceType = + | "text" + | "number" + | "date" + | "single_choice" + | "multi_choice"; +export const ReachV1ContactsFieldsContactFieldValueResourceType = + /*@__PURE__*/ S.String; + +/** Chosen options for the choice field types, empty for the scalar types */ +export type ReachV1ContactsFieldsContactFieldValueResourceSelectedOptionUuidsList = + Array; +export const ReachV1ContactsFieldsContactFieldValueResourceSelectedOptionUuidsList = + /*@__PURE__*/ S.Array( + S.String, + ) as any as S.Schema; + +/** Every option the field offers, not only the selected ones */ +export type ReachV1ContactsFieldsContactFieldValueResourceOptionsList = + Array; +export const ReachV1ContactsFieldsContactFieldValueResourceOptionsList = + /*@__PURE__*/ S.Array( + ReachV1ContactsFieldsContactFieldOptionResource, + ) as any as S.Schema; + +/** A custom contact field together with the value held by one contact */ +export interface ReachV1ContactsFieldsContactFieldValueResource { + uuid?: string; + type?: ReachV1ContactsFieldsContactFieldValueResourceType; + label?: string; + slug?: string; + /** Set for the scalar field types, null for the choice types */ + value?: string | null; + /** Chosen options for the choice field types, empty for the scalar types */ + selected_option_uuids?: ReachV1ContactsFieldsContactFieldValueResourceSelectedOptionUuidsList; + /** Every option the field offers, not only the selected ones */ + options?: ReachV1ContactsFieldsContactFieldValueResourceOptionsList; +} +export const ReachV1ContactsFieldsContactFieldValueResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + uuid: S.optional(S.String), + type: S.optional(ReachV1ContactsFieldsContactFieldValueResourceType), + label: S.optional(S.String), + slug: S.optional(S.String), + value: S.optional(S.NullOr(S.String)), + selected_option_uuids: S.optional( + ReachV1ContactsFieldsContactFieldValueResourceSelectedOptionUuidsList, + ), + options: S.optional( + ReachV1ContactsFieldsContactFieldValueResourceOptionsList, + ), + }), + ).annotate({ + identifier: "ReachV1ContactsFieldsContactFieldValueResource", + }) as any as S.Schema; + +/** Custom field values held by this contact */ +export type ReachV1ContactsContactDetailsResourceFieldsList = + Array; +export const ReachV1ContactsContactDetailsResourceFieldsList = + /*@__PURE__*/ S.Array( + ReachV1ContactsFieldsContactFieldValueResource, + ) as any as S.Schema; + +export interface ReachV1ContactsContactDetailsResource { + uuid?: string; + email?: string; + name?: string | null; + surname?: string | null; + phone?: string | null; + subscription_status?: ReachV1ContactsContactDetailsResourceSubscriptionStatus; + subscribed_at?: string | null; + unsubscribed_at?: string | null; + created_at?: string | null; + domain?: string | null; + source?: ReachV1ContactsContactDetailsResourceSource | null; + note?: string | null; + tags?: ReachV1ContactsContactDetailsResourceTagsList; + /** Custom field values held by this contact */ + fields?: ReachV1ContactsContactDetailsResourceFieldsList; +} +export const ReachV1ContactsContactDetailsResource = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + uuid: S.optional(S.String), + email: S.optional(S.String), + name: S.optional(S.NullOr(S.String)), + surname: S.optional(S.NullOr(S.String)), + phone: S.optional(S.NullOr(S.String)), + subscription_status: S.optional( + ReachV1ContactsContactDetailsResourceSubscriptionStatus, + ), + subscribed_at: S.optional(S.NullOr(S.String)), + unsubscribed_at: S.optional(S.NullOr(S.String)), + created_at: S.optional(S.NullOr(S.String)), + domain: S.optional(S.NullOr(S.String)), + source: S.optional(S.NullOr(ReachV1ContactsContactDetailsResourceSource)), + note: S.optional(S.NullOr(S.String)), + tags: S.optional(ReachV1ContactsContactDetailsResourceTagsList), + fields: S.optional(ReachV1ContactsContactDetailsResourceFieldsList), + }), +).annotate({ + identifier: "ReachV1ContactsContactDetailsResource", +}) as any as S.Schema; + +export interface GetReachFormDetailsV1Request { + /** Profile uuid parameter */ + profileUuid: string; + /** Form uuid parameter */ + formUuid: string; +} +export const GetReachFormDetailsV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + profileUuid: S.String.pipe(T.Label()), + formUuid: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/reach/v1/profiles/{profileUuid}/forms/{formUuid}", + code: 200, + }), + ), +).annotate({ + identifier: "GetReachFormDetailsV1Request", +}) as any as S.Schema; + +/** A `paused` form keeps its template online but stops accepting submissions. */ +export type ReachV1FormsFormDetailsResourceStatus = + | "active" + | "paused" + | "draft"; +export const ReachV1FormsFormDetailsResourceStatus = /*@__PURE__*/ S.String; + +export type ReachV1FormsFormDetailsResourceType = "form"; +export const ReachV1FormsFormDetailsResourceType = /*@__PURE__*/ S.String; + +/** The rendered form template. There is no ready-made embed snippet - either serve the HTML behind `url` or build your own embed around the form uuid. All fields stay null until the template has been generated. */ +export interface ReachV1FormsFormTemplateDetailsResource { + uuid?: string | null; + /** Storage path of the template HTML, relative to the storage directory of this profile. `url` already includes that prefix, so prefer it unless you resolve storage paths yourself. */ + path?: string | null; + /** Publicly reachable URL of the template HTML. */ + url?: string | null; +} +export const ReachV1FormsFormTemplateDetailsResource = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + uuid: S.optional(S.NullOr(S.String)), + path: S.optional(S.NullOr(S.String)), + url: S.optional(S.NullOr(S.String)), + }), +).annotate({ + identifier: "ReachV1FormsFormTemplateDetailsResource", +}) as any as S.Schema; + +/** How the tag came about. `custom` covers the tags you create yourself, `import` the ones added by contact imports, and `form` and `system` the ones Reach creates on its own. Every form gets a `form:{name}` tag when it is created. */ +export type ReachV1FormsFormTagResourceType = + | "form" + | "custom" + | "import" + | "system"; +export const ReachV1FormsFormTagResourceType = /*@__PURE__*/ S.String; + +/** A tag applied to every contact this form captures. */ +export interface ReachV1FormsFormTagResource { + uuid?: string; + value?: string; + /** How the tag came about. `custom` covers the tags you create yourself, `import` the ones added by contact imports, and `form` and `system` the ones Reach creates on its own. Every form gets a `form:{name}` tag when it is created. */ + type?: ReachV1FormsFormTagResourceType; +} +export const ReachV1FormsFormTagResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + uuid: S.optional(S.String), + value: S.optional(S.String), + type: S.optional(ReachV1FormsFormTagResourceType), + }), +).annotate({ + identifier: "ReachV1FormsFormTagResource", +}) as any as S.Schema; + +/** Tags applied to every contact this form captures. */ +export type ReachV1FormsFormDetailsResourceTagsList = + Array; +export const ReachV1FormsFormDetailsResourceTagsList = /*@__PURE__*/ S.Array( + ReachV1FormsFormTagResource, +) as any as S.Schema; + +export interface ReachV1FormsFormDetailsResource { + uuid?: string; + name?: string; + /** A `paused` form keeps its template online but stops accepting submissions. */ + status?: ReachV1FormsFormDetailsResourceStatus; + type?: ReachV1FormsFormDetailsResourceType; + template?: ReachV1FormsFormTemplateDetailsResource; + /** Tags applied to every contact this form captures. */ + tags?: ReachV1FormsFormDetailsResourceTagsList; + created_at?: string; + updated_at?: string | null; +} +export const ReachV1FormsFormDetailsResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + uuid: S.optional(S.String), + name: S.optional(S.String), + status: S.optional(ReachV1FormsFormDetailsResourceStatus), + type: S.optional(ReachV1FormsFormDetailsResourceType), + template: S.optional(ReachV1FormsFormTemplateDetailsResource), + tags: S.optional(ReachV1FormsFormDetailsResourceTagsList), + created_at: S.optional(S.String), + updated_at: S.optional(S.NullOr(S.String)), + }), +).annotate({ + identifier: "ReachV1FormsFormDetailsResource", +}) as any as S.Schema; + +export interface GetReachProfileDomainDNSStatusV1Request { + /** Profile uuid parameter */ + profileUuid: string; +} +export const GetReachProfileDomainDNSStatusV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + profileUuid: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/reach/v1/profiles/{profileUuid}/domains/dns-status", + code: 200, + }), + ), +).annotate({ + identifier: "GetReachProfileDomainDNSStatusV1Request", +}) as any as S.Schema; + +export interface ReachV1ProfilesDomainsDnsRecordStatusActualItem { + type?: string; + value?: string; +} +export const ReachV1ProfilesDomainsDnsRecordStatusActualItem = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + type: S.optional(S.String), + value: S.optional(S.String), + }), + ).annotate({ + identifier: "ReachV1ProfilesDomainsDnsRecordStatusActualItem", + }) as any as S.Schema; + +export type ReachV1ProfilesDomainsDnsRecordStatusActualList = + Array; +export const ReachV1ProfilesDomainsDnsRecordStatusActualList = + /*@__PURE__*/ S.Array( + ReachV1ProfilesDomainsDnsRecordStatusActualItem, + ) as any as S.Schema; + +export interface ReachV1ProfilesDomainsDnsRecordStatusSuggestedItem { + name?: string; + type?: string; + value?: string; +} +export const ReachV1ProfilesDomainsDnsRecordStatusSuggestedItem = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + name: S.optional(S.String), + type: S.optional(S.String), + value: S.optional(S.String), + }), + ).annotate({ + identifier: "ReachV1ProfilesDomainsDnsRecordStatusSuggestedItem", + }) as any as S.Schema; + +export type ReachV1ProfilesDomainsDnsRecordStatusSuggestedList = + Array; +export const ReachV1ProfilesDomainsDnsRecordStatusSuggestedList = + /*@__PURE__*/ S.Array( + ReachV1ProfilesDomainsDnsRecordStatusSuggestedItem, + ) as any as S.Schema; + +export interface ReachV1ProfilesDomainsDnsRecordStatus { + actual?: ReachV1ProfilesDomainsDnsRecordStatusActualList; + suggested?: ReachV1ProfilesDomainsDnsRecordStatusSuggestedList; + is_valid?: boolean; +} +export const ReachV1ProfilesDomainsDnsRecordStatus = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + actual: S.optional(ReachV1ProfilesDomainsDnsRecordStatusActualList), + suggested: S.optional(ReachV1ProfilesDomainsDnsRecordStatusSuggestedList), + is_valid: S.optional(S.Boolean), + }), +).annotate({ + identifier: "ReachV1ProfilesDomainsDnsRecordStatus", +}) as any as S.Schema; + +export interface ReachV1ProfilesDomainsDnsStatusResource { + domain?: string; + mx?: ReachV1ProfilesDomainsDnsRecordStatus; + spf?: ReachV1ProfilesDomainsDnsRecordStatus; + dkim?: ReachV1ProfilesDomainsDnsRecordStatus; + dmarc?: ReachV1ProfilesDomainsDnsRecordStatus; +} +export const ReachV1ProfilesDomainsDnsStatusResource = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + domain: S.optional(S.String), + mx: S.optional(ReachV1ProfilesDomainsDnsRecordStatus), + spf: S.optional(ReachV1ProfilesDomainsDnsRecordStatus), + dkim: S.optional(ReachV1ProfilesDomainsDnsRecordStatus), + dmarc: S.optional(ReachV1ProfilesDomainsDnsRecordStatus), + }), +).annotate({ + identifier: "ReachV1ProfilesDomainsDnsStatusResource", +}) as any as S.Schema; + +export interface GetReachProfileSegmentDetailsV1Request { + /** Profile uuid parameter */ + profileUuid: string; + /** Segment uuid parameter */ + segmentUuid: string; +} +export const GetReachProfileSegmentDetailsV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + profileUuid: S.String.pipe(T.Label()), + segmentUuid: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/reach/v1/profiles/{profileUuid}/segmentation/segments/{segmentUuid}", + code: 200, + }), + ), +).annotate({ + identifier: "GetReachProfileSegmentDetailsV1Request", +}) as any as S.Schema; + +export interface GetReachRemainingPlanLimitsV1Request { + /** Profile uuid parameter */ + profileUuid: string; +} +export const GetReachRemainingPlanLimitsV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + profileUuid: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/reach/v1/profiles/{profileUuid}/limits", + code: 200, + }), + ), +).annotate({ + identifier: "GetReachRemainingPlanLimitsV1Request", +}) as any as S.Schema; + +/** Allowance, consumption and headroom of a single plan limit for the current period. */ +export interface ReachV1ProfilesPlanLimitUsageResource { + /** The allowance for the current period. */ + limit?: number; + /** How much of the allowance has been consumed so far. */ + used?: number; + /** Headroom left. Floors at 0, so it never reports a negative overage. */ + remaining?: number; +} +export const ReachV1ProfilesPlanLimitUsageResource = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + limit: S.optional(S.Number), + used: S.optional(S.Number), + remaining: S.optional(S.Number), + }), +).annotate({ + identifier: "ReachV1ProfilesPlanLimitUsageResource", +}) as any as S.Schema; + +/** What the plan allows and what is left of it for the current period. `emails` counts every email sent. `recipients` counts the distinct contacts emailed - it is not the size of the contact list, a contact emailed three times counts once and a contact never emailed does not count at all. `ai_credits` counts the AI generations used, and its limit includes any extra credits bought on top of the plan. */ +export interface ReachV1ProfilesPlanLimitsResource { + emails?: ReachV1ProfilesPlanLimitUsageResource; + recipients?: ReachV1ProfilesPlanLimitUsageResource; + ai_credits?: ReachV1ProfilesPlanLimitUsageResource; + /** Start of the current period. Periods are calendar months rather than billing anniversaries, so the counters reset at midnight UTC on the 1st no matter when the subscription started. */ + period_start?: string; + /** End of the current period, that is the last moment of the calendar month. */ + period_end?: string; +} +export const ReachV1ProfilesPlanLimitsResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + emails: S.optional(ReachV1ProfilesPlanLimitUsageResource), + recipients: S.optional(ReachV1ProfilesPlanLimitUsageResource), + ai_credits: S.optional(ReachV1ProfilesPlanLimitUsageResource), + period_start: S.optional(S.String), + period_end: S.optional(S.String), + }), +).annotate({ + identifier: "ReachV1ProfilesPlanLimitsResource", +}) as any as S.Schema; + +/** The list of domains for which to get verification details for. */ +export type GetV2DomainVerificationsDIRECTRequestDomainsList = Array; +export const GetV2DomainVerificationsDIRECTRequestDomainsList = + /*@__PURE__*/ S.Array( + S.String, + ) as any as S.Schema; + +export interface GetV2DomainVerificationsDIRECTRequest { + /** The list of domains for which to get verification details for. */ + domains: GetV2DomainVerificationsDIRECTRequestDomainsList; +} +export const GetV2DomainVerificationsDIRECTRequest = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + domains: GetV2DomainVerificationsDIRECTRequestDomainsList, + }).pipe( + T.Http({ + method: "GET", + uri: "/api/v2/direct/verifications/active", + code: 200, + }), + ), +).annotate({ + identifier: "GetV2DomainVerificationsDIRECTRequest", +}) as any as S.Schema; + +/** Verification records */ +export type DomainAccessVerifierV2VerificationsActiveVerificationsCollectionDataPENDINGDOMAINTLDVERIFICATIONTYPERecordsList = + Array; +export const DomainAccessVerifierV2VerificationsActiveVerificationsCollectionDataPENDINGDOMAINTLDVERIFICATIONTYPERecordsList = + /*@__PURE__*/ S.Array( + S.String, + ) as any as S.Schema; + +/** Verification type ("NAMESERVERS" or "TXT"). Only verification types that exist for this domain will be present. */ +export interface DomainAccessVerifierV2VerificationsActiveVerificationsCollectionDataPENDINGDOMAINTLDVERIFICATIONTYPE { + /** Verification records */ + records?: DomainAccessVerifierV2VerificationsActiveVerificationsCollectionDataPENDINGDOMAINTLDVERIFICATIONTYPERecordsList; + /** Datetime when last verification attempt occurred */ + last_verification_attempt?: string; + /** Datetime when next verification attempt will occur */ + next_verification_attempt?: string; + /** Datetime when verification expires */ + verification_expiration?: string; +} +export const DomainAccessVerifierV2VerificationsActiveVerificationsCollectionDataPENDINGDOMAINTLDVERIFICATIONTYPE = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + records: S.optional( + DomainAccessVerifierV2VerificationsActiveVerificationsCollectionDataPENDINGDOMAINTLDVERIFICATIONTYPERecordsList, + ), + last_verification_attempt: S.optional(S.String), + next_verification_attempt: S.optional(S.String), + verification_expiration: S.optional(S.String), + }), + ).annotate({ + identifier: + "DomainAccessVerifierV2VerificationsActiveVerificationsCollectionDataPENDINGDOMAINTLDVERIFICATIONTYPE", + }) as any as S.Schema; + +/** Domain name (example). Contains verification types as properties. */ +export interface DomainAccessVerifierV2VerificationsActiveVerificationsCollectionDataPENDINGDOMAINTLD { + /** Verification type ("NAMESERVERS" or "TXT"). Only verification types that exist for this domain will be present. */ + VERIFICATION_TYPE?: DomainAccessVerifierV2VerificationsActiveVerificationsCollectionDataPENDINGDOMAINTLDVERIFICATIONTYPE; +} +export const DomainAccessVerifierV2VerificationsActiveVerificationsCollectionDataPENDINGDOMAINTLD = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + VERIFICATION_TYPE: S.optional( + DomainAccessVerifierV2VerificationsActiveVerificationsCollectionDataPENDINGDOMAINTLDVERIFICATIONTYPE, + ), + }), + ).annotate({ + identifier: + "DomainAccessVerifierV2VerificationsActiveVerificationsCollectionDataPENDINGDOMAINTLD", + }) as any as S.Schema; + +/** Pending verifications grouped by domain. Keys are domain names (e.g., "pixel.tld"). This property will not be returned if no pending verifications are found. */ +export interface DomainAccessVerifierV2VerificationsActiveVerificationsCollectionDataPENDING { + /** Domain name (example). Contains verification types as properties. */ + DOMAIN_TLD?: DomainAccessVerifierV2VerificationsActiveVerificationsCollectionDataPENDINGDOMAINTLD; +} +export const DomainAccessVerifierV2VerificationsActiveVerificationsCollectionDataPENDING = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + DOMAIN_TLD: S.optional( + DomainAccessVerifierV2VerificationsActiveVerificationsCollectionDataPENDINGDOMAINTLD.pipe( + T.Body("DOMAIN.TLD"), + ), + ), + }), + ).annotate({ + identifier: + "DomainAccessVerifierV2VerificationsActiveVerificationsCollectionDataPENDING", + }) as any as S.Schema; + +/** Verification records */ +export type DomainAccessVerifierV2VerificationsActiveVerificationsCollectionDataVERIFIEDDOMAINTLDVERIFICATIONTYPERecordsList = + Array; +export const DomainAccessVerifierV2VerificationsActiveVerificationsCollectionDataVERIFIEDDOMAINTLDVERIFICATIONTYPERecordsList = + /*@__PURE__*/ S.Array( + S.String, + ) as any as S.Schema; + +/** Verification type (e.g., "NAMESERVERS", "TXT"). Only verification types that exist for this domain will be present. */ +export interface DomainAccessVerifierV2VerificationsActiveVerificationsCollectionDataVERIFIEDDOMAINTLDVERIFICATIONTYPE { + /** Verification records */ + records?: DomainAccessVerifierV2VerificationsActiveVerificationsCollectionDataVERIFIEDDOMAINTLDVERIFICATIONTYPERecordsList; +} +export const DomainAccessVerifierV2VerificationsActiveVerificationsCollectionDataVERIFIEDDOMAINTLDVERIFICATIONTYPE = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + records: S.optional( + DomainAccessVerifierV2VerificationsActiveVerificationsCollectionDataVERIFIEDDOMAINTLDVERIFICATIONTYPERecordsList, + ), + }), + ).annotate({ + identifier: + "DomainAccessVerifierV2VerificationsActiveVerificationsCollectionDataVERIFIEDDOMAINTLDVERIFICATIONTYPE", + }) as any as S.Schema; + +/** Domain name (example). Contains verification types as properties. */ +export interface DomainAccessVerifierV2VerificationsActiveVerificationsCollectionDataVERIFIEDDOMAINTLD { + /** Verification type (e.g., "NAMESERVERS", "TXT"). Only verification types that exist for this domain will be present. */ + VERIFICATION_TYPE?: DomainAccessVerifierV2VerificationsActiveVerificationsCollectionDataVERIFIEDDOMAINTLDVERIFICATIONTYPE; +} +export const DomainAccessVerifierV2VerificationsActiveVerificationsCollectionDataVERIFIEDDOMAINTLD = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + VERIFICATION_TYPE: S.optional( + DomainAccessVerifierV2VerificationsActiveVerificationsCollectionDataVERIFIEDDOMAINTLDVERIFICATIONTYPE, + ), + }), + ).annotate({ + identifier: + "DomainAccessVerifierV2VerificationsActiveVerificationsCollectionDataVERIFIEDDOMAINTLD", + }) as any as S.Schema; + +/** Verified verifications grouped by domain. Keys are domain names (e.g., "byte.tld"). This property will not be returned if no verified verifications are found. */ +export interface DomainAccessVerifierV2VerificationsActiveVerificationsCollectionDataVERIFIED { + /** Domain name (example). Contains verification types as properties. */ + DOMAIN_TLD?: DomainAccessVerifierV2VerificationsActiveVerificationsCollectionDataVERIFIEDDOMAINTLD; +} +export const DomainAccessVerifierV2VerificationsActiveVerificationsCollectionDataVERIFIED = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + DOMAIN_TLD: S.optional( + DomainAccessVerifierV2VerificationsActiveVerificationsCollectionDataVERIFIEDDOMAINTLD.pipe( + T.Body("DOMAIN.TLD"), + ), + ), + }), + ).annotate({ + identifier: + "DomainAccessVerifierV2VerificationsActiveVerificationsCollectionDataVERIFIED", + }) as any as S.Schema; + +/** List of active verifications by status. If no verifications are found, this will return an empty array. */ +export interface DomainAccessVerifierV2VerificationsActiveVerificationsCollectionData { + /** Pending verifications grouped by domain. Keys are domain names (e.g., "pixel.tld"). This property will not be returned if no pending verifications are found. */ + PENDING?: DomainAccessVerifierV2VerificationsActiveVerificationsCollectionDataPENDING; + /** Verified verifications grouped by domain. Keys are domain names (e.g., "byte.tld"). This property will not be returned if no verified verifications are found. */ + VERIFIED?: DomainAccessVerifierV2VerificationsActiveVerificationsCollectionDataVERIFIED; +} +export const DomainAccessVerifierV2VerificationsActiveVerificationsCollectionData = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + PENDING: S.optional( + DomainAccessVerifierV2VerificationsActiveVerificationsCollectionDataPENDING, + ), + VERIFIED: S.optional( + DomainAccessVerifierV2VerificationsActiveVerificationsCollectionDataVERIFIED, + ), + }), + ).annotate({ + identifier: + "DomainAccessVerifierV2VerificationsActiveVerificationsCollectionData", + }) as any as S.Schema; + +/** Returns active verifications (PENDING and VERIFIED) grouped by status and domain. Includes last and next verification attempt dates and expiration for PENDING verifications. */ +export interface DomainAccessVerifierV2VerificationsActiveVerificationsCollection { + /** List of active verifications by status. If no verifications are found, this will return an empty array. */ + data?: DomainAccessVerifierV2VerificationsActiveVerificationsCollectionData; +} +export const DomainAccessVerifierV2VerificationsActiveVerificationsCollection = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + data: S.optional( + DomainAccessVerifierV2VerificationsActiveVerificationsCollectionData, + ), + }), + ).annotate({ + identifier: + "DomainAccessVerifierV2VerificationsActiveVerificationsCollection", + }) as any as S.Schema; + +export interface GetVPSActionDetailsV1Request { + /** Virtual Machine ID */ + virtualMachineId: number; + /** Action ID */ + actionId: number; +} +export const GetVPSActionDetailsV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + virtualMachineId: S.Number.pipe(T.Label()), + actionId: S.Number.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/vps/v1/virtual-machines/{virtualMachineId}/actions/{actionId}", + code: 200, + }), + ), +).annotate({ + identifier: "GetVPSActionDetailsV1Request", +}) as any as S.Schema; + +export interface GetVPSActionsV1Request { + /** Virtual Machine ID */ + virtualMachineId: number; + /** Page number */ + page?: number; +} +export const GetVPSActionsV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + virtualMachineId: S.Number.pipe(T.Label()), + page: S.optional(S.Number.pipe(T.Query())), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/vps/v1/virtual-machines/{virtualMachineId}/actions", + code: 200, + }), + ), +).annotate({ + identifier: "GetVPSActionsV1Request", +}) as any as S.Schema; + +/** Array of [`VPS.V1.Action.ActionResource`](#model/vpsv1actionactionresource) */ +export type VPSV1ActionActionCollection = Array; +export const VPSV1ActionActionCollection = /*@__PURE__*/ S.Array( + VPSV1ActionActionResource, +) as any as S.Schema; + +export interface GetVPSActionsV1Response { + data?: VPSV1ActionActionCollection; + meta?: CommonSchemaPaginationMetaSchema; +} +export const GetVPSActionsV1Response = /*@__PURE__*/ S.suspend(() => + S.Struct({ + data: S.optional(VPSV1ActionActionCollection), + meta: S.optional(CommonSchemaPaginationMetaSchema), + }), +).annotate({ + identifier: "GetVPSActionsV1Response", +}) as any as S.Schema; + +export interface GetVPSAttachedPublicKeysV1Request { + /** Virtual Machine ID */ + virtualMachineId: number; + /** Page number */ + page?: number; +} +export const GetVPSAttachedPublicKeysV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + virtualMachineId: S.Number.pipe(T.Label()), + page: S.optional(S.Number.pipe(T.Query())), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/vps/v1/virtual-machines/{virtualMachineId}/public-keys", + code: 200, + }), + ), +).annotate({ + identifier: "GetVPSAttachedPublicKeysV1Request", +}) as any as S.Schema; + +/** Array of [`VPS.V1.PublicKey.PublicKeyResource`](#model/vpsv1publickeypublickeyresource) */ +export type VPSV1PublicKeyPublicKeyCollection = + Array; +export const VPSV1PublicKeyPublicKeyCollection = /*@__PURE__*/ S.Array( + VPSV1PublicKeyPublicKeyResource, +) as any as S.Schema; + +export interface GetVPSAttachedPublicKeysV1Response { + data?: VPSV1PublicKeyPublicKeyCollection; + meta?: CommonSchemaPaginationMetaSchema; +} +export const GetVPSAttachedPublicKeysV1Response = /*@__PURE__*/ S.suspend(() => + S.Struct({ + data: S.optional(VPSV1PublicKeyPublicKeyCollection), + meta: S.optional(CommonSchemaPaginationMetaSchema), + }), +).annotate({ + identifier: "GetVPSAttachedPublicKeysV1Response", +}) as any as S.Schema; + +export interface GetVPSBackupsV1Request { + /** Virtual Machine ID */ + virtualMachineId: number; + /** Page number */ + page?: number; +} +export const GetVPSBackupsV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + virtualMachineId: S.Number.pipe(T.Label()), + page: S.optional(S.Number.pipe(T.Query())), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/vps/v1/virtual-machines/{virtualMachineId}/backups", + code: 200, + }), + ), +).annotate({ + identifier: "GetVPSBackupsV1Request", +}) as any as S.Schema; + +export interface VPSV1BackupBackupResource { + /** Backup ID */ + id?: number; + /** Backup size in kilobytes */ + size?: number; + /** Estimated backup restore time in seconds */ + restore_time?: number; + /** Location of the backup */ + location?: string; + created_at?: string; +} +export const VPSV1BackupBackupResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + id: S.optional(S.Number), + size: S.optional(S.Number), + restore_time: S.optional(S.Number), + location: S.optional(S.String), + created_at: S.optional(S.String), + }), +).annotate({ + identifier: "VPSV1BackupBackupResource", +}) as any as S.Schema; + +/** Array of [`VPS.V1.Backup.BackupResource`](#model/vpsv1backupbackupresource) */ +export type VPSV1BackupBackupCollection = Array; +export const VPSV1BackupBackupCollection = /*@__PURE__*/ S.Array( + VPSV1BackupBackupResource, +) as any as S.Schema; + +export interface GetVPSBackupsV1Response { + data?: VPSV1BackupBackupCollection; + meta?: CommonSchemaPaginationMetaSchema; +} +export const GetVPSBackupsV1Response = /*@__PURE__*/ S.suspend(() => + S.Struct({ + data: S.optional(VPSV1BackupBackupCollection), + meta: S.optional(CommonSchemaPaginationMetaSchema), + }), +).annotate({ + identifier: "GetVPSBackupsV1Response", +}) as any as S.Schema; + +export interface GetVPSFirewallDetailsV1Request { + /** Firewall ID */ + firewallId: number; +} +export const GetVPSFirewallDetailsV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + firewallId: S.Number.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/vps/v1/firewall/{firewallId}", + code: 200, + }), + ), +).annotate({ + identifier: "GetVPSFirewallDetailsV1Request", +}) as any as S.Schema; + +export interface GetVPSMetricsV1Request { + /** Virtual Machine ID */ + virtualMachineId: number; + date_from: string; + date_to: string; +} +export const GetVPSMetricsV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + virtualMachineId: S.Number.pipe(T.Label()), + date_from: S.String.pipe(T.Query()), + date_to: S.String.pipe(T.Query()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/vps/v1/virtual-machines/{virtualMachineId}/metrics", + code: 200, + }), + ), +).annotate({ + identifier: "GetVPSMetricsV1Request", +}) as any as S.Schema; + +export interface VPSV1MetricsMetricsResource { + /** Measurement unit */ + unit?: string; + /** Object, containing UNIX timestamps as a key and measurement as a value. */ + usage?: unknown; +} +export const VPSV1MetricsMetricsResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + unit: S.optional(S.String), + usage: S.optional(S.Unknown), + }), +).annotate({ + identifier: "VPSV1MetricsMetricsResource", +}) as any as S.Schema; + +export interface VPSV1MetricsMetricsCollection { + /** CPU usage in percentage, 0 - 100% */ + cpu_usage?: VPSV1MetricsMetricsResource | null; + /** RAM usage in bytes */ + ram_usage?: VPSV1MetricsMetricsResource | null; + /** Disk space usage in bytes */ + disk_space?: VPSV1MetricsMetricsResource | null; + /** Outgoing traffic in bytes */ + outgoing_traffic?: VPSV1MetricsMetricsResource | null; + /** Incoming traffic in bytes */ + incoming_traffic?: VPSV1MetricsMetricsResource | null; + /** Uptime in milliseconds */ + uptime?: VPSV1MetricsMetricsResource | null; +} +export const VPSV1MetricsMetricsCollection = /*@__PURE__*/ S.suspend(() => + S.Struct({ + cpu_usage: S.optional(S.NullOr(VPSV1MetricsMetricsResource)), + ram_usage: S.optional(S.NullOr(VPSV1MetricsMetricsResource)), + disk_space: S.optional(S.NullOr(VPSV1MetricsMetricsResource)), + outgoing_traffic: S.optional(S.NullOr(VPSV1MetricsMetricsResource)), + incoming_traffic: S.optional(S.NullOr(VPSV1MetricsMetricsResource)), + uptime: S.optional(S.NullOr(VPSV1MetricsMetricsResource)), + }), +).annotate({ + identifier: "VPSV1MetricsMetricsCollection", +}) as any as S.Schema; + +export interface GetVPSProjectContainersV1Request { + /** Virtual Machine ID */ + virtualMachineId: number; + /** Docker Compose project name using alphanumeric characters, dashes, and underscores only */ + projectName: string; +} +export const GetVPSProjectContainersV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + virtualMachineId: S.Number.pipe(T.Label()), + projectName: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/vps/v1/virtual-machines/{virtualMachineId}/docker/{projectName}/containers", + code: 200, + }), + ), +).annotate({ + identifier: "GetVPSProjectContainersV1Request", +}) as any as S.Schema; + +/** Programmatic container lifecycle state for automated processing */ +export type VPSV1DockerManagerContainerResourceState = + | "created" + | "running" + | "restarting" + | "exited" + | "paused" + | "dead" + | "stopping"; +export const VPSV1DockerManagerContainerResourceState = /*@__PURE__*/ S.String; + +/** Container health status */ +export type VPSV1DockerManagerContainerResourceHealth = + | "starting" + | "healthy" + | "unhealthy" + | ""; +export const VPSV1DockerManagerContainerResourceHealth = /*@__PURE__*/ S.String; + +/** Port mapping type - published (accessible from host), exposed (only internal), or range variants */ +export type VPSV1DockerManagerContainerPortResourceType = + | "published" + | "published_range" + | "exposed" + | "exposed_range"; +export const VPSV1DockerManagerContainerPortResourceType = + /*@__PURE__*/ S.String; + +/** Network protocol used for communication */ +export type VPSV1DockerManagerContainerPortResourceProtocol = "tcp" | "udp"; +export const VPSV1DockerManagerContainerPortResourceProtocol = + /*@__PURE__*/ S.String; + +export interface VPSV1DockerManagerContainerPortResource { + /** Port mapping type - published (accessible from host), exposed (only internal), or range variants */ + type?: VPSV1DockerManagerContainerPortResourceType; + /** Network protocol used for communication */ + protocol?: VPSV1DockerManagerContainerPortResourceProtocol; + /** IP address on host where port is bound (null for exposed-only ports) */ + host_ip?: string | null; + /** Port number on host machine (null for exposed-only or range ports) */ + host_port?: number | null; + /** Port number inside container (null for range ports) */ + container_port?: number | null; + /** Starting port number in host port range (null for single ports) */ + host_port_start?: number | null; + /** Ending port number in host port range (null for single ports) */ + host_port_end?: number | null; + /** Starting port number in container port range (null for single ports) */ + container_port_start?: number | null; + /** Ending port number in container port range (null for single ports) */ + container_port_end?: number | null; +} +export const VPSV1DockerManagerContainerPortResource = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + type: S.optional(VPSV1DockerManagerContainerPortResourceType), + protocol: S.optional(VPSV1DockerManagerContainerPortResourceProtocol), + host_ip: S.optional(S.NullOr(S.String)), + host_port: S.optional(S.NullOr(S.Number)), + container_port: S.optional(S.NullOr(S.Number)), + host_port_start: S.optional(S.NullOr(S.Number)), + host_port_end: S.optional(S.NullOr(S.Number)), + container_port_start: S.optional(S.NullOr(S.Number)), + container_port_end: S.optional(S.NullOr(S.Number)), + }), +).annotate({ + identifier: "VPSV1DockerManagerContainerPortResource", +}) as any as S.Schema; + +/** Array of [`VPS.V1.DockerManager.ContainerPortResource`](#model/vpsv1dockermanagercontainerportresource) */ +export type VPSV1DockerManagerContainerPortCollection = + Array; +export const VPSV1DockerManagerContainerPortCollection = /*@__PURE__*/ S.Array( + VPSV1DockerManagerContainerPortResource, +) as any as S.Schema; + +export interface VPSV1DockerManagerContainerStatsResource { + /** CPU usage in percentage */ + cpu_percentage?: number; + /** Memory usage in percentage */ + memory_percentage?: number; + /** Used memory in bytes */ + memory_used?: number; + /** Total available memory in bytes */ + memory_total?: number; + /** Inbound network traffic in bytes */ + net_in?: number; + /** Outbound network traffic in bytes */ + net_out?: number; +} +export const VPSV1DockerManagerContainerStatsResource = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + cpu_percentage: S.optional(S.Number), + memory_percentage: S.optional(S.Number), + memory_used: S.optional(S.Number), + memory_total: S.optional(S.Number), + net_in: S.optional(S.Number), + net_out: S.optional(S.Number), + }), +).annotate({ + identifier: "VPSV1DockerManagerContainerStatsResource", +}) as any as S.Schema; + +export interface VPSV1DockerManagerContainerResource { + /** Unique container identifier (short form of Docker container ID) */ + id?: string; + /** Container name as defined in docker-compose or assigned by Docker */ + name?: string; + /** Docker image name and tag used to create this container */ + image?: string; + /** Command being executed inside the container (may be truncated with ...) */ + command?: string; + /** Human-readable container status including uptime, exit codes, or error information */ + status?: string; + /** Programmatic container lifecycle state for automated processing */ + state?: VPSV1DockerManagerContainerResourceState; + /** Container health status */ + health?: VPSV1DockerManagerContainerResourceHealth; + ports?: VPSV1DockerManagerContainerPortCollection; + /** Real-time resource usage statistics (only available for running containers) */ + stats?: VPSV1DockerManagerContainerStatsResource | null; +} +export const VPSV1DockerManagerContainerResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + id: S.optional(S.String), + name: S.optional(S.String), + image: S.optional(S.String), + command: S.optional(S.String), + status: S.optional(S.String), + state: S.optional(VPSV1DockerManagerContainerResourceState), + health: S.optional(VPSV1DockerManagerContainerResourceHealth), + ports: S.optional(VPSV1DockerManagerContainerPortCollection), + stats: S.optional(S.NullOr(VPSV1DockerManagerContainerStatsResource)), + }), +).annotate({ + identifier: "VPSV1DockerManagerContainerResource", +}) as any as S.Schema; + +/** Array of [`VPS.V1.DockerManager.ContainerResource`](#model/vpsv1dockermanagercontainerresource) */ +export type VPSV1DockerManagerContainerCollection = + Array; +export const VPSV1DockerManagerContainerCollection = /*@__PURE__*/ S.Array( + VPSV1DockerManagerContainerResource, +) as any as S.Schema; + +export type GetVPSProjectContainersV1Response = + VPSV1DockerManagerContainerCollection; +export const GetVPSProjectContainersV1Response = /*@__PURE__*/ S.suspend(() => + VPSV1DockerManagerContainerCollection.pipe(T.RawResponseRoot()), +).annotate({ + identifier: "GetVPSProjectContainersV1Response", +}) as any as S.Schema; + +export interface GetVPSProjectContentsV1Request { + /** Virtual Machine ID */ + virtualMachineId: number; + /** Docker Compose project name using alphanumeric characters, dashes, and underscores only */ + projectName: string; +} +export const GetVPSProjectContentsV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + virtualMachineId: S.Number.pipe(T.Label()), + projectName: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/vps/v1/virtual-machines/{virtualMachineId}/docker/{projectName}", + code: 200, + }), + ), +).annotate({ + identifier: "GetVPSProjectContentsV1Request", +}) as any as S.Schema; + +export interface VPSV1DockerManagerContentResource { + /** Contents of docker-compose file */ + content?: string; + /** Project environment variables */ + environment?: string | null; +} +export const VPSV1DockerManagerContentResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + content: S.optional(S.String), + environment: S.optional(S.NullOr(S.String)), + }), +).annotate({ + identifier: "VPSV1DockerManagerContentResource", +}) as any as S.Schema; + +export interface GetVPSProjectLogsV1Request { + /** Virtual Machine ID */ + virtualMachineId: number; + /** Docker Compose project name using alphanumeric characters, dashes, and underscores only */ + projectName: string; +} +export const GetVPSProjectLogsV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + virtualMachineId: S.Number.pipe(T.Label()), + projectName: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/vps/v1/virtual-machines/{virtualMachineId}/docker/{projectName}/logs", + code: 200, + }), + ), +).annotate({ + identifier: "GetVPSProjectLogsV1Request", +}) as any as S.Schema; + +export interface VPSV1DockerManagerLogEntryResource { + /** ISO 8601 formatted timestamp when the log entry was generated by the container */ + timestamp?: string; + /** Raw log message content as output by the application inside the container */ + line?: string; +} +export const VPSV1DockerManagerLogEntryResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + timestamp: S.optional(S.String), + line: S.optional(S.String), + }), +).annotate({ + identifier: "VPSV1DockerManagerLogEntryResource", +}) as any as S.Schema; + +/** Array of [`VPS.V1.DockerManager.LogEntryResource`](#model/vpsv1dockermanagerlogentryresource) */ +export type VPSV1DockerManagerLogEntryCollection = + Array; +export const VPSV1DockerManagerLogEntryCollection = /*@__PURE__*/ S.Array( + VPSV1DockerManagerLogEntryResource, +) as any as S.Schema; + +export interface VPSV1DockerManagerLogsResource { + /** Name of the Docker Compose service that generated these log entries */ + service?: string; + entries?: VPSV1DockerManagerLogEntryCollection; +} +export const VPSV1DockerManagerLogsResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + service: S.optional(S.String), + entries: S.optional(VPSV1DockerManagerLogEntryCollection), + }), +).annotate({ + identifier: "VPSV1DockerManagerLogsResource", +}) as any as S.Schema; + +/** Array of [`VPS.V1.DockerManager.LogsResource`](#model/vpsv1dockermanagerlogsresource) */ +export type VPSV1DockerManagerLogsCollection = + Array; +export const VPSV1DockerManagerLogsCollection = /*@__PURE__*/ S.Array( + VPSV1DockerManagerLogsResource, +) as any as S.Schema; + +export type GetVPSProjectLogsV1Response = VPSV1DockerManagerLogsCollection; +export const GetVPSProjectLogsV1Response = /*@__PURE__*/ S.suspend(() => + VPSV1DockerManagerLogsCollection.pipe(T.RawResponseRoot()), +).annotate({ + identifier: "GetVPSProjectLogsV1Response", +}) as any as S.Schema; + +export interface GetVPSPublicKeysV1Request { + /** Page number */ + page?: number; +} +export const GetVPSPublicKeysV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + page: S.optional(S.Number.pipe(T.Query())), + }).pipe(T.Http({ method: "GET", uri: "/api/vps/v1/public-keys", code: 200 })), +).annotate({ + identifier: "GetVPSPublicKeysV1Request", +}) as any as S.Schema; + +export interface GetVPSPublicKeysV1Response { + data?: VPSV1PublicKeyPublicKeyCollection; + meta?: CommonSchemaPaginationMetaSchema; +} +export const GetVPSPublicKeysV1Response = /*@__PURE__*/ S.suspend(() => + S.Struct({ + data: S.optional(VPSV1PublicKeyPublicKeyCollection), + meta: S.optional(CommonSchemaPaginationMetaSchema), + }), +).annotate({ + identifier: "GetVPSPublicKeysV1Response", +}) as any as S.Schema; + +export interface GetVPSScanMetricsV1Request { + /** Virtual Machine ID */ + virtualMachineId: number; +} +export const GetVPSScanMetricsV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + virtualMachineId: S.Number.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/vps/v1/virtual-machines/{virtualMachineId}/monarx", + code: 200, + }), + ), +).annotate({ + identifier: "GetVPSScanMetricsV1Request", +}) as any as S.Schema; + +export interface VPSV1MalwareMetricsResource { + /** Records found during last scan */ + records?: number; + /** Malicious files found during last scan */ + malicious?: number; + /** Compromised files found during last scan */ + compromised?: number; + /** Total number of files scanned during last scan */ + scanned_files?: number; + scan_started_at?: string; + scan_ended_at?: string | null; +} +export const VPSV1MalwareMetricsResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + records: S.optional(S.Number), + malicious: S.optional(S.Number), + compromised: S.optional(S.Number), + scanned_files: S.optional(S.Number), + scan_started_at: S.optional(S.String), + scan_ended_at: S.optional(S.NullOr(S.String)), + }), +).annotate({ + identifier: "VPSV1MalwareMetricsResource", +}) as any as S.Schema; + +export interface GetVPSSnapshotV1Request { + /** Virtual Machine ID */ + virtualMachineId: number; +} +export const GetVPSSnapshotV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + virtualMachineId: S.Number.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/vps/v1/virtual-machines/{virtualMachineId}/snapshot", + code: 200, + }), + ), +).annotate({ + identifier: "GetVPSSnapshotV1Request", +}) as any as S.Schema; + +export interface VPSV1SnapshotSnapshotResource { + /** Snapshot ID */ + id?: number; + /** Estimated snapshot restore time in seconds */ + restore_time?: number; + created_at?: string; + expires_at?: string; +} +export const VPSV1SnapshotSnapshotResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + id: S.optional(S.Number), + restore_time: S.optional(S.Number), + created_at: S.optional(S.String), + expires_at: S.optional(S.String), + }), +).annotate({ + identifier: "VPSV1SnapshotSnapshotResource", +}) as any as S.Schema; + +export interface GetVPSTemplateDetailsV1Request { + /** Template ID */ + templateId: number; +} +export const GetVPSTemplateDetailsV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + templateId: S.Number.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/vps/v1/templates/{templateId}", + code: 200, + }), + ), +).annotate({ + identifier: "GetVPSTemplateDetailsV1Request", +}) as any as S.Schema; + +export interface VPSV1TemplateTemplateResource { + /** Template ID */ + id?: number; + /** Template name */ + name?: string; + /** Template description */ + description?: string; + /** Link to official OS documentation */ + documentation?: string | null; +} +export const VPSV1TemplateTemplateResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + id: S.optional(S.Number), + name: S.optional(S.String), + description: S.optional(S.String), + documentation: S.optional(S.NullOr(S.String)), + }), +).annotate({ + identifier: "VPSV1TemplateTemplateResource", +}) as any as S.Schema; + +export interface GetVPSTemplatesV1Request {} +export const GetVPSTemplatesV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({}).pipe( + T.Http({ method: "GET", uri: "/api/vps/v1/templates", code: 200 }), + ), +).annotate({ + identifier: "GetVPSTemplatesV1Request", +}) as any as S.Schema; + +/** Array of [`VPS.V1.Template.TemplateResource`](#model/vpsv1templatetemplateresource) */ +export type VPSV1TemplateTemplateCollection = + Array; +export const VPSV1TemplateTemplateCollection = /*@__PURE__*/ S.Array( + VPSV1TemplateTemplateResource, +) as any as S.Schema; + +export type GetVPSTemplatesV1Response = VPSV1TemplateTemplateCollection; +export const GetVPSTemplatesV1Response = /*@__PURE__*/ S.suspend(() => + VPSV1TemplateTemplateCollection.pipe(T.RawResponseRoot()), +).annotate({ + identifier: "GetVPSTemplatesV1Response", +}) as any as S.Schema; + +export interface GetVPSVirtualMachineDetailsV1Request { + /** Virtual Machine ID */ + virtualMachineId: number; +} +export const GetVPSVirtualMachineDetailsV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + virtualMachineId: S.Number.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/vps/v1/virtual-machines/{virtualMachineId}", + code: 200, + }), + ), +).annotate({ + identifier: "GetVPSVirtualMachineDetailsV1Request", +}) as any as S.Schema; + +export type VPSV1VirtualMachineVirtualMachineResourceState = + | "running" + | "starting" + | "stopping" + | "stopped" + | "creating" + | "initial" + | "error" + | "suspending" + | "unsuspending" + | "suspended" + | "destroying" + | "destroyed" + | "recreating" + | "restoring" + | "recovery" + | "stopping_recovery"; +export const VPSV1VirtualMachineVirtualMachineResourceState = + /*@__PURE__*/ S.String; + +export type VPSV1VirtualMachineVirtualMachineResourceActionsLock = + | "unlocked" + | "locked"; +export const VPSV1VirtualMachineVirtualMachineResourceActionsLock = + /*@__PURE__*/ S.String; + +export interface VPSV1IPAddressIPAddressResource { + /** IP address ID */ + id?: number; + /** IP address: IPv4 or IPv6 */ + address?: string; + /** IP address PTR record */ + ptr?: string | null; +} +export const VPSV1IPAddressIPAddressResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + id: S.optional(S.Number), + address: S.optional(S.String), + ptr: S.optional(S.NullOr(S.String)), + }), +).annotate({ + identifier: "VPSV1IPAddressIPAddressResource", +}) as any as S.Schema; + +/** Array of [`VPS.V1.IPAddress.IPAddressResource`](#model/vpsv1ipaddressipaddressresource) */ +export type VPSV1IPAddressIPAddressCollection = + Array; +export const VPSV1IPAddressIPAddressCollection = /*@__PURE__*/ S.Array( + VPSV1IPAddressIPAddressResource, +) as any as S.Schema; + +export interface VPSV1VirtualMachineVirtualMachineResource { + /** Virtual machine ID */ + id?: number; + /** Active firewall ID, `null` if disabled */ + firewall_group_id?: number | null; + /** Subscription ID */ + subscription_id?: string | null; + /** Data center ID */ + data_center_id?: number | null; + /** VPS plan name */ + plan?: string | null; + hostname?: string; + state?: VPSV1VirtualMachineVirtualMachineResourceState; + actions_lock?: VPSV1VirtualMachineVirtualMachineResourceActionsLock; + /** CPUs count assigned to virtual machine */ + cpus?: number; + /** Memory available to virtual machine (in megabytes) */ + memory?: number; + /** Virtual machine disk size (in megabytes) */ + disk?: number; + /** Monthly internet traffic available to virtual machine (in megabytes) */ + bandwidth?: number; + /** Primary DNS resolver */ + ns1?: string | null; + /** Secondary DNS resolver */ + ns2?: string | null; + /** IPv4 address of virtual machine */ + ipv4?: VPSV1IPAddressIPAddressCollection | null; + /** IPv6 address of virtual machine, `null` if not assigned */ + ipv6?: VPSV1IPAddressIPAddressCollection | null; + /** OS template installed in virtual machine */ + template?: VPSV1TemplateTemplateResource | null; + created_at?: string; +} +export const VPSV1VirtualMachineVirtualMachineResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + id: S.optional(S.Number), + firewall_group_id: S.optional(S.NullOr(S.Number)), + subscription_id: S.optional(S.NullOr(S.String)), + data_center_id: S.optional(S.NullOr(S.Number)), + plan: S.optional(S.NullOr(S.String)), + hostname: S.optional(S.String), + state: S.optional(VPSV1VirtualMachineVirtualMachineResourceState), + actions_lock: S.optional( + VPSV1VirtualMachineVirtualMachineResourceActionsLock, + ), + cpus: S.optional(S.Number), + memory: S.optional(S.Number), + disk: S.optional(S.Number), + bandwidth: S.optional(S.Number), + ns1: S.optional(S.NullOr(S.String)), + ns2: S.optional(S.NullOr(S.String)), + ipv4: S.optional(S.NullOr(VPSV1IPAddressIPAddressCollection)), + ipv6: S.optional(S.NullOr(VPSV1IPAddressIPAddressCollection)), + template: S.optional(S.NullOr(VPSV1TemplateTemplateResource)), + created_at: S.optional(S.String), + }), + ).annotate({ + identifier: "VPSV1VirtualMachineVirtualMachineResource", + }) as any as S.Schema; + +export interface GetVPSVirtualMachinesV1Request {} +export const GetVPSVirtualMachinesV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({}).pipe( + T.Http({ method: "GET", uri: "/api/vps/v1/virtual-machines", code: 200 }), + ), +).annotate({ + identifier: "GetVPSVirtualMachinesV1Request", +}) as any as S.Schema; + +/** Array of [`VPS.V1.VirtualMachine.VirtualMachineResource`](#model/vpsv1virtualmachinevirtualmachineresource) */ +export type VPSV1VirtualMachineVirtualMachineCollection = + Array; +export const VPSV1VirtualMachineVirtualMachineCollection = + /*@__PURE__*/ S.Array( + VPSV1VirtualMachineVirtualMachineResource, + ) as any as S.Schema; + +export type GetVPSVirtualMachinesV1Response = + VPSV1VirtualMachineVirtualMachineCollection; +export const GetVPSVirtualMachinesV1Response = /*@__PURE__*/ S.suspend(() => + VPSV1VirtualMachineVirtualMachineCollection.pipe(T.RawResponseRoot()), +).annotate({ + identifier: "GetVPSVirtualMachinesV1Response", +}) as any as S.Schema; + +export interface HostingChangeDatabasePasswordV1Request { + username: string; + /** Full database name as returned by the list databases endpoint. */ + name: string; + /** New database user password. */ + password: string | Redacted.Redacted; +} +export const HostingChangeDatabasePasswordV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + username: S.String.pipe(T.Label()), + name: S.String.pipe(T.Label()), + password: S.String.pipe(T.SensitiveValue({})), + }).pipe( + T.Http({ + method: "PATCH", + uri: "/api/hosting/v1/accounts/{username}/databases/{name}/change-password", + code: 200, + }), + ), +).annotate({ + identifier: "HostingChangeDatabasePasswordV1Request", +}) as any as S.Schema; + +export interface HostingDeployStaticSiteArchiveV1Request { + username: string; + /** Domain name */ + domain: string; + /** Relative path to the archive file from website root directory */ + archive_path: string; +} +export const HostingDeployStaticSiteArchiveV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + username: S.String.pipe(T.Label()), + domain: S.String.pipe(T.Label()), + archive_path: S.String, + }).pipe( + T.Http({ + method: "POST", + uri: "/api/hosting/v1/accounts/{username}/websites/{domain}/deploy", + code: 200, + }), + ), +).annotate({ + identifier: "HostingDeployStaticSiteArchiveV1Request", +}) as any as S.Schema; + +export interface HostingDetectWordPressInstallationsV1Request { + username: string; +} +export const HostingDetectWordPressInstallationsV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + username: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/hosting/v1/accounts/{username}/wordpress/installations/detect", + code: 200, + }), + ), + ).annotate({ + identifier: "HostingDetectWordPressInstallationsV1Request", + }) as any as S.Schema; + +export interface HostingGenerateUploadURLV1Request { + /** Account username */ + username: string; + /** Website domain */ + domain: string; +} +export const HostingGenerateUploadURLV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + username: S.String, + domain: S.String, + }).pipe( + T.Http({ + method: "POST", + uri: "/api/hosting/v1/files/upload-urls", + code: 200, + }), + ), +).annotate({ + identifier: "HostingGenerateUploadURLV1Request", +}) as any as S.Schema; + +export interface HostingV1FilesUploadUrlResource { + /** The TUS upload endpoint URL to send upload requests to */ + url: string; + /** Authentication token to pass as the `X-Auth` header in TUS upload requests */ + auth_key: string; + /** Authentication token to pass as the `X-Auth-Rest` header in TUS upload requests */ + rest_auth_key: string; +} +export const HostingV1FilesUploadUrlResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + url: S.String, + auth_key: S.String, + rest_auth_key: S.String, + }), +).annotate({ + identifier: "HostingV1FilesUploadUrlResource", +}) as any as S.Schema; + +export interface HostingGetNodeJsBuildSettingsFromArchiveV1Request { + username: string; + /** Domain name */ + domain: string; + /** The path to the archive file relative to the document root of the vhost */ + archive_path: string; +} +export const HostingGetNodeJsBuildSettingsFromArchiveV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + username: S.String.pipe(T.Label()), + domain: S.String.pipe(T.Label()), + archive_path: S.String.pipe(T.Query()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/builds/settings/from-archive", + code: 200, + }), + ), + ).annotate({ + identifier: "HostingGetNodeJsBuildSettingsFromArchiveV1Request", + }) as any as S.Schema; + +/** Node.js application type */ +export type HostingV1NodeJsBuildSettingsResourceAppType = + | "create-react-app" + | "gatsby" + | "vite" + | "angular" + | "react" + | "vue" + | "parcel" + | "next" + | "nuxt" + | "nest" + | "express" + | "fastify" + | "astro" + | "svelte" + | "svelte-kit" + | "hono" + | "react-router" + | "nitro" + | "other"; +export const HostingV1NodeJsBuildSettingsResourceAppType = + /*@__PURE__*/ S.String; + +/** Package manager */ +export type HostingV1NodeJsBuildSettingsResourcePackageManager = + | "npm" + | "yarn" + | "pnpm"; +export const HostingV1NodeJsBuildSettingsResourcePackageManager = + /*@__PURE__*/ S.String; + +/** The scripts configured in the package.json file */ +export type HostingV1NodeJsBuildSettingsResourceAvailableScriptsList = + Array; +export const HostingV1NodeJsBuildSettingsResourceAvailableScriptsList = + /*@__PURE__*/ S.Array( + S.String, + ) as any as S.Schema; + +export interface HostingV1NodeJsBuildSettingsResource { + /** Node.js application type */ + app_type: HostingV1NodeJsBuildSettingsResourceAppType | null; + /** Node.js version */ + node_version: number | null; + /** Application root directory */ + root_directory: string | null; + /** Build output directory */ + output_directory: string | null; + /** The npm script to run to build the application */ + build_script: string | null; + /** The main entry point file for the application */ + entry_file: string | null; + /** Package manager */ + package_manager: HostingV1NodeJsBuildSettingsResourcePackageManager | null; + /** The scripts configured in the package.json file */ + available_scripts: HostingV1NodeJsBuildSettingsResourceAvailableScriptsList; +} +export const HostingV1NodeJsBuildSettingsResource = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + app_type: S.NullOr(HostingV1NodeJsBuildSettingsResourceAppType), + node_version: S.NullOr(S.Number), + root_directory: S.NullOr(S.String), + output_directory: S.NullOr(S.String), + build_script: S.NullOr(S.String), + entry_file: S.NullOr(S.String), + package_manager: S.NullOr( + HostingV1NodeJsBuildSettingsResourcePackageManager, + ), + available_scripts: + HostingV1NodeJsBuildSettingsResourceAvailableScriptsList, + }), +).annotate({ + identifier: "HostingV1NodeJsBuildSettingsResource", +}) as any as S.Schema; + +export type HostingListWebsiteFilesAndDirectoriesV1RequestFileTypesItem = + | "file" + | "directory" + | "symlink" + | "other"; +export const HostingListWebsiteFilesAndDirectoriesV1RequestFileTypesItem = + /*@__PURE__*/ S.String; + +export type HostingListWebsiteFilesAndDirectoriesV1RequestFileTypesList = Array< + HostingListWebsiteFilesAndDirectoriesV1RequestFileTypesItem | (string & {}) +>; +export const HostingListWebsiteFilesAndDirectoriesV1RequestFileTypesList = + /*@__PURE__*/ S.Array( + HostingListWebsiteFilesAndDirectoriesV1RequestFileTypesItem, + ) as any as S.Schema; + +export interface HostingListWebsiteFilesAndDirectoriesV1Request { + username: string; + /** Domain name */ + domain: string; + /** Directory path to check */ + directory?: string; + /** How many directory levels deep to recurse. */ + max_depth?: number; + /** Max number of entries to return in this page. */ + max_items?: number; + /** Number of entries to skip. Page with offset + item count until reaching total_items. */ + offset?: number; + /** Filter by entry type, e.g. file,directory. Omit for all types. */ + file_types?: HostingListWebsiteFilesAndDirectoriesV1RequestFileTypesList; +} +export const HostingListWebsiteFilesAndDirectoriesV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + username: S.String.pipe(T.Label()), + domain: S.String.pipe(T.Label()), + directory: S.optional(S.String.pipe(T.Query())), + max_depth: S.optional(S.Number.pipe(T.Query())), + max_items: S.optional(S.Number.pipe(T.Query())), + offset: S.optional(S.Number.pipe(T.Query())), + file_types: S.optional( + HostingListWebsiteFilesAndDirectoriesV1RequestFileTypesList.pipe( + T.Query(), + ), + ), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/hosting/v1/accounts/{username}/domains/{domain}/files", + code: 200, + }), + ), + ).annotate({ + identifier: "HostingListWebsiteFilesAndDirectoriesV1Request", + }) as any as S.Schema; + +/** Entry type. */ +export type HostingV1FilesFilesResourceItemsItemType = + | "file" + | "directory" + | "symlink" + | "other"; +export const HostingV1FilesFilesResourceItemsItemType = /*@__PURE__*/ S.String; + +export interface HostingV1FilesFilesResourceItemsItem { + /** Entry name. */ + name: string; + /** Entry path, relative to the document root. */ + path: string; + /** Entry type. */ + type: HostingV1FilesFilesResourceItemsItemType; + /** Entry size in bytes. Null for directories, symlinks, and other non-file entries. */ + size_bytes: number | null; +} +export const HostingV1FilesFilesResourceItemsItem = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + name: S.String, + path: S.String, + type: HostingV1FilesFilesResourceItemsItemType, + size_bytes: S.NullOr(S.Number), + }), +).annotate({ + identifier: "HostingV1FilesFilesResourceItemsItem", +}) as any as S.Schema; + +/** Entries found in the listed directory. */ +export type HostingV1FilesFilesResourceItemsList = + Array; +export const HostingV1FilesFilesResourceItemsList = /*@__PURE__*/ S.Array( + HostingV1FilesFilesResourceItemsItem, +) as any as S.Schema; + +export interface HostingV1FilesFilesResource { + /** Listed directory, relative to the document root. */ + path: string; + /** Entries found in the listed directory. */ + items: HostingV1FilesFilesResourceItemsList; + /** Total number of entries matching the listing, across all pages. */ + total_items: number; + /** Number of entries in this page. */ + total_items_current_page: number; + /** Number of entries skipped before this page. */ + offset: number; +} +export const HostingV1FilesFilesResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + path: S.String, + items: HostingV1FilesFilesResourceItemsList, + total_items: S.Number, + total_items_current_page: S.Number, + offset: S.Number, + }), +).annotate({ + identifier: "HostingV1FilesFilesResource", +}) as any as S.Schema; + +export interface HostingRepairDatabaseV1Request { + username: string; + /** Full database name as returned by the list databases endpoint. */ + name: string; +} +export const HostingRepairDatabaseV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + username: S.String.pipe(T.Label()), + name: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "PATCH", + uri: "/api/hosting/v1/accounts/{username}/databases/{name}/repair", + code: 200, + }), + ), +).annotate({ + identifier: "HostingRepairDatabaseV1Request", +}) as any as S.Schema; + +export interface ImportHostingWordPressWebsiteV1Request { + username: string; + /** Domain name */ + domain: string; + /** Path to the WordPress archive file (relative to website root) */ + archive_path: string; + /** Path to the database SQL file (relative to website root) */ + sql_path: string; +} +export const ImportHostingWordPressWebsiteV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + username: S.String.pipe(T.Label()), + domain: S.String.pipe(T.Label()), + archive_path: S.String, + sql_path: S.String, + }).pipe( + T.Http({ + method: "POST", + uri: "/api/hosting/v1/accounts/{username}/websites/{domain}/wordpress/import", + code: 200, + }), + ), +).annotate({ + identifier: "ImportHostingWordPressWebsiteV1Request", +}) as any as S.Schema; + +/** Plugin slugs to install. Use GET /api/hosting/v1/wordpress/plugins to discover available slugs. */ +export type InstallHostingWordPressPluginsV1RequestPluginsList = Array; +export const InstallHostingWordPressPluginsV1RequestPluginsList = + /*@__PURE__*/ S.Array( + S.String, + ) as any as S.Schema; + +export interface InstallHostingWordPressPluginsV1Request { + username: string; + /** WordPress installation (software) identifier */ + software: string; + /** Plugin slugs to install. Use GET /api/hosting/v1/wordpress/plugins to discover available slugs. */ + plugins: InstallHostingWordPressPluginsV1RequestPluginsList; +} +export const InstallHostingWordPressPluginsV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + username: S.String.pipe(T.Label()), + software: S.String.pipe(T.Label()), + plugins: InstallHostingWordPressPluginsV1RequestPluginsList, + }).pipe( + T.Http({ + method: "POST", + uri: "/api/hosting/v1/accounts/{username}/wordpress/{software}/plugins/install", + code: 200, + }), + ), +).annotate({ + identifier: "InstallHostingWordPressPluginsV1Request", +}) as any as S.Schema; + +/** Font identifier. Only applied when the theme is a Hostinger theme; the default is used when omitted. */ +export type InstallHostingWordPressThemeV1RequestFont = + | "professional" + | "modern" + | "elegant" + | "creative" + | "dynamic" + | "default"; +export const InstallHostingWordPressThemeV1RequestFont = /*@__PURE__*/ S.String; + +export interface InstallHostingWordPressThemeV1Request { + username: string; + /** WordPress installation (software) identifier */ + software: string; + /** Slug of the theme to install. Hostinger theme slugs (hostinger-blog, hostinger-affiliate-theme, hostinger-ai-theme) trigger the custom installer and forward the optional palette/layout/font fields; any other WordPress theme slug uses the standard installer and ignores those fields. */ + theme: string; + /** Palette identifier. Only applied when the theme is a Hostinger theme; the default is used when omitted. */ + palette?: string | null; + /** Layout identifier. Only applied when the theme is a Hostinger theme; the default is used when omitted. */ + layout?: string | null; + /** Font identifier. Only applied when the theme is a Hostinger theme; the default is used when omitted. */ + font?: InstallHostingWordPressThemeV1RequestFont | (string & {}) | null; +} +export const InstallHostingWordPressThemeV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + username: S.String.pipe(T.Label()), + software: S.String.pipe(T.Label()), + theme: S.String, + palette: S.optional(S.NullOr(S.String)), + layout: S.optional(S.NullOr(S.String)), + font: S.optional(S.NullOr(InstallHostingWordPressThemeV1RequestFont)), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/hosting/v1/accounts/{username}/wordpress/{software}/themes/install", + code: 200, + }), + ), +).annotate({ + identifier: "InstallHostingWordPressThemeV1Request", +}) as any as S.Schema; + +/** WordPress core auto-update policy */ +export type InstallHostingWordPressV1RequestAutoUpdates = + | "all" + | "none" + | "minor"; +export const InstallHostingWordPressV1RequestAutoUpdates = + /*@__PURE__*/ S.String; + +/** WordPress admin credentials */ +export interface InstallHostingWordPressV1RequestCredentials { + email: string; + /** WordPress admin username */ + login: string; + password: string | Redacted.Redacted; +} +export const InstallHostingWordPressV1RequestCredentials = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + email: S.String, + login: S.String, + password: S.String.pipe(T.SensitiveValue({})), + }), + ).annotate({ + identifier: "InstallHostingWordPressV1RequestCredentials", + }) as any as S.Schema; + +/** Optional. If the named database already exists, it will be used for this WordPress install. Otherwise a new database is created with a generated name and random credentials. */ +export interface InstallHostingWordPressV1RequestDatabase { + /** Database name (username prefix added if missing) */ + name?: string; + password?: string | Redacted.Redacted | null; +} +export const InstallHostingWordPressV1RequestDatabase = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + name: S.optional(S.String), + password: S.optional(S.NullOr(S.String).pipe(T.SensitiveValue({}))), + }), +).annotate({ + identifier: "InstallHostingWordPressV1RequestDatabase", +}) as any as S.Schema; + +export interface InstallHostingWordPressV1Request { + username: string; + /** Domain of the existing website where WordPress will be installed */ + domain: string; + /** Title of the WordPress site */ + site_title: string; + /** WordPress locale. Defaults to en_US when omitted. */ + language?: string | null; + /** Relative directory to install WordPress into. Defaults to the website root when omitted. */ + directory?: string | null; + /** When false (default), does not replace an existing installation. If WordPress is already installed on the domain/path, the async install job fails unless true. */ + overwrite?: boolean | null; + /** WordPress core auto-update policy */ + auto_updates?: + | InstallHostingWordPressV1RequestAutoUpdates + | (string & {}) + | null; + /** WordPress core version to install. If omitted, the latest core version compatible with the account vhost PHP version is selected. */ + version?: string | null; + /** WordPress admin credentials */ + credentials: InstallHostingWordPressV1RequestCredentials; + /** Optional. If the named database already exists, it will be used for this WordPress install. Otherwise a new database is created with a generated name and random credentials. */ + database?: InstallHostingWordPressV1RequestDatabase | null; +} +export const InstallHostingWordPressV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + username: S.String.pipe(T.Label()), + domain: S.String, + site_title: S.String, + language: S.optional(S.NullOr(S.String)), + directory: S.optional(S.NullOr(S.String)), + overwrite: S.optional(S.NullOr(S.Boolean)), + auto_updates: S.optional( + S.NullOr(InstallHostingWordPressV1RequestAutoUpdates), + ), + version: S.optional(S.NullOr(S.String)), + credentials: InstallHostingWordPressV1RequestCredentials, + database: S.optional(S.NullOr(InstallHostingWordPressV1RequestDatabase)), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/hosting/v1/accounts/{username}/wordpress/installations", + code: 200, + }), + ), +).annotate({ + identifier: "InstallHostingWordPressV1Request", +}) as any as S.Schema; + +export interface InstallVPSMonarxV1Request { + /** Virtual Machine ID */ + virtualMachineId: number; +} +export const InstallVPSMonarxV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + virtualMachineId: S.Number.pipe(T.Label()), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/vps/v1/virtual-machines/{virtualMachineId}/monarx", + code: 200, + }), + ), +).annotate({ + identifier: "InstallVPSMonarxV1Request", +}) as any as S.Schema; + +export type ListAgencyHostingAgencyPlanOrderDiskUsageMetricsV1RequestTimeFrameDays = + | 1 + | 7 + | 14 + | 30; +export const ListAgencyHostingAgencyPlanOrderDiskUsageMetricsV1RequestTimeFrameDays = + /*@__PURE__*/ S.Number; + +export interface ListAgencyHostingAgencyPlanOrderDiskUsageMetricsV1Request { + /** Agency Plan order ID */ + order_id: number; + /** Length of the window in days, ending now. Bucket size grows with the window. */ + time_frame_days?: + | ListAgencyHostingAgencyPlanOrderDiskUsageMetricsV1RequestTimeFrameDays + | (number & {}); +} +export const ListAgencyHostingAgencyPlanOrderDiskUsageMetricsV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + order_id: S.Number.pipe(T.Label()), + time_frame_days: S.optional( + ListAgencyHostingAgencyPlanOrderDiskUsageMetricsV1RequestTimeFrameDays.pipe( + T.Query(), + ), + ), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/agency-hosting/v1/orders/{order_id}/disk-usage-metrics", + code: 200, + }), + ), + ).annotate({ + identifier: "ListAgencyHostingAgencyPlanOrderDiskUsageMetricsV1Request", + }) as any as S.Schema; + +export interface AgencyHostingV1OrdersDiskUsageMetricsLimitsResource { + /** Disk usage quota in bytes */ + disk_bytes?: number; + /** Inodes quota */ + inodes?: number; +} +export const AgencyHostingV1OrdersDiskUsageMetricsLimitsResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + disk_bytes: S.optional(S.Number), + inodes: S.optional(S.Number), + }), + ).annotate({ + identifier: "AgencyHostingV1OrdersDiskUsageMetricsLimitsResource", + }) as any as S.Schema; + +export interface AgencyHostingV1OrdersDiskUsageMetricsMetricResource { + /** Disk usage in bytes at this sample */ + disk_bytes?: number; + /** Number of inodes used at this sample */ + inodes?: number; + /** Unix timestamp of the sample */ + timestamp?: number; +} +export const AgencyHostingV1OrdersDiskUsageMetricsMetricResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + disk_bytes: S.optional(S.Number), + inodes: S.optional(S.Number), + timestamp: S.optional(S.Number), + }), + ).annotate({ + identifier: "AgencyHostingV1OrdersDiskUsageMetricsMetricResource", + }) as any as S.Schema; + +/** Array of [`AgencyHosting.V1.Orders.DiskUsageMetrics.MetricResource`](#model/agencyhostingv1ordersdiskusagemetricsmetricresource) */ +export type AgencyHostingV1OrdersDiskUsageMetricsMetricCollection = + Array; +export const AgencyHostingV1OrdersDiskUsageMetricsMetricCollection = + /*@__PURE__*/ S.Array( + AgencyHostingV1OrdersDiskUsageMetricsMetricResource, + ) as any as S.Schema; + +export interface AgencyHostingV1OrdersDiskUsageMetricsMetricsResource { + limits?: AgencyHostingV1OrdersDiskUsageMetricsLimitsResource; + metrics?: AgencyHostingV1OrdersDiskUsageMetricsMetricCollection; +} +export const AgencyHostingV1OrdersDiskUsageMetricsMetricsResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + limits: S.optional(AgencyHostingV1OrdersDiskUsageMetricsLimitsResource), + metrics: S.optional( + AgencyHostingV1OrdersDiskUsageMetricsMetricCollection, + ), + }), + ).annotate({ + identifier: "AgencyHostingV1OrdersDiskUsageMetricsMetricsResource", + }) as any as S.Schema; + +export type ListAgencyHostingAgencyPlanWebsitesV1RequestOrderIdsList = + Array; +export const ListAgencyHostingAgencyPlanWebsitesV1RequestOrderIdsList = + /*@__PURE__*/ S.Array( + S.Number, + ) as any as S.Schema; + +export type ListAgencyHostingAgencyPlanWebsitesV1RequestStatesItem = + | "active" + | "locked" + | "suspended" + | "deleting" + | "deleted"; +export const ListAgencyHostingAgencyPlanWebsitesV1RequestStatesItem = + /*@__PURE__*/ S.String; + +export type ListAgencyHostingAgencyPlanWebsitesV1RequestStatesList = Array< + ListAgencyHostingAgencyPlanWebsitesV1RequestStatesItem | (string & {}) +>; +export const ListAgencyHostingAgencyPlanWebsitesV1RequestStatesList = + /*@__PURE__*/ S.Array( + ListAgencyHostingAgencyPlanWebsitesV1RequestStatesItem, + ) as any as S.Schema; + +export type ListAgencyHostingAgencyPlanWebsitesV1RequestWebsiteTypesItem = + | "wordpress" + | "builder" + | "horizons" + | "nodejs" + | "other"; +export const ListAgencyHostingAgencyPlanWebsitesV1RequestWebsiteTypesItem = + /*@__PURE__*/ S.String; + +export type ListAgencyHostingAgencyPlanWebsitesV1RequestWebsiteTypesList = + Array< + ListAgencyHostingAgencyPlanWebsitesV1RequestWebsiteTypesItem | (string & {}) + >; +export const ListAgencyHostingAgencyPlanWebsitesV1RequestWebsiteTypesList = + /*@__PURE__*/ S.Array( + ListAgencyHostingAgencyPlanWebsitesV1RequestWebsiteTypesItem, + ) as any as S.Schema; + +export interface ListAgencyHostingAgencyPlanWebsitesV1Request { + /** Page number */ + page?: number; + /** Number of items per page */ + per_page?: number; + /** Filter by order IDs. Accepts a comma-separated list. */ + order_ids?: ListAgencyHostingAgencyPlanWebsitesV1RequestOrderIdsList; + /** Filter by website state. Accepts a comma-separated list. */ + states?: ListAgencyHostingAgencyPlanWebsitesV1RequestStatesList; + /** Filter by detected website type, e.g. wordpress,nodejs. Accepts a comma-separated list. */ + website_types?: ListAgencyHostingAgencyPlanWebsitesV1RequestWebsiteTypesList; + /** Filter by domain name (case-insensitive substring match) */ + domain?: string; +} +export const ListAgencyHostingAgencyPlanWebsitesV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + page: S.optional(S.Number.pipe(T.Query())), + per_page: S.optional(S.Number.pipe(T.Query())), + order_ids: S.optional( + ListAgencyHostingAgencyPlanWebsitesV1RequestOrderIdsList.pipe( + T.Query(), + ), + ), + states: S.optional( + ListAgencyHostingAgencyPlanWebsitesV1RequestStatesList.pipe(T.Query()), + ), + website_types: S.optional( + ListAgencyHostingAgencyPlanWebsitesV1RequestWebsiteTypesList.pipe( + T.Query(), + ), + ), + domain: S.optional(S.String.pipe(T.Query())), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/agency-hosting/v1/websites", + code: 200, + }), + ), + ).annotate({ + identifier: "ListAgencyHostingAgencyPlanWebsitesV1Request", + }) as any as S.Schema; + +/** Website platform */ +export type AgencyHostingV1WebsitesWebsiteListItemResourcePlatform = + | "h5g" + | "builder" + | "u4s"; +export const AgencyHostingV1WebsitesWebsiteListItemResourcePlatform = + /*@__PURE__*/ S.String; + +/** Website plan details */ +export interface AgencyHostingV1WebsitesPlanResource { + name?: string; + display_name?: string; + has_cdn?: boolean; +} +export const AgencyHostingV1WebsitesPlanResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + name: S.optional(S.String), + display_name: S.optional(S.String), + has_cdn: S.optional(S.Boolean), + }), +).annotate({ + identifier: "AgencyHostingV1WebsitesPlanResource", +}) as any as S.Schema; + +/** Detected website type */ +export type AgencyHostingV1WebsitesH5gWebsiteDetailsResourceType = + | "wordpress" + | "builder" + | "horizons" + | "nodejs" + | "u4s" + | "other"; +export const AgencyHostingV1WebsitesH5gWebsiteDetailsResourceType = + /*@__PURE__*/ S.String; + +/** Website state */ +export type AgencyHostingV1WebsitesH5gWebsiteDetailsResourceState = + | "active" + | "suspended"; +export const AgencyHostingV1WebsitesH5gWebsiteDetailsResourceState = + /*@__PURE__*/ S.String; + +/** Website domains */ +export type AgencyHostingV1WebsitesH5gWebsiteDetailsResourceDomainsList = + Array; +export const AgencyHostingV1WebsitesH5gWebsiteDetailsResourceDomainsList = + /*@__PURE__*/ S.Array( + S.Unknown, + ) as any as S.Schema; + +/** Ongoing website processes */ +export type AgencyHostingV1WebsitesH5gWebsiteDetailsResourceProcessesList = + Array; +export const AgencyHostingV1WebsitesH5gWebsiteDetailsResourceProcessesList = + /*@__PURE__*/ S.Array( + S.Unknown, + ) as any as S.Schema; + +export interface AgencyHostingV1WebsitesH5gWebsiteDetailsResource { + /** Website UID */ + uid?: string; + /** IPv4 address */ + ipv4?: string; + /** Setup flavor */ + flavor?: string; + /** Detected website type */ + type?: AgencyHostingV1WebsitesH5gWebsiteDetailsResourceType; + /** Username for this order */ + username?: string; + /** Description */ + description?: string | null; + /** Website state */ + state?: AgencyHostingV1WebsitesH5gWebsiteDetailsResourceState; + created_at?: string; + /** Website settings, e.g. PHP configuration */ + settings?: unknown; + /** WordPress installation details */ + wordpress?: unknown | null; + /** Website domains */ + domains?: AgencyHostingV1WebsitesH5gWebsiteDetailsResourceDomainsList; + /** Preview domain */ + preview_domain?: unknown | null; + /** Ongoing website processes */ + processes?: AgencyHostingV1WebsitesH5gWebsiteDetailsResourceProcessesList; + /** Horizons UUID (only for horizons websites) */ + horizons_uuid?: string | null; +} +export const AgencyHostingV1WebsitesH5gWebsiteDetailsResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + uid: S.optional(S.String), + ipv4: S.optional(S.String), + flavor: S.optional(S.String), + type: S.optional(AgencyHostingV1WebsitesH5gWebsiteDetailsResourceType), + username: S.optional(S.String), + description: S.optional(S.NullOr(S.String)), + state: S.optional(AgencyHostingV1WebsitesH5gWebsiteDetailsResourceState), + created_at: S.optional(S.String), + settings: S.optional(S.Unknown), + wordpress: S.optional(S.NullOr(S.Unknown)), + domains: S.optional( + AgencyHostingV1WebsitesH5gWebsiteDetailsResourceDomainsList, + ), + preview_domain: S.optional(S.NullOr(S.Unknown)), + processes: S.optional( + AgencyHostingV1WebsitesH5gWebsiteDetailsResourceProcessesList, + ), + horizons_uuid: S.optional(S.NullOr(S.String)), + }), + ).annotate({ + identifier: "AgencyHostingV1WebsitesH5gWebsiteDetailsResource", + }) as any as S.Schema; + +export interface AgencyHostingV1WebsitesBuilderWebsiteDetailsResource { + /** Builder ID */ + id?: string | null; + /** Domain name */ + vhost?: string; + /** Detected website type */ + type?: string; + /** Account username */ + username?: string; + created_at?: string; +} +export const AgencyHostingV1WebsitesBuilderWebsiteDetailsResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + id: S.optional(S.NullOr(S.String)), + vhost: S.optional(S.String), + type: S.optional(S.String), + username: S.optional(S.String), + created_at: S.optional(S.String), + }), + ).annotate({ + identifier: "AgencyHostingV1WebsitesBuilderWebsiteDetailsResource", + }) as any as S.Schema; + +/** Detected website type */ +export type AgencyHostingV1WebsitesU4sWebsiteDetailsResourceType = + | "u4s" + | "horizons"; +export const AgencyHostingV1WebsitesU4sWebsiteDetailsResourceType = + /*@__PURE__*/ S.String; + +/** Application domains */ +export type AgencyHostingV1WebsitesU4sWebsiteDetailsResourceDomainsList = + Array; +export const AgencyHostingV1WebsitesU4sWebsiteDetailsResourceDomainsList = + /*@__PURE__*/ S.Array( + S.Unknown, + ) as any as S.Schema; + +export interface AgencyHostingV1WebsitesU4sWebsiteDetailsResource { + /** Application UUID */ + uuid?: string; + /** Application title */ + title?: string; + /** Application port */ + port?: number; + /** Detected website type */ + type?: AgencyHostingV1WebsitesU4sWebsiteDetailsResourceType; + /** Application runtime */ + runtime?: string; + /** Application state */ + state?: string; + /** Application domains */ + domains?: AgencyHostingV1WebsitesU4sWebsiteDetailsResourceDomainsList; + /** Horizons UUID */ + horizons_uuid?: string | null; + /** Preview domain */ + preview_domain?: unknown | null; +} +export const AgencyHostingV1WebsitesU4sWebsiteDetailsResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + uuid: S.optional(S.String), + title: S.optional(S.String), + port: S.optional(S.Number), + type: S.optional(AgencyHostingV1WebsitesU4sWebsiteDetailsResourceType), + runtime: S.optional(S.String), + state: S.optional(S.String), + domains: S.optional( + AgencyHostingV1WebsitesU4sWebsiteDetailsResourceDomainsList, + ), + horizons_uuid: S.optional(S.NullOr(S.String)), + preview_domain: S.optional(S.NullOr(S.Unknown)), + }), + ).annotate({ + identifier: "AgencyHostingV1WebsitesU4sWebsiteDetailsResource", + }) as any as S.Schema; + +/** Platform-specific website details. Shape depends on `platform`. */ +export type AgencyHostingV1WebsitesWebsiteListItemResourceDetails = + | AgencyHostingV1WebsitesH5gWebsiteDetailsResource + | AgencyHostingV1WebsitesBuilderWebsiteDetailsResource + | AgencyHostingV1WebsitesU4sWebsiteDetailsResource; +export const AgencyHostingV1WebsitesWebsiteListItemResourceDetails = + /*@__PURE__*/ S.Unknown as any as S.Schema; + +/** Website item. The `details` shape differs per platform — see the `platform` field. */ +export interface AgencyHostingV1WebsitesWebsiteListItemResource { + id: string; + client_id: number; + order_id: number; + /** Website platform */ + platform: AgencyHostingV1WebsitesWebsiteListItemResourcePlatform; + /** Website state */ + state: string; + created_at: string; + plan: AgencyHostingV1WebsitesPlanResource; + /** Platform-specific website details. Shape depends on `platform`. */ + details: AgencyHostingV1WebsitesWebsiteListItemResourceDetails; + /** Reason for suspension, only populated for payment related suspensions */ + suspension_reason: string | null; +} +export const AgencyHostingV1WebsitesWebsiteListItemResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + id: S.String, + client_id: S.Number, + order_id: S.Number, + platform: AgencyHostingV1WebsitesWebsiteListItemResourcePlatform, + state: S.String, + created_at: S.String, + plan: AgencyHostingV1WebsitesPlanResource, + details: AgencyHostingV1WebsitesWebsiteListItemResourceDetails, + suspension_reason: S.NullOr(S.String), + }), + ).annotate({ + identifier: "AgencyHostingV1WebsitesWebsiteListItemResource", + }) as any as S.Schema; + +/** Array of [`AgencyHosting.V1.Websites.WebsiteListItemResource`](#model/agencyhostingv1websiteswebsitelistitemresource) */ +export type AgencyHostingV1WebsitesWebsiteCollection = + Array; +export const AgencyHostingV1WebsitesWebsiteCollection = /*@__PURE__*/ S.Array( + AgencyHostingV1WebsitesWebsiteListItemResource, +) as any as S.Schema; + +export interface ListAgencyHostingAgencyPlanWebsitesV1Response { + data?: AgencyHostingV1WebsitesWebsiteCollection; + meta?: CommonSchemaPaginationMetaSchema; +} +export const ListAgencyHostingAgencyPlanWebsitesV1Response = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + data: S.optional(AgencyHostingV1WebsitesWebsiteCollection), + meta: S.optional(CommonSchemaPaginationMetaSchema), + }), + ).annotate({ + identifier: "ListAgencyHostingAgencyPlanWebsitesV1Response", + }) as any as S.Schema; + +export interface ListAgencyHostingAvailableDatacentersV1Request { + /** Agency Plan order ID */ + order_id: number; +} +export const ListAgencyHostingAvailableDatacentersV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + order_id: S.Number.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/agency-hosting/v1/orders/{order_id}/datacenters", + code: 200, + }), + ), + ).annotate({ + identifier: "ListAgencyHostingAvailableDatacentersV1Request", + }) as any as S.Schema; + +export interface AgencyHostingV1DatacentersCoordinatesResource { + /** Latitude coordinate */ + latitude?: number; + /** Longitude coordinate */ + longitude?: number; +} +export const AgencyHostingV1DatacentersCoordinatesResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + latitude: S.optional(S.Number), + longitude: S.optional(S.Number), + }), + ).annotate({ + identifier: "AgencyHostingV1DatacentersCoordinatesResource", + }) as any as S.Schema; + +export interface AgencyHostingV1DatacentersDatacenterResource { + /** Datacenter title */ + title: string; + /** Datacenter code */ + code: string; + /** Datacenter country code */ + country: string; + coordinates: AgencyHostingV1DatacentersCoordinatesResource; + /** URL you can ping to measure round-trip latency to this datacenter. Compare the measured latency across datacenters to identify the nearest one (lowest ping) for your website. Null when no online server is currently available to measure against. */ + pinger_url: string | null; +} +export const AgencyHostingV1DatacentersDatacenterResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + title: S.String, + code: S.String, + country: S.String, + coordinates: AgencyHostingV1DatacentersCoordinatesResource, + pinger_url: S.NullOr(S.String), + }), + ).annotate({ + identifier: "AgencyHostingV1DatacentersDatacenterResource", + }) as any as S.Schema; + +/** Array of [`AgencyHosting.V1.Datacenters.DatacenterResource`](#model/agencyhostingv1datacentersdatacenterresource) */ +export type AgencyHostingV1DatacentersDatacenterCollection = + Array; +export const AgencyHostingV1DatacentersDatacenterCollection = + /*@__PURE__*/ S.Array( + AgencyHostingV1DatacentersDatacenterResource, + ) as any as S.Schema; + +export type ListAgencyHostingAvailableDatacentersV1Response = + AgencyHostingV1DatacentersDatacenterCollection; +export const ListAgencyHostingAvailableDatacentersV1Response = + /*@__PURE__*/ S.suspend(() => + AgencyHostingV1DatacentersDatacenterCollection.pipe(T.RawResponseRoot()), + ).annotate({ + identifier: "ListAgencyHostingAvailableDatacentersV1Response", + }) as any as S.Schema; + +export interface ListAgencyHostingAvailablePHPVersionsForAnOrderV1Request { + /** Agency Plan order ID */ + order_id: number; +} +export const ListAgencyHostingAvailablePHPVersionsForAnOrderV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + order_id: S.Number.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/agency-hosting/v1/orders/{order_id}/websites/php-settings/versions", + code: 200, + }), + ), + ).annotate({ + identifier: "ListAgencyHostingAvailablePHPVersionsForAnOrderV1Request", + }) as any as S.Schema; + +export interface AgencyHostingV1PhpVersionResource { + /** PHP version available for the website. */ + version?: string; +} +export const AgencyHostingV1PhpVersionResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + version: S.optional(S.String), + }), +).annotate({ + identifier: "AgencyHostingV1PhpVersionResource", +}) as any as S.Schema; + +/** Array of [`AgencyHosting.V1.Php.VersionResource`](#model/agencyhostingv1phpversionresource) */ +export type AgencyHostingV1PhpVersionCollection = + Array; +export const AgencyHostingV1PhpVersionCollection = /*@__PURE__*/ S.Array( + AgencyHostingV1PhpVersionResource, +) as any as S.Schema; + +export type ListAgencyHostingAvailablePHPVersionsForAnOrderV1Response = + AgencyHostingV1PhpVersionCollection; +export const ListAgencyHostingAvailablePHPVersionsForAnOrderV1Response = + /*@__PURE__*/ S.suspend(() => + AgencyHostingV1PhpVersionCollection.pipe(T.RawResponseRoot()), + ).annotate({ + identifier: "ListAgencyHostingAvailablePHPVersionsForAnOrderV1Response", + }) as any as S.Schema; + +export interface ListAgencyHostingAvailablePHPVersionsForAWebsiteV1Request { + /** Agency Plan website UID */ + website_uid: string; +} +export const ListAgencyHostingAvailablePHPVersionsForAWebsiteV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + website_uid: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/agency-hosting/v1/websites/{website_uid}/php-settings/versions", + code: 200, + }), + ), + ).annotate({ + identifier: "ListAgencyHostingAvailablePHPVersionsForAWebsiteV1Request", + }) as any as S.Schema; + +export type ListAgencyHostingAvailablePHPVersionsForAWebsiteV1Response = + AgencyHostingV1PhpVersionCollection; +export const ListAgencyHostingAvailablePHPVersionsForAWebsiteV1Response = + /*@__PURE__*/ S.suspend(() => + AgencyHostingV1PhpVersionCollection.pipe(T.RawResponseRoot()), + ).annotate({ + identifier: "ListAgencyHostingAvailablePHPVersionsForAWebsiteV1Response", + }) as any as S.Schema; + +export interface ListAgencyHostingAvailableWordPressVersionsV1Request { + /** Agency Plan website UID */ + website_uid: string; +} +export const ListAgencyHostingAvailableWordPressVersionsV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + website_uid: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/agency-hosting/v1/websites/{website_uid}/wordpress/settings/versions", + code: 200, + }), + ), + ).annotate({ + identifier: "ListAgencyHostingAvailableWordPressVersionsV1Request", + }) as any as S.Schema; + +export interface AgencyHostingV1WordPressVersionResource { + /** WordPress core version. */ + version?: string; +} +export const AgencyHostingV1WordPressVersionResource = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + version: S.optional(S.String), + }), +).annotate({ + identifier: "AgencyHostingV1WordPressVersionResource", +}) as any as S.Schema; + +/** Array of [`AgencyHosting.V1.WordPress.VersionResource`](#model/agencyhostingv1wordpressversionresource) */ +export type AgencyHostingV1WordPressVersionCollection = + Array; +export const AgencyHostingV1WordPressVersionCollection = /*@__PURE__*/ S.Array( + AgencyHostingV1WordPressVersionResource, +) as any as S.Schema; + +export type ListAgencyHostingAvailableWordPressVersionsV1Response = + AgencyHostingV1WordPressVersionCollection; +export const ListAgencyHostingAvailableWordPressVersionsV1Response = + /*@__PURE__*/ S.suspend(() => + AgencyHostingV1WordPressVersionCollection.pipe(T.RawResponseRoot()), + ).annotate({ + identifier: "ListAgencyHostingAvailableWordPressVersionsV1Response", + }) as any as S.Schema; + +export type ListAgencyHostingDomainsV1RequestWebsiteUuidsList = Array; +export const ListAgencyHostingDomainsV1RequestWebsiteUuidsList = + /*@__PURE__*/ S.Array( + S.String, + ) as any as S.Schema; + +export interface ListAgencyHostingDomainsV1Request { + /** Page number */ + page?: number; + /** Number of items per page */ + per_page?: number; + /** Filter by website UIDs */ + website_uuids?: ListAgencyHostingDomainsV1RequestWebsiteUuidsList; +} +export const ListAgencyHostingDomainsV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + page: S.optional(S.Number.pipe(T.Query())), + per_page: S.optional(S.Number.pipe(T.Query())), + website_uuids: S.optional( + ListAgencyHostingDomainsV1RequestWebsiteUuidsList.pipe(T.Query()), + ), + }).pipe( + T.Http({ method: "GET", uri: "/api/agency-hosting/v1/domains", code: 200 }), + ), +).annotate({ + identifier: "ListAgencyHostingDomainsV1Request", +}) as any as S.Schema; + +export interface AgencyHostingV1DomainsDomainResource { + /** Domain name */ + fqdn?: string; + /** Owner website UID */ + website_uid?: string; + /** Creation date */ + created_at?: string; +} +export const AgencyHostingV1DomainsDomainResource = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + fqdn: S.optional(S.String), + website_uid: S.optional(S.String), + created_at: S.optional(S.String), + }), +).annotate({ + identifier: "AgencyHostingV1DomainsDomainResource", +}) as any as S.Schema; + +/** Array of [`AgencyHosting.V1.Domains.DomainResource`](#model/agencyhostingv1domainsdomainresource) */ +export type AgencyHostingV1DomainsDomainCollection = + Array; +export const AgencyHostingV1DomainsDomainCollection = /*@__PURE__*/ S.Array( + AgencyHostingV1DomainsDomainResource, +) as any as S.Schema; + +export interface ListAgencyHostingDomainsV1Response { + data?: AgencyHostingV1DomainsDomainCollection; + meta?: CommonSchemaPaginationMetaSchema; +} +export const ListAgencyHostingDomainsV1Response = /*@__PURE__*/ S.suspend(() => + S.Struct({ + data: S.optional(AgencyHostingV1DomainsDomainCollection), + meta: S.optional(CommonSchemaPaginationMetaSchema), + }), +).annotate({ + identifier: "ListAgencyHostingDomainsV1Response", +}) as any as S.Schema; + +export type ListAgencyHostingOrderResourceUsageMetricsV1RequestTimeFrameHours = + | 1 + | 24 + | 168 + | 336 + | 720; +export const ListAgencyHostingOrderResourceUsageMetricsV1RequestTimeFrameHours = + /*@__PURE__*/ S.Number; + +export interface ListAgencyHostingOrderResourceUsageMetricsV1Request { + /** Agency Plan order ID */ + order_id: number; + /** Length of the window in hours, ending now. Bucket size grows with the window. */ + time_frame_hours?: + | ListAgencyHostingOrderResourceUsageMetricsV1RequestTimeFrameHours + | (number & {}); +} +export const ListAgencyHostingOrderResourceUsageMetricsV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + order_id: S.Number.pipe(T.Label()), + time_frame_hours: S.optional( + ListAgencyHostingOrderResourceUsageMetricsV1RequestTimeFrameHours.pipe( + T.Query(), + ), + ), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/agency-hosting/v1/orders/{order_id}/resource-usage-metrics", + code: 200, + }), + ), + ).annotate({ + identifier: "ListAgencyHostingOrderResourceUsageMetricsV1Request", + }) as any as S.Schema; + +export interface AgencyHostingV1OrdersResourceUsageMetricsLimitsResource { + /** Memory usage quota in bytes */ + memory_bytes?: number; + /** CPU usage quota in percent */ + cpu_percent?: number; + /** Process usage quota */ + processes?: number; +} +export const AgencyHostingV1OrdersResourceUsageMetricsLimitsResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + memory_bytes: S.optional(S.Number), + cpu_percent: S.optional(S.Number), + processes: S.optional(S.Number), + }), + ).annotate({ + identifier: "AgencyHostingV1OrdersResourceUsageMetricsLimitsResource", + }) as any as S.Schema; + +export interface AgencyHostingV1OrdersResourceUsageMetricsMetricResource { + /** CPU usage percentage at this sample */ + cpu_percent?: number; + /** Memory usage in bytes at this sample */ + memory_bytes?: number; + /** Number of processes at this sample */ + processes?: number; + /** Unix timestamp of the sample */ + timestamp?: number; +} +export const AgencyHostingV1OrdersResourceUsageMetricsMetricResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + cpu_percent: S.optional(S.Number), + memory_bytes: S.optional(S.Number), + processes: S.optional(S.Number), + timestamp: S.optional(S.Number), + }), + ).annotate({ + identifier: "AgencyHostingV1OrdersResourceUsageMetricsMetricResource", + }) as any as S.Schema; + +/** Array of [`AgencyHosting.V1.Orders.ResourceUsageMetrics.MetricResource`](#model/agencyhostingv1ordersresourceusagemetricsmetricresource) */ +export type AgencyHostingV1OrdersResourceUsageMetricsMetricCollection = + Array; +export const AgencyHostingV1OrdersResourceUsageMetricsMetricCollection = + /*@__PURE__*/ S.Array( + AgencyHostingV1OrdersResourceUsageMetricsMetricResource, + ) as any as S.Schema; + +/** Domains associated with the website */ +export type AgencyHostingV1OrdersResourceUsageMetricsWebsiteResourceDomainsList = + Array; +export const AgencyHostingV1OrdersResourceUsageMetricsWebsiteResourceDomainsList = + /*@__PURE__*/ S.Array( + S.String, + ) as any as S.Schema; + +export interface AgencyHostingV1OrdersResourceUsageMetricsWebsiteResource { + /** Website UID */ + uid?: string; + /** Domains associated with the website */ + domains?: AgencyHostingV1OrdersResourceUsageMetricsWebsiteResourceDomainsList; + metrics?: AgencyHostingV1OrdersResourceUsageMetricsMetricCollection; +} +export const AgencyHostingV1OrdersResourceUsageMetricsWebsiteResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + uid: S.optional(S.String), + domains: S.optional( + AgencyHostingV1OrdersResourceUsageMetricsWebsiteResourceDomainsList, + ), + metrics: S.optional( + AgencyHostingV1OrdersResourceUsageMetricsMetricCollection, + ), + }), + ).annotate({ + identifier: "AgencyHostingV1OrdersResourceUsageMetricsWebsiteResource", + }) as any as S.Schema; + +/** Array of [`AgencyHosting.V1.Orders.ResourceUsageMetrics.WebsiteResource`](#model/agencyhostingv1ordersresourceusagemetricswebsiteresource) */ +export type AgencyHostingV1OrdersResourceUsageMetricsWebsiteCollection = + Array; +export const AgencyHostingV1OrdersResourceUsageMetricsWebsiteCollection = + /*@__PURE__*/ S.Array( + AgencyHostingV1OrdersResourceUsageMetricsWebsiteResource, + ) as any as S.Schema; + +export interface AgencyHostingV1OrdersResourceUsageMetricsMetricsResource { + limits?: AgencyHostingV1OrdersResourceUsageMetricsLimitsResource; + metrics?: AgencyHostingV1OrdersResourceUsageMetricsMetricCollection; + websites?: AgencyHostingV1OrdersResourceUsageMetricsWebsiteCollection; +} +export const AgencyHostingV1OrdersResourceUsageMetricsMetricsResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + limits: S.optional( + AgencyHostingV1OrdersResourceUsageMetricsLimitsResource, + ), + metrics: S.optional( + AgencyHostingV1OrdersResourceUsageMetricsMetricCollection, + ), + websites: S.optional( + AgencyHostingV1OrdersResourceUsageMetricsWebsiteCollection, + ), + }), + ).annotate({ + identifier: "AgencyHostingV1OrdersResourceUsageMetricsMetricsResource", + }) as any as S.Schema; + +export interface ListAgencyHostingOrdersV1Request { + /** Page number */ + page?: number; + /** Number of items per page */ + per_page?: number; +} +export const ListAgencyHostingOrdersV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + page: S.optional(S.Number.pipe(T.Query())), + per_page: S.optional(S.Number.pipe(T.Query())), + }).pipe( + T.Http({ method: "GET", uri: "/api/agency-hosting/v1/orders", code: 200 }), + ), +).annotate({ + identifier: "ListAgencyHostingOrdersV1Request", +}) as any as S.Schema; + +export interface AgencyHostingV1OrdersPlanResource { + /** Plan display name */ + name?: string | null; + /** Plan key */ + key?: string | null; +} +export const AgencyHostingV1OrdersPlanResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + name: S.optional(S.NullOr(S.String)), + key: S.optional(S.NullOr(S.String)), + }), +).annotate({ + identifier: "AgencyHostingV1OrdersPlanResource", +}) as any as S.Schema; + +export interface AgencyHostingV1OrdersDatacenterResource { + /** Datacenter code */ + code?: string; + /** Datacenter country */ + country?: string; +} +export const AgencyHostingV1OrdersDatacenterResource = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + code: S.optional(S.String), + country: S.optional(S.String), + }), +).annotate({ + identifier: "AgencyHostingV1OrdersDatacenterResource", +}) as any as S.Schema; + +export interface AgencyHostingV1OrdersOrderResource { + /** Order ID */ + id?: number; + /** Order client ID */ + client_id?: number; + /** Order status */ + status?: string | null; + plan?: AgencyHostingV1OrdersPlanResource; + /** Order datacenter */ + datacenter?: AgencyHostingV1OrdersDatacenterResource | null; + /** Order creation date */ + created_at?: string; +} +export const AgencyHostingV1OrdersOrderResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + id: S.optional(S.Number), + client_id: S.optional(S.Number), + status: S.optional(S.NullOr(S.String)), + plan: S.optional(AgencyHostingV1OrdersPlanResource), + datacenter: S.optional(S.NullOr(AgencyHostingV1OrdersDatacenterResource)), + created_at: S.optional(S.String), + }), +).annotate({ + identifier: "AgencyHostingV1OrdersOrderResource", +}) as any as S.Schema; + +/** Array of [`AgencyHosting.V1.Orders.OrderResource`](#model/agencyhostingv1ordersorderresource) */ +export type AgencyHostingV1OrdersOrderCollection = + Array; +export const AgencyHostingV1OrdersOrderCollection = /*@__PURE__*/ S.Array( + AgencyHostingV1OrdersOrderResource, +) as any as S.Schema; + +export interface ListAgencyHostingOrdersV1Response { + data?: AgencyHostingV1OrdersOrderCollection; + meta?: CommonSchemaPaginationMetaSchema; +} +export const ListAgencyHostingOrdersV1Response = /*@__PURE__*/ S.suspend(() => + S.Struct({ + data: S.optional(AgencyHostingV1OrdersOrderCollection), + meta: S.optional(CommonSchemaPaginationMetaSchema), + }), +).annotate({ + identifier: "ListAgencyHostingOrdersV1Response", +}) as any as S.Schema; + +export interface ListAgencyHostingPHPExtensionsForAWebsiteV1Request { + /** Agency Plan website UID */ + website_uid: string; +} +export const ListAgencyHostingPHPExtensionsForAWebsiteV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + website_uid: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/agency-hosting/v1/websites/{website_uid}/php-settings/extensions", + code: 200, + }), + ), + ).annotate({ + identifier: "ListAgencyHostingPHPExtensionsForAWebsiteV1Request", + }) as any as S.Schema; + +/** Whether the extension is currently enabled. Extensions in the "built-in" state are compiled into PHP and cannot be turned off. */ +export type AgencyHostingV1PhpExtensionResourceState = + | "enabled" + | "disabled" + | "built-in"; +export const AgencyHostingV1PhpExtensionResourceState = /*@__PURE__*/ S.String; + +export interface AgencyHostingV1PhpExtensionResource { + /** PHP extension name. */ + name?: string; + /** What the extension provides. */ + description?: string; + /** Whether the extension is currently enabled. Extensions in the "built-in" state are compiled into PHP and cannot be turned off. */ + state?: AgencyHostingV1PhpExtensionResourceState; +} +export const AgencyHostingV1PhpExtensionResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + name: S.optional(S.String), + description: S.optional(S.String), + state: S.optional(AgencyHostingV1PhpExtensionResourceState), + }), +).annotate({ + identifier: "AgencyHostingV1PhpExtensionResource", +}) as any as S.Schema; + +/** Array of [`AgencyHosting.V1.Php.ExtensionResource`](#model/agencyhostingv1phpextensionresource) */ +export type AgencyHostingV1PhpExtensionCollection = + Array; +export const AgencyHostingV1PhpExtensionCollection = /*@__PURE__*/ S.Array( + AgencyHostingV1PhpExtensionResource, +) as any as S.Schema; + +export type ListAgencyHostingPHPExtensionsForAWebsiteV1Response = + AgencyHostingV1PhpExtensionCollection; +export const ListAgencyHostingPHPExtensionsForAWebsiteV1Response = + /*@__PURE__*/ S.suspend(() => + AgencyHostingV1PhpExtensionCollection.pipe(T.RawResponseRoot()), + ).annotate({ + identifier: "ListAgencyHostingPHPExtensionsForAWebsiteV1Response", + }) as any as S.Schema; + +export interface ListAgencyHostingPHPOptionsForAWebsiteV1Request { + /** Agency Plan website UID */ + website_uid: string; +} +export const ListAgencyHostingPHPOptionsForAWebsiteV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + website_uid: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/agency-hosting/v1/websites/{website_uid}/php-settings/options", + code: 200, + }), + ), + ).annotate({ + identifier: "ListAgencyHostingPHPOptionsForAWebsiteV1Request", + }) as any as S.Schema; + +/** Values this option accepts. Null when the option accepts any value of its type. */ +export type AgencyHostingV1PhpOptionResourceAllowedValuesList = Array; +export const AgencyHostingV1PhpOptionResourceAllowedValuesList = + /*@__PURE__*/ S.Array( + S.String, + ) as any as S.Schema; + +/** Whether the option takes a single value or a list of values. */ +export type AgencyHostingV1PhpOptionResourceType = "value" | "list"; +export const AgencyHostingV1PhpOptionResourceType = /*@__PURE__*/ S.String; + +export interface AgencyHostingV1PhpOptionResource { + /** php.ini directive name. */ + name?: string; + /** What the directive controls. */ + description?: string; + /** Value applied when no custom value is set. */ + default_value?: string; + /** Values this option accepts. Null when the option accepts any value of its type. */ + allowed_values?: AgencyHostingV1PhpOptionResourceAllowedValuesList | null; + /** Value currently in effect for the website. */ + value?: string; + /** Whether the option takes a single value or a list of values. */ + type?: AgencyHostingV1PhpOptionResourceType; +} +export const AgencyHostingV1PhpOptionResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + name: S.optional(S.String), + description: S.optional(S.String), + default_value: S.optional(S.String), + allowed_values: S.optional( + S.NullOr(AgencyHostingV1PhpOptionResourceAllowedValuesList), + ), + value: S.optional(S.String), + type: S.optional(AgencyHostingV1PhpOptionResourceType), + }), +).annotate({ + identifier: "AgencyHostingV1PhpOptionResource", +}) as any as S.Schema; + +/** Array of [`AgencyHosting.V1.Php.OptionResource`](#model/agencyhostingv1phpoptionresource) */ +export type AgencyHostingV1PhpOptionCollection = + Array; +export const AgencyHostingV1PhpOptionCollection = /*@__PURE__*/ S.Array( + AgencyHostingV1PhpOptionResource, +) as any as S.Schema; + +export type ListAgencyHostingPHPOptionsForAWebsiteV1Response = + AgencyHostingV1PhpOptionCollection; +export const ListAgencyHostingPHPOptionsForAWebsiteV1Response = + /*@__PURE__*/ S.suspend(() => + AgencyHostingV1PhpOptionCollection.pipe(T.RawResponseRoot()), + ).annotate({ + identifier: "ListAgencyHostingPHPOptionsForAWebsiteV1Response", + }) as any as S.Schema; + +export interface ListAgencyHostingWebsiteCronJobsV1Request { + /** Agency Plan website UID */ + website_uid: string; + /** Page number */ + page?: number; + /** Number of items per page */ + per_page?: number; +} +export const ListAgencyHostingWebsiteCronJobsV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + website_uid: S.String.pipe(T.Label()), + page: S.optional(S.Number.pipe(T.Query())), + per_page: S.optional(S.Number.pipe(T.Query())), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/agency-hosting/v1/websites/{website_uid}/cron-jobs", + code: 200, + }), + ), + ).annotate({ + identifier: "ListAgencyHostingWebsiteCronJobsV1Request", + }) as any as S.Schema; + +/** Array of [`AgencyHosting.V1.Websites.CronJobs.CronJobResource`](#model/agencyhostingv1websitescronjobscronjobresource) */ +export type AgencyHostingV1WebsitesCronJobsCronJobCollection = + Array; +export const AgencyHostingV1WebsitesCronJobsCronJobCollection = + /*@__PURE__*/ S.Array( + AgencyHostingV1WebsitesCronJobsCronJobResource, + ) as any as S.Schema; + +export interface ListAgencyHostingWebsiteCronJobsV1Response { + data?: AgencyHostingV1WebsitesCronJobsCronJobCollection; + meta?: CommonSchemaPaginationMetaSchema; +} +export const ListAgencyHostingWebsiteCronJobsV1Response = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + data: S.optional(AgencyHostingV1WebsitesCronJobsCronJobCollection), + meta: S.optional(CommonSchemaPaginationMetaSchema), + }), + ).annotate({ + identifier: "ListAgencyHostingWebsiteCronJobsV1Response", + }) as any as S.Schema; + +export interface ListAgencyHostingWebsiteDatabasesV1Request { + /** Agency Plan website UID */ + website_uid: string; + /** Page number */ + page?: number; + /** Number of items per page */ + per_page?: number; +} +export const ListAgencyHostingWebsiteDatabasesV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + website_uid: S.String.pipe(T.Label()), + page: S.optional(S.Number.pipe(T.Query())), + per_page: S.optional(S.Number.pipe(T.Query())), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/agency-hosting/v1/websites/{website_uid}/databases", + code: 200, + }), + ), + ).annotate({ + identifier: "ListAgencyHostingWebsiteDatabasesV1Request", + }) as any as S.Schema; + +/** Array of [`AgencyHosting.V1.Websites.Databases.DatabaseResource`](#model/agencyhostingv1websitesdatabasesdatabaseresource) */ +export type AgencyHostingV1WebsitesDatabasesDatabaseCollection = + Array; +export const AgencyHostingV1WebsitesDatabasesDatabaseCollection = + /*@__PURE__*/ S.Array( + AgencyHostingV1WebsitesDatabasesDatabaseResource, + ) as any as S.Schema; + +export interface ListAgencyHostingWebsiteDatabasesV1Response { + data?: AgencyHostingV1WebsitesDatabasesDatabaseCollection; + meta?: CommonSchemaPaginationMetaSchema; +} +export const ListAgencyHostingWebsiteDatabasesV1Response = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + data: S.optional(AgencyHostingV1WebsitesDatabasesDatabaseCollection), + meta: S.optional(CommonSchemaPaginationMetaSchema), + }), + ).annotate({ + identifier: "ListAgencyHostingWebsiteDatabasesV1Response", + }) as any as S.Schema; + +export interface ListAgencyHostingWebsiteProcessesV1Request { + /** Agency Plan website UID */ + website_uid: string; +} +export const ListAgencyHostingWebsiteProcessesV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + website_uid: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/agency-hosting/v1/websites/{website_uid}/processes", + code: 200, + }), + ), + ).annotate({ + identifier: "ListAgencyHostingWebsiteProcessesV1Request", + }) as any as S.Schema; + +/** Process status */ +export type AgencyHostingV1WebsitesWebsiteProcessResourceStatus = + | "running" + | "completed" + | "failed"; +export const AgencyHostingV1WebsitesWebsiteProcessResourceStatus = + /*@__PURE__*/ S.String; + +export interface AgencyHostingV1WebsitesWebsiteProcessResource { + /** Process ID */ + id?: string; + /** Process type */ + type?: string; + /** Process status */ + status?: AgencyHostingV1WebsitesWebsiteProcessResourceStatus; +} +export const AgencyHostingV1WebsitesWebsiteProcessResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + id: S.optional(S.String), + type: S.optional(S.String), + status: S.optional(AgencyHostingV1WebsitesWebsiteProcessResourceStatus), + }), + ).annotate({ + identifier: "AgencyHostingV1WebsitesWebsiteProcessResource", + }) as any as S.Schema; + +/** Array of [`AgencyHosting.V1.Websites.WebsiteProcessResource`](#model/agencyhostingv1websiteswebsiteprocessresource) */ +export type AgencyHostingV1WebsitesWebsiteProcessCollection = + Array; +export const AgencyHostingV1WebsitesWebsiteProcessCollection = + /*@__PURE__*/ S.Array( + AgencyHostingV1WebsitesWebsiteProcessResource, + ) as any as S.Schema; + +export type ListAgencyHostingWebsiteProcessesV1Response = + AgencyHostingV1WebsitesWebsiteProcessCollection; +export const ListAgencyHostingWebsiteProcessesV1Response = + /*@__PURE__*/ S.suspend(() => + AgencyHostingV1WebsitesWebsiteProcessCollection.pipe(T.RawResponseRoot()), + ).annotate({ + identifier: "ListAgencyHostingWebsiteProcessesV1Response", + }) as any as S.Schema; + +export type ListEcommerceDiscountsV1RequestIsDisabled = "true" | "false"; +export const ListEcommerceDiscountsV1RequestIsDisabled = /*@__PURE__*/ S.String; + +export interface ListEcommerceDiscountsV1Request { + /** The ID of the store to list discounts for. */ + store_id: string; + /** Free-text search over discount code and name. */ + q?: string; + /** Filter by disabled state. */ + is_disabled?: ListEcommerceDiscountsV1RequestIsDisabled | (string & {}); + /** Page number */ + page?: number; +} +export const ListEcommerceDiscountsV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + store_id: S.String.pipe(T.Label()), + q: S.optional(S.String.pipe(T.Query())), + is_disabled: S.optional( + ListEcommerceDiscountsV1RequestIsDisabled.pipe(T.Query()), + ), + page: S.optional(S.Number.pipe(T.Query())), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/ecommerce/v1/stores/{store_id}/discounts", + code: 200, + }), + ), +).annotate({ + identifier: "ListEcommerceDiscountsV1Request", +}) as any as S.Schema; + +/** Array of [`Ecommerce.V1.Discount.DiscountResource`](#model/ecommercev1discountdiscountresource) */ +export type EcommerceV1DiscountDiscountCollection = + Array; +export const EcommerceV1DiscountDiscountCollection = /*@__PURE__*/ S.Array( + EcommerceV1DiscountDiscountResource, +) as any as S.Schema; + +export interface ListEcommerceDiscountsV1Response { + data?: EcommerceV1DiscountDiscountCollection; + meta?: CommonSchemaPaginationMetaSchema; +} +export const ListEcommerceDiscountsV1Response = /*@__PURE__*/ S.suspend(() => + S.Struct({ + data: S.optional(EcommerceV1DiscountDiscountCollection), + meta: S.optional(CommonSchemaPaginationMetaSchema), + }), +).annotate({ + identifier: "ListEcommerceDiscountsV1Response", +}) as any as S.Schema; + +export type ListEcommerceProductsV1RequestProductIdsList = Array; +export const ListEcommerceProductsV1RequestProductIdsList = + /*@__PURE__*/ S.Array( + S.String, + ) as any as S.Schema; + +export type ListEcommerceProductsV1RequestStatusItem = + | "draft" + | "proposed" + | "published" + | "rejected" + | "archived"; +export const ListEcommerceProductsV1RequestStatusItem = /*@__PURE__*/ S.String; + +export type ListEcommerceProductsV1RequestStatusList = Array< + ListEcommerceProductsV1RequestStatusItem | (string & {}) +>; +export const ListEcommerceProductsV1RequestStatusList = /*@__PURE__*/ S.Array( + ListEcommerceProductsV1RequestStatusItem, +) as any as S.Schema; + +export type ListEcommerceProductsV1RequestIncludeItem = "variants" | "media"; +export const ListEcommerceProductsV1RequestIncludeItem = /*@__PURE__*/ S.String; + +export type ListEcommerceProductsV1RequestIncludeList = Array< + ListEcommerceProductsV1RequestIncludeItem | (string & {}) +>; +export const ListEcommerceProductsV1RequestIncludeList = /*@__PURE__*/ S.Array( + ListEcommerceProductsV1RequestIncludeItem, +) as any as S.Schema; + +export interface ListEcommerceProductsV1Request { + /** The ID of the store to list products for. */ + store_id: string; + /** Restrict to these product ids. Doubles as a single-product lookup. Up to 200 ids. */ + product_ids?: ListEcommerceProductsV1RequestProductIdsList; + /** Product statuses to include. */ + status?: ListEcommerceProductsV1RequestStatusList; + /** Free-text search over product title and SKU. */ + q?: string; + /** Opt-in heavy data: "variants" embeds each product's variants; "media" embeds its media. */ + include?: ListEcommerceProductsV1RequestIncludeList; + /** Page number */ + page?: number; +} +export const ListEcommerceProductsV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + store_id: S.String.pipe(T.Label()), + product_ids: S.optional( + ListEcommerceProductsV1RequestProductIdsList.pipe(T.Query()), + ), + status: S.optional( + ListEcommerceProductsV1RequestStatusList.pipe(T.Query()), + ), + q: S.optional(S.String.pipe(T.Query())), + include: S.optional( + ListEcommerceProductsV1RequestIncludeList.pipe(T.Query()), + ), + page: S.optional(S.Number.pipe(T.Query())), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/ecommerce/v1/stores/{store_id}/products", + code: 200, + }), + ), +).annotate({ + identifier: "ListEcommerceProductsV1Request", +}) as any as S.Schema; + +/** The product status. */ +export type EcommerceV1ProductProductResourceStatus = + | "draft" + | "proposed" + | "published" + | "rejected" + | "archived"; +export const EcommerceV1ProductProductResourceStatus = /*@__PURE__*/ S.String; + +/** Effective price bounds across the product's variants. */ +export interface EcommerceV1ProductProductResourcePriceRange { + /** Lowest effective variant price in the smallest currency unit, or null if unpriced. */ + min?: number | null; + /** Highest effective variant price in the smallest currency unit, or null if unpriced. */ + max?: number | null; + /** The store currency the range is expressed in. */ + currency_code?: string; +} +export const EcommerceV1ProductProductResourcePriceRange = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + min: S.optional(S.NullOr(S.Number)), + max: S.optional(S.NullOr(S.Number)), + currency_code: S.optional(S.String), + }), + ).annotate({ + identifier: "EcommerceV1ProductProductResourcePriceRange", + }) as any as S.Schema; + +export interface EcommerceV1ProductProductResourceVariantsItemOptionsItem { + /** Option name, e.g. Size. */ + name?: string | null; + /** Option value, e.g. L. */ + value?: string; +} +export const EcommerceV1ProductProductResourceVariantsItemOptionsItem = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + name: S.optional(S.NullOr(S.String)), + value: S.optional(S.String), + }), + ).annotate({ + identifier: "EcommerceV1ProductProductResourceVariantsItemOptionsItem", + }) as any as S.Schema; + +/** The variant's option values. */ +export type EcommerceV1ProductProductResourceVariantsItemOptionsList = + Array; +export const EcommerceV1ProductProductResourceVariantsItemOptionsList = + /*@__PURE__*/ S.Array( + EcommerceV1ProductProductResourceVariantsItemOptionsItem, + ) as any as S.Schema; + +export type EcommerceV1ProductProductResourceVariantsItemPricesItem = + EcommerceV1VariantVariantResourcePricesItem; +export const EcommerceV1ProductProductResourceVariantsItemPricesItem = + EcommerceV1VariantVariantResourcePricesItem; + +/** Prices per currency, in the smallest currency unit. */ +export type EcommerceV1ProductProductResourceVariantsItemPricesList = + Array; +export const EcommerceV1ProductProductResourceVariantsItemPricesList = + /*@__PURE__*/ S.Array( + EcommerceV1VariantVariantResourcePricesItem, + ) as any as S.Schema; + +export interface EcommerceV1ProductProductResourceVariantsItem { + /** The variant ID. */ + id?: string; + /** The variant title. */ + title?: string | null; + /** The variant SKU. */ + sku?: string | null; + /** The variant's option values. */ + options?: EcommerceV1ProductProductResourceVariantsItemOptionsList; + /** Prices per currency, in the smallest currency unit. */ + prices?: EcommerceV1ProductProductResourceVariantsItemPricesList; + /** Units in stock. */ + inventory_quantity?: number; + /** Whether stock is tracked for this variant. */ + manage_inventory?: boolean; +} +export const EcommerceV1ProductProductResourceVariantsItem = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + id: S.optional(S.String), + title: S.optional(S.NullOr(S.String)), + sku: S.optional(S.NullOr(S.String)), + options: S.optional( + EcommerceV1ProductProductResourceVariantsItemOptionsList, + ), + prices: S.optional( + EcommerceV1ProductProductResourceVariantsItemPricesList, + ), + inventory_quantity: S.optional(S.Number), + manage_inventory: S.optional(S.Boolean), + }), + ).annotate({ + identifier: "EcommerceV1ProductProductResourceVariantsItem", + }) as any as S.Schema; + +/** Present (non-null) only when include=variants is set; null otherwise. */ +export type EcommerceV1ProductProductResourceVariantsList = + Array; +export const EcommerceV1ProductProductResourceVariantsList = + /*@__PURE__*/ S.Array( + EcommerceV1ProductProductResourceVariantsItem, + ) as any as S.Schema; + +export interface EcommerceV1ProductProductResourceMediaItem { + /** The media URL. */ + url?: string; + /** The media type, e.g. image or video. */ + type?: string; + /** Whether this media is the product's thumbnail. */ + is_thumbnail?: boolean; +} +export const EcommerceV1ProductProductResourceMediaItem = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + url: S.optional(S.String), + type: S.optional(S.String), + is_thumbnail: S.optional(S.Boolean), + }), + ).annotate({ + identifier: "EcommerceV1ProductProductResourceMediaItem", + }) as any as S.Schema; + +/** Present (non-null) only when include=media is set; null otherwise. */ +export type EcommerceV1ProductProductResourceMediaList = + Array; +export const EcommerceV1ProductProductResourceMediaList = /*@__PURE__*/ S.Array( + EcommerceV1ProductProductResourceMediaItem, +) as any as S.Schema; + +export interface EcommerceV1ProductProductResource { + /** The product ID, required by every other product endpoint. */ + id?: string; + /** The product name. */ + title?: string; + /** The product status. */ + status?: EcommerceV1ProductProductResourceStatus; + /** The product's primary image URL, or null. */ + thumbnail?: string | null; + /** The product type. */ + type?: string; + /** Number of variants. Use include=variants to retrieve them. */ + variant_count?: number; + /** Effective price bounds across the product's variants. */ + price_range?: EcommerceV1ProductProductResourcePriceRange; + /** Present (non-null) only when include=variants is set; null otherwise. */ + variants?: EcommerceV1ProductProductResourceVariantsList | null; + /** Present (non-null) only when include=media is set; null otherwise. */ + media?: EcommerceV1ProductProductResourceMediaList | null; +} +export const EcommerceV1ProductProductResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + id: S.optional(S.String), + title: S.optional(S.String), + status: S.optional(EcommerceV1ProductProductResourceStatus), + thumbnail: S.optional(S.NullOr(S.String)), + type: S.optional(S.String), + variant_count: S.optional(S.Number), + price_range: S.optional(EcommerceV1ProductProductResourcePriceRange), + variants: S.optional( + S.NullOr(EcommerceV1ProductProductResourceVariantsList), + ), + media: S.optional(S.NullOr(EcommerceV1ProductProductResourceMediaList)), + }), +).annotate({ + identifier: "EcommerceV1ProductProductResource", +}) as any as S.Schema; + +/** Array of [`Ecommerce.V1.Product.ProductResource`](#model/ecommercev1productproductresource) */ +export type EcommerceV1ProductProductCollection = + Array; +export const EcommerceV1ProductProductCollection = /*@__PURE__*/ S.Array( + EcommerceV1ProductProductResource, +) as any as S.Schema; + +export interface ListEcommerceProductsV1Response { + data?: EcommerceV1ProductProductCollection; + meta?: CommonSchemaPaginationMetaSchema; +} +export const ListEcommerceProductsV1Response = /*@__PURE__*/ S.suspend(() => + S.Struct({ + data: S.optional(EcommerceV1ProductProductCollection), + meta: S.optional(CommonSchemaPaginationMetaSchema), + }), +).annotate({ + identifier: "ListEcommerceProductsV1Response", +}) as any as S.Schema; + +export interface ListEcommerceProductVariantsV1Request { + /** The ID of the store that owns the product. */ + store_id: string; + /** The ID of the product to list variants for. */ + product_id: string; + /** Page number */ + page?: number; +} +export const ListEcommerceProductVariantsV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + store_id: S.String.pipe(T.Label()), + product_id: S.String.pipe(T.Label()), + page: S.optional(S.Number.pipe(T.Query())), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/ecommerce/v1/stores/{store_id}/products/{product_id}/variants", + code: 200, + }), + ), +).annotate({ + identifier: "ListEcommerceProductVariantsV1Request", +}) as any as S.Schema; + +/** Array of [`Ecommerce.V1.Variant.VariantResource`](#model/ecommercev1variantvariantresource) */ +export type EcommerceV1VariantVariantCollection = + Array; +export const EcommerceV1VariantVariantCollection = /*@__PURE__*/ S.Array( + EcommerceV1VariantVariantResource, +) as any as S.Schema; + +export interface ListEcommerceProductVariantsV1Response { + data?: EcommerceV1VariantVariantCollection; + meta?: CommonSchemaPaginationMetaSchema; +} +export const ListEcommerceProductVariantsV1Response = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + data: S.optional(EcommerceV1VariantVariantCollection), + meta: S.optional(CommonSchemaPaginationMetaSchema), + }), +).annotate({ + identifier: "ListEcommerceProductVariantsV1Response", +}) as any as S.Schema; + +export interface ListEcommerceSalesChannelsV1Request { + /** The ID of the store to list sales channels for. */ + store_id: string; +} +export const ListEcommerceSalesChannelsV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + store_id: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/ecommerce/v1/stores/{store_id}/sales-channels", + code: 200, + }), + ), +).annotate({ + identifier: "ListEcommerceSalesChannelsV1Request", +}) as any as S.Schema; + +/** Sales channel type */ +export type EcommerceV1SalesChannelSalesChannelListResourceSalesChannelsItemType = + | "builder" + | "horizons" + | "tiktok" + | "custom" + | "quick-link" + | "wordpress"; +export const EcommerceV1SalesChannelSalesChannelListResourceSalesChannelsItemType = + /*@__PURE__*/ S.String; + +export interface EcommerceV1SalesChannelSalesChannelListResourceSalesChannelsItem { + /** Sales channel ID */ + id?: string; + /** Sales channel type */ + type?: EcommerceV1SalesChannelSalesChannelListResourceSalesChannelsItemType; + /** Whether this is the primary sales channel. */ + is_primary?: boolean; + /** Whether the sales channel is active. */ + is_active?: boolean; + /** External identifier for the sales channel. */ + external_id?: string | null; + /** Merchant-facing custom name. */ + name?: string | null; + /** Public address where the sales channel lives. */ + domain?: string | null; +} +export const EcommerceV1SalesChannelSalesChannelListResourceSalesChannelsItem = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + id: S.optional(S.String), + type: S.optional( + EcommerceV1SalesChannelSalesChannelListResourceSalesChannelsItemType, + ), + is_primary: S.optional(S.Boolean), + is_active: S.optional(S.Boolean), + external_id: S.optional(S.NullOr(S.String)), + name: S.optional(S.NullOr(S.String)), + domain: S.optional(S.NullOr(S.String)), + }), + ).annotate({ + identifier: + "EcommerceV1SalesChannelSalesChannelListResourceSalesChannelsItem", + }) as any as S.Schema; + +/** The store's active sales channels. */ +export type EcommerceV1SalesChannelSalesChannelListResourceSalesChannelsList = + Array; +export const EcommerceV1SalesChannelSalesChannelListResourceSalesChannelsList = + /*@__PURE__*/ S.Array( + EcommerceV1SalesChannelSalesChannelListResourceSalesChannelsItem, + ) as any as S.Schema; + +export interface EcommerceV1SalesChannelSalesChannelListResource { + /** The store's active sales channels. */ + sales_channels?: EcommerceV1SalesChannelSalesChannelListResourceSalesChannelsList; +} +export const EcommerceV1SalesChannelSalesChannelListResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + sales_channels: S.optional( + EcommerceV1SalesChannelSalesChannelListResourceSalesChannelsList, + ), + }), + ).annotate({ + identifier: "EcommerceV1SalesChannelSalesChannelListResource", + }) as any as S.Schema; + +export type ListEcommerceStoreOrdersV1RequestStatusItem = + | "pending" + | "completed" + | "archived" + | "canceled" + | "requires_action"; +export const ListEcommerceStoreOrdersV1RequestStatusItem = + /*@__PURE__*/ S.String; + +export type ListEcommerceStoreOrdersV1RequestStatusList = Array< + ListEcommerceStoreOrdersV1RequestStatusItem | (string & {}) +>; +export const ListEcommerceStoreOrdersV1RequestStatusList = + /*@__PURE__*/ S.Array( + ListEcommerceStoreOrdersV1RequestStatusItem, + ) as any as S.Schema; + +export type ListEcommerceStoreOrdersV1RequestPaymentStatusItem = + | "not_paid" + | "awaiting" + | "captured" + | "partially_refunded" + | "refunded" + | "canceled" + | "requires_action" + | "not_required"; +export const ListEcommerceStoreOrdersV1RequestPaymentStatusItem = + /*@__PURE__*/ S.String; + +export type ListEcommerceStoreOrdersV1RequestPaymentStatusList = Array< + ListEcommerceStoreOrdersV1RequestPaymentStatusItem | (string & {}) +>; +export const ListEcommerceStoreOrdersV1RequestPaymentStatusList = + /*@__PURE__*/ S.Array( + ListEcommerceStoreOrdersV1RequestPaymentStatusItem, + ) as any as S.Schema; + +export type ListEcommerceStoreOrdersV1RequestFulfillmentStatusItem = + | "not_fulfilled" + | "partially_fulfilled" + | "fulfilled" + | "partially_shipped" + | "shipped" + | "partially_returned" + | "returned" + | "canceled" + | "requires_action"; +export const ListEcommerceStoreOrdersV1RequestFulfillmentStatusItem = + /*@__PURE__*/ S.String; + +export type ListEcommerceStoreOrdersV1RequestFulfillmentStatusList = Array< + ListEcommerceStoreOrdersV1RequestFulfillmentStatusItem | (string & {}) +>; +export const ListEcommerceStoreOrdersV1RequestFulfillmentStatusList = + /*@__PURE__*/ S.Array( + ListEcommerceStoreOrdersV1RequestFulfillmentStatusItem, + ) as any as S.Schema; + +export interface ListEcommerceStoreOrdersV1Request { + /** The ID of the store to list orders for. */ + store_id: string; + /** Order statuses to include. */ + status?: ListEcommerceStoreOrdersV1RequestStatusList; + /** Payment statuses to include. A paid order is "captured". */ + payment_status?: ListEcommerceStoreOrdersV1RequestPaymentStatusList; + /** Fulfilment statuses to include. */ + fulfillment_status?: ListEcommerceStoreOrdersV1RequestFulfillmentStatusList; + /** Customer email, matched exactly. */ + email?: string; + /** The order number the merchant and customer see. */ + display_id?: string; + /** Free-text search over customer name, email, order number and line items. */ + q?: string; + /** Earliest creation time to include, inclusive. Accepts a date or ISO date-time (UTC). */ + created_at_from?: string; + /** Latest creation time to include, inclusive. A bare date covers that whole day. */ + created_at_to?: string; + /** Page number */ + page?: number; +} +export const ListEcommerceStoreOrdersV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + store_id: S.String.pipe(T.Label()), + status: S.optional( + ListEcommerceStoreOrdersV1RequestStatusList.pipe(T.Query()), + ), + payment_status: S.optional( + ListEcommerceStoreOrdersV1RequestPaymentStatusList.pipe(T.Query()), + ), + fulfillment_status: S.optional( + ListEcommerceStoreOrdersV1RequestFulfillmentStatusList.pipe(T.Query()), + ), + email: S.optional(S.String.pipe(T.Query())), + display_id: S.optional(S.String.pipe(T.Query())), + q: S.optional(S.String.pipe(T.Query())), + created_at_from: S.optional(S.String.pipe(T.Query())), + created_at_to: S.optional(S.String.pipe(T.Query())), + page: S.optional(S.Number.pipe(T.Query())), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/ecommerce/v1/stores/{store_id}/orders", + code: 200, + }), + ), +).annotate({ + identifier: "ListEcommerceStoreOrdersV1Request", +}) as any as S.Schema; + +/** Array of [`Ecommerce.V1.Order.OrderResource`](#model/ecommercev1orderorderresource) */ +export type EcommerceV1OrderOrderCollection = + Array; +export const EcommerceV1OrderOrderCollection = /*@__PURE__*/ S.Array( + EcommerceV1OrderOrderResource, +) as any as S.Schema; + +export interface ListEcommerceStoreOrdersV1Response { + data?: EcommerceV1OrderOrderCollection; + meta?: CommonSchemaPaginationMetaSchema; +} +export const ListEcommerceStoreOrdersV1Response = /*@__PURE__*/ S.suspend(() => + S.Struct({ + data: S.optional(EcommerceV1OrderOrderCollection), + meta: S.optional(CommonSchemaPaginationMetaSchema), + }), +).annotate({ + identifier: "ListEcommerceStoreOrdersV1Response", +}) as any as S.Schema; + +export interface ListEcommerceStorePaymentProvidersV1Request { + /** The ID of the store to list payment providers for. */ + store_id: string; + /** Include gateways that do not support the store currency in the available list. */ + include_currency_unsupported?: boolean; +} +export const ListEcommerceStorePaymentProvidersV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + store_id: S.String.pipe(T.Label()), + include_currency_unsupported: S.optional(S.Boolean.pipe(T.Query())), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/ecommerce/v1/stores/{store_id}/payment-providers", + code: 200, + }), + ), + ).annotate({ + identifier: "ListEcommerceStorePaymentProvidersV1Request", + }) as any as S.Schema; + +/** The connection status. */ +export type EcommerceV1PaymentProviderPaymentProviderListResourceDataConnectedItemStatus = + | "connected" + | "pending" + | "new" + | "invalid"; +export const EcommerceV1PaymentProviderPaymentProviderListResourceDataConnectedItemStatus = + /*@__PURE__*/ S.String; + +export interface EcommerceV1PaymentProviderPaymentProviderListResourceDataConnectedItem { + /** The store payment provider row ID. */ + id?: string; + /** The payment gateway ID, e.g. stripe. */ + provider_id?: string; + /** The provider title, or null. */ + title?: string | null; + /** Whether the provider is enabled for the store. */ + is_enabled?: boolean; + /** The connection status. */ + status?: EcommerceV1PaymentProviderPaymentProviderListResourceDataConnectedItemStatus | null; + /** Whether the provider shows at checkout. */ + shows_at_checkout?: boolean; +} +export const EcommerceV1PaymentProviderPaymentProviderListResourceDataConnectedItem = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + id: S.optional(S.String), + provider_id: S.optional(S.String), + title: S.optional(S.NullOr(S.String)), + is_enabled: S.optional(S.Boolean), + status: S.optional( + S.NullOr( + EcommerceV1PaymentProviderPaymentProviderListResourceDataConnectedItemStatus, + ), + ), + shows_at_checkout: S.optional(S.Boolean), + }), + ).annotate({ + identifier: + "EcommerceV1PaymentProviderPaymentProviderListResourceDataConnectedItem", + }) as any as S.Schema; + +/** Payment providers already connected to the store. */ +export type EcommerceV1PaymentProviderPaymentProviderListResourceDataConnectedList = + Array; +export const EcommerceV1PaymentProviderPaymentProviderListResourceDataConnectedList = + /*@__PURE__*/ S.Array( + EcommerceV1PaymentProviderPaymentProviderListResourceDataConnectedItem, + ) as any as S.Schema; + +/** Currencies the gateway supports; present only when the store currency is unsupported. */ +export type EcommerceV1PaymentProviderPaymentProviderListResourceDataAvailableItemSupportedCurrenciesList = + Array; +export const EcommerceV1PaymentProviderPaymentProviderListResourceDataAvailableItemSupportedCurrenciesList = + /*@__PURE__*/ S.Array( + S.String, + ) as any as S.Schema; + +export interface EcommerceV1PaymentProviderPaymentProviderListResourceDataAvailableItem { + /** The payment gateway ID, e.g. stripe. */ + id?: string; + /** Whether the gateway is installed on the store. */ + is_installed?: boolean; + /** Whether the gateway is enabled on the store. */ + is_enabled?: boolean; + /** Whether the gateway supports the store currency. */ + is_currency_supported?: boolean; + /** Currencies the gateway supports; present only when the store currency is unsupported. */ + supported_currencies?: EcommerceV1PaymentProviderPaymentProviderListResourceDataAvailableItemSupportedCurrenciesList; +} +export const EcommerceV1PaymentProviderPaymentProviderListResourceDataAvailableItem = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + id: S.optional(S.String), + is_installed: S.optional(S.Boolean), + is_enabled: S.optional(S.Boolean), + is_currency_supported: S.optional(S.Boolean), + supported_currencies: S.optional( + EcommerceV1PaymentProviderPaymentProviderListResourceDataAvailableItemSupportedCurrenciesList, + ), + }), + ).annotate({ + identifier: + "EcommerceV1PaymentProviderPaymentProviderListResourceDataAvailableItem", + }) as any as S.Schema; + +/** Payment gateways available to install for the store. */ +export type EcommerceV1PaymentProviderPaymentProviderListResourceDataAvailableList = + Array; +export const EcommerceV1PaymentProviderPaymentProviderListResourceDataAvailableList = + /*@__PURE__*/ S.Array( + EcommerceV1PaymentProviderPaymentProviderListResourceDataAvailableItem, + ) as any as S.Schema; + +export interface EcommerceV1PaymentProviderPaymentProviderListResourceData { + /** Payment providers already connected to the store. */ + connected?: EcommerceV1PaymentProviderPaymentProviderListResourceDataConnectedList; + /** Payment gateways available to install for the store. */ + available?: EcommerceV1PaymentProviderPaymentProviderListResourceDataAvailableList; +} +export const EcommerceV1PaymentProviderPaymentProviderListResourceData = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + connected: S.optional( + EcommerceV1PaymentProviderPaymentProviderListResourceDataConnectedList, + ), + available: S.optional( + EcommerceV1PaymentProviderPaymentProviderListResourceDataAvailableList, + ), + }), + ).annotate({ + identifier: "EcommerceV1PaymentProviderPaymentProviderListResourceData", + }) as any as S.Schema; + +export interface EcommerceV1PaymentProviderPaymentProviderListResource { + data?: EcommerceV1PaymentProviderPaymentProviderListResourceData; +} +export const EcommerceV1PaymentProviderPaymentProviderListResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + data: S.optional( + EcommerceV1PaymentProviderPaymentProviderListResourceData, + ), + }), + ).annotate({ + identifier: "EcommerceV1PaymentProviderPaymentProviderListResource", + }) as any as S.Schema; + +export interface ListHostingAccountCronJobsV1Request { + username: string; +} +export const ListHostingAccountCronJobsV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + username: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/hosting/v1/accounts/{username}/cron-jobs", + code: 200, + }), + ), +).annotate({ + identifier: "ListHostingAccountCronJobsV1Request", +}) as any as S.Schema; + +/** Array of [`Hosting.V1.CronJobs.CronJobResource`](#model/hostingv1cronjobscronjobresource) */ +export type HostingV1CronJobsCronJobCollection = + Array; +export const HostingV1CronJobsCronJobCollection = /*@__PURE__*/ S.Array( + HostingV1CronJobsCronJobResource, +) as any as S.Schema; + +export type ListHostingAccountCronJobsV1Response = + HostingV1CronJobsCronJobCollection; +export const ListHostingAccountCronJobsV1Response = /*@__PURE__*/ S.suspend( + () => HostingV1CronJobsCronJobCollection.pipe(T.RawResponseRoot()), +).annotate({ + identifier: "ListHostingAccountCronJobsV1Response", +}) as any as S.Schema; + +export interface ListHostingAccountDatabasesV1Request { + username: string; + /** Page number */ + page?: number; + /** Number of items per page */ + per_page?: number; + /** Filter by domain name (case-insensitive substring match) */ + domain?: string; + /** When used with domain, return only databases assigned to that domain. */ + is_assigned?: boolean; + /** Search databases by name, user, or creation date. */ + search?: string; +} +export const ListHostingAccountDatabasesV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + username: S.String.pipe(T.Label()), + page: S.optional(S.Number.pipe(T.Query())), + per_page: S.optional(S.Number.pipe(T.Query())), + domain: S.optional(S.String.pipe(T.Query())), + is_assigned: S.optional(S.Boolean.pipe(T.Query())), + search: S.optional(S.String.pipe(T.Query())), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/hosting/v1/accounts/{username}/databases", + code: 200, + }), + ), +).annotate({ + identifier: "ListHostingAccountDatabasesV1Request", +}) as any as S.Schema; + +export interface HostingV1DatabasesDatabaseResource { + /** Database name. */ + name?: string; + /** Database user. */ + user?: string; + /** Domain assigned to the database, or null when the database is unassigned. */ + domain?: string | null; + /** Database user permissions keyed by permission name. */ + permissions?: unknown; + /** Database creation date in ISO 8601 format. */ + created_at?: string; + /** Database last update date in ISO 8601 format. */ + updated_at?: string; + /** Current database disk usage in megabytes. */ + disk_usage_mb?: number | null; + /** Maximum allowed database size in megabytes. */ + max_size_mb?: number; + /** MySQL hostname for remote connections. Same value as hPanel Remote MySQL. Identical for every database on this account. Not the database user grant host. */ + host?: string; + /** MySQL port for remote connections. Always 3306. */ + port?: number; +} +export const HostingV1DatabasesDatabaseResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + name: S.optional(S.String), + user: S.optional(S.String), + domain: S.optional(S.NullOr(S.String)), + permissions: S.optional(S.Unknown), + created_at: S.optional(S.String), + updated_at: S.optional(S.String), + disk_usage_mb: S.optional(S.NullOr(S.Number)), + max_size_mb: S.optional(S.Number), + host: S.optional(S.String), + port: S.optional(S.Number), + }), +).annotate({ + identifier: "HostingV1DatabasesDatabaseResource", +}) as any as S.Schema; + +/** Array of [`Hosting.V1.Databases.DatabaseResource`](#model/hostingv1databasesdatabaseresource) */ +export type HostingV1DatabasesDatabaseCollection = + Array; +export const HostingV1DatabasesDatabaseCollection = /*@__PURE__*/ S.Array( + HostingV1DatabasesDatabaseResource, +) as any as S.Schema; + +export interface ListHostingAccountDatabasesV1Response { + data?: HostingV1DatabasesDatabaseCollection; + meta?: CommonSchemaPaginationMetaSchema; +} +export const ListHostingAccountDatabasesV1Response = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + data: S.optional(HostingV1DatabasesDatabaseCollection), + meta: S.optional(CommonSchemaPaginationMetaSchema), + }), +).annotate({ + identifier: "ListHostingAccountDatabasesV1Response", +}) as any as S.Schema; + +export interface ListHostingAvailableDatacentersV1Request { + /** Order ID */ + order_id: number; +} +export const ListHostingAvailableDatacentersV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + order_id: S.Number.pipe(T.Query()), + }).pipe( + T.Http({ method: "GET", uri: "/api/hosting/v1/datacenters", code: 200 }), + ), +).annotate({ + identifier: "ListHostingAvailableDatacentersV1Request", +}) as any as S.Schema; + +export type HostingV1DatacenterCoordinatesResource = + AgencyHostingV1DatacentersCoordinatesResource; +export const HostingV1DatacenterCoordinatesResource = + AgencyHostingV1DatacentersCoordinatesResource; + +export interface HostingV1DatacenterDatacenterResource { + /** Data center title */ + title?: string; + /** Data center code */ + code?: string; + coordinates?: AgencyHostingV1DatacentersCoordinatesResource; +} +export const HostingV1DatacenterDatacenterResource = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + title: S.optional(S.String), + code: S.optional(S.String), + coordinates: S.optional(AgencyHostingV1DatacentersCoordinatesResource), + }), +).annotate({ + identifier: "HostingV1DatacenterDatacenterResource", +}) as any as S.Schema; + +/** Array of [`Hosting.V1.Datacenter.DatacenterResource`](#model/hostingv1datacenterdatacenterresource) */ +export type HostingV1DatacenterDatacenterCollection = + Array; +export const HostingV1DatacenterDatacenterCollection = /*@__PURE__*/ S.Array( + HostingV1DatacenterDatacenterResource, +) as any as S.Schema; + +export type ListHostingAvailableDatacentersV1Response = + HostingV1DatacenterDatacenterCollection; +export const ListHostingAvailableDatacentersV1Response = + /*@__PURE__*/ S.suspend(() => + HostingV1DatacenterDatacenterCollection.pipe(T.RawResponseRoot()), + ).annotate({ + identifier: "ListHostingAvailableDatacentersV1Response", + }) as any as S.Schema; + +export interface ListHostingAvailableWordPressCoreUpdatesV1Request { + username: string; + /** WordPress installation (software) identifier */ + software: string; +} +export const ListHostingAvailableWordPressCoreUpdatesV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + username: S.String.pipe(T.Label()), + software: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/hosting/v1/accounts/{username}/wordpress/{software}/updates", + code: 200, + }), + ), + ).annotate({ + identifier: "ListHostingAvailableWordPressCoreUpdatesV1Request", + }) as any as S.Schema; + +/** Update type */ +export type WordPressV1InstallationsUpdateResourceType = "major" | "minor"; +export const WordPressV1InstallationsUpdateResourceType = + /*@__PURE__*/ S.String; + +export interface WordPressV1InstallationsUpdateResource { + /** Available WordPress core version */ + version?: string; + /** Update type */ + type?: WordPressV1InstallationsUpdateResourceType; + /** Download URL for the update package */ + url?: string; +} +export const WordPressV1InstallationsUpdateResource = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + version: S.optional(S.String), + type: S.optional(WordPressV1InstallationsUpdateResourceType), + url: S.optional(S.String), + }), +).annotate({ + identifier: "WordPressV1InstallationsUpdateResource", +}) as any as S.Schema; + +/** Array of [`WordPress.V1.Installations.UpdateResource`](#model/wordpressv1installationsupdateresource) */ +export type WordPressV1InstallationsUpdateCollection = + Array; +export const WordPressV1InstallationsUpdateCollection = /*@__PURE__*/ S.Array( + WordPressV1InstallationsUpdateResource, +) as any as S.Schema; + +export type ListHostingAvailableWordPressCoreUpdatesV1Response = + WordPressV1InstallationsUpdateCollection; +export const ListHostingAvailableWordPressCoreUpdatesV1Response = + /*@__PURE__*/ S.suspend(() => + WordPressV1InstallationsUpdateCollection.pipe(T.RawResponseRoot()), + ).annotate({ + identifier: "ListHostingAvailableWordPressCoreUpdatesV1Response", + }) as any as S.Schema; + +export interface ListHostingAvailableWordPressPluginsV1Request { + username: string; + /** WordPress installation (software) identifier */ + software: string; +} +export const ListHostingAvailableWordPressPluginsV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + username: S.String.pipe(T.Label()), + software: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/hosting/v1/accounts/{username}/wordpress/{software}/plugins/available", + code: 200, + }), + ), + ).annotate({ + identifier: "ListHostingAvailableWordPressPluginsV1Request", + }) as any as S.Schema; + +export interface WordPressV1PluginsAvailablePluginResource { + /** Plugin slug used when installing the plugin */ + slug?: string; + /** Human readable plugin name */ + title?: string; + /** Short plugin description */ + description?: string; + /** Translation slug for the onboarding description */ + onboarding_description_slug?: string | null; + /** Translation slug for the recommended description */ + recommended_description_slug?: string | null; + /** Link to the plugin page on WordPress.org */ + link?: string; + /** Latest available plugin version */ + version?: string; + /** Minimum WordPress version required by the plugin */ + required_wordpress_version?: string; + /** Minimum PHP version required by the plugin */ + required_php_version?: string; + /** Whether a hosting plan upgrade is required to use the plugin */ + is_plan_upgrade_needed?: boolean; +} +export const WordPressV1PluginsAvailablePluginResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + slug: S.optional(S.String), + title: S.optional(S.String), + description: S.optional(S.String), + onboarding_description_slug: S.optional(S.NullOr(S.String)), + recommended_description_slug: S.optional(S.NullOr(S.String)), + link: S.optional(S.String), + version: S.optional(S.String), + required_wordpress_version: S.optional(S.String), + required_php_version: S.optional(S.String), + is_plan_upgrade_needed: S.optional(S.Boolean), + }), + ).annotate({ + identifier: "WordPressV1PluginsAvailablePluginResource", + }) as any as S.Schema; + +/** Array of [`WordPress.V1.Plugins.AvailablePluginResource`](#model/wordpressv1pluginsavailablepluginresource) */ +export type WordPressV1PluginsAvailablePluginCollection = + Array; +export const WordPressV1PluginsAvailablePluginCollection = + /*@__PURE__*/ S.Array( + WordPressV1PluginsAvailablePluginResource, + ) as any as S.Schema; + +export type ListHostingAvailableWordPressPluginsV1Response = + WordPressV1PluginsAvailablePluginCollection; +export const ListHostingAvailableWordPressPluginsV1Response = + /*@__PURE__*/ S.suspend(() => + WordPressV1PluginsAvailablePluginCollection.pipe(T.RawResponseRoot()), + ).annotate({ + identifier: "ListHostingAvailableWordPressPluginsV1Response", + }) as any as S.Schema; + +export interface ListHostingDatabaseRemoteConnectionsV1Request { + username: string; + /** Filter remote connections by the domain the database is assigned to. Rules for databases not assigned to any domain are always included. */ + domain?: string; +} +export const ListHostingDatabaseRemoteConnectionsV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + username: S.String.pipe(T.Label()), + domain: S.optional(S.String.pipe(T.Query())), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/hosting/v1/accounts/{username}/databases/remote-connections", + code: 200, + }), + ), + ).annotate({ + identifier: "ListHostingDatabaseRemoteConnectionsV1Request", + }) as any as S.Schema; + +export interface HostingV1DatabasesRemoteConnectionsRemoteConnectionResource { + /** Full name of the database the rule applies to. */ + database_name?: string; + /** Database user the rule applies to. */ + database_user?: string; + /** Allowed remote host: an IPv4/IPv6 address, or "%" for any host. */ + ip?: string; +} +export const HostingV1DatabasesRemoteConnectionsRemoteConnectionResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + database_name: S.optional(S.String), + database_user: S.optional(S.String), + ip: S.optional(S.String), + }), + ).annotate({ + identifier: "HostingV1DatabasesRemoteConnectionsRemoteConnectionResource", + }) as any as S.Schema; + +/** Array of [`Hosting.V1.Databases.RemoteConnections.RemoteConnectionResource`](#model/hostingv1databasesremoteconnectionsremoteconnectionresource) */ +export type HostingV1DatabasesRemoteConnectionsRemoteConnectionCollection = + Array; +export const HostingV1DatabasesRemoteConnectionsRemoteConnectionCollection = + /*@__PURE__*/ S.Array( + HostingV1DatabasesRemoteConnectionsRemoteConnectionResource, + ) as any as S.Schema; + +export type ListHostingDatabaseRemoteConnectionsV1Response = + HostingV1DatabasesRemoteConnectionsRemoteConnectionCollection; +export const ListHostingDatabaseRemoteConnectionsV1Response = + /*@__PURE__*/ S.suspend(() => + HostingV1DatabasesRemoteConnectionsRemoteConnectionCollection.pipe( + T.RawResponseRoot(), + ), + ).annotate({ + identifier: "ListHostingDatabaseRemoteConnectionsV1Response", + }) as any as S.Schema; + +export type ListHostingInstalledWordPressPluginsV1RequestCategory = "cache"; +export const ListHostingInstalledWordPressPluginsV1RequestCategory = + /*@__PURE__*/ S.String; + +export interface ListHostingInstalledWordPressPluginsV1Request { + username: string; + /** WordPress installation (software) identifier */ + software: string; + /** Filter installed plugins by category. */ + category?: + | ListHostingInstalledWordPressPluginsV1RequestCategory + | (string & {}); +} +export const ListHostingInstalledWordPressPluginsV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + username: S.String.pipe(T.Label()), + software: S.String.pipe(T.Label()), + category: S.optional( + ListHostingInstalledWordPressPluginsV1RequestCategory.pipe(T.Query()), + ), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/hosting/v1/accounts/{username}/wordpress/{software}/plugins", + code: 200, + }), + ), + ).annotate({ + identifier: "ListHostingInstalledWordPressPluginsV1Request", + }) as any as S.Schema; + +/** Whether the plugin is active or inactive */ +export type WordPressV1PluginsInstalledPluginResourceStatus = + | "active" + | "inactive"; +export const WordPressV1PluginsInstalledPluginResourceStatus = + /*@__PURE__*/ S.String; + +/** Known vulnerabilities affecting the installed version */ +export type WordPressV1PluginsInstalledPluginResourceVulnerabilitiesList = + Array; +export const WordPressV1PluginsInstalledPluginResourceVulnerabilitiesList = + /*@__PURE__*/ S.Array( + WordPressV1CommonVulnerabilityResource, + ) as any as S.Schema; + +export interface WordPressV1PluginsInstalledPluginResource { + /** Plugin slug */ + name?: string; + /** Human readable plugin name */ + title?: string; + /** Installed plugin version */ + version?: string; + /** Whether the plugin is active or inactive */ + status?: WordPressV1PluginsInstalledPluginResourceStatus; + /** Available update version, or "none" when up to date */ + update?: string; + /** Known vulnerabilities affecting the installed version */ + vulnerabilities?: WordPressV1PluginsInstalledPluginResourceVulnerabilitiesList; +} +export const WordPressV1PluginsInstalledPluginResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + name: S.optional(S.String), + title: S.optional(S.String), + version: S.optional(S.String), + status: S.optional(WordPressV1PluginsInstalledPluginResourceStatus), + update: S.optional(S.String), + vulnerabilities: S.optional( + WordPressV1PluginsInstalledPluginResourceVulnerabilitiesList, + ), + }), + ).annotate({ + identifier: "WordPressV1PluginsInstalledPluginResource", + }) as any as S.Schema; + +/** Array of [`WordPress.V1.Plugins.InstalledPluginResource`](#model/wordpressv1pluginsinstalledpluginresource) */ +export type WordPressV1PluginsInstalledPluginCollection = + Array; +export const WordPressV1PluginsInstalledPluginCollection = + /*@__PURE__*/ S.Array( + WordPressV1PluginsInstalledPluginResource, + ) as any as S.Schema; + +export type ListHostingInstalledWordPressPluginsV1Response = + WordPressV1PluginsInstalledPluginCollection; +export const ListHostingInstalledWordPressPluginsV1Response = + /*@__PURE__*/ S.suspend(() => + WordPressV1PluginsInstalledPluginCollection.pipe(T.RawResponseRoot()), + ).annotate({ + identifier: "ListHostingInstalledWordPressPluginsV1Response", + }) as any as S.Schema; + +export interface ListHostingInstalledWordPressThemesV1Request { + username: string; + /** WordPress installation (software) identifier */ + software: string; +} +export const ListHostingInstalledWordPressThemesV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + username: S.String.pipe(T.Label()), + software: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/hosting/v1/accounts/{username}/wordpress/{software}/themes", + code: 200, + }), + ), + ).annotate({ + identifier: "ListHostingInstalledWordPressThemesV1Request", + }) as any as S.Schema; + +/** Whether the theme is active or inactive */ +export type WordPressV1ThemesInstalledThemeResourceStatus = + | "active" + | "inactive"; +export const WordPressV1ThemesInstalledThemeResourceStatus = + /*@__PURE__*/ S.String; + +/** Known vulnerabilities affecting the installed version */ +export type WordPressV1ThemesInstalledThemeResourceVulnerabilitiesList = + Array; +export const WordPressV1ThemesInstalledThemeResourceVulnerabilitiesList = + /*@__PURE__*/ S.Array( + WordPressV1CommonVulnerabilityResource, + ) as any as S.Schema; + +export interface WordPressV1ThemesInstalledThemeResource { + /** Theme slug */ + name?: string; + /** Human readable theme name */ + title?: string; + /** Installed theme version */ + version?: string; + /** Whether the theme is active or inactive */ + status?: WordPressV1ThemesInstalledThemeResourceStatus; + /** Available update version, or "none" when up to date */ + update?: string; + /** Known vulnerabilities affecting the installed version */ + vulnerabilities?: WordPressV1ThemesInstalledThemeResourceVulnerabilitiesList; +} +export const WordPressV1ThemesInstalledThemeResource = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + name: S.optional(S.String), + title: S.optional(S.String), + version: S.optional(S.String), + status: S.optional(WordPressV1ThemesInstalledThemeResourceStatus), + update: S.optional(S.String), + vulnerabilities: S.optional( + WordPressV1ThemesInstalledThemeResourceVulnerabilitiesList, + ), + }), +).annotate({ + identifier: "WordPressV1ThemesInstalledThemeResource", +}) as any as S.Schema; + +/** Array of [`WordPress.V1.Themes.InstalledThemeResource`](#model/wordpressv1themesinstalledthemeresource) */ +export type WordPressV1ThemesInstalledThemeCollection = + Array; +export const WordPressV1ThemesInstalledThemeCollection = /*@__PURE__*/ S.Array( + WordPressV1ThemesInstalledThemeResource, +) as any as S.Schema; + +export type ListHostingInstalledWordPressThemesV1Response = + WordPressV1ThemesInstalledThemeCollection; +export const ListHostingInstalledWordPressThemesV1Response = + /*@__PURE__*/ S.suspend(() => + WordPressV1ThemesInstalledThemeCollection.pipe(T.RawResponseRoot()), + ).annotate({ + identifier: "ListHostingInstalledWordPressThemesV1Response", + }) as any as S.Schema; + +export type ListHostingNodeJSBuildsV1RequestStatesItem = + | "pending" + | "running" + | "completed" + | "failed"; +export const ListHostingNodeJSBuildsV1RequestStatesItem = + /*@__PURE__*/ S.String; + +export type ListHostingNodeJSBuildsV1RequestStatesList = Array< + ListHostingNodeJSBuildsV1RequestStatesItem | (string & {}) +>; +export const ListHostingNodeJSBuildsV1RequestStatesList = /*@__PURE__*/ S.Array( + ListHostingNodeJSBuildsV1RequestStatesItem, +) as any as S.Schema; + +export interface ListHostingNodeJSBuildsV1Request { + username: string; + /** Domain name */ + domain: string; + /** Page number */ + page?: number; + /** Number of items per page */ + per_page?: number; + /** Build states to filter by */ + states?: ListHostingNodeJSBuildsV1RequestStatesList; +} +export const ListHostingNodeJSBuildsV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + username: S.String.pipe(T.Label()), + domain: S.String.pipe(T.Label()), + page: S.optional(S.Number.pipe(T.Query())), + per_page: S.optional(S.Number.pipe(T.Query())), + states: S.optional( + ListHostingNodeJSBuildsV1RequestStatesList.pipe(T.Query()), + ), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/builds", + code: 200, + }), + ), +).annotate({ + identifier: "ListHostingNodeJSBuildsV1Request", +}) as any as S.Schema; + +/** Build state */ +export type HostingV1NodeJsBuildResourceState = + | "pending" + | "running" + | "completed" + | "failed"; +export const HostingV1NodeJsBuildResourceState = /*@__PURE__*/ S.String; + +/** Node.js application type */ +export type HostingV1NodeJsBuildOptionsResourceAppType = + | "create-react-app" + | "gatsby" + | "vite" + | "angular" + | "react" + | "vue" + | "parcel" + | "next" + | "nuxt" + | "nest" + | "express" + | "fastify" + | "astro" + | "svelte" + | "svelte-kit" + | "hono" + | "react-router" + | "nitro" + | "other"; +export const HostingV1NodeJsBuildOptionsResourceAppType = + /*@__PURE__*/ S.String; + +/** Package manager */ +export type HostingV1NodeJsBuildOptionsResourcePackageManager = + | "npm" + | "yarn" + | "pnpm"; +export const HostingV1NodeJsBuildOptionsResourcePackageManager = + /*@__PURE__*/ S.String; + +/** Source type for the build */ +export type HostingV1NodeJsBuildOptionsResourceSourceType = "archive"; +export const HostingV1NodeJsBuildOptionsResourceSourceType = + /*@__PURE__*/ S.String; + +export interface HostingV1NodeJsSourceOptionsResource { + /** Present if sourceType is "archive" */ + archive_path?: string | null; +} +export const HostingV1NodeJsSourceOptionsResource = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + archive_path: S.optional(S.NullOr(S.String)), + }), +).annotate({ + identifier: "HostingV1NodeJsSourceOptionsResource", +}) as any as S.Schema; + +export interface HostingV1NodeJsBuildOptionsResource { + /** Node.js version */ + node_version: number; + /** Node.js application type */ + app_type: HostingV1NodeJsBuildOptionsResourceAppType | null; + /** Application root directory */ + root_directory: string | null; + /** Build output directory */ + output_directory: string | null; + /** The npm script to run to build the application */ + build_script: string | null; + /** The main entry point file for the application */ + entry_file: string | null; + /** Package manager */ + package_manager: HostingV1NodeJsBuildOptionsResourcePackageManager | null; + /** Source type for the build */ + source_type: HostingV1NodeJsBuildOptionsResourceSourceType | null; + /** Source options, varies based on sourceType */ + source_options: HostingV1NodeJsSourceOptionsResource | null; +} +export const HostingV1NodeJsBuildOptionsResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + node_version: S.Number, + app_type: S.NullOr(HostingV1NodeJsBuildOptionsResourceAppType), + root_directory: S.NullOr(S.String), + output_directory: S.NullOr(S.String), + build_script: S.NullOr(S.String), + entry_file: S.NullOr(S.String), + package_manager: S.NullOr( + HostingV1NodeJsBuildOptionsResourcePackageManager, + ), + source_type: S.NullOr(HostingV1NodeJsBuildOptionsResourceSourceType), + source_options: S.NullOr(HostingV1NodeJsSourceOptionsResource), + }), +).annotate({ + identifier: "HostingV1NodeJsBuildOptionsResource", +}) as any as S.Schema; + +export interface HostingV1NodeJsBuildResource { + /** Build UUID */ + uuid?: string; + /** Build state */ + state?: HostingV1NodeJsBuildResourceState; + /** Build options */ + options?: HostingV1NodeJsBuildOptionsResource | null; + /** Creation timestamp */ + created_at?: string; + /** Last update timestamp */ + updated_at?: string; +} +export const HostingV1NodeJsBuildResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + uuid: S.optional(S.String), + state: S.optional(HostingV1NodeJsBuildResourceState), + options: S.optional(S.NullOr(HostingV1NodeJsBuildOptionsResource)), + created_at: S.optional(S.String), + updated_at: S.optional(S.String), + }), +).annotate({ + identifier: "HostingV1NodeJsBuildResource", +}) as any as S.Schema; + +/** Array of [`Hosting.V1.NodeJs.BuildResource`](#model/hostingv1nodejsbuildresource) */ +export type HostingV1NodeJsBuildCollection = + Array; +export const HostingV1NodeJsBuildCollection = /*@__PURE__*/ S.Array( + HostingV1NodeJsBuildResource, +) as any as S.Schema; + +export interface ListHostingNodeJSBuildsV1Response { + data?: HostingV1NodeJsBuildCollection; + meta?: CommonSchemaPaginationMetaSchema; +} +export const ListHostingNodeJSBuildsV1Response = /*@__PURE__*/ S.suspend(() => + S.Struct({ + data: S.optional(HostingV1NodeJsBuildCollection), + meta: S.optional(CommonSchemaPaginationMetaSchema), + }), +).annotate({ + identifier: "ListHostingNodeJSBuildsV1Response", +}) as any as S.Schema; + +export interface ListHostingNodeJsEnvironmentVariablesV1Request { + username: string; + /** Domain name */ + domain: string; +} +export const ListHostingNodeJsEnvironmentVariablesV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + username: S.String.pipe(T.Label()), + domain: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/builds/settings/env", + code: 200, + }), + ), + ).annotate({ + identifier: "ListHostingNodeJsEnvironmentVariablesV1Request", + }) as any as S.Schema; + +export interface HostingV1NodeJsEnvVarResource { + /** Environment variable name */ + key?: string; + /** Always the literal string ********. Real values cannot be read back through this API. */ + value?: string; +} +export const HostingV1NodeJsEnvVarResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + key: S.optional(S.String), + value: S.optional(S.String), + }), +).annotate({ + identifier: "HostingV1NodeJsEnvVarResource", +}) as any as S.Schema; + +/** Array of [`Hosting.V1.NodeJs.EnvVarResource`](#model/hostingv1nodejsenvvarresource) */ +export type HostingV1NodeJsEnvVarCollection = + Array; +export const HostingV1NodeJsEnvVarCollection = /*@__PURE__*/ S.Array( + HostingV1NodeJsEnvVarResource, +) as any as S.Schema; + +export type ListHostingNodeJsEnvironmentVariablesV1Response = + HostingV1NodeJsEnvVarCollection; +export const ListHostingNodeJsEnvironmentVariablesV1Response = + /*@__PURE__*/ S.suspend(() => + HostingV1NodeJsEnvVarCollection.pipe(T.RawResponseRoot()), + ).annotate({ + identifier: "ListHostingNodeJsEnvironmentVariablesV1Response", + }) as any as S.Schema; + +export type ListHostingNodeJsVulnerabilitiesV1RequestSeveritiesItem = + | "low" + | "moderate" + | "high" + | "critical" + | "unknown"; +export const ListHostingNodeJsVulnerabilitiesV1RequestSeveritiesItem = + /*@__PURE__*/ S.String; + +export type ListHostingNodeJsVulnerabilitiesV1RequestSeveritiesList = Array< + ListHostingNodeJsVulnerabilitiesV1RequestSeveritiesItem | (string & {}) +>; +export const ListHostingNodeJsVulnerabilitiesV1RequestSeveritiesList = + /*@__PURE__*/ S.Array( + ListHostingNodeJsVulnerabilitiesV1RequestSeveritiesItem, + ) as any as S.Schema; + +export interface ListHostingNodeJsVulnerabilitiesV1Request { + username: string; + /** Domain name */ + domain: string; + /** Severities to filter by */ + severities?: ListHostingNodeJsVulnerabilitiesV1RequestSeveritiesList; +} +export const ListHostingNodeJsVulnerabilitiesV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + username: S.String.pipe(T.Label()), + domain: S.String.pipe(T.Label()), + severities: S.optional( + ListHostingNodeJsVulnerabilitiesV1RequestSeveritiesList.pipe(T.Query()), + ), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/vulnerabilities", + code: 200, + }), + ), + ).annotate({ + identifier: "ListHostingNodeJsVulnerabilitiesV1Request", + }) as any as S.Schema; + +/** Severity level of the vulnerability */ +export type HostingV1NodeJsVulnerabilityResourceSeverity = + | "low" + | "moderate" + | "high" + | "critical" + | "unknown"; +export const HostingV1NodeJsVulnerabilityResourceSeverity = + /*@__PURE__*/ S.String; + +export interface HostingV1NodeJsVulnerabilityResource { + /** Name of the affected npm package */ + package_name?: string; + /** Version of the package currently installed */ + installed_version?: string; + /** Whether the package is a direct dependency */ + is_direct?: boolean; + /** Whether the vulnerability can be auto-patched without a major version bump */ + is_patchable?: boolean; + /** Version that fixes the vulnerability, if known */ + fix_version?: string | null; + /** Unique vulnerability identifier (e.g. GHSA or CVE) */ + vulnerability_id?: string; + /** Severity level of the vulnerability */ + severity?: HostingV1NodeJsVulnerabilityResourceSeverity; + /** Short human-readable title of the vulnerability */ + title?: string; + /** Detailed description of the vulnerability */ + description?: string | null; + /** CVSS base score (0.0-10.0) */ + cvss_score?: number | null; + /** CVE identifier, if available */ + cve?: string | null; + /** CWE identifier describing the weakness type */ + cwe?: string | null; + /** URL to the vulnerability advisory */ + url?: string | null; + /** Date the vulnerability was published, in ISO 8601 format */ + published_at?: string | null; + /** Whether this vulnerability is included in a currently open patch pull request */ + is_patching_in_progress?: boolean; +} +export const HostingV1NodeJsVulnerabilityResource = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + package_name: S.optional(S.String), + installed_version: S.optional(S.String), + is_direct: S.optional(S.Boolean), + is_patchable: S.optional(S.Boolean), + fix_version: S.optional(S.NullOr(S.String)), + vulnerability_id: S.optional(S.String), + severity: S.optional(HostingV1NodeJsVulnerabilityResourceSeverity), + title: S.optional(S.String), + description: S.optional(S.NullOr(S.String)), + cvss_score: S.optional(S.NullOr(S.Number)), + cve: S.optional(S.NullOr(S.String)), + cwe: S.optional(S.NullOr(S.String)), + url: S.optional(S.NullOr(S.String)), + published_at: S.optional(S.NullOr(S.String)), + is_patching_in_progress: S.optional(S.Boolean), + }), +).annotate({ + identifier: "HostingV1NodeJsVulnerabilityResource", +}) as any as S.Schema; + +/** Array of [`Hosting.V1.NodeJs.VulnerabilityResource`](#model/hostingv1nodejsvulnerabilityresource) */ +export type HostingV1NodeJsVulnerabilityCollection = + Array; +export const HostingV1NodeJsVulnerabilityCollection = /*@__PURE__*/ S.Array( + HostingV1NodeJsVulnerabilityResource, +) as any as S.Schema; + +export type ListHostingNodeJsVulnerabilitiesV1Response = + HostingV1NodeJsVulnerabilityCollection; +export const ListHostingNodeJsVulnerabilitiesV1Response = + /*@__PURE__*/ S.suspend(() => + HostingV1NodeJsVulnerabilityCollection.pipe(T.RawResponseRoot()), + ).annotate({ + identifier: "ListHostingNodeJsVulnerabilitiesV1Response", + }) as any as S.Schema; + +export type ListHostingOrdersV1RequestStatusesItem = + | "active" + | "deleting" + | "deleted" + | "suspended"; +export const ListHostingOrdersV1RequestStatusesItem = /*@__PURE__*/ S.String; + +export type ListHostingOrdersV1RequestStatusesList = Array< + ListHostingOrdersV1RequestStatusesItem | (string & {}) +>; +export const ListHostingOrdersV1RequestStatusesList = /*@__PURE__*/ S.Array( + ListHostingOrdersV1RequestStatusesItem, +) as any as S.Schema; + +export type ListHostingOrdersV1RequestOrderIdsList = Array; +export const ListHostingOrdersV1RequestOrderIdsList = /*@__PURE__*/ S.Array( + S.Number, +) as any as S.Schema; + +export interface ListHostingOrdersV1Request { + /** Page number */ + page?: number; + /** Number of items per page */ + per_page?: number; + /** Filter by order statuses */ + statuses?: ListHostingOrdersV1RequestStatusesList; + /** Filter by specific order IDs */ + order_ids?: ListHostingOrdersV1RequestOrderIdsList; +} +export const ListHostingOrdersV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + page: S.optional(S.Number.pipe(T.Query())), + per_page: S.optional(S.Number.pipe(T.Query())), + statuses: S.optional( + ListHostingOrdersV1RequestStatusesList.pipe(T.Query()), + ), + order_ids: S.optional( + ListHostingOrdersV1RequestOrderIdsList.pipe(T.Query()), + ), + }).pipe(T.Http({ method: "GET", uri: "/api/hosting/v1/orders", code: 200 })), +).annotate({ + identifier: "ListHostingOrdersV1Request", +}) as any as S.Schema; + +export interface HostingV1OrdersPlanResource { + /** Plan name */ + name?: string; +} +export const HostingV1OrdersPlanResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + name: S.optional(S.String), + }), +).annotate({ + identifier: "HostingV1OrdersPlanResource", +}) as any as S.Schema; + +export interface HostingV1OrdersOrderResource { + /** Order ID */ + id?: number; + /** Client ID */ + client_id?: number; + /** Subscription ID */ + subscription_id?: string | null; + /** Creation date */ + created_at?: string; + plan?: HostingV1OrdersPlanResource; + /** Order status */ + status?: string; +} +export const HostingV1OrdersOrderResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + id: S.optional(S.Number), + client_id: S.optional(S.Number), + subscription_id: S.optional(S.NullOr(S.String)), + created_at: S.optional(S.String), + plan: S.optional(HostingV1OrdersPlanResource), + status: S.optional(S.String), + }), +).annotate({ + identifier: "HostingV1OrdersOrderResource", +}) as any as S.Schema; + +/** Array of [`Hosting.V1.Orders.OrderResource`](#model/hostingv1ordersorderresource) */ +export type HostingV1OrdersOrderCollection = + Array; +export const HostingV1OrdersOrderCollection = /*@__PURE__*/ S.Array( + HostingV1OrdersOrderResource, +) as any as S.Schema; + +export interface ListHostingOrdersV1Response { + data?: HostingV1OrdersOrderCollection; + meta?: CommonSchemaPaginationMetaSchema; +} +export const ListHostingOrdersV1Response = /*@__PURE__*/ S.suspend(() => + S.Struct({ + data: S.optional(HostingV1OrdersOrderCollection), + meta: S.optional(CommonSchemaPaginationMetaSchema), + }), +).annotate({ + identifier: "ListHostingOrdersV1Response", +}) as any as S.Schema; + +export interface ListHostingSuggestedWordPressPluginsV1Request { + /** Optionally scope suggestions to a specific order. */ + order_id?: number; +} +export const ListHostingSuggestedWordPressPluginsV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + order_id: S.optional(S.Number.pipe(T.Query())), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/hosting/v1/wordpress/plugins/suggested", + code: 200, + }), + ), + ).annotate({ + identifier: "ListHostingSuggestedWordPressPluginsV1Request", + }) as any as S.Schema; + +/** Website type the suggested plugins are grouped by */ +export type WordPressV1PluginsSuggestedPluginGroupResourceWebsiteType = + | "business" + | "online-store" + | "blog" + | "portfolio" + | "affiliate-marketing" + | "other" + | "default"; +export const WordPressV1PluginsSuggestedPluginGroupResourceWebsiteType = + /*@__PURE__*/ S.String; + +export interface WordPressV1PluginsSuggestedPluginResource { + /** Plugin slug used when installing the plugin */ + slug?: string; + /** Human readable plugin name */ + title?: string; + /** Short plugin description */ + description?: string; + /** Translation slug for the onboarding description */ + onboarding_description_slug?: string | null; + /** Translation slug for the recommended description */ + recommended_description_slug?: string | null; + /** Link to the plugin page on WordPress.org */ + link?: string; + /** Latest available plugin version */ + version?: string; + /** Minimum WordPress version required by the plugin */ + required_wordpress_version?: string; + /** Minimum PHP version required by the plugin */ + required_php_version?: string; + /** Whether the plugin is preselected during onboarding */ + is_preselected?: boolean; + /** Whether a hosting plan upgrade is required to use the plugin */ + is_plan_upgrade_needed?: boolean; +} +export const WordPressV1PluginsSuggestedPluginResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + slug: S.optional(S.String), + title: S.optional(S.String), + description: S.optional(S.String), + onboarding_description_slug: S.optional(S.NullOr(S.String)), + recommended_description_slug: S.optional(S.NullOr(S.String)), + link: S.optional(S.String), + version: S.optional(S.String), + required_wordpress_version: S.optional(S.String), + required_php_version: S.optional(S.String), + is_preselected: S.optional(S.Boolean), + is_plan_upgrade_needed: S.optional(S.Boolean), + }), + ).annotate({ + identifier: "WordPressV1PluginsSuggestedPluginResource", + }) as any as S.Schema; + +/** Plugins suggested for the website type */ +export type WordPressV1PluginsSuggestedPluginGroupResourcePluginsList = + Array; +export const WordPressV1PluginsSuggestedPluginGroupResourcePluginsList = + /*@__PURE__*/ S.Array( + WordPressV1PluginsSuggestedPluginResource, + ) as any as S.Schema; + +export interface WordPressV1PluginsSuggestedPluginGroupResource { + /** Website type the suggested plugins are grouped by */ + website_type?: WordPressV1PluginsSuggestedPluginGroupResourceWebsiteType; + /** Plugins suggested for the website type */ + plugins?: WordPressV1PluginsSuggestedPluginGroupResourcePluginsList; +} +export const WordPressV1PluginsSuggestedPluginGroupResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + website_type: S.optional( + WordPressV1PluginsSuggestedPluginGroupResourceWebsiteType, + ), + plugins: S.optional( + WordPressV1PluginsSuggestedPluginGroupResourcePluginsList, + ), + }), + ).annotate({ + identifier: "WordPressV1PluginsSuggestedPluginGroupResource", + }) as any as S.Schema; + +/** Array of [`WordPress.V1.Plugins.SuggestedPluginGroupResource`](#model/wordpressv1pluginssuggestedplugingroupresource) */ +export type WordPressV1PluginsSuggestedPluginGroupCollection = + Array; +export const WordPressV1PluginsSuggestedPluginGroupCollection = + /*@__PURE__*/ S.Array( + WordPressV1PluginsSuggestedPluginGroupResource, + ) as any as S.Schema; + +export type ListHostingSuggestedWordPressPluginsV1Response = + WordPressV1PluginsSuggestedPluginGroupCollection; +export const ListHostingSuggestedWordPressPluginsV1Response = + /*@__PURE__*/ S.suspend(() => + WordPressV1PluginsSuggestedPluginGroupCollection.pipe(T.RawResponseRoot()), + ).annotate({ + identifier: "ListHostingSuggestedWordPressPluginsV1Response", + }) as any as S.Schema; + +export interface ListHostingWebsiteParkedDomainsV1Request { + username: string; + /** Domain name */ + domain: string; +} +export const ListHostingWebsiteParkedDomainsV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + username: S.String.pipe(T.Label()), + domain: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/hosting/v1/accounts/{username}/websites/{domain}/parked-domains", + code: 200, + }), + ), +).annotate({ + identifier: "ListHostingWebsiteParkedDomainsV1Request", +}) as any as S.Schema; + +/** Whether the parked value is a domain name or an IP address (IPv4 or IPv6) */ +export type HostingV1DomainsParkedDomainResourceType = "domain" | "ip"; +export const HostingV1DomainsParkedDomainResourceType = /*@__PURE__*/ S.String; + +export interface HostingV1DomainsParkedDomainResource { + /** Website username */ + username?: string; + /** Parked domain name or IP address */ + domain?: string; + /** Parent website domain */ + parent_domain?: string; + /** Parked domain root directory */ + root_directory?: string; + /** Whether the parked value is a domain name or an IP address (IPv4 or IPv6) */ + type?: HostingV1DomainsParkedDomainResourceType; +} +export const HostingV1DomainsParkedDomainResource = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + username: S.optional(S.String), + domain: S.optional(S.String), + parent_domain: S.optional(S.String), + root_directory: S.optional(S.String), + type: S.optional(HostingV1DomainsParkedDomainResourceType), + }), +).annotate({ + identifier: "HostingV1DomainsParkedDomainResource", +}) as any as S.Schema; + +/** Array of [`Hosting.V1.Domains.ParkedDomainResource`](#model/hostingv1domainsparkeddomainresource) */ +export type HostingV1DomainsParkedDomainCollection = + Array; +export const HostingV1DomainsParkedDomainCollection = /*@__PURE__*/ S.Array( + HostingV1DomainsParkedDomainResource, +) as any as S.Schema; + +export type ListHostingWebsiteParkedDomainsV1Response = + HostingV1DomainsParkedDomainCollection; +export const ListHostingWebsiteParkedDomainsV1Response = + /*@__PURE__*/ S.suspend(() => + HostingV1DomainsParkedDomainCollection.pipe(T.RawResponseRoot()), + ).annotate({ + identifier: "ListHostingWebsiteParkedDomainsV1Response", + }) as any as S.Schema; + +export interface ListHostingWebsiteRedirectsV1Request { + username: string; + /** Domain name */ + domain: string; + /** Page number */ + page?: number; + /** Number of items per page */ + per_page?: number; +} +export const ListHostingWebsiteRedirectsV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + username: S.String.pipe(T.Label()), + domain: S.String.pipe(T.Label()), + page: S.optional(S.Number.pipe(T.Query())), + per_page: S.optional(S.Number.pipe(T.Query())), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/hosting/v1/accounts/{username}/websites/{domain}/redirects", + code: 200, + }), + ), +).annotate({ + identifier: "ListHostingWebsiteRedirectsV1Request", +}) as any as S.Schema; + +/** Array of [`Hosting.V1.Redirects.RedirectResource`](#model/hostingv1redirectsredirectresource) */ +export type HostingV1RedirectsRedirectCollection = + Array; +export const HostingV1RedirectsRedirectCollection = /*@__PURE__*/ S.Array( + HostingV1RedirectsRedirectResource, +) as any as S.Schema; + +export interface ListHostingWebsiteRedirectsV1Response { + data?: HostingV1RedirectsRedirectCollection; + meta?: CommonSchemaPaginationMetaSchema; +} +export const ListHostingWebsiteRedirectsV1Response = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + data: S.optional(HostingV1RedirectsRedirectCollection), + meta: S.optional(CommonSchemaPaginationMetaSchema), + }), +).annotate({ + identifier: "ListHostingWebsiteRedirectsV1Response", +}) as any as S.Schema; + +export interface ListHostingWebsiteSubdomainsV1Request { + username: string; + /** Domain name */ + domain: string; +} +export const ListHostingWebsiteSubdomainsV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + username: S.String.pipe(T.Label()), + domain: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/hosting/v1/accounts/{username}/websites/{domain}/subdomains", + code: 200, + }), + ), +).annotate({ + identifier: "ListHostingWebsiteSubdomainsV1Request", +}) as any as S.Schema; + +export interface HostingV1DomainsSubdomainResource { + /** Website username */ + username?: string; + /** Full subdomain */ + domain?: string; + /** Parent website domain */ + parent_domain?: string; + /** Subdomain root directory */ + root_directory?: string; + /** Subdomain prefix */ + subdomain?: string; +} +export const HostingV1DomainsSubdomainResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + username: S.optional(S.String), + domain: S.optional(S.String), + parent_domain: S.optional(S.String), + root_directory: S.optional(S.String), + subdomain: S.optional(S.String), + }), +).annotate({ + identifier: "HostingV1DomainsSubdomainResource", +}) as any as S.Schema; + +/** Array of [`Hosting.V1.Domains.SubdomainResource`](#model/hostingv1domainssubdomainresource) */ +export type HostingV1DomainsSubdomainCollection = + Array; +export const HostingV1DomainsSubdomainCollection = /*@__PURE__*/ S.Array( + HostingV1DomainsSubdomainResource, +) as any as S.Schema; + +export type ListHostingWebsiteSubdomainsV1Response = + HostingV1DomainsSubdomainCollection; +export const ListHostingWebsiteSubdomainsV1Response = /*@__PURE__*/ S.suspend( + () => HostingV1DomainsSubdomainCollection.pipe(T.RawResponseRoot()), +).annotate({ + identifier: "ListHostingWebsiteSubdomainsV1Response", +}) as any as S.Schema; + +export type ListHostingWebsitesV1RequestWebsiteTypesItem = + | "wordpress" + | "builder" + | "horizons" + | "nodejs" + | "other"; +export const ListHostingWebsitesV1RequestWebsiteTypesItem = + /*@__PURE__*/ S.String; + +export type ListHostingWebsitesV1RequestWebsiteTypesList = Array< + ListHostingWebsitesV1RequestWebsiteTypesItem | (string & {}) +>; +export const ListHostingWebsitesV1RequestWebsiteTypesList = + /*@__PURE__*/ S.Array( + ListHostingWebsitesV1RequestWebsiteTypesItem, + ) as any as S.Schema; + +export interface ListHostingWebsitesV1Request { + /** Page number */ + page?: number; + /** Number of items per page */ + per_page?: number; + /** Filter by specific username */ + username?: string; + /** Order ID */ + order_id?: number; + /** Filter by enabled status */ + is_enabled?: boolean; + /** Filter by domain name (case-insensitive substring match) */ + domain?: string; + /** Filter by detected website type, e.g. wordpress,nodejs. Accepts a comma-separated list. */ + website_types?: ListHostingWebsitesV1RequestWebsiteTypesList; +} +export const ListHostingWebsitesV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + page: S.optional(S.Number.pipe(T.Query())), + per_page: S.optional(S.Number.pipe(T.Query())), + username: S.optional(S.String.pipe(T.Query())), + order_id: S.optional(S.Number.pipe(T.Query())), + is_enabled: S.optional(S.Boolean.pipe(T.Query())), + domain: S.optional(S.String.pipe(T.Query())), + website_types: S.optional( + ListHostingWebsitesV1RequestWebsiteTypesList.pipe(T.Query()), + ), + }).pipe( + T.Http({ method: "GET", uri: "/api/hosting/v1/websites", code: 200 }), + ), +).annotate({ + identifier: "ListHostingWebsitesV1Request", +}) as any as S.Schema; + +/** Virtual host type. Only present for CloudLinux websites. */ +export type HostingV1WebsitesWebsiteResourceVhostType = + | "main" + | "addon" + | "parked" + | "subdomain"; +export const HostingV1WebsitesWebsiteResourceVhostType = /*@__PURE__*/ S.String; + +/** Type of website detected on the underlying platform. */ +export type HostingV1WebsitesWebsiteResourceWebsiteType = + | "wordpress" + | "builder" + | "horizons" + | "nodejs" + | "other"; +export const HostingV1WebsitesWebsiteResourceWebsiteType = + /*@__PURE__*/ S.String; + +export interface HostingV1WebsitesWebsiteResource { + /** Website domain. Null for U4S websites with no domain attached. */ + domain?: string | null; + /** Virtual host type. Only present for CloudLinux websites. */ + vhost_type?: HostingV1WebsitesWebsiteResourceVhostType | null; + /** Whether website is enabled */ + is_enabled?: boolean; + /** Username. Not applicable for U4S websites. */ + username?: string | null; + /** Client ID */ + client_id?: number; + /** Order ID */ + order_id?: number; + /** Creation date */ + created_at?: string; + /** Root directory path. Only present for CloudLinux websites. */ + root_directory?: string | null; + /** Parent domain */ + parent_domain?: string | null; + /** Type of website detected on the underlying platform. */ + website_type?: HostingV1WebsitesWebsiteResourceWebsiteType; + /** Horizons UUID. Only present for horizons websites. */ + horizons_uuid?: string | null; +} +export const HostingV1WebsitesWebsiteResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + domain: S.optional(S.NullOr(S.String)), + vhost_type: S.optional(S.NullOr(HostingV1WebsitesWebsiteResourceVhostType)), + is_enabled: S.optional(S.Boolean), + username: S.optional(S.NullOr(S.String)), + client_id: S.optional(S.Number), + order_id: S.optional(S.Number), + created_at: S.optional(S.String), + root_directory: S.optional(S.NullOr(S.String)), + parent_domain: S.optional(S.NullOr(S.String)), + website_type: S.optional(HostingV1WebsitesWebsiteResourceWebsiteType), + horizons_uuid: S.optional(S.NullOr(S.String)), + }), +).annotate({ + identifier: "HostingV1WebsitesWebsiteResource", +}) as any as S.Schema; + +/** Array of [`Hosting.V1.Websites.WebsiteResource`](#model/hostingv1websiteswebsiteresource) */ +export type HostingV1WebsitesWebsiteCollection = + Array; +export const HostingV1WebsitesWebsiteCollection = /*@__PURE__*/ S.Array( + HostingV1WebsitesWebsiteResource, +) as any as S.Schema; + +export interface ListHostingWebsitesV1Response { + data?: HostingV1WebsitesWebsiteCollection; + meta?: CommonSchemaPaginationMetaSchema; +} +export const ListHostingWebsitesV1Response = /*@__PURE__*/ S.suspend(() => + S.Struct({ + data: S.optional(HostingV1WebsitesWebsiteCollection), + meta: S.optional(CommonSchemaPaginationMetaSchema), + }), +).annotate({ + identifier: "ListHostingWebsitesV1Response", +}) as any as S.Schema; + +export type ListHostingWordPressInstallationsV1RequestOwnership = + | "owned" + | "managed" + | "all"; +export const ListHostingWordPressInstallationsV1RequestOwnership = + /*@__PURE__*/ S.String; + +export interface ListHostingWordPressInstallationsV1Request { + /** Filter by specific username */ + username?: string; + /** Filter by domain name (case-insensitive substring match) */ + domain?: string; + /** Filter by ownership type. Defaults to "owned". Use "all" to include both owned and managed installations. */ + ownership?: + | ListHostingWordPressInstallationsV1RequestOwnership + | (string & {}); +} +export const ListHostingWordPressInstallationsV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + username: S.optional(S.String.pipe(T.Query())), + domain: S.optional(S.String.pipe(T.Query())), + ownership: S.optional( + ListHostingWordPressInstallationsV1RequestOwnership.pipe(T.Query()), + ), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/hosting/v1/wordpress/installations", + code: 200, + }), + ), + ).annotate({ + identifier: "ListHostingWordPressInstallationsV1Request", + }) as any as S.Schema; + +export interface WordPressV1InstallationsWordPressInstallationResource { + /** WordPress installation (software) id */ + id?: string; + /** Hosting account username */ + username?: string; + /** Domain the installation belongs to */ + domain?: string; + /** WordPress site title */ + site_title?: string; + /** WordPress site URL */ + url?: string; + /** Installation directory */ + directory?: string; + /** WordPress locale */ + language?: string; + /** WordPress admin username */ + login?: string; + /** WordPress admin email */ + email?: string; + /** Whether the installation is considered valid */ + is_valid?: boolean; + /** Reason the installation is invalid, if any */ + validation_error?: string | null; + /** Installation creation timestamp */ + created_at?: string; +} +export const WordPressV1InstallationsWordPressInstallationResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + id: S.optional(S.String), + username: S.optional(S.String), + domain: S.optional(S.String), + site_title: S.optional(S.String), + url: S.optional(S.String), + directory: S.optional(S.String), + language: S.optional(S.String), + login: S.optional(S.String), + email: S.optional(S.String), + is_valid: S.optional(S.Boolean), + validation_error: S.optional(S.NullOr(S.String)), + created_at: S.optional(S.String), + }), + ).annotate({ + identifier: "WordPressV1InstallationsWordPressInstallationResource", + }) as any as S.Schema; + +/** Array of [`WordPress.V1.Installations.WordPressInstallationResource`](#model/wordpressv1installationswordpressinstallationresource) */ +export type WordPressV1InstallationsWordPressInstallationCollection = + Array; +export const WordPressV1InstallationsWordPressInstallationCollection = + /*@__PURE__*/ S.Array( + WordPressV1InstallationsWordPressInstallationResource, + ) as any as S.Schema; + +export type ListHostingWordPressInstallationsV1Response = + WordPressV1InstallationsWordPressInstallationCollection; +export const ListHostingWordPressInstallationsV1Response = + /*@__PURE__*/ S.suspend(() => + WordPressV1InstallationsWordPressInstallationCollection.pipe( + T.RawResponseRoot(), + ), + ).annotate({ + identifier: "ListHostingWordPressInstallationsV1Response", + }) as any as S.Schema; + +export interface ListHostingWordPressThemesV1Request { + /** Optionally scope themes to a specific order. */ + order_id?: number; + /** Search term to match against theme names. */ + search?: string; +} +export const ListHostingWordPressThemesV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + order_id: S.optional(S.Number.pipe(T.Query())), + search: S.optional(S.String.pipe(T.Query())), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/hosting/v1/wordpress/themes", + code: 200, + }), + ), +).annotate({ + identifier: "ListHostingWordPressThemesV1Request", +}) as any as S.Schema; + +export interface WordPressV1ThemesThemeResource { + /** Theme slug used when installing the theme */ + slug?: string; + /** Human readable theme name */ + title?: string; + /** Link to the theme page on WordPress.org */ + url?: string; + /** URL of the theme preview thumbnail */ + featured_image_url?: string | null; + /** URL of the full-size theme preview image */ + full_image_url?: string | null; + /** Short theme description */ + description?: string | null; + /** URL of the theme logo */ + logo_url?: string | null; + /** Whether a hosting plan upgrade is required to use the theme */ + is_plan_upgrade_needed?: boolean; +} +export const WordPressV1ThemesThemeResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + slug: S.optional(S.String), + title: S.optional(S.String), + url: S.optional(S.String), + featured_image_url: S.optional(S.NullOr(S.String)), + full_image_url: S.optional(S.NullOr(S.String)), + description: S.optional(S.NullOr(S.String)), + logo_url: S.optional(S.NullOr(S.String)), + is_plan_upgrade_needed: S.optional(S.Boolean), + }), +).annotate({ + identifier: "WordPressV1ThemesThemeResource", +}) as any as S.Schema; + +/** Array of [`WordPress.V1.Themes.ThemeResource`](#model/wordpressv1themesthemeresource) */ +export type WordPressV1ThemesThemeCollection = + Array; +export const WordPressV1ThemesThemeCollection = /*@__PURE__*/ S.Array( + WordPressV1ThemesThemeResource, +) as any as S.Schema; + +export type ListHostingWordPressThemesV1Response = + WordPressV1ThemesThemeCollection; +export const ListHostingWordPressThemesV1Response = /*@__PURE__*/ S.suspend( + () => WordPressV1ThemesThemeCollection.pipe(T.RawResponseRoot()), +).annotate({ + identifier: "ListHostingWordPressThemesV1Response", +}) as any as S.Schema; + +export type ListMailAccessLogsV1RequestStatus = "Successful" | "Failed"; +export const ListMailAccessLogsV1RequestStatus = /*@__PURE__*/ S.String; + +export type ListMailAccessLogsV1RequestProtocol = "imap" | "pop3" | "smtp"; +export const ListMailAccessLogsV1RequestProtocol = /*@__PURE__*/ S.String; + +export interface ListMailAccessLogsV1Request { + /** Order resource ID */ + orderId: string; + /** Filter log entries by a specific email account */ + account?: string; + /** Exact date filter (YYYY-MM-DD). Takes precedence over `from_date`/`to_date` when both are given. */ + date?: string; + /** Date range start (RFC 3339) */ + from_date?: string; + /** Date range end (RFC 3339) */ + to_date?: string; + /** Filter log entries by status */ + status?: ListMailAccessLogsV1RequestStatus | (string & {}); + /** Filter access log entries by protocol */ + protocol?: ListMailAccessLogsV1RequestProtocol | (string & {}); + /** Filter access log entries by whether the session had deletions */ + has_deletions?: boolean; + /** Page number */ + page?: number; + /** Number of items per page */ + per_page?: number; +} +export const ListMailAccessLogsV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + orderId: S.String.pipe(T.Label()), + account: S.optional(S.String.pipe(T.Query())), + date: S.optional(S.String.pipe(T.Query())), + from_date: S.optional(S.String.pipe(T.Query())), + to_date: S.optional(S.String.pipe(T.Query())), + status: S.optional(ListMailAccessLogsV1RequestStatus.pipe(T.Query())), + protocol: S.optional(ListMailAccessLogsV1RequestProtocol.pipe(T.Query())), + has_deletions: S.optional(S.Boolean.pipe(T.Query())), + page: S.optional(S.Number.pipe(T.Query())), + per_page: S.optional(S.Number.pipe(T.Query())), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/mail/v1/orders/{orderId}/logs/access", + code: 200, + }), + ), +).annotate({ + identifier: "ListMailAccessLogsV1Request", +}) as any as S.Schema; + +export interface MailV1LogsAccessAccessLogResource { + account?: string; + domain?: string; + session?: string; + protocol?: string; + remote_ip?: string; + login_time?: string; + /** Bytes received */ + in?: number; + /** Bytes sent */ + out?: number; + deleted?: number; + expunged?: number; + trashed?: number; + logout_time?: string; + timestamp?: string; + app_name?: string; + has_deletions?: boolean; + result?: string; + status?: string; + /** True when the session deleted, expunged or trashed messages */ + is_important?: boolean; +} +export const MailV1LogsAccessAccessLogResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + account: S.optional(S.String), + domain: S.optional(S.String), + session: S.optional(S.String), + protocol: S.optional(S.String), + remote_ip: S.optional(S.String), + login_time: S.optional(S.String), + in: S.optional(S.Number), + out: S.optional(S.Number), + deleted: S.optional(S.Number), + expunged: S.optional(S.Number), + trashed: S.optional(S.Number), + logout_time: S.optional(S.String), + timestamp: S.optional(S.String), + app_name: S.optional(S.String), + has_deletions: S.optional(S.Boolean), + result: S.optional(S.String), + status: S.optional(S.String), + is_important: S.optional(S.Boolean), + }), +).annotate({ + identifier: "MailV1LogsAccessAccessLogResource", +}) as any as S.Schema; + +/** Array of [`Mail.V1.Logs.Access.AccessLogResource`](#model/mailv1logsaccessaccesslogresource) */ +export type MailV1LogsAccessAccessLogCollection = + Array; +export const MailV1LogsAccessAccessLogCollection = /*@__PURE__*/ S.Array( + MailV1LogsAccessAccessLogResource, +) as any as S.Schema; + +export interface ListMailAccessLogsV1Response { + data?: MailV1LogsAccessAccessLogCollection; + meta?: CommonSchemaPaginationMetaSchema; +} +export const ListMailAccessLogsV1Response = /*@__PURE__*/ S.suspend(() => + S.Struct({ + data: S.optional(MailV1LogsAccessAccessLogCollection), + meta: S.optional(CommonSchemaPaginationMetaSchema), + }), +).annotate({ + identifier: "ListMailAccessLogsV1Response", +}) as any as S.Schema; + +export type ListMailActionLogsV1RequestStatus = "Successful" | "Failed"; +export const ListMailActionLogsV1RequestStatus = /*@__PURE__*/ S.String; + +export interface ListMailActionLogsV1Request { + /** Order resource ID */ + orderId: string; + /** Filter log entries by a specific email account */ + account?: string; + /** Exact date filter (YYYY-MM-DD). Takes precedence over `from_date`/`to_date` when both are given. */ + date?: string; + /** Date range start (RFC 3339) */ + from_date?: string; + /** Date range end (RFC 3339) */ + to_date?: string; + /** Filter log entries by status */ + status?: ListMailActionLogsV1RequestStatus | (string & {}); + /** Page number */ + page?: number; + /** Number of items per page */ + per_page?: number; +} +export const ListMailActionLogsV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + orderId: S.String.pipe(T.Label()), + account: S.optional(S.String.pipe(T.Query())), + date: S.optional(S.String.pipe(T.Query())), + from_date: S.optional(S.String.pipe(T.Query())), + to_date: S.optional(S.String.pipe(T.Query())), + status: S.optional(ListMailActionLogsV1RequestStatus.pipe(T.Query())), + page: S.optional(S.Number.pipe(T.Query())), + per_page: S.optional(S.Number.pipe(T.Query())), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/mail/v1/orders/{orderId}/logs/action", + code: 200, + }), + ), +).annotate({ + identifier: "ListMailActionLogsV1Request", +}) as any as S.Schema; + +export type MailV1LogsActionActionLogResourceResponseStatus = "OK" | "Fail"; +export const MailV1LogsActionActionLogResourceResponseStatus = + /*@__PURE__*/ S.String; + +export interface MailV1LogsActionActionLogResource { + action?: string; + /** Arbitrary contextual payload */ + extra?: unknown | null; + created_at?: string; + /** Only populated for user-role logs */ + ip_address?: string; + role?: string; + action_context?: string; + response_status?: MailV1LogsActionActionLogResourceResponseStatus; +} +export const MailV1LogsActionActionLogResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + action: S.optional(S.String), + extra: S.optional(S.NullOr(S.Unknown)), + created_at: S.optional(S.String), + ip_address: S.optional(S.String), + role: S.optional(S.String), + action_context: S.optional(S.String), + response_status: S.optional( + MailV1LogsActionActionLogResourceResponseStatus, + ), + }), +).annotate({ + identifier: "MailV1LogsActionActionLogResource", +}) as any as S.Schema; + +/** Array of [`Mail.V1.Logs.Action.ActionLogResource`](#model/mailv1logsactionactionlogresource) */ +export type MailV1LogsActionActionLogCollection = + Array; +export const MailV1LogsActionActionLogCollection = /*@__PURE__*/ S.Array( + MailV1LogsActionActionLogResource, +) as any as S.Schema; + +export interface ListMailActionLogsV1Response { + data?: MailV1LogsActionActionLogCollection; + meta?: CommonSchemaPaginationMetaSchema; +} +export const ListMailActionLogsV1Response = /*@__PURE__*/ S.suspend(() => + S.Struct({ + data: S.optional(MailV1LogsActionActionLogCollection), + meta: S.optional(CommonSchemaPaginationMetaSchema), + }), +).annotate({ + identifier: "ListMailActionLogsV1Response", +}) as any as S.Schema; + +export interface ListMailAliasesV1Request { + /** Order resource ID */ + orderId: string; + /** Page number */ + page?: number; + /** Number of items per page */ + per_page?: number; +} +export const ListMailAliasesV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + orderId: S.String.pipe(T.Label()), + page: S.optional(S.Number.pipe(T.Query())), + per_page: S.optional(S.Number.pipe(T.Query())), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/mail/v1/orders/{orderId}/aliases", + code: 200, + }), + ), +).annotate({ + identifier: "ListMailAliasesV1Request", +}) as any as S.Schema; + +/** Array of [`Mail.V1.Aliases.AliasResource`](#model/mailv1aliasesaliasresource) */ +export type MailV1AliasesAliasCollection = Array; +export const MailV1AliasesAliasCollection = /*@__PURE__*/ S.Array( + MailV1AliasesAliasResource, +) as any as S.Schema; + +export interface ListMailAliasesV1Response { + data?: MailV1AliasesAliasCollection; + meta?: CommonSchemaPaginationMetaSchema; +} +export const ListMailAliasesV1Response = /*@__PURE__*/ S.suspend(() => + S.Struct({ + data: S.optional(MailV1AliasesAliasCollection), + meta: S.optional(CommonSchemaPaginationMetaSchema), + }), +).annotate({ + identifier: "ListMailAliasesV1Response", +}) as any as S.Schema; + +export interface ListMailAPITokensV1Request { + /** Filter tokens by order resource ID. Single value or comma-separated list. */ + order_id?: string; + /** Page number */ + page?: number; + /** Number of items per page */ + per_page?: number; +} +export const ListMailAPITokensV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + order_id: S.optional(S.String.pipe(T.Query())), + page: S.optional(S.Number.pipe(T.Query())), + per_page: S.optional(S.Number.pipe(T.Query())), + }).pipe(T.Http({ method: "GET", uri: "/api/mail/v1/api-tokens", code: 200 })), +).annotate({ + identifier: "ListMailAPITokensV1Request", +}) as any as S.Schema; + +export type MailV1ApiTokensApiTokenResourceType = "api_token" | "oauth"; +export const MailV1ApiTokensApiTokenResourceType = /*@__PURE__*/ S.String; + +export interface MailV1ApiTokensApiTokenResource { + /** Unique API token identifier */ + id?: string; + /** Resource ID of the owning mail order */ + order_id?: string | null; + /** Human-readable label for this token */ + name?: string | null; + scope?: MailV1ApiTokensApiTokenScopeResource; + created_at?: string; + /** Last successful authentication using this token */ + last_used_at?: string | null; + type?: MailV1ApiTokensApiTokenResourceType; +} +export const MailV1ApiTokensApiTokenResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + id: S.optional(S.String), + order_id: S.optional(S.NullOr(S.String)), + name: S.optional(S.NullOr(S.String)), + scope: S.optional(MailV1ApiTokensApiTokenScopeResource), + created_at: S.optional(S.String), + last_used_at: S.optional(S.NullOr(S.String)), + type: S.optional(MailV1ApiTokensApiTokenResourceType), + }), +).annotate({ + identifier: "MailV1ApiTokensApiTokenResource", +}) as any as S.Schema; + +/** Array of [`Mail.V1.ApiTokens.ApiTokenResource`](#model/mailv1apitokensapitokenresource) */ +export type MailV1ApiTokensApiTokenCollection = + Array; +export const MailV1ApiTokensApiTokenCollection = /*@__PURE__*/ S.Array( + MailV1ApiTokensApiTokenResource, +) as any as S.Schema; + +export interface ListMailAPITokensV1Response { + data?: MailV1ApiTokensApiTokenCollection; + meta?: CommonSchemaPaginationMetaSchema; +} +export const ListMailAPITokensV1Response = /*@__PURE__*/ S.suspend(() => + S.Struct({ + data: S.optional(MailV1ApiTokensApiTokenCollection), + meta: S.optional(CommonSchemaPaginationMetaSchema), + }), +).annotate({ + identifier: "ListMailAPITokensV1Response", +}) as any as S.Schema; + +export interface ListMailAutorepliesV1Request { + /** Order resource ID */ + orderId: string; + /** Page number */ + page?: number; + /** Number of items per page */ + per_page?: number; +} +export const ListMailAutorepliesV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + orderId: S.String.pipe(T.Label()), + page: S.optional(S.Number.pipe(T.Query())), + per_page: S.optional(S.Number.pipe(T.Query())), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/mail/v1/orders/{orderId}/autoreplies", + code: 200, + }), + ), +).annotate({ + identifier: "ListMailAutorepliesV1Request", +}) as any as S.Schema; + +/** Array of [`Mail.V1.Autoreplies.AutoreplyResource`](#model/mailv1autorepliesautoreplyresource) */ +export type MailV1AutorepliesAutoreplyCollection = + Array; +export const MailV1AutorepliesAutoreplyCollection = /*@__PURE__*/ S.Array( + MailV1AutorepliesAutoreplyResource, +) as any as S.Schema; + +export interface ListMailAutorepliesV1Response { + data?: MailV1AutorepliesAutoreplyCollection; + meta?: CommonSchemaPaginationMetaSchema; +} +export const ListMailAutorepliesV1Response = /*@__PURE__*/ S.suspend(() => + S.Struct({ + data: S.optional(MailV1AutorepliesAutoreplyCollection), + meta: S.optional(CommonSchemaPaginationMetaSchema), + }), +).annotate({ + identifier: "ListMailAutorepliesV1Response", +}) as any as S.Schema; + +export interface ListMailCatchAllsV1Request { + /** Order resource ID */ + orderId: string; + /** Page number */ + page?: number; + /** Number of items per page */ + per_page?: number; +} +export const ListMailCatchAllsV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + orderId: S.String.pipe(T.Label()), + page: S.optional(S.Number.pipe(T.Query())), + per_page: S.optional(S.Number.pipe(T.Query())), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/mail/v1/orders/{orderId}/catchalls", + code: 200, + }), + ), +).annotate({ + identifier: "ListMailCatchAllsV1Request", +}) as any as S.Schema; + +/** Array of [`Mail.V1.Catchalls.CatchallResource`](#model/mailv1catchallscatchallresource) */ +export type MailV1CatchallsCatchallCollection = + Array; +export const MailV1CatchallsCatchallCollection = /*@__PURE__*/ S.Array( + MailV1CatchallsCatchallResource, +) as any as S.Schema; + +export interface ListMailCatchAllsV1Response { + data?: MailV1CatchallsCatchallCollection; + meta?: CommonSchemaPaginationMetaSchema; +} +export const ListMailCatchAllsV1Response = /*@__PURE__*/ S.suspend(() => + S.Struct({ + data: S.optional(MailV1CatchallsCatchallCollection), + meta: S.optional(CommonSchemaPaginationMetaSchema), + }), +).annotate({ + identifier: "ListMailCatchAllsV1Response", +}) as any as S.Schema; + +export interface ListMailForwardersV1Request { + /** Order resource ID */ + orderId: string; + /** Page number */ + page?: number; + /** Number of items per page */ + per_page?: number; +} +export const ListMailForwardersV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + orderId: S.String.pipe(T.Label()), + page: S.optional(S.Number.pipe(T.Query())), + per_page: S.optional(S.Number.pipe(T.Query())), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/mail/v1/orders/{orderId}/forwarders", + code: 200, + }), + ), +).annotate({ + identifier: "ListMailForwardersV1Request", +}) as any as S.Schema; + +/** Array of [`Mail.V1.Forwarders.ForwarderResource`](#model/mailv1forwardersforwarderresource) */ +export type MailV1ForwardersForwarderCollection = + Array; +export const MailV1ForwardersForwarderCollection = /*@__PURE__*/ S.Array( + MailV1ForwardersForwarderResource, +) as any as S.Schema; + +export interface ListMailForwardersV1Response { + data?: MailV1ForwardersForwarderCollection; + meta?: CommonSchemaPaginationMetaSchema; +} +export const ListMailForwardersV1Response = /*@__PURE__*/ S.suspend(() => + S.Struct({ + data: S.optional(MailV1ForwardersForwarderCollection), + meta: S.optional(CommonSchemaPaginationMetaSchema), + }), +).annotate({ + identifier: "ListMailForwardersV1Response", +}) as any as S.Schema; + +export type ListMailInboundLogsV1RequestStatus = "Successful" | "Failed"; +export const ListMailInboundLogsV1RequestStatus = /*@__PURE__*/ S.String; + +export interface ListMailInboundLogsV1Request { + /** Order resource ID */ + orderId: string; + /** Filter log entries by a specific email account */ + account?: string; + /** Exact date filter (YYYY-MM-DD). Takes precedence over `from_date`/`to_date` when both are given. */ + date?: string; + /** Date range start (RFC 3339) */ + from_date?: string; + /** Date range end (RFC 3339) */ + to_date?: string; + /** Filter log entries by status */ + status?: ListMailInboundLogsV1RequestStatus | (string & {}); + /** Filter log entries by sender. Accepts a full email address or a domain. */ + sender?: string; + /** Filter log entries by recipient. Accepts a full email address or a domain. */ + recipient?: string; + /** Page number */ + page?: number; + /** Number of items per page */ + per_page?: number; +} +export const ListMailInboundLogsV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + orderId: S.String.pipe(T.Label()), + account: S.optional(S.String.pipe(T.Query())), + date: S.optional(S.String.pipe(T.Query())), + from_date: S.optional(S.String.pipe(T.Query())), + to_date: S.optional(S.String.pipe(T.Query())), + status: S.optional(ListMailInboundLogsV1RequestStatus.pipe(T.Query())), + sender: S.optional(S.String.pipe(T.Query())), + recipient: S.optional(S.String.pipe(T.Query())), + page: S.optional(S.Number.pipe(T.Query())), + per_page: S.optional(S.Number.pipe(T.Query())), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/mail/v1/orders/{orderId}/logs/inbound", + code: 200, + }), + ), +).annotate({ + identifier: "ListMailInboundLogsV1Request", +}) as any as S.Schema; + +export interface MailV1LogsCommonDeliveryLogRelayEventResource { + address_to?: string; + relay?: string; + delay?: string; + dsn?: string; + status?: string; + response?: string; + time?: string; +} +export const MailV1LogsCommonDeliveryLogRelayEventResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + address_to: S.optional(S.String), + relay: S.optional(S.String), + delay: S.optional(S.String), + dsn: S.optional(S.String), + status: S.optional(S.String), + response: S.optional(S.String), + time: S.optional(S.String), + }), + ).annotate({ + identifier: "MailV1LogsCommonDeliveryLogRelayEventResource", + }) as any as S.Schema; + +export type MailV1LogsCommonDeliveryLogResourceRelayEventsList = + Array; +export const MailV1LogsCommonDeliveryLogResourceRelayEventsList = + /*@__PURE__*/ S.Array( + MailV1LogsCommonDeliveryLogRelayEventResource, + ) as any as S.Schema; + +export interface MailV1LogsCommonDeliveryLogResource { + account?: string; + rcpt?: string; + rcpts?: string; + client_ip?: string; + from?: string; + nrcpt?: string; + timestamp?: string; + relay_events?: MailV1LogsCommonDeliveryLogResourceRelayEventsList; + status?: string; + is_spam?: boolean; +} +export const MailV1LogsCommonDeliveryLogResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + account: S.optional(S.String), + rcpt: S.optional(S.String), + rcpts: S.optional(S.String), + client_ip: S.optional(S.String), + from: S.optional(S.String), + nrcpt: S.optional(S.String), + timestamp: S.optional(S.String), + relay_events: S.optional( + MailV1LogsCommonDeliveryLogResourceRelayEventsList, + ), + status: S.optional(S.String), + is_spam: S.optional(S.Boolean), + }), +).annotate({ + identifier: "MailV1LogsCommonDeliveryLogResource", +}) as any as S.Schema; + +/** Array of [`Mail.V1.Logs.Common.DeliveryLogResource`](#model/mailv1logscommondeliverylogresource) */ +export type MailV1LogsCommonDeliveryLogCollection = + Array; +export const MailV1LogsCommonDeliveryLogCollection = /*@__PURE__*/ S.Array( + MailV1LogsCommonDeliveryLogResource, +) as any as S.Schema; + +export interface ListMailInboundLogsV1Response { + data?: MailV1LogsCommonDeliveryLogCollection; + meta?: CommonSchemaPaginationMetaSchema; +} +export const ListMailInboundLogsV1Response = /*@__PURE__*/ S.suspend(() => + S.Struct({ + data: S.optional(MailV1LogsCommonDeliveryLogCollection), + meta: S.optional(CommonSchemaPaginationMetaSchema), + }), +).annotate({ + identifier: "ListMailInboundLogsV1Response", +}) as any as S.Schema; + +export type ListMailMailboxActionLogsV1RequestEvent = + | "MessageNew" + | "MessageRead" + | "MessageAppend" + | "MessageExpunge" + | "MailboxCreate" + | "MailboxDelete" + | "MailboxRename"; +export const ListMailMailboxActionLogsV1RequestEvent = /*@__PURE__*/ S.String; + +export interface ListMailMailboxActionLogsV1Request { + /** Order resource ID */ + orderId: string; + /** Mailbox email address. Must belong to the order's domain. */ + email: string; + /** Exact date filter (YYYY-MM-DD). Takes precedence over `from_date`/`to_date` when both are given. */ + date?: string; + /** Date range start (RFC 3339) */ + from_date?: string; + /** Date range end (RFC 3339) */ + to_date?: string; + /** Filter mailbox action log entries by event type */ + event?: ListMailMailboxActionLogsV1RequestEvent | (string & {}); + /** Page number */ + page?: number; + /** Number of items per page */ + per_page?: number; +} +export const ListMailMailboxActionLogsV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + orderId: S.String.pipe(T.Label()), + email: S.String.pipe(T.Query()), + date: S.optional(S.String.pipe(T.Query())), + from_date: S.optional(S.String.pipe(T.Query())), + to_date: S.optional(S.String.pipe(T.Query())), + event: S.optional(ListMailMailboxActionLogsV1RequestEvent.pipe(T.Query())), + page: S.optional(S.Number.pipe(T.Query())), + per_page: S.optional(S.Number.pipe(T.Query())), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/mail/v1/orders/{orderId}/logs/mailbox-actions", + code: 200, + }), + ), +).annotate({ + identifier: "ListMailMailboxActionLogsV1Request", +}) as any as S.Schema; + +export type MailV1LogsMailboxActionsMailboxActionLogResourceEvent = + | "MessageNew" + | "MessageRead" + | "MessageAppend" + | "MessageExpunge" + | "MailboxCreate" + | "MailboxDelete" + | "MailboxRename"; +export const MailV1LogsMailboxActionsMailboxActionLogResourceEvent = + /*@__PURE__*/ S.String; + +export interface MailV1LogsMailboxActionsMailboxActionLogResource { + folder?: string; + /** Unix timestamp of the event */ + time?: number; + event?: MailV1LogsMailboxActionsMailboxActionLogResourceEvent; + /** Mailbox email address */ + mailbox?: string; + hostname?: string; + timestamp?: string; +} +export const MailV1LogsMailboxActionsMailboxActionLogResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + folder: S.optional(S.String), + time: S.optional(S.Number), + event: S.optional(MailV1LogsMailboxActionsMailboxActionLogResourceEvent), + mailbox: S.optional(S.String), + hostname: S.optional(S.String), + timestamp: S.optional(S.String), + }), + ).annotate({ + identifier: "MailV1LogsMailboxActionsMailboxActionLogResource", + }) as any as S.Schema; + +/** Array of [`Mail.V1.Logs.MailboxActions.MailboxActionLogResource`](#model/mailv1logsmailboxactionsmailboxactionlogresource) */ +export type MailV1LogsMailboxActionsMailboxActionLogCollection = + Array; +export const MailV1LogsMailboxActionsMailboxActionLogCollection = + /*@__PURE__*/ S.Array( + MailV1LogsMailboxActionsMailboxActionLogResource, + ) as any as S.Schema; + +export interface ListMailMailboxActionLogsV1Response { + data?: MailV1LogsMailboxActionsMailboxActionLogCollection; + meta?: CommonSchemaPaginationMetaSchema; +} +export const ListMailMailboxActionLogsV1Response = /*@__PURE__*/ S.suspend(() => + S.Struct({ + data: S.optional(MailV1LogsMailboxActionsMailboxActionLogCollection), + meta: S.optional(CommonSchemaPaginationMetaSchema), + }), +).annotate({ + identifier: "ListMailMailboxActionLogsV1Response", +}) as any as S.Schema; + +export type ListMailMailboxesV1RequestSort = "address" | "-address"; +export const ListMailMailboxesV1RequestSort = /*@__PURE__*/ S.String; + +export interface ListMailMailboxesV1Request { + /** Order resource ID */ + orderId: string; + /** Filter mailboxes whose email address contains the given string */ + search?: string; + /** Sort mailboxes by field. Prefix with `-` for descending order. */ + sort?: ListMailMailboxesV1RequestSort | (string & {}); + /** Page number */ + page?: number; + /** Number of items per page */ + per_page?: number; +} +export const ListMailMailboxesV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + orderId: S.String.pipe(T.Label()), + search: S.optional(S.String.pipe(T.Query())), + sort: S.optional(ListMailMailboxesV1RequestSort.pipe(T.Query())), + page: S.optional(S.Number.pipe(T.Query())), + per_page: S.optional(S.Number.pipe(T.Query())), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/mail/v1/orders/{orderId}/mailboxes", + code: 200, + }), + ), +).annotate({ + identifier: "ListMailMailboxesV1Request", +}) as any as S.Schema; + +/** Array of [`Mail.V1.Mailboxes.MailboxResource`](#model/mailv1mailboxesmailboxresource) */ +export type MailV1MailboxesMailboxCollection = + Array; +export const MailV1MailboxesMailboxCollection = /*@__PURE__*/ S.Array( + MailV1MailboxesMailboxResource, +) as any as S.Schema; + +export interface ListMailMailboxesV1Response { + data?: MailV1MailboxesMailboxCollection; + meta?: CommonSchemaPaginationMetaSchema; +} +export const ListMailMailboxesV1Response = /*@__PURE__*/ S.suspend(() => + S.Struct({ + data: S.optional(MailV1MailboxesMailboxCollection), + meta: S.optional(CommonSchemaPaginationMetaSchema), + }), +).annotate({ + identifier: "ListMailMailboxesV1Response", +}) as any as S.Schema; + +export type ListMailOrdersV1RequestStatus = + | "pending_setup" + | "active" + | "suspended"; +export const ListMailOrdersV1RequestStatus = /*@__PURE__*/ S.String; + +export type ListMailOrdersV1RequestSort = + | "created_at" + | "-created_at" + | "expires_at" + | "-expires_at"; +export const ListMailOrdersV1RequestSort = /*@__PURE__*/ S.String; + +export interface ListMailOrdersV1Request { + /** Filter orders by domain name (exact match) */ + domain?: string; + /** Filter orders by status */ + status?: ListMailOrdersV1RequestStatus | (string & {}); + /** Filter orders by trial state */ + is_trial?: boolean; + /** Sort orders by field. Prefix with `-` for descending order. */ + sort?: ListMailOrdersV1RequestSort | (string & {}); + /** Page number */ + page?: number; + /** Number of items per page */ + per_page?: number; +} +export const ListMailOrdersV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + domain: S.optional(S.String.pipe(T.Query())), + status: S.optional(ListMailOrdersV1RequestStatus.pipe(T.Query())), + is_trial: S.optional(S.Boolean.pipe(T.Query())), + sort: S.optional(ListMailOrdersV1RequestSort.pipe(T.Query())), + page: S.optional(S.Number.pipe(T.Query())), + per_page: S.optional(S.Number.pipe(T.Query())), + }).pipe(T.Http({ method: "GET", uri: "/api/mail/v1/orders", code: 200 })), +).annotate({ + identifier: "ListMailOrdersV1Request", +}) as any as S.Schema; + +/** Order status */ +export type MailV1OrdersOrderResourceStatus = + | "pending_setup" + | "active" + | "suspended"; +export const MailV1OrdersOrderResourceStatus = /*@__PURE__*/ S.String; + +export interface MailV1OrdersOrderDomainResource { + /** Domain resource ID */ + id?: string; + /** Domain name */ + name?: string; +} +export const MailV1OrdersOrderDomainResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + id: S.optional(S.String), + name: S.optional(S.String), + }), +).annotate({ + identifier: "MailV1OrdersOrderDomainResource", +}) as any as S.Schema; + +export interface MailV1OrdersOrderPlanResource { + /** Plan name */ + name?: string; + /** Plan title */ + title?: string; +} +export const MailV1OrdersOrderPlanResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + name: S.optional(S.String), + title: S.optional(S.String), + }), +).annotate({ + identifier: "MailV1OrdersOrderPlanResource", +}) as any as S.Schema; + +export interface MailV1OrdersOrderResource { + /** Order resource ID */ + id?: string; + /** Order status */ + status?: MailV1OrdersOrderResourceStatus; + /** Whether the order is currently in a trial period */ + is_trial?: boolean; + /** Number of mailbox seats purchased with the order */ + seats?: number; + /** Domain the order is attached to */ + domain?: MailV1OrdersOrderDomainResource | null; + /** Plan the order was purchased with */ + plan?: MailV1OrdersOrderPlanResource | null; + /** Whether an upgrade is currently pending for the order */ + has_pending_upgrade?: boolean; + created_at?: string; + expires_at?: string | null; +} +export const MailV1OrdersOrderResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + id: S.optional(S.String), + status: S.optional(MailV1OrdersOrderResourceStatus), + is_trial: S.optional(S.Boolean), + seats: S.optional(S.Number), + domain: S.optional(S.NullOr(MailV1OrdersOrderDomainResource)), + plan: S.optional(S.NullOr(MailV1OrdersOrderPlanResource)), + has_pending_upgrade: S.optional(S.Boolean), + created_at: S.optional(S.String), + expires_at: S.optional(S.NullOr(S.String)), + }), +).annotate({ + identifier: "MailV1OrdersOrderResource", +}) as any as S.Schema; + +/** Array of [`Mail.V1.Orders.OrderResource`](#model/mailv1ordersorderresource) */ +export type MailV1OrdersOrderCollection = Array; +export const MailV1OrdersOrderCollection = /*@__PURE__*/ S.Array( + MailV1OrdersOrderResource, +) as any as S.Schema; + +export interface ListMailOrdersV1Response { + data?: MailV1OrdersOrderCollection; + meta?: CommonSchemaPaginationMetaSchema; +} +export const ListMailOrdersV1Response = /*@__PURE__*/ S.suspend(() => + S.Struct({ + data: S.optional(MailV1OrdersOrderCollection), + meta: S.optional(CommonSchemaPaginationMetaSchema), + }), +).annotate({ + identifier: "ListMailOrdersV1Response", +}) as any as S.Schema; + +export type ListMailOutboundLogsV1RequestStatus = "Successful" | "Failed"; +export const ListMailOutboundLogsV1RequestStatus = /*@__PURE__*/ S.String; + +export interface ListMailOutboundLogsV1Request { + /** Order resource ID */ + orderId: string; + /** Filter log entries by a specific email account */ + account?: string; + /** Exact date filter (YYYY-MM-DD). Takes precedence over `from_date`/`to_date` when both are given. */ + date?: string; + /** Date range start (RFC 3339) */ + from_date?: string; + /** Date range end (RFC 3339) */ + to_date?: string; + /** Filter log entries by status */ + status?: ListMailOutboundLogsV1RequestStatus | (string & {}); + /** Filter log entries by sender. Accepts a full email address or a domain. */ + sender?: string; + /** Filter log entries by recipient. Accepts a full email address or a domain. */ + recipient?: string; + /** Page number */ + page?: number; + /** Number of items per page */ + per_page?: number; +} +export const ListMailOutboundLogsV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + orderId: S.String.pipe(T.Label()), + account: S.optional(S.String.pipe(T.Query())), + date: S.optional(S.String.pipe(T.Query())), + from_date: S.optional(S.String.pipe(T.Query())), + to_date: S.optional(S.String.pipe(T.Query())), + status: S.optional(ListMailOutboundLogsV1RequestStatus.pipe(T.Query())), + sender: S.optional(S.String.pipe(T.Query())), + recipient: S.optional(S.String.pipe(T.Query())), + page: S.optional(S.Number.pipe(T.Query())), + per_page: S.optional(S.Number.pipe(T.Query())), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/mail/v1/orders/{orderId}/logs/outbound", + code: 200, + }), + ), +).annotate({ + identifier: "ListMailOutboundLogsV1Request", +}) as any as S.Schema; + +export interface ListMailOutboundLogsV1Response { + data?: MailV1LogsCommonDeliveryLogCollection; + meta?: CommonSchemaPaginationMetaSchema; +} +export const ListMailOutboundLogsV1Response = /*@__PURE__*/ S.suspend(() => + S.Struct({ + data: S.optional(MailV1LogsCommonDeliveryLogCollection), + meta: S.optional(CommonSchemaPaginationMetaSchema), + }), +).annotate({ + identifier: "ListMailOutboundLogsV1Response", +}) as any as S.Schema; + +export interface ListMailWebhookDeliveryLogsV1Request { + /** Order resource ID */ + orderId: string; + /** Filter by the mailbox resource ID the webhooks are attached to */ + mailbox_id?: string; + /** Page number */ + page?: number; + /** Number of items per page */ + per_page?: number; +} +export const ListMailWebhookDeliveryLogsV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + orderId: S.String.pipe(T.Label()), + mailbox_id: S.optional(S.String.pipe(T.Query())), + page: S.optional(S.Number.pipe(T.Query())), + per_page: S.optional(S.Number.pipe(T.Query())), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/mail/v1/orders/{orderId}/webhooks/delivery-logs", + code: 200, + }), + ), +).annotate({ + identifier: "ListMailWebhookDeliveryLogsV1Request", +}) as any as S.Schema; + +export interface MailV1WebhooksWebhookDeliveryLogResource { + created_at?: string; + /** Email address of the mailbox this delivery is attached to */ + mailbox_address?: string; + /** URL that received the webhook POST request */ + webhook_url?: string; + /** Whether the delivery was successful */ + is_successful?: boolean; + /** Webhook request duration in milliseconds */ + duration?: number; + /** Number of delivery attempts made */ + retry_count?: number; + /** Maximum number of delivery attempts allowed */ + max_retry_count?: number; +} +export const MailV1WebhooksWebhookDeliveryLogResource = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + created_at: S.optional(S.String), + mailbox_address: S.optional(S.String), + webhook_url: S.optional(S.String), + is_successful: S.optional(S.Boolean), + duration: S.optional(S.Number), + retry_count: S.optional(S.Number), + max_retry_count: S.optional(S.Number), + }), +).annotate({ + identifier: "MailV1WebhooksWebhookDeliveryLogResource", +}) as any as S.Schema; + +/** Array of [`Mail.V1.Webhooks.WebhookDeliveryLogResource`](#model/mailv1webhookswebhookdeliverylogresource) */ +export type MailV1WebhooksWebhookDeliveryLogCollection = + Array; +export const MailV1WebhooksWebhookDeliveryLogCollection = /*@__PURE__*/ S.Array( + MailV1WebhooksWebhookDeliveryLogResource, +) as any as S.Schema; + +export interface ListMailWebhookDeliveryLogsV1Response { + data?: MailV1WebhooksWebhookDeliveryLogCollection; + meta?: CommonSchemaPaginationMetaSchema; +} +export const ListMailWebhookDeliveryLogsV1Response = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + data: S.optional(MailV1WebhooksWebhookDeliveryLogCollection), + meta: S.optional(CommonSchemaPaginationMetaSchema), + }), +).annotate({ + identifier: "ListMailWebhookDeliveryLogsV1Response", +}) as any as S.Schema; + +export type ListMailWebhooksV1RequestStatus = "active" | "disabled" | "paused"; +export const ListMailWebhooksV1RequestStatus = /*@__PURE__*/ S.String; + +export interface ListMailWebhooksV1Request { + /** Order resource ID */ + orderId: string; + /** Filter by the mailbox resource ID the webhooks are attached to */ + mailbox_id?: string; + /** Filter webhooks by status */ + status?: ListMailWebhooksV1RequestStatus | (string & {}); + /** Page number */ + page?: number; + /** Number of items per page */ + per_page?: number; +} +export const ListMailWebhooksV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + orderId: S.String.pipe(T.Label()), + mailbox_id: S.optional(S.String.pipe(T.Query())), + status: S.optional(ListMailWebhooksV1RequestStatus.pipe(T.Query())), + page: S.optional(S.Number.pipe(T.Query())), + per_page: S.optional(S.Number.pipe(T.Query())), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/mail/v1/orders/{orderId}/webhooks", + code: 200, + }), + ), +).annotate({ + identifier: "ListMailWebhooksV1Request", +}) as any as S.Schema; + +/** Array of [`Mail.V1.Webhooks.WebhookResource`](#model/mailv1webhookswebhookresource) */ +export type MailV1WebhooksWebhookCollection = + Array; +export const MailV1WebhooksWebhookCollection = /*@__PURE__*/ S.Array( + MailV1WebhooksWebhookResource, +) as any as S.Schema; + +export interface ListMailWebhooksV1Response { + data?: MailV1WebhooksWebhookCollection; + meta?: CommonSchemaPaginationMetaSchema; +} +export const ListMailWebhooksV1Response = /*@__PURE__*/ S.suspend(() => + S.Struct({ + data: S.optional(MailV1WebhooksWebhookCollection), + meta: S.optional(CommonSchemaPaginationMetaSchema), + }), +).annotate({ + identifier: "ListMailWebhooksV1Response", +}) as any as S.Schema; + +export interface ListReachAutomationStepsV1Request { + /** Profile uuid parameter */ + profileUuid: string; + /** Automation uuid parameter */ + automationUuid: string; +} +export const ListReachAutomationStepsV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + profileUuid: S.String.pipe(T.Label()), + automationUuid: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/reach/v1/profiles/{profileUuid}/automations/{automationUuid}/steps", + code: 200, + }), + ), +).annotate({ + identifier: "ListReachAutomationStepsV1Request", +}) as any as S.Schema; + +/** Role of the step in the workflow. A `conditional` step branches into several children. */ +export type ReachV1AutomationsStepsAutomationStepResourceType = + | "trigger" + | "action" + | "conditional"; +export const ReachV1AutomationsStepsAutomationStepResourceType = + /*@__PURE__*/ S.String; + +/** The concrete trigger, action, decision or delay this step performs. */ +export type ReachV1AutomationsStepsAutomationStepResourceValue = + | "new_contact" + | "new_segment_contact" + | "form_submitted" + | "webhook" + | "send_welcome_email" + | "send_email" + | "send_campaign" + | "decision" + | "delay"; +export const ReachV1AutomationsStepsAutomationStepResourceValue = + /*@__PURE__*/ S.String; + +export interface ReachV1AutomationsStepsAutomationStepResource { + uuid?: string; + /** The step this one branches from. Null for the entry point of the workflow. */ + parent_uuid?: string | null; + /** Position of this step among the steps sharing its parent. */ + step_order?: number; + /** Role of the step in the workflow. A `conditional` step branches into several children. */ + type?: ReachV1AutomationsStepsAutomationStepResourceType; + /** The concrete trigger, action, decision or delay this step performs. */ + value?: ReachV1AutomationsStepsAutomationStepResourceValue; + /** Step configuration. The shape depends on the value, and is empty for steps that take none. */ + config?: unknown | null; +} +export const ReachV1AutomationsStepsAutomationStepResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + uuid: S.optional(S.String), + parent_uuid: S.optional(S.NullOr(S.String)), + step_order: S.optional(S.Number), + type: S.optional(ReachV1AutomationsStepsAutomationStepResourceType), + value: S.optional(ReachV1AutomationsStepsAutomationStepResourceValue), + config: S.optional(S.NullOr(S.Unknown)), + }), + ).annotate({ + identifier: "ReachV1AutomationsStepsAutomationStepResource", + }) as any as S.Schema; + +/** Array of [`Reach.V1.Automations.Steps.AutomationStepResource`](#model/reachv1automationsstepsautomationstepresource) */ +export type ReachV1AutomationsStepsAutomationStepCollection = + Array; +export const ReachV1AutomationsStepsAutomationStepCollection = + /*@__PURE__*/ S.Array( + ReachV1AutomationsStepsAutomationStepResource, + ) as any as S.Schema; + +export type ListReachAutomationStepsV1Response = + ReachV1AutomationsStepsAutomationStepCollection; +export const ListReachAutomationStepsV1Response = /*@__PURE__*/ S.suspend(() => + ReachV1AutomationsStepsAutomationStepCollection.pipe(T.RawResponseRoot()), +).annotate({ + identifier: "ListReachAutomationStepsV1Response", +}) as any as S.Schema; + +export type ListReachAutomationsV1RequestStatus = "active" | "paused" | "draft"; +export const ListReachAutomationsV1RequestStatus = /*@__PURE__*/ S.String; + +export type ListReachAutomationsV1RequestSortDirection = "asc" | "desc"; +export const ListReachAutomationsV1RequestSortDirection = + /*@__PURE__*/ S.String; + +export interface ListReachAutomationsV1Request { + /** Profile uuid parameter */ + profileUuid: string; + /** Filter automations by status. There is no `completed` status. An automation that has finished for every contact still reports `active`. */ + status?: ListReachAutomationsV1RequestStatus | (string & {}); + /** Order automations by creation date. Newest first unless set to `asc`. */ + sort_direction?: ListReachAutomationsV1RequestSortDirection | (string & {}); + /** Page number */ + page?: number; + /** Number of items per page */ + per_page?: number; +} +export const ListReachAutomationsV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + profileUuid: S.String.pipe(T.Label()), + status: S.optional(ListReachAutomationsV1RequestStatus.pipe(T.Query())), + sort_direction: S.optional( + ListReachAutomationsV1RequestSortDirection.pipe(T.Query()), + ), + page: S.optional(S.Number.pipe(T.Query())), + per_page: S.optional(S.Number.pipe(T.Query())), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/reach/v1/profiles/{profileUuid}/automations", + code: 200, + }), + ), +).annotate({ + identifier: "ListReachAutomationsV1Request", +}) as any as S.Schema; + +/** Array of [`Reach.V1.Automations.AutomationResource`](#model/reachv1automationsautomationresource) */ +export type ReachV1AutomationsAutomationCollection = + Array; +export const ReachV1AutomationsAutomationCollection = /*@__PURE__*/ S.Array( + ReachV1AutomationsAutomationResource, +) as any as S.Schema; + +export interface ListReachAutomationsV1Response { + data?: ReachV1AutomationsAutomationCollection; + meta?: CommonSchemaPaginationMetaSchema; +} +export const ListReachAutomationsV1Response = /*@__PURE__*/ S.suspend(() => + S.Struct({ + data: S.optional(ReachV1AutomationsAutomationCollection), + meta: S.optional(CommonSchemaPaginationMetaSchema), + }), +).annotate({ + identifier: "ListReachAutomationsV1Response", +}) as any as S.Schema; + +export type ListReachCampaignsV1RequestStatus = + | "draft" + | "scheduled" + | "sending" + | "publish" + | "failed"; +export const ListReachCampaignsV1RequestStatus = /*@__PURE__*/ S.String; + +export type ListReachCampaignsV1RequestType = + | "campaign" + | "automation" + | "double_opt_in"; +export const ListReachCampaignsV1RequestType = /*@__PURE__*/ S.String; + +export type ListReachCampaignsV1RequestSortDirection = "asc" | "desc"; +export const ListReachCampaignsV1RequestSortDirection = /*@__PURE__*/ S.String; + +export interface ListReachCampaignsV1Request { + /** Profile uuid parameter */ + profileUuid: string; + /** Filter campaigns by status. A fully sent campaign has the status `publish`. There is no `sent` status, and campaigns can be neither paused nor archived. */ + status?: ListReachCampaignsV1RequestStatus | (string & {}); + /** Filter campaigns by type. Defaults to `campaign`, which leaves out the emails sent by automations and the double opt-in confirmations. */ + type?: ListReachCampaignsV1RequestType | (string & {}); + /** Order campaigns by creation date. Newest first unless set to `asc`. */ + sort_direction?: ListReachCampaignsV1RequestSortDirection | (string & {}); + /** Page number */ + page?: number; + /** Number of items per page */ + per_page?: number; +} +export const ListReachCampaignsV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + profileUuid: S.String.pipe(T.Label()), + status: S.optional(ListReachCampaignsV1RequestStatus.pipe(T.Query())), + type: S.optional(ListReachCampaignsV1RequestType.pipe(T.Query())), + sort_direction: S.optional( + ListReachCampaignsV1RequestSortDirection.pipe(T.Query()), + ), + page: S.optional(S.Number.pipe(T.Query())), + per_page: S.optional(S.Number.pipe(T.Query())), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/reach/v1/profiles/{profileUuid}/campaigns", + code: 200, + }), + ), +).annotate({ + identifier: "ListReachCampaignsV1Request", +}) as any as S.Schema; + +/** A fully sent campaign is `publish`. There is no `sent`, `paused` or `archived` status. */ +export type ReachV1CampaignsCampaignResourceStatus = + | "draft" + | "scheduled" + | "sending" + | "publish" + | "failed"; +export const ReachV1CampaignsCampaignResourceStatus = /*@__PURE__*/ S.String; + +export type ReachV1CampaignsCampaignResourceType = + | "campaign" + | "automation" + | "double_opt_in"; +export const ReachV1CampaignsCampaignResourceType = /*@__PURE__*/ S.String; + +/** Headline engagement rates. The statistics endpoint carries the full breakdown. */ +export interface ReachV1CampaignsCampaignSummaryStatisticsResource { + /** Emails sent for this campaign, and the denominator of the rates below. */ + total_sent?: number; + /** Percentage of sent emails that were opened. */ + open_rate?: number; + /** Percentage of sent emails that got a click. */ + click_rate?: number; + /** Percentage of the contacts who opened that went on to click. */ + click_to_open_rate?: number; +} +export const ReachV1CampaignsCampaignSummaryStatisticsResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + total_sent: S.optional(S.Number), + open_rate: S.optional(S.Number), + click_rate: S.optional(S.Number), + click_to_open_rate: S.optional(S.Number), + }), + ).annotate({ + identifier: "ReachV1CampaignsCampaignSummaryStatisticsResource", + }) as any as S.Schema; + +export interface ReachV1CampaignsCampaignResource { + uuid?: string; + title?: string; + subject?: string; + sender_name?: string; + sender_email?: string; + /** The email template this campaign uses. The template title is not exposed. */ + template_uuid?: string | null; + /** A fully sent campaign is `publish`. There is no `sent`, `paused` or `archived` status. */ + status?: ReachV1CampaignsCampaignResourceStatus; + type?: ReachV1CampaignsCampaignResourceType; + created_at?: string; + updated_at?: string | null; + sent_at?: string | null; + scheduled_at?: string | null; + statistics?: ReachV1CampaignsCampaignSummaryStatisticsResource; +} +export const ReachV1CampaignsCampaignResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + uuid: S.optional(S.String), + title: S.optional(S.String), + subject: S.optional(S.String), + sender_name: S.optional(S.String), + sender_email: S.optional(S.String), + template_uuid: S.optional(S.NullOr(S.String)), + status: S.optional(ReachV1CampaignsCampaignResourceStatus), + type: S.optional(ReachV1CampaignsCampaignResourceType), + created_at: S.optional(S.String), + updated_at: S.optional(S.NullOr(S.String)), + sent_at: S.optional(S.NullOr(S.String)), + scheduled_at: S.optional(S.NullOr(S.String)), + statistics: S.optional(ReachV1CampaignsCampaignSummaryStatisticsResource), + }), +).annotate({ + identifier: "ReachV1CampaignsCampaignResource", +}) as any as S.Schema; + +/** Array of [`Reach.V1.Campaigns.CampaignResource`](#model/reachv1campaignscampaignresource) */ +export type ReachV1CampaignsCampaignCollection = + Array; +export const ReachV1CampaignsCampaignCollection = /*@__PURE__*/ S.Array( + ReachV1CampaignsCampaignResource, +) as any as S.Schema; + +export interface ListReachCampaignsV1Response { + data?: ReachV1CampaignsCampaignCollection; + meta?: CommonSchemaPaginationMetaSchema; +} +export const ListReachCampaignsV1Response = /*@__PURE__*/ S.suspend(() => + S.Struct({ + data: S.optional(ReachV1CampaignsCampaignCollection), + meta: S.optional(CommonSchemaPaginationMetaSchema), + }), +).annotate({ + identifier: "ListReachCampaignsV1Response", +}) as any as S.Schema; + +export interface ListReachContactFieldsV1Request { + /** Profile uuid parameter */ + profileUuid: string; +} +export const ListReachContactFieldsV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + profileUuid: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/reach/v1/profiles/{profileUuid}/contacts/fields", + code: 200, + }), + ), +).annotate({ + identifier: "ListReachContactFieldsV1Request", +}) as any as S.Schema; + +/** Array of [`Reach.V1.Contacts.Fields.ContactFieldResource`](#model/reachv1contactsfieldscontactfieldresource) */ +export type ReachV1ContactsFieldsContactFieldCollection = + Array; +export const ReachV1ContactsFieldsContactFieldCollection = + /*@__PURE__*/ S.Array( + ReachV1ContactsFieldsContactFieldResource, + ) as any as S.Schema; + +export type ListReachContactFieldsV1Response = + ReachV1ContactsFieldsContactFieldCollection; +export const ListReachContactFieldsV1Response = /*@__PURE__*/ S.suspend(() => + ReachV1ContactsFieldsContactFieldCollection.pipe(T.RawResponseRoot()), +).annotate({ + identifier: "ListReachContactFieldsV1Response", +}) as any as S.Schema; + +export interface ListReachFormsV1Request { + /** Profile uuid parameter */ + profileUuid: string; + /** Page number */ + page?: number; + /** Number of items per page */ + per_page?: number; +} +export const ListReachFormsV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + profileUuid: S.String.pipe(T.Label()), + page: S.optional(S.Number.pipe(T.Query())), + per_page: S.optional(S.Number.pipe(T.Query())), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/reach/v1/profiles/{profileUuid}/forms", + code: 200, + }), + ), +).annotate({ + identifier: "ListReachFormsV1Request", +}) as any as S.Schema; + +/** A `paused` form keeps its template online but stops accepting submissions. */ +export type ReachV1FormsFormResourceStatus = "active" | "paused" | "draft"; +export const ReachV1FormsFormResourceStatus = /*@__PURE__*/ S.String; + +export type ReachV1FormsFormResourceType = "form"; +export const ReachV1FormsFormResourceType = /*@__PURE__*/ S.String; + +/** The rendered form template. Both fields stay null until the template has been generated. */ +export interface ReachV1FormsFormTemplateResource { + uuid?: string | null; + /** Storage path of the template HTML, relative to the storage directory of this profile. Get the form details to receive a directly usable URL instead. */ + path?: string | null; +} +export const ReachV1FormsFormTemplateResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + uuid: S.optional(S.NullOr(S.String)), + path: S.optional(S.NullOr(S.String)), + }), +).annotate({ + identifier: "ReachV1FormsFormTemplateResource", +}) as any as S.Schema; + +export interface ReachV1FormsFormResource { + uuid?: string; + name?: string; + /** A `paused` form keeps its template online but stops accepting submissions. */ + status?: ReachV1FormsFormResourceStatus; + type?: ReachV1FormsFormResourceType; + template?: ReachV1FormsFormTemplateResource; + created_at?: string; + updated_at?: string | null; +} +export const ReachV1FormsFormResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + uuid: S.optional(S.String), + name: S.optional(S.String), + status: S.optional(ReachV1FormsFormResourceStatus), + type: S.optional(ReachV1FormsFormResourceType), + template: S.optional(ReachV1FormsFormTemplateResource), + created_at: S.optional(S.String), + updated_at: S.optional(S.NullOr(S.String)), + }), +).annotate({ + identifier: "ReachV1FormsFormResource", +}) as any as S.Schema; + +/** Array of [`Reach.V1.Forms.FormResource`](#model/reachv1formsformresource) */ +export type ReachV1FormsFormCollection = Array; +export const ReachV1FormsFormCollection = /*@__PURE__*/ S.Array( + ReachV1FormsFormResource, +) as any as S.Schema; + +export interface ListReachFormsV1Response { + data?: ReachV1FormsFormCollection; + meta?: CommonSchemaPaginationMetaSchema; +} +export const ListReachFormsV1Response = /*@__PURE__*/ S.suspend(() => + S.Struct({ + data: S.optional(ReachV1FormsFormCollection), + meta: S.optional(CommonSchemaPaginationMetaSchema), + }), +).annotate({ + identifier: "ListReachFormsV1Response", +}) as any as S.Schema; + +export interface ListReachPlanFeatureAccessV1Request { + /** Profile uuid parameter */ + profileUuid: string; +} +export const ListReachPlanFeatureAccessV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + profileUuid: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/reach/v1/profiles/{profileUuid}/features", + code: 200, + }), + ), +).annotate({ + identifier: "ListReachPlanFeatureAccessV1Request", +}) as any as S.Schema; + +export type ReachV1ProfilesFeaturesPlanFeatureResourceFeature = + | "AutomationActivation" + | "SmartSending" + | "AiGenerateSubjectLines" + | "TemplateCheckerAnalysis" + | "RemoveSignature" + | "Collaborators" + | "HtmlCodeEditor"; +export const ReachV1ProfilesFeaturesPlanFeatureResourceFeature = + /*@__PURE__*/ S.String; + +/** Whether a single plan feature can be used on the profile. */ +export interface ReachV1ProfilesFeaturesPlanFeatureResource { + feature?: ReachV1ProfilesFeaturesPlanFeatureResourceFeature; + /** Whether the feature can be used right now. */ + is_available?: boolean; + /** Whether the feature sits outside the base plan and needs an upgrade. */ + is_locked?: boolean; +} +export const ReachV1ProfilesFeaturesPlanFeatureResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + feature: S.optional(ReachV1ProfilesFeaturesPlanFeatureResourceFeature), + is_available: S.optional(S.Boolean), + is_locked: S.optional(S.Boolean), + }), + ).annotate({ + identifier: "ReachV1ProfilesFeaturesPlanFeatureResource", + }) as any as S.Schema; + +/** Array of [`Reach.V1.Profiles.Features.PlanFeatureResource`](#model/reachv1profilesfeaturesplanfeatureresource) */ +export type ReachV1ProfilesFeaturesPlanFeatureCollection = + Array; +export const ReachV1ProfilesFeaturesPlanFeatureCollection = + /*@__PURE__*/ S.Array( + ReachV1ProfilesFeaturesPlanFeatureResource, + ) as any as S.Schema; + +export type ListReachPlanFeatureAccessV1Response = + ReachV1ProfilesFeaturesPlanFeatureCollection; +export const ListReachPlanFeatureAccessV1Response = /*@__PURE__*/ S.suspend( + () => ReachV1ProfilesFeaturesPlanFeatureCollection.pipe(T.RawResponseRoot()), +).annotate({ + identifier: "ListReachPlanFeatureAccessV1Response", +}) as any as S.Schema; + +export type ListReachProfileContactsV1RequestSubscriptionStatus = + | "subscribed" + | "unsubscribed" + | "confirmed" + | "pending"; +export const ListReachProfileContactsV1RequestSubscriptionStatus = + /*@__PURE__*/ S.String; + +export interface ListReachProfileContactsV1Request { + /** Profile uuid parameter */ + profileUuid: string; + /** Filter contacts by subscription status */ + subscription_status?: + | ListReachProfileContactsV1RequestSubscriptionStatus + | (string & {}); + /** Filter contacts by tag UUID */ + tag_uuid?: string; + /** Search contacts by email */ + search?: string; + /** Page number */ + page?: number; + /** Number of items per page */ + per_page?: number; +} +export const ListReachProfileContactsV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + profileUuid: S.String.pipe(T.Label()), + subscription_status: S.optional( + ListReachProfileContactsV1RequestSubscriptionStatus.pipe(T.Query()), + ), + tag_uuid: S.optional(S.String.pipe(T.Query())), + search: S.optional(S.String.pipe(T.Query())), + page: S.optional(S.Number.pipe(T.Query())), + per_page: S.optional(S.Number.pipe(T.Query())), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/reach/v1/profiles/{profileUuid}/contacts", + code: 200, + }), + ), +).annotate({ + identifier: "ListReachProfileContactsV1Request", +}) as any as S.Schema; + +export type ReachV1ContactsProfileContactResourceSubscriptionStatus = + | "subscribed" + | "unsubscribed" + | "confirmed" + | "pending"; +export const ReachV1ContactsProfileContactResourceSubscriptionStatus = + /*@__PURE__*/ S.String; + +export type ReachV1ContactsProfileContactResourceSource = + | "sync" + | "import" + | "manual" + | "api" + | "form" + | "checkout" + | "horizons"; +export const ReachV1ContactsProfileContactResourceSource = + /*@__PURE__*/ S.String; + +export interface ReachV1ContactsProfileContactResource { + uuid?: string; + name?: string | null; + surname?: string | null; + email?: string; + phone?: string | null; + subscription_status?: ReachV1ContactsProfileContactResourceSubscriptionStatus; + subscribed_at?: string | null; + unsubscribed_at?: string | null; + source?: ReachV1ContactsProfileContactResourceSource | null; + note?: string | null; +} +export const ReachV1ContactsProfileContactResource = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + uuid: S.optional(S.String), + name: S.optional(S.NullOr(S.String)), + surname: S.optional(S.NullOr(S.String)), + email: S.optional(S.String), + phone: S.optional(S.NullOr(S.String)), + subscription_status: S.optional( + ReachV1ContactsProfileContactResourceSubscriptionStatus, + ), + subscribed_at: S.optional(S.NullOr(S.String)), + unsubscribed_at: S.optional(S.NullOr(S.String)), + source: S.optional(S.NullOr(ReachV1ContactsProfileContactResourceSource)), + note: S.optional(S.NullOr(S.String)), + }), +).annotate({ + identifier: "ReachV1ContactsProfileContactResource", +}) as any as S.Schema; + +/** Array of [`Reach.V1.Contacts.ProfileContactResource`](#model/reachv1contactsprofilecontactresource) */ +export type ReachV1ContactsProfileContactCollection = + Array; +export const ReachV1ContactsProfileContactCollection = /*@__PURE__*/ S.Array( + ReachV1ContactsProfileContactResource, +) as any as S.Schema; + +export interface ListReachProfileContactsV1Response { + data?: ReachV1ContactsProfileContactCollection; + meta?: CommonSchemaPaginationMetaSchema; +} +export const ListReachProfileContactsV1Response = /*@__PURE__*/ S.suspend(() => + S.Struct({ + data: S.optional(ReachV1ContactsProfileContactCollection), + meta: S.optional(CommonSchemaPaginationMetaSchema), + }), +).annotate({ + identifier: "ListReachProfileContactsV1Response", +}) as any as S.Schema; + +export interface ListReachProfileSegmentContactsV1Request { + /** Profile uuid parameter */ + profileUuid: string; + /** Segment uuid parameter */ + segmentUuid: string; + /** Page number */ + page?: number; + /** Number of items per page */ + per_page?: number; +} +export const ListReachProfileSegmentContactsV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + profileUuid: S.String.pipe(T.Label()), + segmentUuid: S.String.pipe(T.Label()), + page: S.optional(S.Number.pipe(T.Query())), + per_page: S.optional(S.Number.pipe(T.Query())), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/reach/v1/profiles/{profileUuid}/segmentation/segments/{segmentUuid}/contacts", + code: 200, + }), + ), +).annotate({ + identifier: "ListReachProfileSegmentContactsV1Request", +}) as any as S.Schema; + +export type ReachV1ContactsSegmentsSegmentationContactResourceSubscriptionStatus = + | "subscribed" + | "unsubscribed" + | "confirmed" + | "pending"; +export const ReachV1ContactsSegmentsSegmentationContactResourceSubscriptionStatus = + /*@__PURE__*/ S.String; + +export type ReachV1ContactsSegmentsSegmentationContactResourceSource = + | "sync" + | "import" + | "manual" + | "api" + | "form" + | "checkout" + | "horizons"; +export const ReachV1ContactsSegmentsSegmentationContactResourceSource = + /*@__PURE__*/ S.String; + +export interface ReachV1ContactsSegmentsSegmentationContactResource { + uuid?: string; + name?: string | null; + surname?: string | null; + email?: string; + subscription_status?: ReachV1ContactsSegmentsSegmentationContactResourceSubscriptionStatus; + subscribed_at?: string; + source?: ReachV1ContactsSegmentsSegmentationContactResourceSource | null; + note?: string | null; +} +export const ReachV1ContactsSegmentsSegmentationContactResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + uuid: S.optional(S.String), + name: S.optional(S.NullOr(S.String)), + surname: S.optional(S.NullOr(S.String)), + email: S.optional(S.String), + subscription_status: S.optional( + ReachV1ContactsSegmentsSegmentationContactResourceSubscriptionStatus, + ), + subscribed_at: S.optional(S.String), + source: S.optional( + S.NullOr(ReachV1ContactsSegmentsSegmentationContactResourceSource), + ), + note: S.optional(S.NullOr(S.String)), + }), + ).annotate({ + identifier: "ReachV1ContactsSegmentsSegmentationContactResource", + }) as any as S.Schema; + +/** Array of [`Reach.V1.Contacts.Segments.SegmentationContactResource`](#model/reachv1contactssegmentssegmentationcontactresource) */ +export type ReachV1ContactsSegmentsSegmentationContactCollection = + Array; +export const ReachV1ContactsSegmentsSegmentationContactCollection = + /*@__PURE__*/ S.Array( + ReachV1ContactsSegmentsSegmentationContactResource, + ) as any as S.Schema; + +export interface ListReachProfileSegmentContactsV1Response { + data?: ReachV1ContactsSegmentsSegmentationContactCollection; + meta?: CommonSchemaPaginationMetaSchema; +} +export const ListReachProfileSegmentContactsV1Response = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + data: S.optional(ReachV1ContactsSegmentsSegmentationContactCollection), + meta: S.optional(CommonSchemaPaginationMetaSchema), + }), + ).annotate({ + identifier: "ListReachProfileSegmentContactsV1Response", + }) as any as S.Schema; + +export type ListReachProfileSegmentsV1RequestCountType = "all" | "subscribed"; +export const ListReachProfileSegmentsV1RequestCountType = + /*@__PURE__*/ S.String; + +export interface ListReachProfileSegmentsV1Request { + /** Profile uuid parameter */ + profileUuid: string; + /** Which matching contacts to count for each segment */ + count_type?: ListReachProfileSegmentsV1RequestCountType | (string & {}); + /** Page number */ + page?: number; + /** Number of items per page */ + per_page?: number; +} +export const ListReachProfileSegmentsV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + profileUuid: S.String.pipe(T.Label()), + count_type: S.optional( + ListReachProfileSegmentsV1RequestCountType.pipe(T.Query()), + ), + page: S.optional(S.Number.pipe(T.Query())), + per_page: S.optional(S.Number.pipe(T.Query())), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/reach/v1/profiles/{profileUuid}/segmentation/segments", + code: 200, + }), + ), +).annotate({ + identifier: "ListReachProfileSegmentsV1Request", +}) as any as S.Schema; + +export interface ReachV1ContactsSegmentsSegmentListItemResource { + uuid?: string; + name?: string; + /** Contacts currently matching the segment conditions */ + contacts_count?: number; + created_at?: string; + updated_at?: string; +} +export const ReachV1ContactsSegmentsSegmentListItemResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + uuid: S.optional(S.String), + name: S.optional(S.String), + contacts_count: S.optional(S.Number), + created_at: S.optional(S.String), + updated_at: S.optional(S.String), + }), + ).annotate({ + identifier: "ReachV1ContactsSegmentsSegmentListItemResource", + }) as any as S.Schema; + +/** Array of [`Reach.V1.Contacts.Segments.SegmentListItemResource`](#model/reachv1contactssegmentssegmentlistitemresource) */ +export type ReachV1ContactsSegmentsSegmentListItemCollection = + Array; +export const ReachV1ContactsSegmentsSegmentListItemCollection = + /*@__PURE__*/ S.Array( + ReachV1ContactsSegmentsSegmentListItemResource, + ) as any as S.Schema; + +export interface ListReachProfileSegmentsV1Response { + data?: ReachV1ContactsSegmentsSegmentListItemCollection; + meta?: CommonSchemaPaginationMetaSchema; +} +export const ListReachProfileSegmentsV1Response = /*@__PURE__*/ S.suspend(() => + S.Struct({ + data: S.optional(ReachV1ContactsSegmentsSegmentListItemCollection), + meta: S.optional(CommonSchemaPaginationMetaSchema), + }), +).annotate({ + identifier: "ListReachProfileSegmentsV1Response", +}) as any as S.Schema; + +export interface ListReachProfilesV1Request {} +export const ListReachProfilesV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({}).pipe( + T.Http({ method: "GET", uri: "/api/reach/v1/profiles", code: 200 }), + ), +).annotate({ + identifier: "ListReachProfilesV1Request", +}) as any as S.Schema; + +export interface ReachV1ProfilesProfileResourceLimits { + ai_messages_limit?: number; + subscribers_limit?: number; + emails_monthly_limit?: number; + ai_messages_additional?: number; +} +export const ReachV1ProfilesProfileResourceLimits = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + ai_messages_limit: S.optional(S.Number), + subscribers_limit: S.optional(S.Number), + emails_monthly_limit: S.optional(S.Number), + ai_messages_additional: S.optional(S.Number), + }), +).annotate({ + identifier: "ReachV1ProfilesProfileResourceLimits", +}) as any as S.Schema; + +export interface ReachV1ProfilesProfileResourceProfilesItem { + uuid?: string; + domain?: string; + created_at?: string; + updated_at?: string; +} +export const ReachV1ProfilesProfileResourceProfilesItem = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + uuid: S.optional(S.String), + domain: S.optional(S.String), + created_at: S.optional(S.String), + updated_at: S.optional(S.String), + }), + ).annotate({ + identifier: "ReachV1ProfilesProfileResourceProfilesItem", + }) as any as S.Schema; + +export type ReachV1ProfilesProfileResourceProfilesList = + Array; +export const ReachV1ProfilesProfileResourceProfilesList = /*@__PURE__*/ S.Array( + ReachV1ProfilesProfileResourceProfilesItem, +) as any as S.Schema; + +export interface ReachV1ProfilesProfileResource { + limits?: ReachV1ProfilesProfileResourceLimits; + is_trial?: boolean; + expires_at?: string; + resource_id?: number; + status?: string; + profiles?: ReachV1ProfilesProfileResourceProfilesList; +} +export const ReachV1ProfilesProfileResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + limits: S.optional(ReachV1ProfilesProfileResourceLimits), + is_trial: S.optional(S.Boolean), + expires_at: S.optional(S.String), + resource_id: S.optional(S.Number), + status: S.optional(S.String), + profiles: S.optional(ReachV1ProfilesProfileResourceProfilesList), + }), +).annotate({ + identifier: "ReachV1ProfilesProfileResource", +}) as any as S.Schema; + +/** Array of [`Reach.V1.Profiles.ProfileResource`](#model/reachv1profilesprofileresource) */ +export type ReachV1ProfilesProfileCollection = + Array; +export const ReachV1ProfilesProfileCollection = /*@__PURE__*/ S.Array( + ReachV1ProfilesProfileResource, +) as any as S.Schema; + +export type ListReachProfilesV1Response = ReachV1ProfilesProfileCollection; +export const ListReachProfilesV1Response = /*@__PURE__*/ S.suspend(() => + ReachV1ProfilesProfileCollection.pipe(T.RawResponseRoot()), +).annotate({ + identifier: "ListReachProfilesV1Response", +}) as any as S.Schema; + +export interface ListReachProfileTagsV1Request { + /** Profile uuid parameter */ + profileUuid: string; +} +export const ListReachProfileTagsV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + profileUuid: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/reach/v1/profiles/{profileUuid}/tags", + code: 200, + }), + ), +).annotate({ + identifier: "ListReachProfileTagsV1Request", +}) as any as S.Schema; + +/** Array of [`Reach.V1.Contacts.Tags.TagResource`](#model/reachv1contactstagstagresource) */ +export type ReachV1ContactsTagsTagCollection = + Array; +export const ReachV1ContactsTagsTagCollection = /*@__PURE__*/ S.Array( + ReachV1ContactsTagsTagResource, +) as any as S.Schema; + +export type ListReachProfileTagsV1Response = ReachV1ContactsTagsTagCollection; +export const ListReachProfileTagsV1Response = /*@__PURE__*/ S.suspend(() => + ReachV1ContactsTagsTagCollection.pipe(T.RawResponseRoot()), +).annotate({ + identifier: "ListReachProfileTagsV1Response", +}) as any as S.Schema; + +export interface ListReachSegmentFilterAttributesV1Request { + /** Profile uuid parameter */ + profileUuid: string; +} +export const ListReachSegmentFilterAttributesV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + profileUuid: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/reach/v1/profiles/{profileUuid}/segmentation/filters/attributes", + code: 200, + }), + ), + ).annotate({ + identifier: "ListReachSegmentFilterAttributesV1Request", + }) as any as S.Schema; + +/** Where the attribute is sourced from. */ +export type ReachV1ContactsSegmentsSegmentFilterAttributeResourceType = + | "contacts" + | "contact_metadata" + | "campaign_events" + | "contact_tags" + | "campaigns" + | "opt_in_method" + | "contact_field_values" + | "contact_field_selections"; +export const ReachV1ContactsSegmentsSegmentFilterAttributeResourceType = + /*@__PURE__*/ S.String; + +/** Value to send as the condition `operator`. */ +export type ReachV1ContactsSegmentsSegmentFilterOperatorResourceOperator = + | "equals" + | "not_equals" + | "contains" + | "not_contains" + | "gte" + | "lte" + | "exists" + | "within_last_days" + | "not_within_last_days" + | "older_than_days" + | "processed" + | "not_processed" + | "delivered" + | "not_delivered" + | "dropped" + | "not_dropped" + | "bounced" + | "not_bounced" + | "soft_bounced" + | "not_soft_bounced" + | "opened" + | "not_opened" + | "clicked" + | "not_clicked" + | "unsubscribed" + | "not_unsubscribed"; +export const ReachV1ContactsSegmentsSegmentFilterOperatorResourceOperator = + /*@__PURE__*/ S.String; + +/** Shape of the value this operator expects, useful for rendering an input. */ +export type ReachV1ContactsSegmentsSegmentFilterOperatorResourceInputType = + | "text" + | "number" + | "date" + | "select"; +export const ReachV1ContactsSegmentsSegmentFilterOperatorResourceInputType = + /*@__PURE__*/ S.String; + +/** The values this operator accepts, keyed by the value to send. Only present when the operator is constrained to a fixed set, such as a tag or campaign picker. */ +export type ReachV1ContactsSegmentsSegmentFilterOperatorResourceEnumValuesMap = + { [key: string]: string | undefined }; +export const ReachV1ContactsSegmentsSegmentFilterOperatorResourceEnumValuesMap = + /*@__PURE__*/ S.Record( + S.String, + S.String, + ) as any as S.Schema; + +/** One operator an attribute accepts, and the value format it expects. */ +export interface ReachV1ContactsSegmentsSegmentFilterOperatorResource { + /** Value to send as the condition `operator`. */ + operator?: ReachV1ContactsSegmentsSegmentFilterOperatorResourceOperator; + description?: string; + /** Shape of the value this operator expects, useful for rendering an input. */ + input_type?: ReachV1ContactsSegmentsSegmentFilterOperatorResourceInputType; + /** An example value in the format this operator expects. */ + example?: string; + /** The values this operator accepts, keyed by the value to send. Only present when the operator is constrained to a fixed set, such as a tag or campaign picker. */ + enum_values?: ReachV1ContactsSegmentsSegmentFilterOperatorResourceEnumValuesMap; +} +export const ReachV1ContactsSegmentsSegmentFilterOperatorResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + operator: S.optional( + ReachV1ContactsSegmentsSegmentFilterOperatorResourceOperator, + ), + description: S.optional(S.String), + input_type: S.optional( + ReachV1ContactsSegmentsSegmentFilterOperatorResourceInputType, + ), + example: S.optional(S.String), + enum_values: S.optional( + ReachV1ContactsSegmentsSegmentFilterOperatorResourceEnumValuesMap, + ), + }), + ).annotate({ + identifier: "ReachV1ContactsSegmentsSegmentFilterOperatorResource", + }) as any as S.Schema; + +/** Operators this attribute accepts, keyed by operator name. */ +export type ReachV1ContactsSegmentsSegmentFilterAttributeResourceOperatorsMap = + { + [key: string]: + | ReachV1ContactsSegmentsSegmentFilterOperatorResource + | undefined; + }; +export const ReachV1ContactsSegmentsSegmentFilterAttributeResourceOperatorsMap = + /*@__PURE__*/ S.Record( + S.String, + ReachV1ContactsSegmentsSegmentFilterOperatorResource, + ) as any as S.Schema; + +/** One attribute a segment condition can filter on. */ +export interface ReachV1ContactsSegmentsSegmentFilterAttributeResource { + /** Value to send as the condition `attribute`. */ + name?: string; + /** Where the attribute is sourced from. */ + type?: ReachV1ContactsSegmentsSegmentFilterAttributeResourceType; + description?: string; + /** Operators this attribute accepts, keyed by operator name. */ + operators?: ReachV1ContactsSegmentsSegmentFilterAttributeResourceOperatorsMap; +} +export const ReachV1ContactsSegmentsSegmentFilterAttributeResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + name: S.optional(S.String), + type: S.optional( + ReachV1ContactsSegmentsSegmentFilterAttributeResourceType, + ), + description: S.optional(S.String), + operators: S.optional( + ReachV1ContactsSegmentsSegmentFilterAttributeResourceOperatorsMap, + ), + }), + ).annotate({ + identifier: "ReachV1ContactsSegmentsSegmentFilterAttributeResource", + }) as any as S.Schema; + +/** Every attribute a condition can filter on, keyed by the value to send as `attribute`. Custom contact fields are keyed `cf:{fieldUuid}`, tags and campaigns by their uuid, so the keys are not a fixed list and should be read from this response rather than hardcoded. */ +export type ReachV1ContactsSegmentsSegmentFilterAttributesResourceAttributesMap = + { + [key: string]: + | ReachV1ContactsSegmentsSegmentFilterAttributeResource + | undefined; + }; +export const ReachV1ContactsSegmentsSegmentFilterAttributesResourceAttributesMap = + /*@__PURE__*/ S.Record( + S.String, + ReachV1ContactsSegmentsSegmentFilterAttributeResource, + ) as any as S.Schema; + +/** The values accepted by `logic` when a segment combines several conditions. */ +export type ReachV1ContactsSegmentsSegmentFilterAttributesResourceLogicOperatorsMap = + { [key: string]: string | undefined }; +export const ReachV1ContactsSegmentsSegmentFilterAttributesResourceLogicOperatorsMap = + /*@__PURE__*/ S.Record( + S.String, + S.String, + ) as any as S.Schema; + +/** The vocabulary a segment condition can be built from, for one profile. */ +export interface ReachV1ContactsSegmentsSegmentFilterAttributesResource { + /** Every attribute a condition can filter on, keyed by the value to send as `attribute`. Custom contact fields are keyed `cf:{fieldUuid}`, tags and campaigns by their uuid, so the keys are not a fixed list and should be read from this response rather than hardcoded. */ + attributes?: ReachV1ContactsSegmentsSegmentFilterAttributesResourceAttributesMap; + /** The values accepted by `logic` when a segment combines several conditions. */ + logic_operators?: ReachV1ContactsSegmentsSegmentFilterAttributesResourceLogicOperatorsMap; +} +export const ReachV1ContactsSegmentsSegmentFilterAttributesResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + attributes: S.optional( + ReachV1ContactsSegmentsSegmentFilterAttributesResourceAttributesMap, + ), + logic_operators: S.optional( + ReachV1ContactsSegmentsSegmentFilterAttributesResourceLogicOperatorsMap, + ), + }), + ).annotate({ + identifier: "ReachV1ContactsSegmentsSegmentFilterAttributesResource", + }) as any as S.Schema; + +export interface MailChangeMailboxPasswordV1Request { + /** Mailbox resource ID */ + mailboxId: string; + /** New mailbox password. Minimum 8 characters with uppercase, lowercase, number and special character; must not be a commonly used password. */ + password: string | Redacted.Redacted; +} +export const MailChangeMailboxPasswordV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + mailboxId: S.String.pipe(T.Label()), + password: S.String.pipe(T.SensitiveValue({})), + }).pipe( + T.Http({ + method: "PATCH", + uri: "/api/mail/v1/mailboxes/{mailboxId}/password", + code: 200, + }), + ), +).annotate({ + identifier: "MailChangeMailboxPasswordV1Request", +}) as any as S.Schema; + +export interface MailUpdateForwarderKeepCopySettingV1Request { + /** Forwarder resource ID */ + forwarderId: string; + /** Whether to keep a copy of forwarded messages in the mailbox */ + is_keep_copy_enabled: boolean; +} +export const MailUpdateForwarderKeepCopySettingV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + forwarderId: S.String.pipe(T.Label()), + is_keep_copy_enabled: S.Boolean, + }).pipe( + T.Http({ + method: "PATCH", + uri: "/api/mail/v1/forwarders/{forwarderId}/keep-copy", + code: 200, + }), + ), + ).annotate({ + identifier: "MailUpdateForwarderKeepCopySettingV1Request", + }) as any as S.Schema; + +/** List of vulnerability IDs to patch, as returned by the list vulnerabilities endpoint. */ +export type PatchHostingNodeJsVulnerabilitiesV1RequestVulnerabilityIdsList = + Array; +export const PatchHostingNodeJsVulnerabilitiesV1RequestVulnerabilityIdsList = + /*@__PURE__*/ S.Array( + S.String, + ) as any as S.Schema; + +export interface PatchHostingNodeJsVulnerabilitiesV1Request { + username: string; + /** Domain name */ + domain: string; + /** List of vulnerability IDs to patch, as returned by the list vulnerabilities endpoint. */ + vulnerability_ids: PatchHostingNodeJsVulnerabilitiesV1RequestVulnerabilityIdsList; +} +export const PatchHostingNodeJsVulnerabilitiesV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + username: S.String.pipe(T.Label()), + domain: S.String.pipe(T.Label()), + vulnerability_ids: + PatchHostingNodeJsVulnerabilitiesV1RequestVulnerabilityIdsList, + }).pipe( + T.Http({ + method: "POST", + uri: "/api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/vulnerabilities/patch", + code: 200, + }), + ), + ).annotate({ + identifier: "PatchHostingNodeJsVulnerabilitiesV1Request", + }) as any as S.Schema; + +/** List of vulnerability IDs that were patched in the pull request */ +export type HostingV1NodeJsPatchResultResourcePatchedVulnerabilityIdsList = + Array; +export const HostingV1NodeJsPatchResultResourcePatchedVulnerabilityIdsList = + /*@__PURE__*/ S.Array( + S.String, + ) as any as S.Schema; + +export interface HostingV1NodeJsPatchResultResource { + /** URL to the created GitHub pull request */ + pr_url?: string; + /** GitHub pull request number */ + pr_number?: number; + /** The branch created with the fix */ + head_branch?: string; + /** List of vulnerability IDs that were patched in the pull request */ + patched_vulnerability_ids?: HostingV1NodeJsPatchResultResourcePatchedVulnerabilityIdsList; +} +export const HostingV1NodeJsPatchResultResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + pr_url: S.optional(S.String), + pr_number: S.optional(S.Number), + head_branch: S.optional(S.String), + patched_vulnerability_ids: S.optional( + HostingV1NodeJsPatchResultResourcePatchedVulnerabilityIdsList, + ), + }), +).annotate({ + identifier: "HostingV1NodeJsPatchResultResource", +}) as any as S.Schema; + +export type PreviewReachContactsMatchingConditionsV1RequestConditionsItemOperator = + | "equals" + | "not_equals" + | "contains" + | "not_contains" + | "gte" + | "lte" + | "exists" + | "within_last_days" + | "not_within_last_days" + | "older_than_days" + | "processed" + | "not_processed" + | "delivered" + | "not_delivered" + | "dropped" + | "not_dropped" + | "bounced" + | "not_bounced" + | "soft_bounced" + | "not_soft_bounced" + | "opened" + | "not_opened" + | "clicked" + | "not_clicked" + | "unsubscribed" + | "not_unsubscribed"; +export const PreviewReachContactsMatchingConditionsV1RequestConditionsItemOperator = + /*@__PURE__*/ S.String; + +export interface PreviewReachContactsMatchingConditionsV1RequestConditionsItem { + /** A built-in contact attribute, or `cf:{fieldUuid}` to target a custom contact field. Which operators are accepted depends on the attribute, so read the segment filter attributes endpoint for the authoritative list. */ + attribute: string; + operator: + | PreviewReachContactsMatchingConditionsV1RequestConditionsItemOperator + | (string & {}); + /** Always a string, including for numeric and date comparisons */ + value: string; +} +export const PreviewReachContactsMatchingConditionsV1RequestConditionsItem = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + attribute: S.String, + operator: + PreviewReachContactsMatchingConditionsV1RequestConditionsItemOperator, + value: S.String, + }), + ).annotate({ + identifier: "PreviewReachContactsMatchingConditionsV1RequestConditionsItem", + }) as any as S.Schema; + +/** Conditions a contact must satisfy to appear in the preview */ +export type PreviewReachContactsMatchingConditionsV1RequestConditionsList = + Array; +export const PreviewReachContactsMatchingConditionsV1RequestConditionsList = + /*@__PURE__*/ S.Array( + PreviewReachContactsMatchingConditionsV1RequestConditionsItem, + ) as any as S.Schema; + +/** How to combine multiple conditions */ +export type PreviewReachContactsMatchingConditionsV1RequestLogic = "AND" | "OR"; +export const PreviewReachContactsMatchingConditionsV1RequestLogic = + /*@__PURE__*/ S.String; + +export type PreviewReachContactsMatchingConditionsV1RequestSortBy = + | "email" + | "name" + | "surname" + | "phone" + | "subscription_status"; +export const PreviewReachContactsMatchingConditionsV1RequestSortBy = + /*@__PURE__*/ S.String; + +export type PreviewReachContactsMatchingConditionsV1RequestSortDirection = + | "asc" + | "desc"; +export const PreviewReachContactsMatchingConditionsV1RequestSortDirection = + /*@__PURE__*/ S.String; + +export interface PreviewReachContactsMatchingConditionsV1Request { + /** Profile uuid parameter */ + profileUuid: string; + /** Conditions a contact must satisfy to appear in the preview */ + conditions: PreviewReachContactsMatchingConditionsV1RequestConditionsList; + /** How to combine multiple conditions */ + logic: PreviewReachContactsMatchingConditionsV1RequestLogic | (string & {}); + /** Page number */ + page?: number; + /** Number of items per page */ + per_page?: number; + /** Narrow the preview to contacts whose email matches */ + search?: string; + sort_by?: + | PreviewReachContactsMatchingConditionsV1RequestSortBy + | (string & {}); + sort_direction?: + | PreviewReachContactsMatchingConditionsV1RequestSortDirection + | (string & {}); +} +export const PreviewReachContactsMatchingConditionsV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + profileUuid: S.String.pipe(T.Label()), + conditions: PreviewReachContactsMatchingConditionsV1RequestConditionsList, + logic: PreviewReachContactsMatchingConditionsV1RequestLogic, + page: S.optional(S.Number), + per_page: S.optional(S.Number), + search: S.optional(S.String), + sort_by: S.optional( + PreviewReachContactsMatchingConditionsV1RequestSortBy, + ), + sort_direction: S.optional( + PreviewReachContactsMatchingConditionsV1RequestSortDirection, + ), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/reach/v1/profiles/{profileUuid}/segmentation/filters/contacts", + code: 200, + }), + ), + ).annotate({ + identifier: "PreviewReachContactsMatchingConditionsV1Request", + }) as any as S.Schema; + +export interface PreviewReachContactsMatchingConditionsV1Response { + data?: ReachV1ContactsProfileContactCollection; + meta?: CommonSchemaPaginationMetaSchema; +} +export const PreviewReachContactsMatchingConditionsV1Response = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + data: S.optional(ReachV1ContactsProfileContactCollection), + meta: S.optional(CommonSchemaPaginationMetaSchema), + }), + ).annotate({ + identifier: "PreviewReachContactsMatchingConditionsV1Response", + }) as any as S.Schema; + +export interface PurgeHostingLiteSpeedCacheV1Request { + username: string; + /** WordPress installation (software) identifier */ + software: string; +} +export const PurgeHostingLiteSpeedCacheV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + username: S.String.pipe(T.Label()), + software: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/hosting/v1/accounts/{username}/wordpress/{software}/litespeed-cache/purge", + code: 200, + }), + ), +).annotate({ + identifier: "PurgeHostingLiteSpeedCacheV1Request", +}) as any as S.Schema; + +export interface ReachCountProfileSegmentContactsV1Request { + /** Profile uuid parameter */ + profileUuid: string; + /** Segment uuid parameter */ + segmentUuid: string; +} +export const ReachCountProfileSegmentContactsV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + profileUuid: S.String.pipe(T.Label()), + segmentUuid: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/reach/v1/profiles/{profileUuid}/segmentation/segments/{segmentUuid}/count", + code: 200, + }), + ), + ).annotate({ + identifier: "ReachCountProfileSegmentContactsV1Request", + }) as any as S.Schema; + +export interface ReachV1ContactsSegmentsSegmentContactsCountResource { + /** Contacts currently matching the segment conditions */ + count?: number; +} +export const ReachV1ContactsSegmentsSegmentContactsCountResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + count: S.optional(S.Number), + }), + ).annotate({ + identifier: "ReachV1ContactsSegmentsSegmentContactsCountResource", + }) as any as S.Schema; + +export interface ReachCreateContactsInBulkV1RequestContactsItem { + email: string; + name?: string | null; + surname?: string | null; + /** Phone number in E.164 format (leading "+" then 7-15 digits) */ + phone?: string | null; +} +export const ReachCreateContactsInBulkV1RequestContactsItem = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + email: S.String, + name: S.optional(S.NullOr(S.String)), + surname: S.optional(S.NullOr(S.String)), + phone: S.optional(S.NullOr(S.String)), + }), + ).annotate({ + identifier: "ReachCreateContactsInBulkV1RequestContactsItem", + }) as any as S.Schema; + +export type ReachCreateContactsInBulkV1RequestContactsList = + Array; +export const ReachCreateContactsInBulkV1RequestContactsList = + /*@__PURE__*/ S.Array( + ReachCreateContactsInBulkV1RequestContactsItem, + ) as any as S.Schema; + +/** Existing tags to attach to every created contact */ +export type ReachCreateContactsInBulkV1RequestTagUuidsList = Array; +export const ReachCreateContactsInBulkV1RequestTagUuidsList = + /*@__PURE__*/ S.Array( + S.String, + ) as any as S.Schema; + +export interface ReachCreateContactsInBulkV1Request { + /** Profile uuid parameter */ + profileUuid: string; + contacts: ReachCreateContactsInBulkV1RequestContactsList; + /** Existing tags to attach to every created contact */ + tag_uuids?: ReachCreateContactsInBulkV1RequestTagUuidsList; + /** Note applied to every created contact */ + note?: string | null; +} +export const ReachCreateContactsInBulkV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + profileUuid: S.String.pipe(T.Label()), + contacts: ReachCreateContactsInBulkV1RequestContactsList, + tag_uuids: S.optional(ReachCreateContactsInBulkV1RequestTagUuidsList), + note: S.optional(S.NullOr(S.String)), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/reach/v1/profiles/{profileUuid}/contacts/bulk", + code: 200, + }), + ), +).annotate({ + identifier: "ReachCreateContactsInBulkV1Request", +}) as any as S.Schema; + +export type ReachCreateOrFindTagsV1RequestNamesList = Array; +export const ReachCreateOrFindTagsV1RequestNamesList = /*@__PURE__*/ S.Array( + S.String, +) as any as S.Schema; + +export interface ReachCreateOrFindTagsV1Request { + /** Profile uuid parameter */ + profileUuid: string; + names: ReachCreateOrFindTagsV1RequestNamesList; +} +export const ReachCreateOrFindTagsV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + profileUuid: S.String.pipe(T.Label()), + names: ReachCreateOrFindTagsV1RequestNamesList, + }).pipe( + T.Http({ + method: "POST", + uri: "/api/reach/v1/profiles/{profileUuid}/tags", + code: 200, + }), + ), +).annotate({ + identifier: "ReachCreateOrFindTagsV1Request", +}) as any as S.Schema; + +export type ReachCreateOrFindTagsV1Response = ReachV1ContactsTagsTagCollection; +export const ReachCreateOrFindTagsV1Response = /*@__PURE__*/ S.suspend(() => + ReachV1ContactsTagsTagCollection.pipe(T.RawResponseRoot()), +).annotate({ + identifier: "ReachCreateOrFindTagsV1Response", +}) as any as S.Schema; + +export interface RecreateVPSVirtualMachineV1Request { + /** Virtual Machine ID */ + virtualMachineId: number; + /** Template ID */ + template_id: number; + /** Root password for the virtual machine. If not provided, random password will be generated. Password will not be shown in the response. */ + password?: string | Redacted.Redacted; + /** Panel password for the panel-based OS template. If not provided, random password will be generated. If OS does not support panel_password this field will be ignored. Password will not be shown in the response. */ + panel_password?: string | Redacted.Redacted; + /** Post-install script to execute after virtual machine was recreated */ + post_install_script_id?: number; +} +export const RecreateVPSVirtualMachineV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + virtualMachineId: S.Number.pipe(T.Label()), + template_id: S.Number, + password: S.optional(S.String.pipe(T.SensitiveValue({}))), + panel_password: S.optional(S.String.pipe(T.SensitiveValue({}))), + post_install_script_id: S.optional(S.Number), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/vps/v1/virtual-machines/{virtualMachineId}/recreate", + code: 200, + }), + ), +).annotate({ + identifier: "RecreateVPSVirtualMachineV1Request", +}) as any as S.Schema; + +export interface RegenerateMailWebhookSecretV1Request { + /** Webhook ID (returned when the webhook was created) */ + webhookId: string; +} +export const RegenerateMailWebhookSecretV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + webhookId: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/mail/v1/webhooks/{webhookId}/regenerate-secret", + code: 200, + }), + ), +).annotate({ + identifier: "RegenerateMailWebhookSecretV1Request", +}) as any as S.Schema; + +export type MailV1WebhooksWebhookSecretResourceEventsItem = "message.received"; +export const MailV1WebhooksWebhookSecretResourceEventsItem = + /*@__PURE__*/ S.String; + +/** Events that trigger this webhook */ +export type MailV1WebhooksWebhookSecretResourceEventsList = + Array; +export const MailV1WebhooksWebhookSecretResourceEventsList = + /*@__PURE__*/ S.Array( + MailV1WebhooksWebhookSecretResourceEventsItem, + ) as any as S.Schema; + +/** Current status of the webhook */ +export type MailV1WebhooksWebhookSecretResourceStatus = + | "active" + | "disabled" + | "paused"; +export const MailV1WebhooksWebhookSecretResourceStatus = /*@__PURE__*/ S.String; + +export interface MailV1WebhooksWebhookSecretResource { + /** Unique webhook identifier */ + id?: string; + mailbox?: MailV1WebhooksWebhookMailboxResource; + /** Human-readable name for this webhook */ + name?: string; + /** Optional description of the webhook's purpose */ + description?: string | null; + /** Events that trigger this webhook */ + events?: MailV1WebhooksWebhookSecretResourceEventsList; + /** Current status of the webhook */ + status?: MailV1WebhooksWebhookSecretResourceStatus; + /** URL that receives webhook POST requests */ + url?: string; + /** New webhook secret, sent as `Authorization: Bearer ` with every delivery. The previous secret is immediately invalidated and the new one is not returned again. */ + secret?: string | Redacted.Redacted; + created_at?: string; + updated_at?: string; +} +export const MailV1WebhooksWebhookSecretResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + id: S.optional(S.String), + mailbox: S.optional(MailV1WebhooksWebhookMailboxResource), + name: S.optional(S.String), + description: S.optional(S.NullOr(S.String)), + events: S.optional(MailV1WebhooksWebhookSecretResourceEventsList), + status: S.optional(MailV1WebhooksWebhookSecretResourceStatus), + url: S.optional(S.String), + secret: S.optional(S.String.pipe(T.SensitiveValue({}))), + created_at: S.optional(S.String), + updated_at: S.optional(S.String), + }), +).annotate({ + identifier: "MailV1WebhooksWebhookSecretResource", +}) as any as S.Schema; + +export interface RemoveReachAContactFromATagV1Request { + /** Profile uuid parameter */ + profileUuid: string; + /** Tag uuid parameter */ + tagUuid: string; + /** Contact uuid parameter */ + contactUuid: string; +} +export const RemoveReachAContactFromATagV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + profileUuid: S.String.pipe(T.Label()), + tagUuid: S.String.pipe(T.Label()), + contactUuid: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "DELETE", + uri: "/api/reach/v1/profiles/{profileUuid}/tags/{tagUuid}/contacts/{contactUuid}", + code: 200, + }), + ), +).annotate({ + identifier: "RemoveReachAContactFromATagV1Request", +}) as any as S.Schema; + +/** Contacts to apply the change to. Required unless all_contacts is true. */ +export type RemoveReachContactsFromATagV1RequestContactUuidsList = + Array; +export const RemoveReachContactsFromATagV1RequestContactUuidsList = + /*@__PURE__*/ S.Array( + S.String, + ) as any as S.Schema; + +export interface RemoveReachContactsFromATagV1Request { + /** Profile uuid parameter */ + profileUuid: string; + /** Tag uuid parameter */ + tagUuid: string; + /** Contacts to apply the change to. Required unless all_contacts is true. */ + contact_uuids?: RemoveReachContactsFromATagV1RequestContactUuidsList; + /** Apply to every contact in the profile */ + all_contacts?: boolean; +} +export const RemoveReachContactsFromATagV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + profileUuid: S.String.pipe(T.Label()), + tagUuid: S.String.pipe(T.Label()), + contact_uuids: S.optional( + RemoveReachContactsFromATagV1RequestContactUuidsList, + ), + all_contacts: S.optional(S.Boolean), + }).pipe( + T.Http({ + method: "DELETE", + uri: "/api/reach/v1/profiles/{profileUuid}/tags/{tagUuid}/contacts", + code: 200, + }), + ), +).annotate({ + identifier: "RemoveReachContactsFromATagV1Request", +}) as any as S.Schema; + +export interface RenameReachATagV1Request { + /** Profile uuid parameter */ + profileUuid: string; + /** Tag uuid parameter */ + tagUuid: string; + /** New tag name */ + value: string; +} +export const RenameReachATagV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + profileUuid: S.String.pipe(T.Label()), + tagUuid: S.String.pipe(T.Label()), + value: S.String, + }).pipe( + T.Http({ + method: "PATCH", + uri: "/api/reach/v1/profiles/{profileUuid}/tags/{tagUuid}", + code: 200, + }), + ), +).annotate({ + identifier: "RenameReachATagV1Request", +}) as any as S.Schema; + +/** Discount coupon codes */ +export type RenewBillingSubscriptionV1RequestCouponsList = Array; +export const RenewBillingSubscriptionV1RequestCouponsList = + /*@__PURE__*/ S.Array( + S.Unknown, + ) as any as S.Schema; + +export interface RenewBillingSubscriptionV1Request { + /** Subscription ID */ + subscriptionId: string; + /** Payment method ID, default will be used if not provided */ + payment_method_id?: number; + /** Discount coupon codes */ + coupons?: RenewBillingSubscriptionV1RequestCouponsList; +} +export const RenewBillingSubscriptionV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + subscriptionId: S.String.pipe(T.Label()), + payment_method_id: S.optional(S.Number), + coupons: S.optional(RenewBillingSubscriptionV1RequestCouponsList), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/billing/v1/subscriptions/{subscriptionId}/renew", + code: 200, + }), + ), +).annotate({ + identifier: "RenewBillingSubscriptionV1Request", +}) as any as S.Schema; + +/** Extension names, exactly as returned by the extensions endpoint. */ +export type ReplaceAgencyHostingWebsitePHPExtensionsV1RequestExtensionsList = + Array; +export const ReplaceAgencyHostingWebsitePHPExtensionsV1RequestExtensionsList = + /*@__PURE__*/ S.Array( + S.String, + ) as any as S.Schema; + +export interface ReplaceAgencyHostingWebsitePHPExtensionsV1Request { + /** Agency Plan website UID */ + website_uid: string; + /** Extension names, exactly as returned by the extensions endpoint. */ + extensions: ReplaceAgencyHostingWebsitePHPExtensionsV1RequestExtensionsList; +} +export const ReplaceAgencyHostingWebsitePHPExtensionsV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + website_uid: S.String.pipe(T.Label()), + extensions: + ReplaceAgencyHostingWebsitePHPExtensionsV1RequestExtensionsList, + }).pipe( + T.Http({ + method: "PUT", + uri: "/api/agency-hosting/v1/websites/{website_uid}/php-settings/extensions", + code: 200, + }), + ), + ).annotate({ + identifier: "ReplaceAgencyHostingWebsitePHPExtensionsV1Request", + }) as any as S.Schema; + +export interface ReplaceAgencyHostingWebsitePHPOptionsV1RequestOptionsItem { + /** php.ini directive name. */ + name: string; + /** Value to apply. */ + value: string; +} +export const ReplaceAgencyHostingWebsitePHPOptionsV1RequestOptionsItem = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + name: S.String, + value: S.String, + }), + ).annotate({ + identifier: "ReplaceAgencyHostingWebsitePHPOptionsV1RequestOptionsItem", + }) as any as S.Schema; + +/** Option names and values. Each name must be one of the options returned by the options endpoint, and each value must satisfy that option's allowed_values when it declares them. */ +export type ReplaceAgencyHostingWebsitePHPOptionsV1RequestOptionsList = + Array; +export const ReplaceAgencyHostingWebsitePHPOptionsV1RequestOptionsList = + /*@__PURE__*/ S.Array( + ReplaceAgencyHostingWebsitePHPOptionsV1RequestOptionsItem, + ) as any as S.Schema; + +export interface ReplaceAgencyHostingWebsitePHPOptionsV1Request { + /** Agency Plan website UID */ + website_uid: string; + /** Option names and values. Each name must be one of the options returned by the options endpoint, and each value must satisfy that option's allowed_values when it declares them. */ + options: ReplaceAgencyHostingWebsitePHPOptionsV1RequestOptionsList; +} +export const ReplaceAgencyHostingWebsitePHPOptionsV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + website_uid: S.String.pipe(T.Label()), + options: ReplaceAgencyHostingWebsitePHPOptionsV1RequestOptionsList, + }).pipe( + T.Http({ + method: "PUT", + uri: "/api/agency-hosting/v1/websites/{website_uid}/php-settings/options", + code: 200, + }), + ), + ).annotate({ + identifier: "ReplaceAgencyHostingWebsitePHPOptionsV1Request", + }) as any as S.Schema; + +export interface ReplaceHostingNodeJsEnvironmentVariablesV1RequestEnvVarsItem { + /** Environment variable name. Must start with an uppercase letter or underscore, followed by uppercase letters, digits or underscores. */ + key: string; + /** Environment variable value. */ + value: string; +} +export const ReplaceHostingNodeJsEnvironmentVariablesV1RequestEnvVarsItem = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + key: S.String, + value: S.String, + }), + ).annotate({ + identifier: "ReplaceHostingNodeJsEnvironmentVariablesV1RequestEnvVarsItem", + }) as any as S.Schema; + +/** Environment variables to set. This is the full desired set: any variable not in this list is deleted, and an empty array deletes every variable. */ +export type ReplaceHostingNodeJsEnvironmentVariablesV1RequestEnvVarsList = + Array; +export const ReplaceHostingNodeJsEnvironmentVariablesV1RequestEnvVarsList = + /*@__PURE__*/ S.Array( + ReplaceHostingNodeJsEnvironmentVariablesV1RequestEnvVarsItem, + ) as any as S.Schema; + +export interface ReplaceHostingNodeJsEnvironmentVariablesV1Request { + username: string; + /** Domain name */ + domain: string; + /** Environment variables to set. This is the full desired set: any variable not in this list is deleted, and an empty array deletes every variable. */ + env_vars: ReplaceHostingNodeJsEnvironmentVariablesV1RequestEnvVarsList; +} +export const ReplaceHostingNodeJsEnvironmentVariablesV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + username: S.String.pipe(T.Label()), + domain: S.String.pipe(T.Label()), + env_vars: ReplaceHostingNodeJsEnvironmentVariablesV1RequestEnvVarsList, + }).pipe( + T.Http({ + method: "PUT", + uri: "/api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/builds/settings/env", + code: 200, + }), + ), + ).annotate({ + identifier: "ReplaceHostingNodeJsEnvironmentVariablesV1Request", + }) as any as S.Schema; + +export type VPSV1FirewallRulesStoreRequestProtocol = + | "TCP" + | "UDP" + | "ICMP" + | "GRE" + | "any" + | "ESP" + | "AH" + | "ICMPv6" + | "SSH" + | "HTTP" + | "HTTPS" + | "MySQL" + | "PostgreSQL"; +export const VPSV1FirewallRulesStoreRequestProtocol = /*@__PURE__*/ S.String; + +export type VPSV1FirewallRulesStoreRequestSource = "any" | "custom"; +export const VPSV1FirewallRulesStoreRequestSource = /*@__PURE__*/ S.String; + +export interface VPSV1FirewallRulesStoreRequest { + protocol: VPSV1FirewallRulesStoreRequestProtocol | (string & {}); + /** Port or port range, ex: 1024:2048 */ + port: string; + source: VPSV1FirewallRulesStoreRequestSource | (string & {}); + /** IP range, CIDR, single IP or `any` */ + source_detail: string; +} +export const VPSV1FirewallRulesStoreRequest = /*@__PURE__*/ S.suspend(() => + S.Struct({ + protocol: VPSV1FirewallRulesStoreRequestProtocol, + port: S.String, + source: VPSV1FirewallRulesStoreRequestSource, + source_detail: S.String, + }), +).annotate({ + identifier: "VPSV1FirewallRulesStoreRequest", +}) as any as S.Schema; + +/** The complete set of firewall rules that atomically replaces all existing rules in the group */ +export type ReplaceVPSAllFirewallRulesInGroupV1RequestRulesList = + Array; +export const ReplaceVPSAllFirewallRulesInGroupV1RequestRulesList = + /*@__PURE__*/ S.Array( + VPSV1FirewallRulesStoreRequest, + ) as any as S.Schema; + +export interface ReplaceVPSAllFirewallRulesInGroupV1Request { + /** Firewall ID */ + firewallId: number; + /** The complete set of firewall rules that atomically replaces all existing rules in the group */ + rules: ReplaceVPSAllFirewallRulesInGroupV1RequestRulesList; + /** Synchronize the firewall group to all its virtual machines after replacing the rules */ + sync?: boolean; +} +export const ReplaceVPSAllFirewallRulesInGroupV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + firewallId: S.Number.pipe(T.Label()), + rules: ReplaceVPSAllFirewallRulesInGroupV1RequestRulesList, + sync: S.optional(S.Boolean), + }).pipe( + T.Http({ + method: "PUT", + uri: "/api/vps/v1/firewall/{firewallId}/rules", + code: 200, + }), + ), + ).annotate({ + identifier: "ReplaceVPSAllFirewallRulesInGroupV1Request", + }) as any as S.Schema; + +export interface ResendMailCatchAllConfirmationV1Request { + /** Catch-all resource ID */ + catchallId: string; +} +export const ResendMailCatchAllConfirmationV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + catchallId: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/mail/v1/catchalls/{catchallId}/confirmation/resend", + code: 200, + }), + ), +).annotate({ + identifier: "ResendMailCatchAllConfirmationV1Request", +}) as any as S.Schema; + +export interface ResendMailForwarderConfirmationV1Request { + /** Forwarder resource ID */ + forwarderId: string; +} +export const ResendMailForwarderConfirmationV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + forwarderId: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/mail/v1/forwarders/{forwarderId}/confirmation/resend", + code: 200, + }), + ), +).annotate({ + identifier: "ResendMailForwarderConfirmationV1Request", +}) as any as S.Schema; + +/** Specifies which record types to not reset */ +export type ResetDNSDNSRecordsV1RequestWhitelistedRecordTypesList = + Array; +export const ResetDNSDNSRecordsV1RequestWhitelistedRecordTypesList = + /*@__PURE__*/ S.Array( + S.String, + ) as any as S.Schema; + +export interface ResetDNSDNSRecordsV1Request { + /** Domain name */ + domain: string; + /** Determines if operation should be run synchronously */ + sync?: boolean; + /** Determines if email records should be reset */ + reset_email_records?: boolean; + /** Specifies which record types to not reset */ + whitelisted_record_types?: ResetDNSDNSRecordsV1RequestWhitelistedRecordTypesList; +} +export const ResetDNSDNSRecordsV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + domain: S.String.pipe(T.Label()), + sync: S.optional(S.Boolean), + reset_email_records: S.optional(S.Boolean), + whitelisted_record_types: S.optional( + ResetDNSDNSRecordsV1RequestWhitelistedRecordTypesList, + ), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/dns/v1/zones/{domain}/reset", + code: 200, + }), + ), +).annotate({ + identifier: "ResetDNSDNSRecordsV1Request", +}) as any as S.Schema; + +export interface ResetHostingPHPExtensionsV1Request { + username: string; + /** Domain name */ + domain: string; +} +export const ResetHostingPHPExtensionsV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + username: S.String.pipe(T.Label()), + domain: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "PATCH", + uri: "/api/hosting/v1/accounts/{username}/websites/{domain}/php/extensions/reset", + code: 200, + }), + ), +).annotate({ + identifier: "ResetHostingPHPExtensionsV1Request", +}) as any as S.Schema; + +export interface ResetVPSHostnameV1Request { + /** Virtual Machine ID */ + virtualMachineId: number; +} +export const ResetVPSHostnameV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + virtualMachineId: S.Number.pipe(T.Label()), + }).pipe( + T.Http({ + method: "DELETE", + uri: "/api/vps/v1/virtual-machines/{virtualMachineId}/hostname", + code: 200, + }), + ), +).annotate({ + identifier: "ResetVPSHostnameV1Request", +}) as any as S.Schema; + +export interface RestartHostingNodeJsApplicationV1Request { + username: string; + /** Domain name */ + domain: string; +} +export const RestartHostingNodeJsApplicationV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + username: S.String.pipe(T.Label()), + domain: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/server/restart", + code: 200, + }), + ), +).annotate({ + identifier: "RestartHostingNodeJsApplicationV1Request", +}) as any as S.Schema; + +export interface RestartVPSProjectV1Request { + /** Virtual Machine ID */ + virtualMachineId: number; + /** Docker Compose project name using alphanumeric characters, dashes, and underscores only */ + projectName: string; +} +export const RestartVPSProjectV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + virtualMachineId: S.Number.pipe(T.Label()), + projectName: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/vps/v1/virtual-machines/{virtualMachineId}/docker/{projectName}/restart", + code: 200, + }), + ), +).annotate({ + identifier: "RestartVPSProjectV1Request", +}) as any as S.Schema; + +export interface RestartVPSVirtualMachineV1Request { + /** Virtual Machine ID */ + virtualMachineId: number; +} +export const RestartVPSVirtualMachineV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + virtualMachineId: S.Number.pipe(T.Label()), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/vps/v1/virtual-machines/{virtualMachineId}/restart", + code: 200, + }), + ), +).annotate({ + identifier: "RestartVPSVirtualMachineV1Request", +}) as any as S.Schema; + +export interface RestoreDNSDNSSnapshotV1Request { + /** Domain name */ + domain: string; + /** Snapshot ID */ + snapshotId: number; +} +export const RestoreDNSDNSSnapshotV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + domain: S.String.pipe(T.Label()), + snapshotId: S.Number.pipe(T.Label()), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/dns/v1/snapshots/{domain}/{snapshotId}/restore", + code: 200, + }), + ), +).annotate({ + identifier: "RestoreDNSDNSSnapshotV1Request", +}) as any as S.Schema; + +export interface RestoreVPSBackupV1Request { + /** Virtual Machine ID */ + virtualMachineId: number; + /** Backup ID */ + backupId: number; +} +export const RestoreVPSBackupV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + virtualMachineId: S.Number.pipe(T.Label()), + backupId: S.Number.pipe(T.Label()), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/vps/v1/virtual-machines/{virtualMachineId}/backups/{backupId}/restore", + code: 200, + }), + ), +).annotate({ + identifier: "RestoreVPSBackupV1Request", +}) as any as S.Schema; + +export interface RestoreVPSSnapshotV1Request { + /** Virtual Machine ID */ + virtualMachineId: number; +} +export const RestoreVPSSnapshotV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + virtualMachineId: S.Number.pipe(T.Label()), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/vps/v1/virtual-machines/{virtualMachineId}/snapshot/restore", + code: 200, + }), + ), +).annotate({ + identifier: "RestoreVPSSnapshotV1Request", +}) as any as S.Schema; + +export interface RevokeMailAPITokenV1Request { + /** API token ID (returned when the token was created) */ + tokenId: string; +} +export const RevokeMailAPITokenV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + tokenId: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "DELETE", + uri: "/api/mail/v1/api-tokens/{tokenId}", + code: 200, + }), + ), +).annotate({ + identifier: "RevokeMailAPITokenV1Request", +}) as any as S.Schema; + +export interface SearchHostingWordPressPluginsV1Request { + /** Search term to match against plugin names. Minimum 3 characters. */ + search: string; +} +export const SearchHostingWordPressPluginsV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + search: S.String.pipe(T.Query()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/hosting/v1/wordpress/plugins", + code: 200, + }), + ), +).annotate({ + identifier: "SearchHostingWordPressPluginsV1Request", +}) as any as S.Schema; + +/** Plugin icon URLs keyed by resolution */ +export interface WordPressV1PluginsPluginResourceIcons { + _1x?: string; + _2x?: string; +} +export const WordPressV1PluginsPluginResourceIcons = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + _1x: S.optional(S.String.pipe(T.Body("1x"))), + _2x: S.optional(S.String.pipe(T.Body("2x"))), + }), +).annotate({ + identifier: "WordPressV1PluginsPluginResourceIcons", +}) as any as S.Schema; + +export interface WordPressV1PluginsPluginResource { + /** Plugin slug used when installing the plugin */ + slug?: string; + /** Human readable plugin name */ + title?: string; + /** Plugin icon URLs keyed by resolution */ + icons?: WordPressV1PluginsPluginResourceIcons | null; + /** Short plugin description */ + description?: string; +} +export const WordPressV1PluginsPluginResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + slug: S.optional(S.String), + title: S.optional(S.String), + icons: S.optional(S.NullOr(WordPressV1PluginsPluginResourceIcons)), + description: S.optional(S.String), + }), +).annotate({ + identifier: "WordPressV1PluginsPluginResource", +}) as any as S.Schema; + +/** Array of [`WordPress.V1.Plugins.PluginResource`](#model/wordpressv1pluginspluginresource) */ +export type WordPressV1PluginsPluginCollection = + Array; +export const WordPressV1PluginsPluginCollection = /*@__PURE__*/ S.Array( + WordPressV1PluginsPluginResource, +) as any as S.Schema; + +export type SearchHostingWordPressPluginsV1Response = + WordPressV1PluginsPluginCollection; +export const SearchHostingWordPressPluginsV1Response = /*@__PURE__*/ S.suspend( + () => WordPressV1PluginsPluginCollection.pipe(T.RawResponseRoot()), +).annotate({ + identifier: "SearchHostingWordPressPluginsV1Response", +}) as any as S.Schema; + +export interface SetBillingDefaultPaymentMethodV1Request { + /** Payment method ID */ + paymentMethodId: number; +} +export const SetBillingDefaultPaymentMethodV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + paymentMethodId: S.Number.pipe(T.Label()), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/billing/v1/payment-methods/{paymentMethodId}", + code: 200, + }), + ), +).annotate({ + identifier: "SetBillingDefaultPaymentMethodV1Request", +}) as any as S.Schema; + +export interface SetDomainWHOISProfileAsDefaultV1Request { + /** WHOIS ID */ + whoisId: number; +} +export const SetDomainWHOISProfileAsDefaultV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + whoisId: S.Number.pipe(T.Label()), + }).pipe( + T.Http({ + method: "PUT", + uri: "/api/domains/v1/whois/default/{whoisId}", + code: 200, + }), + ), +).annotate({ + identifier: "SetDomainWHOISProfileAsDefaultV1Request", +}) as any as S.Schema; + +export interface SetEcommerceStoreShippingV1Request { + /** The ID of the store to configure shipping for. */ + store_id: string; + /** Flat shipping rate in the smallest currency unit (e.g. cents). Use 0 for free shipping. */ + price: number; +} +export const SetEcommerceStoreShippingV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + store_id: S.String.pipe(T.Label()), + price: S.Number, + }).pipe( + T.Http({ + method: "POST", + uri: "/api/ecommerce/v1/stores/{store_id}/shipping", + code: 200, + }), + ), +).annotate({ + identifier: "SetEcommerceStoreShippingV1Request", +}) as any as S.Schema; + +export interface EcommerceV1ShippingShippingResourceShippingOption { + /** Shipping option ID. */ + id?: string; + /** Flat shipping rate in the smallest currency unit (e.g. cents). */ + amount?: number; + /** Currency code the rate is charged in (ISO 4217, lowercase). */ + currency_code?: string; +} +export const EcommerceV1ShippingShippingResourceShippingOption = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + id: S.optional(S.String), + amount: S.optional(S.Number), + currency_code: S.optional(S.String), + }), + ).annotate({ + identifier: "EcommerceV1ShippingShippingResourceShippingOption", + }) as any as S.Schema; + +export interface EcommerceV1ShippingShippingResource { + shipping_option?: EcommerceV1ShippingShippingResourceShippingOption; + /** Admin UI deep-link to manage shipping settings. */ + admin_url?: string; +} +export const EcommerceV1ShippingShippingResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + shipping_option: S.optional( + EcommerceV1ShippingShippingResourceShippingOption, + ), + admin_url: S.optional(S.String), + }), +).annotate({ + identifier: "EcommerceV1ShippingShippingResource", +}) as any as S.Schema; + +/** AI option name */ +export type SetHostingAIOptionStatusV1RequestOption = "llmstxt" | "web2agent"; +export const SetHostingAIOptionStatusV1RequestOption = /*@__PURE__*/ S.String; + +export interface SetHostingAIOptionStatusV1Request { + username: string; + /** WordPress installation (software) identifier */ + software: string; + /** AI option name */ + option: SetHostingAIOptionStatusV1RequestOption | (string & {}); + /** Enable (true) or disable (false) the AI option. */ + enable: boolean; +} +export const SetHostingAIOptionStatusV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + username: S.String.pipe(T.Label()), + software: S.String.pipe(T.Label()), + option: SetHostingAIOptionStatusV1RequestOption, + enable: S.Boolean, + }).pipe( + T.Http({ + method: "PATCH", + uri: "/api/hosting/v1/accounts/{username}/wordpress/{software}/hostinger-plugins/ai-option/status", + code: 200, + }), + ), +).annotate({ + identifier: "SetHostingAIOptionStatusV1Request", +}) as any as S.Schema; + +export interface SetVPSHostnameV1Request { + /** Virtual Machine ID */ + virtualMachineId: number; + hostname: string; +} +export const SetVPSHostnameV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + virtualMachineId: S.Number.pipe(T.Label()), + hostname: S.String, + }).pipe( + T.Http({ + method: "PUT", + uri: "/api/vps/v1/virtual-machines/{virtualMachineId}/hostname", + code: 200, + }), + ), +).annotate({ + identifier: "SetVPSHostnameV1Request", +}) as any as S.Schema; + +export interface SetVPSNameserversV1Request { + /** Virtual Machine ID */ + virtualMachineId: number; + ns1: string; + ns2?: string | null; + ns3?: string | null; +} +export const SetVPSNameserversV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + virtualMachineId: S.Number.pipe(T.Label()), + ns1: S.String, + ns2: S.optional(S.NullOr(S.String)), + ns3: S.optional(S.NullOr(S.String)), + }).pipe( + T.Http({ + method: "PUT", + uri: "/api/vps/v1/virtual-machines/{virtualMachineId}/nameservers", + code: 200, + }), + ), +).annotate({ + identifier: "SetVPSNameserversV1Request", +}) as any as S.Schema; + +export interface SetVPSPanelPasswordV1Request { + /** Virtual Machine ID */ + virtualMachineId: number; + /** Panel password for the virtual machine */ + password: string | Redacted.Redacted; +} +export const SetVPSPanelPasswordV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + virtualMachineId: S.Number.pipe(T.Label()), + password: S.String.pipe(T.SensitiveValue({})), + }).pipe( + T.Http({ + method: "PUT", + uri: "/api/vps/v1/virtual-machines/{virtualMachineId}/panel-password", + code: 200, + }), + ), +).annotate({ + identifier: "SetVPSPanelPasswordV1Request", +}) as any as S.Schema; + +export interface SetVPSRootPasswordV1Request { + /** Virtual Machine ID */ + virtualMachineId: number; + /** Root password for the virtual machine */ + password: string | Redacted.Redacted; +} +export const SetVPSRootPasswordV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + virtualMachineId: S.Number.pipe(T.Label()), + password: S.String.pipe(T.SensitiveValue({})), + }).pipe( + T.Http({ + method: "PUT", + uri: "/api/vps/v1/virtual-machines/{virtualMachineId}/root-password", + code: 200, + }), + ), +).annotate({ + identifier: "SetVPSRootPasswordV1Request", +}) as any as S.Schema; + +/** Node.js version */ +export type StartHostingNodeJsBuildV1RequestNodeVersion = 18 | 20 | 22 | 24; +export const StartHostingNodeJsBuildV1RequestNodeVersion = + /*@__PURE__*/ S.Number; + +/** Node.js application type */ +export type StartHostingNodeJsBuildV1RequestAppType = + | "create-react-app" + | "gatsby" + | "vite" + | "angular" + | "react" + | "vue" + | "parcel" + | "next" + | "nuxt" + | "nest" + | "express" + | "fastify" + | "astro" + | "svelte" + | "svelte-kit" + | "hono" + | "react-router" + | "nitro" + | "other"; +export const StartHostingNodeJsBuildV1RequestAppType = /*@__PURE__*/ S.String; + +/** Package manager */ +export type StartHostingNodeJsBuildV1RequestPackageManager = + | "npm" + | "yarn" + | "pnpm"; +export const StartHostingNodeJsBuildV1RequestPackageManager = + /*@__PURE__*/ S.String; + +/** The source type of the files */ +export type StartHostingNodeJsBuildV1RequestSourceType = "archive"; +export const StartHostingNodeJsBuildV1RequestSourceType = + /*@__PURE__*/ S.String; + +/** Source-specific options */ +export interface StartHostingNodeJsBuildV1RequestSourceOptions { + /** The path to the archive file relative to the document root of the vhost (required if source is "archive") */ + archive_path?: string; +} +export const StartHostingNodeJsBuildV1RequestSourceOptions = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + archive_path: S.optional(S.String), + }), + ).annotate({ + identifier: "StartHostingNodeJsBuildV1RequestSourceOptions", + }) as any as S.Schema; + +export interface StartHostingNodeJsBuildV1Request { + username: string; + /** Domain name */ + domain: string; + /** Node.js version */ + node_version: StartHostingNodeJsBuildV1RequestNodeVersion | (number & {}); + /** Node.js application type */ + app_type: StartHostingNodeJsBuildV1RequestAppType | (string & {}) | null; + /** Application root directory (where package.json is located) relative to public_html */ + root_directory: string | null; + /** Build output directory relative to the root directory */ + output_directory: string | null; + /** Build script that will be ran to build the application */ + build_script: string | null; + /** The main entry point file for the application */ + entry_file?: string | null; + /** Package manager */ + package_manager?: + | StartHostingNodeJsBuildV1RequestPackageManager + | (string & {}) + | null; + /** The source type of the files */ + source_type: StartHostingNodeJsBuildV1RequestSourceType | (string & {}); + /** Source-specific options */ + source_options: StartHostingNodeJsBuildV1RequestSourceOptions | null; +} +export const StartHostingNodeJsBuildV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + username: S.String.pipe(T.Label()), + domain: S.String.pipe(T.Label()), + node_version: StartHostingNodeJsBuildV1RequestNodeVersion, + app_type: S.NullOr(StartHostingNodeJsBuildV1RequestAppType), + root_directory: S.NullOr(S.String), + output_directory: S.NullOr(S.String), + build_script: S.NullOr(S.String), + entry_file: S.optional(S.NullOr(S.String)), + package_manager: S.optional( + S.NullOr(StartHostingNodeJsBuildV1RequestPackageManager), + ), + source_type: StartHostingNodeJsBuildV1RequestSourceType, + source_options: S.NullOr(StartHostingNodeJsBuildV1RequestSourceOptions), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/builds", + code: 200, + }), + ), +).annotate({ + identifier: "StartHostingNodeJsBuildV1Request", +}) as any as S.Schema; + +export interface StartVPSProjectV1Request { + /** Virtual Machine ID */ + virtualMachineId: number; + /** Docker Compose project name using alphanumeric characters, dashes, and underscores only */ + projectName: string; +} +export const StartVPSProjectV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + virtualMachineId: S.Number.pipe(T.Label()), + projectName: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/vps/v1/virtual-machines/{virtualMachineId}/docker/{projectName}/start", + code: 200, + }), + ), +).annotate({ + identifier: "StartVPSProjectV1Request", +}) as any as S.Schema; + +export interface StartVPSRecoveryModeV1Request { + /** Virtual Machine ID */ + virtualMachineId: number; + /** Temporary root password for recovery mode */ + root_password: string | Redacted.Redacted; +} +export const StartVPSRecoveryModeV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + virtualMachineId: S.Number.pipe(T.Label()), + root_password: S.String.pipe(T.SensitiveValue({})), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/vps/v1/virtual-machines/{virtualMachineId}/recovery", + code: 200, + }), + ), +).annotate({ + identifier: "StartVPSRecoveryModeV1Request", +}) as any as S.Schema; + +export interface StartVPSVirtualMachineV1Request { + /** Virtual Machine ID */ + virtualMachineId: number; +} +export const StartVPSVirtualMachineV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + virtualMachineId: S.Number.pipe(T.Label()), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/vps/v1/virtual-machines/{virtualMachineId}/start", + code: 200, + }), + ), +).annotate({ + identifier: "StartVPSVirtualMachineV1Request", +}) as any as S.Schema; + +export interface StopVPSProjectV1Request { + /** Virtual Machine ID */ + virtualMachineId: number; + /** Docker Compose project name using alphanumeric characters, dashes, and underscores only */ + projectName: string; +} +export const StopVPSProjectV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + virtualMachineId: S.Number.pipe(T.Label()), + projectName: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/vps/v1/virtual-machines/{virtualMachineId}/docker/{projectName}/stop", + code: 200, + }), + ), +).annotate({ + identifier: "StopVPSProjectV1Request", +}) as any as S.Schema; + +export interface StopVPSRecoveryModeV1Request { + /** Virtual Machine ID */ + virtualMachineId: number; +} +export const StopVPSRecoveryModeV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + virtualMachineId: S.Number.pipe(T.Label()), + }).pipe( + T.Http({ + method: "DELETE", + uri: "/api/vps/v1/virtual-machines/{virtualMachineId}/recovery", + code: 200, + }), + ), +).annotate({ + identifier: "StopVPSRecoveryModeV1Request", +}) as any as S.Schema; + +export interface StopVPSVirtualMachineV1Request { + /** Virtual Machine ID */ + virtualMachineId: number; +} +export const StopVPSVirtualMachineV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + virtualMachineId: S.Number.pipe(T.Label()), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/vps/v1/virtual-machines/{virtualMachineId}/stop", + code: 200, + }), + ), +).annotate({ + identifier: "StopVPSVirtualMachineV1Request", +}) as any as S.Schema; + +export interface SyncVPSFirewallV1Request { + /** Firewall ID */ + firewallId: number; + /** Virtual Machine ID */ + virtualMachineId: number; +} +export const SyncVPSFirewallV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + firewallId: S.Number.pipe(T.Label()), + virtualMachineId: S.Number.pipe(T.Label()), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/vps/v1/firewall/{firewallId}/sync/{virtualMachineId}", + code: 200, + }), + ), +).annotate({ + identifier: "SyncVPSFirewallV1Request", +}) as any as S.Schema; + +export interface TestMailWebhookV1Request { + /** Webhook ID (returned when the webhook was created) */ + webhookId: string; +} +export const TestMailWebhookV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + webhookId: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/mail/v1/webhooks/{webhookId}/test", + code: 200, + }), + ), +).annotate({ + identifier: "TestMailWebhookV1Request", +}) as any as S.Schema; + +export interface MailV1WebhooksWebhookTestResultResource { + /** HTTP status code returned by the webhook endpoint */ + http_status?: number; + /** Whether the test delivery was successful */ + is_successful?: boolean; + /** Error message returned by the webhook endpoint in case of failure */ + error?: string | null; +} +export const MailV1WebhooksWebhookTestResultResource = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + http_status: S.optional(S.Number), + is_successful: S.optional(S.Boolean), + error: S.optional(S.NullOr(S.String)), + }), +).annotate({ + identifier: "MailV1WebhooksWebhookTestResultResource", +}) as any as S.Schema; + +export interface ToggleHostingCachelessModeV1Request { + username: string; + /** Domain name */ + domain: string; + /** Turn development (cacheless) mode on (true) or off (false) for the website. */ + enabled: boolean; +} +export const ToggleHostingCachelessModeV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + username: S.String.pipe(T.Label()), + domain: S.String.pipe(T.Label()), + enabled: S.Boolean, + }).pipe( + T.Http({ + method: "PATCH", + uri: "/api/hosting/v1/accounts/{username}/websites/{domain}/cacheless-mode/toggle", + code: 200, + }), + ), +).annotate({ + identifier: "ToggleHostingCachelessModeV1Request", +}) as any as S.Schema; + +export interface ToggleHostingMaintenanceModeV1Request { + username: string; + /** WordPress installation (software) identifier */ + software: string; + /** Enable (true) or disable (false) maintenance mode for the WordPress installation. */ + enabled: boolean; +} +export const ToggleHostingMaintenanceModeV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + username: S.String.pipe(T.Label()), + software: S.String.pipe(T.Label()), + enabled: S.Boolean, + }).pipe( + T.Http({ + method: "PATCH", + uri: "/api/hosting/v1/accounts/{username}/wordpress/{software}/maintenance/toggle", + code: 200, + }), + ), +).annotate({ + identifier: "ToggleHostingMaintenanceModeV1Request", +}) as any as S.Schema; + +export interface ToggleHostingMemcachedObjectCacheV1Request { + username: string; + /** WordPress installation (software) identifier */ + software: string; + /** Activate (true) or deactivate (false) the Memcached object cache for the WordPress installation. */ + enabled: boolean; +} +export const ToggleHostingMemcachedObjectCacheV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + username: S.String.pipe(T.Label()), + software: S.String.pipe(T.Label()), + enabled: S.Boolean, + }).pipe( + T.Http({ + method: "PATCH", + uri: "/api/hosting/v1/accounts/{username}/wordpress/{software}/memcached/toggle", + code: 200, + }), + ), + ).annotate({ + identifier: "ToggleHostingMemcachedObjectCacheV1Request", + }) as any as S.Schema; + +export interface ToggleHostingWebsiteCacheV1Request { + username: string; + /** Domain name */ + domain: string; + /** Turn server-side caching on (true) or off (false) for the website. */ + enabled: boolean; +} +export const ToggleHostingWebsiteCacheV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + username: S.String.pipe(T.Label()), + domain: S.String.pipe(T.Label()), + enabled: S.Boolean, + }).pipe( + T.Http({ + method: "PATCH", + uri: "/api/hosting/v1/accounts/{username}/websites/{domain}/cache/toggle", + code: 200, + }), + ), +).annotate({ + identifier: "ToggleHostingWebsiteCacheV1Request", +}) as any as S.Schema; + +/** Slugs of the installed plugins to uninstall. */ +export type UninstallHostingWordPressPluginsV1RequestPluginsList = + Array; +export const UninstallHostingWordPressPluginsV1RequestPluginsList = + /*@__PURE__*/ S.Array( + S.String, + ) as any as S.Schema; + +export interface UninstallHostingWordPressPluginsV1Request { + username: string; + /** WordPress installation (software) identifier */ + software: string; + /** Slugs of the installed plugins to uninstall. */ + plugins: UninstallHostingWordPressPluginsV1RequestPluginsList; +} +export const UninstallHostingWordPressPluginsV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + username: S.String.pipe(T.Label()), + software: S.String.pipe(T.Label()), + plugins: UninstallHostingWordPressPluginsV1RequestPluginsList, + }).pipe( + T.Http({ + method: "POST", + uri: "/api/hosting/v1/accounts/{username}/wordpress/{software}/plugins/uninstall", + code: 200, + }), + ), + ).annotate({ + identifier: "UninstallHostingWordPressPluginsV1Request", + }) as any as S.Schema; + +/** Slugs of the installed themes to uninstall. */ +export type UninstallHostingWordPressThemesV1RequestThemesList = Array; +export const UninstallHostingWordPressThemesV1RequestThemesList = + /*@__PURE__*/ S.Array( + S.String, + ) as any as S.Schema; + +export interface UninstallHostingWordPressThemesV1Request { + username: string; + /** WordPress installation (software) identifier */ + software: string; + /** Slugs of the installed themes to uninstall. */ + themes: UninstallHostingWordPressThemesV1RequestThemesList; +} +export const UninstallHostingWordPressThemesV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + username: S.String.pipe(T.Label()), + software: S.String.pipe(T.Label()), + themes: UninstallHostingWordPressThemesV1RequestThemesList, + }).pipe( + T.Http({ + method: "POST", + uri: "/api/hosting/v1/accounts/{username}/wordpress/{software}/themes/uninstall", + code: 200, + }), + ), +).annotate({ + identifier: "UninstallHostingWordPressThemesV1Request", +}) as any as S.Schema; + +export interface UninstallVPSMonarxV1Request { + /** Virtual Machine ID */ + virtualMachineId: number; +} +export const UninstallVPSMonarxV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + virtualMachineId: S.Number.pipe(T.Label()), + }).pipe( + T.Http({ + method: "DELETE", + uri: "/api/vps/v1/virtual-machines/{virtualMachineId}/monarx", + code: 200, + }), + ), +).annotate({ + identifier: "UninstallVPSMonarxV1Request", +}) as any as S.Schema; + +export interface UnlinkAgencyHostingDomainFromWebsiteV1Request { + /** Agency Plan website UID */ + website_uid: string; + /** Domain name */ + domain: string; +} +export const UnlinkAgencyHostingDomainFromWebsiteV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + website_uid: S.String.pipe(T.Label()), + domain: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "DELETE", + uri: "/api/agency-hosting/v1/websites/{website_uid}/domains/{domain}", + code: 200, + }), + ), + ).annotate({ + identifier: "UnlinkAgencyHostingDomainFromWebsiteV1Request", + }) as any as S.Schema; + +export interface UpdateAgencyHostingWebsitePHPVersionV1Request { + /** Agency Plan website UID */ + website_uid: string; + /** PHP version to switch the website to, as major.minor. Must be one of the versions returned by the available versions endpoint. */ + version: string; +} +export const UpdateAgencyHostingWebsitePHPVersionV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + website_uid: S.String.pipe(T.Label()), + version: S.String, + }).pipe( + T.Http({ + method: "PATCH", + uri: "/api/agency-hosting/v1/websites/{website_uid}/php-settings/version", + code: 200, + }), + ), + ).annotate({ + identifier: "UpdateAgencyHostingWebsitePHPVersionV1Request", + }) as any as S.Schema; + +export interface UpdateDNSDNSRecordsV1RequestZoneItemRecordsItem { + /** Content of the name record */ + content: string; +} +export const UpdateDNSDNSRecordsV1RequestZoneItemRecordsItem = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + content: S.String, + }), + ).annotate({ + identifier: "UpdateDNSDNSRecordsV1RequestZoneItemRecordsItem", + }) as any as S.Schema; + +/** Records assigned to the name */ +export type UpdateDNSDNSRecordsV1RequestZoneItemRecordsList = + Array; +export const UpdateDNSDNSRecordsV1RequestZoneItemRecordsList = + /*@__PURE__*/ S.Array( + UpdateDNSDNSRecordsV1RequestZoneItemRecordsItem, + ) as any as S.Schema; + +/** Type of the record */ +export type UpdateDNSDNSRecordsV1RequestZoneItemType = + | "A" + | "AAAA" + | "CNAME" + | "ALIAS" + | "MX" + | "TXT" + | "NS" + | "SOA" + | "SRV" + | "CAA"; +export const UpdateDNSDNSRecordsV1RequestZoneItemType = /*@__PURE__*/ S.String; + +export interface UpdateDNSDNSRecordsV1RequestZoneItem { + /** Name of the record (use `@` for wildcard name) */ + name: string; + /** Records assigned to the name */ + records: UpdateDNSDNSRecordsV1RequestZoneItemRecordsList; + /** TTL (Time-To-Live) of the record */ + ttl?: number; + /** Type of the record */ + type: UpdateDNSDNSRecordsV1RequestZoneItemType | (string & {}); +} +export const UpdateDNSDNSRecordsV1RequestZoneItem = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + name: S.String, + records: UpdateDNSDNSRecordsV1RequestZoneItemRecordsList, + ttl: S.optional(S.Number), + type: UpdateDNSDNSRecordsV1RequestZoneItemType, + }), +).annotate({ + identifier: "UpdateDNSDNSRecordsV1RequestZoneItem", +}) as any as S.Schema; + +export type UpdateDNSDNSRecordsV1RequestZoneList = + Array; +export const UpdateDNSDNSRecordsV1RequestZoneList = /*@__PURE__*/ S.Array( + UpdateDNSDNSRecordsV1RequestZoneItem, +) as any as S.Schema; + +export interface UpdateDNSDNSRecordsV1Request { + /** Domain name */ + domain: string; + /** If `true`, resource records (RRs) matching name and type will be deleted and new RRs will be created, otherwise resource records' ttl's are updated and new records are appended. If no matching RRs are found, they are created. */ + overwrite?: boolean; + zone: UpdateDNSDNSRecordsV1RequestZoneList; +} +export const UpdateDNSDNSRecordsV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + domain: S.String.pipe(T.Label()), + overwrite: S.optional(S.Boolean), + zone: UpdateDNSDNSRecordsV1RequestZoneList, + }).pipe( + T.Http({ method: "PUT", uri: "/api/dns/v1/zones/{domain}", code: 200 }), + ), +).annotate({ + identifier: "UpdateDNSDNSRecordsV1Request", +}) as any as S.Schema; + +/** Redirect type */ +export type UpdateDomainDomainForwardingV1RequestRedirectType = "301" | "302"; +export const UpdateDomainDomainForwardingV1RequestRedirectType = + /*@__PURE__*/ S.String; + +export interface UpdateDomainDomainForwardingV1Request { + /** Domain name */ + domain: string; + /** Redirect type */ + redirect_type: + | UpdateDomainDomainForwardingV1RequestRedirectType + | (string & {}); + /** URL to forward domain to */ + redirect_url: string; +} +export const UpdateDomainDomainForwardingV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + domain: S.String.pipe(T.Label()), + redirect_type: UpdateDomainDomainForwardingV1RequestRedirectType, + redirect_url: S.String, + }).pipe( + T.Http({ + method: "PUT", + uri: "/api/domains/v1/forwarding/{domain}", + code: 200, + }), + ), +).annotate({ + identifier: "UpdateDomainDomainForwardingV1Request", +}) as any as S.Schema; + +export interface UpdateDomainDomainNameserversV1Request { + /** Domain name */ + domain: string; + /** First name server */ + ns1: string; + /** Second name server */ + ns2: string; + /** Third name server */ + ns3?: string; + /** Fourth name server */ + ns4?: string; +} +export const UpdateDomainDomainNameserversV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + domain: S.String.pipe(T.Label()), + ns1: S.String, + ns2: S.String, + ns3: S.optional(S.String), + ns4: S.optional(S.String), + }).pipe( + T.Http({ + method: "PUT", + uri: "/api/domains/v1/portfolio/{domain}/nameservers", + code: 200, + }), + ), +).annotate({ + identifier: "UpdateDomainDomainNameserversV1Request", +}) as any as S.Schema; + +/** Set "published" to make the product buyable, "draft" to hide it, or "archived" to retire it. */ +export type UpdateEcommerceAProductV1RequestStatus = + | "draft" + | "published" + | "archived"; +export const UpdateEcommerceAProductV1RequestStatus = /*@__PURE__*/ S.String; + +export interface UpdateEcommerceAProductV1Request { + /** The ID of the store that owns the product. */ + store_id: string; + /** The ID of the product to update. */ + product_id: string; + /** The product name. */ + name?: string; + /** The product description. */ + description?: string; + /** Set "published" to make the product buyable, "draft" to hide it, or "archived" to retire it. */ + status?: UpdateEcommerceAProductV1RequestStatus | (string & {}); +} +export const UpdateEcommerceAProductV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + store_id: S.String.pipe(T.Label()), + product_id: S.String.pipe(T.Label()), + name: S.optional(S.String), + description: S.optional(S.String), + status: S.optional(UpdateEcommerceAProductV1RequestStatus), + }).pipe( + T.Http({ + method: "PATCH", + uri: "/api/ecommerce/v1/stores/{store_id}/products/{product_id}", + code: 200, + }), + ), +).annotate({ + identifier: "UpdateEcommerceAProductV1Request", +}) as any as S.Schema; + +export interface EcommerceV1ProductProductResponseResource { + data?: EcommerceV1ProductProductResource; +} +export const EcommerceV1ProductProductResponseResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + data: S.optional(EcommerceV1ProductProductResource), + }), + ).annotate({ + identifier: "EcommerceV1ProductProductResponseResource", + }) as any as S.Schema; + +export interface UpdateEcommerceProductVariantsInBatchV1RequestVariantsItemPricesItem { + /** Price in the smallest currency unit (e.g. cents). */ + amount: number; + /** Optional sale price in the smallest currency unit; must be lower than amount. */ + sale_amount?: number; + /** ISO 4217 currency code. Defaults to the store's default currency. */ + currency?: string; +} +export const UpdateEcommerceProductVariantsInBatchV1RequestVariantsItemPricesItem = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + amount: S.Number, + sale_amount: S.optional(S.Number), + currency: S.optional(S.String), + }), + ).annotate({ + identifier: + "UpdateEcommerceProductVariantsInBatchV1RequestVariantsItemPricesItem", + }) as any as S.Schema; + +/** The full list of prices for the variant, replacing the existing ones. A free item is amount: 0. */ +export type UpdateEcommerceProductVariantsInBatchV1RequestVariantsItemPricesList = + Array; +export const UpdateEcommerceProductVariantsInBatchV1RequestVariantsItemPricesList = + /*@__PURE__*/ S.Array( + UpdateEcommerceProductVariantsInBatchV1RequestVariantsItemPricesItem, + ) as any as S.Schema; + +export interface UpdateEcommerceProductVariantsInBatchV1RequestVariantsItem { + /** The id of the variant to update. */ + variant_id: string; + /** The variant title. */ + title?: string; + /** Units in stock. */ + inventory_quantity?: number; + /** Whether stock is tracked for this variant. */ + manage_inventory?: boolean; + /** The full list of prices for the variant, replacing the existing ones. A free item is amount: 0. */ + prices?: UpdateEcommerceProductVariantsInBatchV1RequestVariantsItemPricesList; +} +export const UpdateEcommerceProductVariantsInBatchV1RequestVariantsItem = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + variant_id: S.String, + title: S.optional(S.String), + inventory_quantity: S.optional(S.Number), + manage_inventory: S.optional(S.Boolean), + prices: S.optional( + UpdateEcommerceProductVariantsInBatchV1RequestVariantsItemPricesList, + ), + }), + ).annotate({ + identifier: "UpdateEcommerceProductVariantsInBatchV1RequestVariantsItem", + }) as any as S.Schema; + +/** Variants to update in place by id, up to 100. Variants omitted from the list are left untouched. */ +export type UpdateEcommerceProductVariantsInBatchV1RequestVariantsList = + Array; +export const UpdateEcommerceProductVariantsInBatchV1RequestVariantsList = + /*@__PURE__*/ S.Array( + UpdateEcommerceProductVariantsInBatchV1RequestVariantsItem, + ) as any as S.Schema; + +export interface UpdateEcommerceProductVariantsInBatchV1Request { + /** The ID of the store that owns the product. */ + store_id: string; + /** The ID of the product whose variants are being updated. */ + product_id: string; + /** Variants to update in place by id, up to 100. Variants omitted from the list are left untouched. */ + variants: UpdateEcommerceProductVariantsInBatchV1RequestVariantsList; +} +export const UpdateEcommerceProductVariantsInBatchV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + store_id: S.String.pipe(T.Label()), + product_id: S.String.pipe(T.Label()), + variants: UpdateEcommerceProductVariantsInBatchV1RequestVariantsList, + }).pipe( + T.Http({ + method: "PATCH", + uri: "/api/ecommerce/v1/stores/{store_id}/products/{product_id}/variants/batch", + code: 200, + }), + ), + ).annotate({ + identifier: "UpdateEcommerceProductVariantsInBatchV1Request", + }) as any as S.Schema; + +/** The variants. */ +export type EcommerceV1VariantVariantListResponseResourceDataList = + Array; +export const EcommerceV1VariantVariantListResponseResourceDataList = + /*@__PURE__*/ S.Array( + EcommerceV1VariantVariantResource, + ) as any as S.Schema; + +export interface EcommerceV1VariantVariantListResponseResource { + /** The variants. */ + data?: EcommerceV1VariantVariantListResponseResourceDataList; +} +export const EcommerceV1VariantVariantListResponseResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + data: S.optional(EcommerceV1VariantVariantListResponseResourceDataList), + }), + ).annotate({ + identifier: "EcommerceV1VariantVariantListResponseResource", + }) as any as S.Schema; + +export interface UpdateEcommerceSalesChannelV1Request { + /** The ID of the store that owns the sales channel. */ + store_id: string; + /** The ID of the sales channel to update. */ + sales_channel_id: string; + /** Merchant-facing custom name shown in the sales channels list. Pass null to clear it. */ + name?: string | null; + /** Public address where the custom sales channel lives. Pass null to clear it. */ + url?: string | null; +} +export const UpdateEcommerceSalesChannelV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + store_id: S.String.pipe(T.Label()), + sales_channel_id: S.String.pipe(T.Label()), + name: S.optional(S.NullOr(S.String)), + url: S.optional(S.NullOr(S.String)), + }).pipe( + T.Http({ + method: "PATCH", + uri: "/api/ecommerce/v1/stores/{store_id}/sales-channels/{sales_channel_id}", + code: 200, + }), + ), +).annotate({ + identifier: "UpdateEcommerceSalesChannelV1Request", +}) as any as S.Schema; + +/** Sales channel type */ +export type EcommerceV1SalesChannelSalesChannelUpdateResourceSalesChannelType = + | "builder" + | "horizons" + | "tiktok" + | "custom" + | "quick-link" + | "wordpress"; +export const EcommerceV1SalesChannelSalesChannelUpdateResourceSalesChannelType = + /*@__PURE__*/ S.String; + +export interface EcommerceV1SalesChannelSalesChannelUpdateResourceSalesChannel { + /** Sales channel ID */ + id?: string; + /** Sales channel type */ + type?: EcommerceV1SalesChannelSalesChannelUpdateResourceSalesChannelType; + /** Whether this is the primary sales channel. */ + is_primary?: boolean; + /** Whether the sales channel is active. */ + is_active?: boolean; + /** External identifier for the sales channel. */ + external_id?: string | null; + /** Merchant-facing custom name. */ + name?: string | null; + /** Public address where the custom sales channel lives. */ + domain?: string | null; +} +export const EcommerceV1SalesChannelSalesChannelUpdateResourceSalesChannel = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + id: S.optional(S.String), + type: S.optional( + EcommerceV1SalesChannelSalesChannelUpdateResourceSalesChannelType, + ), + is_primary: S.optional(S.Boolean), + is_active: S.optional(S.Boolean), + external_id: S.optional(S.NullOr(S.String)), + name: S.optional(S.NullOr(S.String)), + domain: S.optional(S.NullOr(S.String)), + }), + ).annotate({ + identifier: "EcommerceV1SalesChannelSalesChannelUpdateResourceSalesChannel", + }) as any as S.Schema; + +export interface EcommerceV1SalesChannelSalesChannelUpdateResource { + sales_channel?: EcommerceV1SalesChannelSalesChannelUpdateResourceSalesChannel; +} +export const EcommerceV1SalesChannelSalesChannelUpdateResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + sales_channel: S.optional( + EcommerceV1SalesChannelSalesChannelUpdateResourceSalesChannel, + ), + }), + ).annotate({ + identifier: "EcommerceV1SalesChannelSalesChannelUpdateResource", + }) as any as S.Schema; + +/** Slug of the Hostinger plugin to update to its latest version. */ +export type UpdateHostingHostingerWordPressPluginV1RequestSlug = + | "hostinger" + | "hostinger-ai-assistant" + | "hostinger-affiliate-plugin" + | "hostinger-easy-onboarding" + | "hostinger-reach"; +export const UpdateHostingHostingerWordPressPluginV1RequestSlug = + /*@__PURE__*/ S.String; + +export interface UpdateHostingHostingerWordPressPluginV1Request { + username: string; + /** WordPress installation (software) identifier */ + software: string; + /** Slug of the Hostinger plugin to update to its latest version. */ + slug: UpdateHostingHostingerWordPressPluginV1RequestSlug | (string & {}); +} +export const UpdateHostingHostingerWordPressPluginV1Request = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + username: S.String.pipe(T.Label()), + software: S.String.pipe(T.Label()), + slug: UpdateHostingHostingerWordPressPluginV1RequestSlug, + }).pipe( + T.Http({ + method: "POST", + uri: "/api/hosting/v1/accounts/{username}/wordpress/{software}/plugins/hostinger/update", + code: 200, + }), + ), + ).annotate({ + identifier: "UpdateHostingHostingerWordPressPluginV1Request", + }) as any as S.Schema; + +/** PHP extensions to enable. */ +export type UpdateHostingPHPExtensionsV1RequestEnableList = Array; +export const UpdateHostingPHPExtensionsV1RequestEnableList = + /*@__PURE__*/ S.Array( + S.String, + ) as any as S.Schema; + +/** PHP extensions to disable. */ +export type UpdateHostingPHPExtensionsV1RequestDisableList = Array; +export const UpdateHostingPHPExtensionsV1RequestDisableList = + /*@__PURE__*/ S.Array( + S.String, + ) as any as S.Schema; + +export interface UpdateHostingPHPExtensionsV1Request { + username: string; + /** Domain name */ + domain: string; + /** PHP extensions to enable. */ + enable?: UpdateHostingPHPExtensionsV1RequestEnableList; + /** PHP extensions to disable. */ + disable?: UpdateHostingPHPExtensionsV1RequestDisableList; +} +export const UpdateHostingPHPExtensionsV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + username: S.String.pipe(T.Label()), + domain: S.String.pipe(T.Label()), + enable: S.optional(UpdateHostingPHPExtensionsV1RequestEnableList), + disable: S.optional(UpdateHostingPHPExtensionsV1RequestDisableList), + }).pipe( + T.Http({ + method: "PATCH", + uri: "/api/hosting/v1/accounts/{username}/websites/{domain}/php/extensions", + code: 200, + }), + ), +).annotate({ + identifier: "UpdateHostingPHPExtensionsV1Request", +}) as any as S.Schema; + +export type UpdateHostingPHPOptionsV1RequestOptionsValue = string | number; +export const UpdateHostingPHPOptionsV1RequestOptionsValue = + /*@__PURE__*/ S.Unknown as any as S.Schema; + +/** Map of PHP options to update, keyed by option name. Only include options you want to change. */ +export type UpdateHostingPHPOptionsV1RequestOptionsMap = { + [key: string]: UpdateHostingPHPOptionsV1RequestOptionsValue | undefined; +}; +export const UpdateHostingPHPOptionsV1RequestOptionsMap = + /*@__PURE__*/ S.Record( + S.String, + UpdateHostingPHPOptionsV1RequestOptionsValue, + ) as any as S.Schema; + +export interface UpdateHostingPHPOptionsV1Request { + username: string; + /** Domain name */ + domain: string; + /** Map of PHP options to update, keyed by option name. Only include options you want to change. */ + options: UpdateHostingPHPOptionsV1RequestOptionsMap; +} +export const UpdateHostingPHPOptionsV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + username: S.String.pipe(T.Label()), + domain: S.String.pipe(T.Label()), + options: UpdateHostingPHPOptionsV1RequestOptionsMap, + }).pipe( + T.Http({ + method: "PATCH", + uri: "/api/hosting/v1/accounts/{username}/websites/{domain}/php/options", + code: 200, + }), + ), +).annotate({ + identifier: "UpdateHostingPHPOptionsV1Request", +}) as any as S.Schema; + +export interface UpdateHostingPHPVersionV1Request { + username: string; + /** Domain name */ + domain: string; + /** PHP version to switch the website to. */ + version: string; +} +export const UpdateHostingPHPVersionV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + username: S.String.pipe(T.Label()), + domain: S.String.pipe(T.Label()), + version: S.String, + }).pipe( + T.Http({ + method: "PATCH", + uri: "/api/hosting/v1/accounts/{username}/websites/{domain}/php/version", + code: 200, + }), + ), +).annotate({ + identifier: "UpdateHostingPHPVersionV1Request", +}) as any as S.Schema; + +export interface UpdateHostingWordPressCoreV1Request { + username: string; + /** WordPress installation (software) identifier */ + software: string; + /** Update the minor version only. */ + minor?: boolean; + /** Update to a specific WordPress core version. */ + version?: string | null; +} +export const UpdateHostingWordPressCoreV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + username: S.String.pipe(T.Label()), + software: S.String.pipe(T.Label()), + minor: S.optional(S.Boolean), + version: S.optional(S.NullOr(S.String)), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/hosting/v1/accounts/{username}/wordpress/{software}/update", + code: 200, + }), + ), +).annotate({ + identifier: "UpdateHostingWordPressCoreV1Request", +}) as any as S.Schema; + +/** Slugs of the installed plugins to update to their latest version. */ +export type UpdateHostingWordPressPluginsV1RequestPluginsList = Array; +export const UpdateHostingWordPressPluginsV1RequestPluginsList = + /*@__PURE__*/ S.Array( + S.String, + ) as any as S.Schema; + +export interface UpdateHostingWordPressPluginsV1Request { + username: string; + /** WordPress installation (software) identifier */ + software: string; + /** Slugs of the installed plugins to update to their latest version. */ + plugins: UpdateHostingWordPressPluginsV1RequestPluginsList; +} +export const UpdateHostingWordPressPluginsV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + username: S.String.pipe(T.Label()), + software: S.String.pipe(T.Label()), + plugins: UpdateHostingWordPressPluginsV1RequestPluginsList, + }).pipe( + T.Http({ + method: "POST", + uri: "/api/hosting/v1/accounts/{username}/wordpress/{software}/plugins/update", + code: 200, + }), + ), +).annotate({ + identifier: "UpdateHostingWordPressPluginsV1Request", +}) as any as S.Schema; + +/** Slugs of the installed themes to update to their latest version. */ +export type UpdateHostingWordPressThemesV1RequestThemesList = Array; +export const UpdateHostingWordPressThemesV1RequestThemesList = + /*@__PURE__*/ S.Array( + S.String, + ) as any as S.Schema; + +export interface UpdateHostingWordPressThemesV1Request { + username: string; + /** WordPress installation (software) identifier */ + software: string; + /** Slugs of the installed themes to update to their latest version. */ + themes: UpdateHostingWordPressThemesV1RequestThemesList; +} +export const UpdateHostingWordPressThemesV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + username: S.String.pipe(T.Label()), + software: S.String.pipe(T.Label()), + themes: UpdateHostingWordPressThemesV1RequestThemesList, + }).pipe( + T.Http({ + method: "POST", + uri: "/api/hosting/v1/accounts/{username}/wordpress/{software}/themes/update", + code: 200, + }), + ), +).annotate({ + identifier: "UpdateHostingWordPressThemesV1Request", +}) as any as S.Schema; + +export interface UpdateMailAutoreplyV1Request { + /** Autoreply resource ID */ + autoreplyId: string; + /** Subject of the automatic reply */ + subject: string; + /** Body of the automatic reply */ + body: string; + /** Sender display name used for the reply */ + display_name?: string | null; + /** When the autoreply becomes active. Defaults to now. */ + starts_at?: string | null; + /** When the autoreply stops. Omit for an indefinite autoreply. */ + ends_at?: string | null; +} +export const UpdateMailAutoreplyV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + autoreplyId: S.String.pipe(T.Label()), + subject: S.String, + body: S.String, + display_name: S.optional(S.NullOr(S.String)), + starts_at: S.optional(S.NullOr(S.String)), + ends_at: S.optional(S.NullOr(S.String)), + }).pipe( + T.Http({ + method: "PUT", + uri: "/api/mail/v1/autoreplies/{autoreplyId}", + code: 200, + }), + ), +).annotate({ + identifier: "UpdateMailAutoreplyV1Request", +}) as any as S.Schema; + +export type UpdateMailWebhookV1RequestEventsItem = "message.received"; +export const UpdateMailWebhookV1RequestEventsItem = /*@__PURE__*/ S.String; + +/** Replaces the full list of subscribed events */ +export type UpdateMailWebhookV1RequestEventsList = Array< + UpdateMailWebhookV1RequestEventsItem | (string & {}) +>; +export const UpdateMailWebhookV1RequestEventsList = /*@__PURE__*/ S.Array( + UpdateMailWebhookV1RequestEventsItem, +) as any as S.Schema; + +/** New status for the webhook */ +export type UpdateMailWebhookV1RequestStatus = "active" | "disabled" | "paused"; +export const UpdateMailWebhookV1RequestStatus = /*@__PURE__*/ S.String; + +export interface UpdateMailWebhookV1Request { + /** Webhook ID (returned when the webhook was created) */ + webhookId: string; + /** New human-readable name for the webhook */ + name?: string; + /** New description, or null to clear it */ + description?: string | null; + /** Replaces the full list of subscribed events */ + events?: UpdateMailWebhookV1RequestEventsList; + /** New status for the webhook */ + status?: UpdateMailWebhookV1RequestStatus | (string & {}); + /** New URL to deliver events to */ + url?: string; +} +export const UpdateMailWebhookV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + webhookId: S.String.pipe(T.Label()), + name: S.optional(S.String), + description: S.optional(S.NullOr(S.String)), + events: S.optional(UpdateMailWebhookV1RequestEventsList), + status: S.optional(UpdateMailWebhookV1RequestStatus), + url: S.optional(S.String), + }).pipe( + T.Http({ + method: "PATCH", + uri: "/api/mail/v1/webhooks/{webhookId}", + code: 200, + }), + ), +).annotate({ + identifier: "UpdateMailWebhookV1Request", +}) as any as S.Schema; + +export interface UpdateReachAContactFieldV1RequestOptionsItem { + uuid?: string | null; + label: string; +} +export const UpdateReachAContactFieldV1RequestOptionsItem = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + uuid: S.optional(S.NullOr(S.String)), + label: S.String, + }), + ).annotate({ + identifier: "UpdateReachAContactFieldV1RequestOptionsItem", + }) as any as S.Schema; + +/** Replaces the option set when provided. Entries carrying a uuid are kept and relabelled, entries without one are created, and any existing option missing from the list is deleted along with the values contacts hold for it. */ +export type UpdateReachAContactFieldV1RequestOptionsList = + Array; +export const UpdateReachAContactFieldV1RequestOptionsList = + /*@__PURE__*/ S.Array( + UpdateReachAContactFieldV1RequestOptionsItem, + ) as any as S.Schema; + +export interface UpdateReachAContactFieldV1Request { + /** Profile uuid parameter */ + profileUuid: string; + /** Contact field uuid parameter */ + fieldUuid: string; + label: string; + /** Replaces the option set when provided. Entries carrying a uuid are kept and relabelled, entries without one are created, and any existing option missing from the list is deleted along with the values contacts hold for it. */ + options?: UpdateReachAContactFieldV1RequestOptionsList | null; +} +export const UpdateReachAContactFieldV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + profileUuid: S.String.pipe(T.Label()), + fieldUuid: S.String.pipe(T.Label()), + label: S.String, + options: S.optional(S.NullOr(UpdateReachAContactFieldV1RequestOptionsList)), + }).pipe( + T.Http({ + method: "PATCH", + uri: "/api/reach/v1/profiles/{profileUuid}/contacts/fields/{fieldUuid}", + code: 200, + }), + ), +).annotate({ + identifier: "UpdateReachAContactFieldV1Request", +}) as any as S.Schema; + +export type UpdateReachAContactV1RequestSubscriptionStatus = + | "subscribed" + | "unsubscribed" + | "confirmed" + | "pending"; +export const UpdateReachAContactV1RequestSubscriptionStatus = + /*@__PURE__*/ S.String; + +/** For the choice field types */ +export type UpdateReachAContactV1RequestFieldsItemSelectedOptionUuidsList = + Array; +export const UpdateReachAContactV1RequestFieldsItemSelectedOptionUuidsList = + /*@__PURE__*/ S.Array( + S.String, + ) as any as S.Schema; + +export interface UpdateReachAContactV1RequestFieldsItem { + uuid: string; + /** For the scalar field types */ + value?: string | null; + /** For the choice field types */ + selected_option_uuids?: UpdateReachAContactV1RequestFieldsItemSelectedOptionUuidsList; +} +export const UpdateReachAContactV1RequestFieldsItem = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + uuid: S.String, + value: S.optional(S.NullOr(S.String)), + selected_option_uuids: S.optional( + UpdateReachAContactV1RequestFieldsItemSelectedOptionUuidsList, + ), + }), +).annotate({ + identifier: "UpdateReachAContactV1RequestFieldsItem", +}) as any as S.Schema; + +/** Set custom field values. Omit to leave untouched, send an empty array to clear them all. */ +export type UpdateReachAContactV1RequestFieldsList = + Array; +export const UpdateReachAContactV1RequestFieldsList = /*@__PURE__*/ S.Array( + UpdateReachAContactV1RequestFieldsItem, +) as any as S.Schema; + +export interface UpdateReachAContactV1Request { + /** Profile uuid parameter */ + profileUuid: string; + /** Contact uuid parameter */ + contactUuid: string; + email?: string | null; + name?: string | null; + surname?: string | null; + /** Phone number in E.164 format (leading "+" then 7-15 digits) */ + phone?: string | null; + subscription_status?: + | UpdateReachAContactV1RequestSubscriptionStatus + | (string & {}) + | null; + note?: string | null; + /** Set custom field values. Omit to leave untouched, send an empty array to clear them all. */ + fields?: UpdateReachAContactV1RequestFieldsList; +} +export const UpdateReachAContactV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + profileUuid: S.String.pipe(T.Label()), + contactUuid: S.String.pipe(T.Label()), + email: S.optional(S.NullOr(S.String)), + name: S.optional(S.NullOr(S.String)), + surname: S.optional(S.NullOr(S.String)), + phone: S.optional(S.NullOr(S.String)), + subscription_status: S.optional( + S.NullOr(UpdateReachAContactV1RequestSubscriptionStatus), + ), + note: S.optional(S.NullOr(S.String)), + fields: S.optional(UpdateReachAContactV1RequestFieldsList), + }).pipe( + T.Http({ + method: "PATCH", + uri: "/api/reach/v1/profiles/{profileUuid}/contacts/{contactUuid}", + code: 200, + }), + ), +).annotate({ + identifier: "UpdateReachAContactV1Request", +}) as any as S.Schema; + +export type ReachV1ContactsProfileContactUpdateResourceSubscriptionStatus = + | "subscribed" + | "unsubscribed" + | "confirmed" + | "pending"; +export const ReachV1ContactsProfileContactUpdateResourceSubscriptionStatus = + /*@__PURE__*/ S.String; + +export interface ReachV1ContactsProfileContactUpdateResource { + uuid?: string; + name?: string | null; + surname?: string | null; + email?: string; + phone?: string | null; + subscription_status?: ReachV1ContactsProfileContactUpdateResourceSubscriptionStatus; + subscribed_at?: string | null; + unsubscribed_at?: string | null; +} +export const ReachV1ContactsProfileContactUpdateResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + uuid: S.optional(S.String), + name: S.optional(S.NullOr(S.String)), + surname: S.optional(S.NullOr(S.String)), + email: S.optional(S.String), + phone: S.optional(S.NullOr(S.String)), + subscription_status: S.optional( + ReachV1ContactsProfileContactUpdateResourceSubscriptionStatus, + ), + subscribed_at: S.optional(S.NullOr(S.String)), + unsubscribed_at: S.optional(S.NullOr(S.String)), + }), + ).annotate({ + identifier: "ReachV1ContactsProfileContactUpdateResource", + }) as any as S.Schema; + +export type UpdateReachAProfileSegmentV1RequestConditionsItemOperator = + | "equals" + | "not_equals" + | "contains" + | "not_contains" + | "gte" + | "lte" + | "exists" + | "within_last_days" + | "not_within_last_days" + | "older_than_days" + | "processed" + | "not_processed" + | "delivered" + | "not_delivered" + | "dropped" + | "not_dropped" + | "bounced" + | "not_bounced" + | "soft_bounced" + | "not_soft_bounced" + | "opened" + | "not_opened" + | "clicked" + | "not_clicked" + | "unsubscribed" + | "not_unsubscribed"; +export const UpdateReachAProfileSegmentV1RequestConditionsItemOperator = + /*@__PURE__*/ S.String; + +export interface UpdateReachAProfileSegmentV1RequestConditionsItem { + /** A built-in contact attribute, or `cf:{fieldUuid}` to target a custom contact field. Custom fields are addressed by field UUID; their slug is not accepted. Built-in attributes: `email`, `note`, `domain`, `source`, `opt_in_method`, `subscription_status`, `subscribed_at`, `unsubscribed_at`, `created_at`, `tag`, `campaigns`, `processed`, `opened`, `clicked`, `delivered`, `bounced`, `soft_bounced`, `dropped`. Which operators are accepted depends on the attribute. */ + attribute: string; + operator: + | UpdateReachAProfileSegmentV1RequestConditionsItemOperator + | (string & {}); + /** Always a string, including for numeric and date comparisons */ + value: string; +} +export const UpdateReachAProfileSegmentV1RequestConditionsItem = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + attribute: S.String, + operator: UpdateReachAProfileSegmentV1RequestConditionsItemOperator, + value: S.String, + }), + ).annotate({ + identifier: "UpdateReachAProfileSegmentV1RequestConditionsItem", + }) as any as S.Schema; + +/** Replaces the existing conditions entirely. Omit to keep the current ones. */ +export type UpdateReachAProfileSegmentV1RequestConditionsList = + Array; +export const UpdateReachAProfileSegmentV1RequestConditionsList = + /*@__PURE__*/ S.Array( + UpdateReachAProfileSegmentV1RequestConditionsItem, + ) as any as S.Schema; + +/** How to combine multiple conditions. Required when conditions are given. */ +export type UpdateReachAProfileSegmentV1RequestLogic = "AND" | "OR"; +export const UpdateReachAProfileSegmentV1RequestLogic = /*@__PURE__*/ S.String; + +export interface UpdateReachAProfileSegmentV1Request { + /** Profile uuid parameter */ + profileUuid: string; + /** Segment uuid parameter */ + segmentUuid: string; + name: string; + /** Replaces the existing conditions entirely. Omit to keep the current ones. */ + conditions?: UpdateReachAProfileSegmentV1RequestConditionsList; + /** How to combine multiple conditions. Required when conditions are given. */ + logic?: UpdateReachAProfileSegmentV1RequestLogic | (string & {}); +} +export const UpdateReachAProfileSegmentV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + profileUuid: S.String.pipe(T.Label()), + segmentUuid: S.String.pipe(T.Label()), + name: S.String, + conditions: S.optional(UpdateReachAProfileSegmentV1RequestConditionsList), + logic: S.optional(UpdateReachAProfileSegmentV1RequestLogic), + }).pipe( + T.Http({ + method: "PUT", + uri: "/api/reach/v1/profiles/{profileUuid}/segmentation/segments/{segmentUuid}", + code: 200, + }), + ), +).annotate({ + identifier: "UpdateReachAProfileSegmentV1Request", +}) as any as S.Schema; + +export type UpdateVPSFirewallRuleV1RequestProtocol = + | "TCP" + | "UDP" + | "ICMP" + | "GRE" + | "any" + | "ESP" + | "AH" + | "ICMPv6" + | "SSH" + | "HTTP" + | "HTTPS" + | "MySQL" + | "PostgreSQL"; +export const UpdateVPSFirewallRuleV1RequestProtocol = /*@__PURE__*/ S.String; + +export type UpdateVPSFirewallRuleV1RequestSource = "any" | "custom"; +export const UpdateVPSFirewallRuleV1RequestSource = /*@__PURE__*/ S.String; + +export interface UpdateVPSFirewallRuleV1Request { + /** Firewall ID */ + firewallId: number; + /** Firewall Rule ID */ + ruleId: number; + protocol: UpdateVPSFirewallRuleV1RequestProtocol | (string & {}); + /** Port or port range, ex: 1024:2048 */ + port: string; + source: UpdateVPSFirewallRuleV1RequestSource | (string & {}); + /** IP range, CIDR, single IP or `any` */ + source_detail: string; +} +export const UpdateVPSFirewallRuleV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + firewallId: S.Number.pipe(T.Label()), + ruleId: S.Number.pipe(T.Label()), + protocol: UpdateVPSFirewallRuleV1RequestProtocol, + port: S.String, + source: UpdateVPSFirewallRuleV1RequestSource, + source_detail: S.String, + }).pipe( + T.Http({ + method: "PUT", + uri: "/api/vps/v1/firewall/{firewallId}/rules/{ruleId}", + code: 200, + }), + ), +).annotate({ + identifier: "UpdateVPSFirewallRuleV1Request", +}) as any as S.Schema; + +export interface UpdateVPSProjectV1Request { + /** Virtual Machine ID */ + virtualMachineId: number; + /** Docker Compose project name using alphanumeric characters, dashes, and underscores only */ + projectName: string; +} +export const UpdateVPSProjectV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + virtualMachineId: S.Number.pipe(T.Label()), + projectName: S.String.pipe(T.Label()), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/vps/v1/virtual-machines/{virtualMachineId}/docker/{projectName}/update", + code: 200, + }), + ), +).annotate({ + identifier: "UpdateVPSProjectV1Request", +}) as any as S.Schema; + +export type ValidateDNSDNSRecordsV1RequestZoneItemRecordsItem = + UpdateDNSDNSRecordsV1RequestZoneItemRecordsItem; +export const ValidateDNSDNSRecordsV1RequestZoneItemRecordsItem = + UpdateDNSDNSRecordsV1RequestZoneItemRecordsItem; + +/** Records assigned to the name */ +export type ValidateDNSDNSRecordsV1RequestZoneItemRecordsList = + Array; +export const ValidateDNSDNSRecordsV1RequestZoneItemRecordsList = + /*@__PURE__*/ S.Array( + UpdateDNSDNSRecordsV1RequestZoneItemRecordsItem, + ) as any as S.Schema; + +/** Type of the record */ +export type ValidateDNSDNSRecordsV1RequestZoneItemType = + | "A" + | "AAAA" + | "CNAME" + | "ALIAS" + | "MX" + | "TXT" + | "NS" + | "SOA" + | "SRV" + | "CAA"; +export const ValidateDNSDNSRecordsV1RequestZoneItemType = + /*@__PURE__*/ S.String; + +export interface ValidateDNSDNSRecordsV1RequestZoneItem { + /** Name of the record (use `@` for wildcard name) */ + name: string; + /** Records assigned to the name */ + records: ValidateDNSDNSRecordsV1RequestZoneItemRecordsList; + /** TTL (Time-To-Live) of the record */ + ttl?: number; + /** Type of the record */ + type: ValidateDNSDNSRecordsV1RequestZoneItemType | (string & {}); +} +export const ValidateDNSDNSRecordsV1RequestZoneItem = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + name: S.String, + records: ValidateDNSDNSRecordsV1RequestZoneItemRecordsList, + ttl: S.optional(S.Number), + type: ValidateDNSDNSRecordsV1RequestZoneItemType, + }), +).annotate({ + identifier: "ValidateDNSDNSRecordsV1RequestZoneItem", +}) as any as S.Schema; + +export type ValidateDNSDNSRecordsV1RequestZoneList = + Array; +export const ValidateDNSDNSRecordsV1RequestZoneList = /*@__PURE__*/ S.Array( + ValidateDNSDNSRecordsV1RequestZoneItem, +) as any as S.Schema; + +export interface ValidateDNSDNSRecordsV1Request { + /** Domain name */ + domain: string; + /** If `true`, resource records (RRs) matching name and type will be deleted and new RRs will be created, otherwise resource records' ttl's are updated and new records are appended. If no matching RRs are found, they are created. */ + overwrite?: boolean; + zone: ValidateDNSDNSRecordsV1RequestZoneList; +} +export const ValidateDNSDNSRecordsV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + domain: S.String.pipe(T.Label()), + overwrite: S.optional(S.Boolean), + zone: ValidateDNSDNSRecordsV1RequestZoneList, + }).pipe( + T.Http({ + method: "POST", + uri: "/api/dns/v1/zones/{domain}/validate", + code: 200, + }), + ), +).annotate({ + identifier: "ValidateDNSDNSRecordsV1Request", +}) as any as S.Schema; + +export interface VerifyHostingDomainOwnershipV1Request { + /** Domain to verify ownership for */ + domain: string; +} +export const VerifyHostingDomainOwnershipV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + domain: S.String, + }).pipe( + T.Http({ + method: "POST", + uri: "/api/hosting/v1/domains/verify-ownership", + code: 200, + }), + ), +).annotate({ + identifier: "VerifyHostingDomainOwnershipV1Request", +}) as any as S.Schema; + +export interface HostingV1DomainsDomainAccessResource { + /** Domain name */ + domain?: string; + /** Whether domain is accessible */ + is_accessible?: boolean; + /** TXT record for verification */ + txt_to_verify?: string; +} +export const HostingV1DomainsDomainAccessResource = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + domain: S.optional(S.String), + is_accessible: S.optional(S.Boolean), + txt_to_verify: S.optional(S.String), + }), +).annotate({ + identifier: "HostingV1DomainsDomainAccessResource", +}) as any as S.Schema; + +export interface VPSCreatePostInstallScriptV1Request { + /** Name of the script */ + name: string; + /** Content of the script */ + content: string; +} +export const VPSCreatePostInstallScriptV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + name: S.String, + content: S.String, + }).pipe( + T.Http({ + method: "POST", + uri: "/api/vps/v1/post-install-scripts", + code: 200, + }), + ), +).annotate({ + identifier: "VPSCreatePostInstallScriptV1Request", +}) as any as S.Schema; + +export interface VPSV1PostInstallScriptPostInstallScriptResource { + /** Post-install script ID */ + id?: number; + /** Name of the script */ + name?: string; + /** Content of the script */ + content?: string; + created_at?: string; + updated_at?: string; +} +export const VPSV1PostInstallScriptPostInstallScriptResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + id: S.optional(S.Number), + name: S.optional(S.String), + content: S.optional(S.String), + created_at: S.optional(S.String), + updated_at: S.optional(S.String), + }), + ).annotate({ + identifier: "VPSV1PostInstallScriptPostInstallScriptResource", + }) as any as S.Schema; + +export interface VPSDeletePostInstallScriptV1Request { + /** Post-install script ID */ + postInstallScriptId: number; +} +export const VPSDeletePostInstallScriptV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + postInstallScriptId: S.Number.pipe(T.Label()), + }).pipe( + T.Http({ + method: "DELETE", + uri: "/api/vps/v1/post-install-scripts/{postInstallScriptId}", + code: 200, + }), + ), +).annotate({ + identifier: "VPSDeletePostInstallScriptV1Request", +}) as any as S.Schema; + +export interface VPSGetDataCenterListV1Request {} +export const VPSGetDataCenterListV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({}).pipe( + T.Http({ method: "GET", uri: "/api/vps/v1/data-centers", code: 200 }), + ), +).annotate({ + identifier: "VPSGetDataCenterListV1Request", +}) as any as S.Schema; + +export interface VPSV1DataCenterDataCenterResource { + /** Data center ID */ + id?: number; + /** Data center name */ + name?: string | null; + /** Data center location country (two letter code) */ + location?: string | null; + /** Data center location city */ + city?: string | null; + /** Data center location continent */ + continent?: string | null; +} +export const VPSV1DataCenterDataCenterResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + id: S.optional(S.Number), + name: S.optional(S.NullOr(S.String)), + location: S.optional(S.NullOr(S.String)), + city: S.optional(S.NullOr(S.String)), + continent: S.optional(S.NullOr(S.String)), + }), +).annotate({ + identifier: "VPSV1DataCenterDataCenterResource", +}) as any as S.Schema; + +/** Array of [`VPS.V1.DataCenter.DataCenterResource`](#model/vpsv1datacenterdatacenterresource) */ +export type VPSV1DataCenterDataCenterCollection = + Array; +export const VPSV1DataCenterDataCenterCollection = /*@__PURE__*/ S.Array( + VPSV1DataCenterDataCenterResource, +) as any as S.Schema; + +export type VPSGetDataCenterListV1Response = + VPSV1DataCenterDataCenterCollection; +export const VPSGetDataCenterListV1Response = /*@__PURE__*/ S.suspend(() => + VPSV1DataCenterDataCenterCollection.pipe(T.RawResponseRoot()), +).annotate({ + identifier: "VPSGetDataCenterListV1Response", +}) as any as S.Schema; + +export interface VPSGetFirewallListV1Request { + /** Page number */ + page?: number; +} +export const VPSGetFirewallListV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + page: S.optional(S.Number.pipe(T.Query())), + }).pipe(T.Http({ method: "GET", uri: "/api/vps/v1/firewall", code: 200 })), +).annotate({ + identifier: "VPSGetFirewallListV1Request", +}) as any as S.Schema; + +/** Array of [`VPS.V1.Firewall.FirewallResource`](#model/vpsv1firewallfirewallresource) */ +export type VPSV1FirewallFirewallCollection = + Array; +export const VPSV1FirewallFirewallCollection = /*@__PURE__*/ S.Array( + VPSV1FirewallFirewallResource, +) as any as S.Schema; + +export interface VPSGetFirewallListV1Response { + data?: VPSV1FirewallFirewallCollection; + meta?: CommonSchemaPaginationMetaSchema; +} +export const VPSGetFirewallListV1Response = /*@__PURE__*/ S.suspend(() => + S.Struct({ + data: S.optional(VPSV1FirewallFirewallCollection), + meta: S.optional(CommonSchemaPaginationMetaSchema), + }), +).annotate({ + identifier: "VPSGetFirewallListV1Response", +}) as any as S.Schema; + +export interface VPSGetPostInstallScriptsV1Request { + /** Page number */ + page?: number; +} +export const VPSGetPostInstallScriptsV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + page: S.optional(S.Number.pipe(T.Query())), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/vps/v1/post-install-scripts", + code: 200, + }), + ), +).annotate({ + identifier: "VPSGetPostInstallScriptsV1Request", +}) as any as S.Schema; + +/** Array of [`VPS.V1.PostInstallScript.PostInstallScriptResource`](#model/vpsv1postinstallscriptpostinstallscriptresource) */ +export type VPSV1PostInstallScriptPostInstallScriptCollection = + Array; +export const VPSV1PostInstallScriptPostInstallScriptCollection = + /*@__PURE__*/ S.Array( + VPSV1PostInstallScriptPostInstallScriptResource, + ) as any as S.Schema; + +export interface VPSGetPostInstallScriptsV1Response { + data?: VPSV1PostInstallScriptPostInstallScriptCollection; + meta?: CommonSchemaPaginationMetaSchema; +} +export const VPSGetPostInstallScriptsV1Response = /*@__PURE__*/ S.suspend(() => + S.Struct({ + data: S.optional(VPSV1PostInstallScriptPostInstallScriptCollection), + meta: S.optional(CommonSchemaPaginationMetaSchema), + }), +).annotate({ + identifier: "VPSGetPostInstallScriptsV1Response", +}) as any as S.Schema; + +export interface VPSGetPostInstallScriptV1Request { + /** Post-install script ID */ + postInstallScriptId: number; +} +export const VPSGetPostInstallScriptV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + postInstallScriptId: S.Number.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/vps/v1/post-install-scripts/{postInstallScriptId}", + code: 200, + }), + ), +).annotate({ + identifier: "VPSGetPostInstallScriptV1Request", +}) as any as S.Schema; + +export interface VPSGetProjectListV1Request { + /** Virtual Machine ID */ + virtualMachineId: number; +} +export const VPSGetProjectListV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + virtualMachineId: S.Number.pipe(T.Label()), + }).pipe( + T.Http({ + method: "GET", + uri: "/api/vps/v1/virtual-machines/{virtualMachineId}/docker", + code: 200, + }), + ), +).annotate({ + identifier: "VPSGetProjectListV1Request", +}) as any as S.Schema; + +/** Derived project state parsed from the raw docker compose status */ +export type VPSV1DockerManagerProjectResourceState = + | "running" + | "stopped" + | "created" + | "mixed" + | "unknown"; +export const VPSV1DockerManagerProjectResourceState = /*@__PURE__*/ S.String; + +export interface VPSV1DockerManagerProjectResource { + /** Docker Compose project name (derived from directory name or compose file) */ + name?: string; + /** Raw output from docker compose ps command showing service count and states */ + status?: string; + /** Derived project state parsed from the raw docker compose status */ + state?: VPSV1DockerManagerProjectResourceState; + /** Full filesystem path to the docker-compose.yml file */ + path?: string; + containers?: VPSV1DockerManagerContainerCollection; +} +export const VPSV1DockerManagerProjectResource = /*@__PURE__*/ S.suspend(() => + S.Struct({ + name: S.optional(S.String), + status: S.optional(S.String), + state: S.optional(VPSV1DockerManagerProjectResourceState), + path: S.optional(S.String), + containers: S.optional(VPSV1DockerManagerContainerCollection), + }), +).annotate({ + identifier: "VPSV1DockerManagerProjectResource", +}) as any as S.Schema; + +/** Array of [`VPS.V1.DockerManager.ProjectResource`](#model/vpsv1dockermanagerprojectresource) */ +export type VPSV1DockerManagerProjectCollection = + Array; +export const VPSV1DockerManagerProjectCollection = /*@__PURE__*/ S.Array( + VPSV1DockerManagerProjectResource, +) as any as S.Schema; + +export type VPSGetProjectListV1Response = VPSV1DockerManagerProjectCollection; +export const VPSGetProjectListV1Response = /*@__PURE__*/ S.suspend(() => + VPSV1DockerManagerProjectCollection.pipe(T.RawResponseRoot()), +).annotate({ + identifier: "VPSGetProjectListV1Response", +}) as any as S.Schema; + +/** Use SSH key */ +export interface VPSV1VirtualMachineSetupRequestPublicKey { + /** Name of the SSH key */ + name?: string; + /** Contents of the SSH key */ + key?: string; +} +export const VPSV1VirtualMachineSetupRequestPublicKey = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + name: S.optional(S.String), + key: S.optional(S.String), + }), +).annotate({ + identifier: "VPSV1VirtualMachineSetupRequestPublicKey", +}) as any as S.Schema; + +export interface VPSV1VirtualMachineSetupRequest { + /** Template ID */ + template_id: number; + /** Data center ID */ + data_center_id: number; + /** Post-install script ID */ + post_install_script_id?: number; + /** Password for the virtual machine. If not provided, random password will be generated. Password will not be shown in the response. */ + password?: string | Redacted.Redacted; + /** Override default hostname of the virtual machine */ + hostname?: string; + /** Install Monarx malware scanner (if supported) */ + install_monarx?: boolean; + /** Enable weekly backup schedule */ + enable_backups?: boolean; + /** Name server 1 */ + ns1?: string; + /** Name server 2 */ + ns2?: string; + /** Use SSH key */ + public_key?: VPSV1VirtualMachineSetupRequestPublicKey; +} +export const VPSV1VirtualMachineSetupRequest = /*@__PURE__*/ S.suspend(() => + S.Struct({ + template_id: S.Number, + data_center_id: S.Number, + post_install_script_id: S.optional(S.Number), + password: S.optional(S.String.pipe(T.SensitiveValue({}))), + hostname: S.optional(S.String), + install_monarx: S.optional(S.Boolean), + enable_backups: S.optional(S.Boolean), + ns1: S.optional(S.String), + ns2: S.optional(S.String), + public_key: S.optional(VPSV1VirtualMachineSetupRequestPublicKey), + }), +).annotate({ + identifier: "VPSV1VirtualMachineSetupRequest", +}) as any as S.Schema; + +/** Discount coupon codes */ +export type VPSPurchaseNewVirtualMachineV1RequestCouponsList = Array; +export const VPSPurchaseNewVirtualMachineV1RequestCouponsList = + /*@__PURE__*/ S.Array( + S.Unknown, + ) as any as S.Schema; + +export interface VPSPurchaseNewVirtualMachineV1Request { + /** Catalog price item ID */ + item_id: string; + /** Payment method ID, default will be used if not provided */ + payment_method_id?: number; + setup: VPSV1VirtualMachineSetupRequest; + /** Discount coupon codes */ + coupons?: VPSPurchaseNewVirtualMachineV1RequestCouponsList; +} +export const VPSPurchaseNewVirtualMachineV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + item_id: S.String, + payment_method_id: S.optional(S.Number), + setup: VPSV1VirtualMachineSetupRequest, + coupons: S.optional(VPSPurchaseNewVirtualMachineV1RequestCouponsList), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/vps/v1/virtual-machines", + code: 200, + }), + ), +).annotate({ + identifier: "VPSPurchaseNewVirtualMachineV1Request", +}) as any as S.Schema; + +export interface BillingV1OrderVirtualMachineOrderResource { + order?: BillingV1OrderOrderResource; + virtual_machine?: VPSV1VirtualMachineVirtualMachineResource; +} +export const BillingV1OrderVirtualMachineOrderResource = + /*@__PURE__*/ S.suspend(() => + S.Struct({ + order: S.optional(BillingV1OrderOrderResource), + virtual_machine: S.optional(VPSV1VirtualMachineVirtualMachineResource), + }), + ).annotate({ + identifier: "BillingV1OrderVirtualMachineOrderResource", + }) as any as S.Schema; + +/** Use SSH key */ +export type VPSSetupPurchasedVirtualMachineV1RequestPublicKey = + VPSV1VirtualMachineSetupRequestPublicKey; +export const VPSSetupPurchasedVirtualMachineV1RequestPublicKey = + VPSV1VirtualMachineSetupRequestPublicKey; + +export interface VPSSetupPurchasedVirtualMachineV1Request { + /** Virtual Machine ID */ + virtualMachineId: number; + /** Template ID */ + template_id: number; + /** Data center ID */ + data_center_id: number; + /** Post-install script ID */ + post_install_script_id?: number; + /** Password for the virtual machine. If not provided, random password will be generated. Password will not be shown in the response. */ + password?: string | Redacted.Redacted; + /** Override default hostname of the virtual machine */ + hostname?: string; + /** Install Monarx malware scanner (if supported) */ + install_monarx?: boolean; + /** Enable weekly backup schedule */ + enable_backups?: boolean; + /** Name server 1 */ + ns1?: string; + /** Name server 2 */ + ns2?: string; + /** Use SSH key */ + public_key?: VPSV1VirtualMachineSetupRequestPublicKey; +} +export const VPSSetupPurchasedVirtualMachineV1Request = /*@__PURE__*/ S.suspend( + () => + S.Struct({ + virtualMachineId: S.Number.pipe(T.Label()), + template_id: S.Number, + data_center_id: S.Number, + post_install_script_id: S.optional(S.Number), + password: S.optional(S.String.pipe(T.SensitiveValue({}))), + hostname: S.optional(S.String), + install_monarx: S.optional(S.Boolean), + enable_backups: S.optional(S.Boolean), + ns1: S.optional(S.String), + ns2: S.optional(S.String), + public_key: S.optional(VPSV1VirtualMachineSetupRequestPublicKey), + }).pipe( + T.Http({ + method: "POST", + uri: "/api/vps/v1/virtual-machines/{virtualMachineId}/setup", + code: 200, + }), + ), +).annotate({ + identifier: "VPSSetupPurchasedVirtualMachineV1Request", +}) as any as S.Schema; + +export interface VPSUpdatePostInstallScriptV1Request { + /** Post-install script ID */ + postInstallScriptId: number; + /** Name of the script */ + name: string; + /** Content of the script */ + content: string; +} +export const VPSUpdatePostInstallScriptV1Request = /*@__PURE__*/ S.suspend(() => + S.Struct({ + postInstallScriptId: S.Number.pipe(T.Label()), + name: S.String, + content: S.String, + }).pipe( + T.Http({ + method: "PUT", + uri: "/api/vps/v1/post-install-scripts/{postInstallScriptId}", + code: 200, + }), + ), +).annotate({ + identifier: "VPSUpdatePostInstallScriptV1Request", +}) as any as S.Schema; + +export type ActivateHostingWordPressPluginV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Activate WordPress plugin Activate an installed plugin on a WordPress installation. Provide the WordPress installation (software) identifier in the path. It can be obtained from GET /api/hosting/v1/wordpress/installations (the `id` field). This operation is asynchronous: a successful response only means the activation job has been queued. */ +export const activateHostingWordPressPluginV1: API.OperationMethod< + ActivateHostingWordPressPluginV1Request, + CommonSuccessEmptyResource, + ActivateHostingWordPressPluginV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ActivateHostingWordPressPluginV1Request, + output: CommonSuccessEmptyResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ActivateHostingWordPressThemeV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Activate WordPress theme Activate an installed theme on a WordPress installation. Provide the WordPress installation (software) identifier in the path. It can be obtained from GET /api/hosting/v1/wordpress/installations (the `id` field). This operation is asynchronous: a successful response only means the activation job has been queued. */ +export const activateHostingWordPressThemeV1: API.OperationMethod< + ActivateHostingWordPressThemeV1Request, + CommonSuccessEmptyResource, + ActivateHostingWordPressThemeV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ActivateHostingWordPressThemeV1Request, + output: CommonSuccessEmptyResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ActivateVPSFirewallV1Error = UnprocessableEntity | HostingerOpError; +/** Activate firewall Activate a firewall for a specified virtual machine. Only one firewall can be active for a virtual machine at a time. Use this endpoint to apply firewall rules to VPS instances. */ +export const activateVPSFirewallV1: API.OperationMethod< + ActivateVPSFirewallV1Request, + VPSV1ActionActionResource, + ActivateVPSFirewallV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ActivateVPSFirewallV1Request, + output: VPSV1ActionActionResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type AgencyHostingBuildWebsiteNodeJSAssetsV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Build website NodeJS assets Builds and deploys a Node.js application for an Agency Plan website from an already-uploaded archive. Upload the archive to file browser first, then provide its relative path from document root in this request. Website contents are overwritten by the build result, which is deployed to public_html. */ +export const agencyHostingBuildWebsiteNodeJSAssetsV1: API.OperationMethod< + AgencyHostingBuildWebsiteNodeJSAssetsV1Request, + CommonSuccessEmptyResource, + AgencyHostingBuildWebsiteNodeJSAssetsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: AgencyHostingBuildWebsiteNodeJSAssetsV1Request, + output: CommonSuccessEmptyResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type AgencyHostingChangeWebsiteDomainV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Change website domain Changes the primary domain for an Agency Plan website. Provide the current domain in the path and the new domain in the request body. Set domain to null to revert to the temporary domain. */ +export const agencyHostingChangeWebsiteDomainV1: API.OperationMethod< + AgencyHostingChangeWebsiteDomainV1Request, + CommonSuccessEmptyResource, + AgencyHostingChangeWebsiteDomainV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: AgencyHostingChangeWebsiteDomainV1Request, + output: CommonSuccessEmptyResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type AgencyHostingChangeWordPressVersionV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Change WordPress version Changes the installed WordPress core version on an Agency Plan website to one of the versions available for installation. */ +export const agencyHostingChangeWordPressVersionV1: API.OperationMethod< + AgencyHostingChangeWordPressVersionV1Request, + CommonSuccessEmptyResource, + AgencyHostingChangeWordPressVersionV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: AgencyHostingChangeWordPressVersionV1Request, + output: CommonSuccessEmptyResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type AgencyHostingGenerateUploadURLV1Error = HostingerOpError; +/** Generate upload URL Generate a file browser upload URL with authentication credentials for uploading files to an Agency Plan website's file storage. Returns `url`, `auth_key` and `rest_auth_key`. Use these to upload a file to the website's file storage via the TUS resumable upload protocol (TUS 1.0.0). Send `X-Auth: {auth_key}` and `X-Auth-Rest: {rest_auth_key}` headers on every request below. 1. Create the upload: `POST` to `{url}/{relative_file_path}?override=true` with headers `upload-length: {file size in bytes}` and `upload-offset: 0`. Expect `201 Created`. 2. Upload the file: send the file bytes to the same location (any TUS 1.0.0 client, or `PATCH` requests with an `upload-offset` header tracking progress) until complete. `relative_file_path` is the destination path inside the website's file storage, e.g. `app.zip`. Instead of a TUS client, plain `curl` also works: ``` FILE=app.zip SIZE=$(stat -f%z "$FILE") # stat -c%s on Linux curl -i -X POST "{url}/${FILE}?override=true" \ -H "X-Auth: {auth_key}" \ -H "X-Auth-Rest: {rest_auth_key}" \ -H "Tus-Resumable: 1.0.0" \ -H "Upload-Length: ${SIZE}" \ -H "Upload-Offset: 0" # -> 201 Created curl -i -X PATCH "{url}/${FILE}?override=true" \ -H "X-Auth: {auth_key}" \ -H "X-Auth-Rest: {rest_auth_key}" \ -H "Tus-Resumable: 1.0.0" \ -H "Content-Type: application/offset+octet-stream" \ -H "Upload-Offset: 0" \ --data-binary "@${FILE}" # -> 204 No Content, Upload-Offset response header equals SIZE when done ``` */ +export const agencyHostingGenerateUploadURLV1: API.OperationMethod< + AgencyHostingGenerateUploadURLV1Request, + AgencyHostingV1FilesUploadUrlResource, + AgencyHostingGenerateUploadURLV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: AgencyHostingGenerateUploadURLV1Request, + output: AgencyHostingV1FilesUploadUrlResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type AgencyHostingImportWebsiteFromArchiveV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Import website from archive Imports an Agency Plan website from an already-uploaded archive. Upload the archive to the website's root directory via file browser first, then provide its filename in this request. Website contents are overwritten by the archive contents. Supported archive types: .zip, .tar, .tar.gz, .tgz. */ +export const agencyHostingImportWebsiteFromArchiveV1: API.OperationMethod< + AgencyHostingImportWebsiteFromArchiveV1Request, + CommonSuccessEmptyResource, + AgencyHostingImportWebsiteFromArchiveV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: AgencyHostingImportWebsiteFromArchiveV1Request, + output: CommonSuccessEmptyResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type AgencyHostingLinkDomainToWebsiteV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Link domain to website Links a domain to the specified Agency Plan website so it can serve traffic for that domain. */ +export const agencyHostingLinkDomainToWebsiteV1: API.OperationMethod< + AgencyHostingLinkDomainToWebsiteV1Request, + CommonSuccessEmptyResource, + AgencyHostingLinkDomainToWebsiteV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: AgencyHostingLinkDomainToWebsiteV1Request, + output: CommonSuccessEmptyResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type AssignReachAContactToATagV1Error = HostingerOpError; +/** Assign a contact to a tag Assign a tag to a single contact. Unlike the bulk endpoint this is applied immediately rather than queued. Assigning a tag the contact already carries succeeds without duplicating it. */ +export const assignReachAContactToATagV1: API.OperationMethod< + AssignReachAContactToATagV1Request, + ReachV1ContactsTagsTagResource, + AssignReachAContactToATagV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: AssignReachAContactToATagV1Request, + output: ReachV1ContactsTagsTagResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type AssignReachContactsToATagV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Assign contacts to a tag Assign a tag to many contacts at once. Pass `contact_uuids` to target specific contacts, or `all_contacts` to target every contact in the profile. The work is queued, so a success response means it was accepted rather than finished. Contacts that already carry the tag are left alone. */ +export const assignReachContactsToATagV1: API.OperationMethod< + AssignReachContactsToATagV1Request, + CommonSuccessEmptyResource, + AssignReachContactsToATagV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: AssignReachContactsToATagV1Request, + output: CommonSuccessEmptyResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type AttachVPSPublicKeyV1Error = UnprocessableEntity | HostingerOpError; +/** Attach public key Attach existing public keys from your account to a specified virtual machine. Multiple keys can be attached to a single virtual machine. Use this endpoint to enable SSH key authentication for VPS instances. */ +export const attachVPSPublicKeyV1: API.OperationMethod< + AttachVPSPublicKeyV1Request, + VPSV1ActionActionResource, + AttachVPSPublicKeyV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: AttachVPSPublicKeyV1Request, + output: VPSV1ActionActionResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type BillingGetCatalogItemListV1Error = HostingerOpError; +/** Get catalog item list Retrieve catalog items available for order. Prices in catalog items is displayed as cents (without floating point), e.g: float `17.99` is displayed as integer `1799`. Use this endpoint to view available services and pricing before placing orders. */ +export const billingGetCatalogItemListV1: API.OperationMethod< + BillingGetCatalogItemListV1Request, + BillingGetCatalogItemListV1Response, + BillingGetCatalogItemListV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: BillingGetCatalogItemListV1Request, + output: BillingGetCatalogItemListV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type BillingGetPaymentMethodListV1Error = HostingerOpError; +/** Get payment method list Retrieve available payment methods that can be used for placing new orders. If you want to add new payment method, please use [hPanel](https://hpanel.hostinger.com/billing/payment-methods). Use this endpoint to view available payment options before creating orders. */ +export const billingGetPaymentMethodListV1: API.OperationMethod< + BillingGetPaymentMethodListV1Request, + BillingGetPaymentMethodListV1Response, + BillingGetPaymentMethodListV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: BillingGetPaymentMethodListV1Request, + output: BillingGetPaymentMethodListV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type BillingGetSubscriptionListV1Error = HostingerOpError; +/** Get subscription list Retrieve a list of all subscriptions associated with your account. Use this endpoint to monitor active services and billing status. */ +export const billingGetSubscriptionListV1: API.OperationMethod< + BillingGetSubscriptionListV1Request, + BillingGetSubscriptionListV1Response, + BillingGetSubscriptionListV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: BillingGetSubscriptionListV1Request, + output: BillingGetSubscriptionListV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type CancelDomainPendingIRTPVerificationV1Error = HostingerOpError; +/** Cancel pending IRTP verification Cancel a pending IRTP verification. Use this endpoint to back out of a WHOIS change that is stuck waiting on registrant confirmation, for example when the confirmation email cannot be received, without waiting out the 5-day expiry. */ +export const cancelDomainPendingIRTPVerificationV1: API.OperationMethod< + CancelDomainPendingIRTPVerificationV1Request, + CommonSuccessEmptyResource, + CancelDomainPendingIRTPVerificationV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: CancelDomainPendingIRTPVerificationV1Request, + output: CommonSuccessEmptyResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type CancelEcommerceAnOrderV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Cancel an order Cancel the order and optionally email the customer. Returns the updated order summary. */ +export const cancelEcommerceAnOrderV1: API.OperationMethod< + CancelEcommerceAnOrderV1Request, + EcommerceV1OrderOrderResponseResource, + CancelEcommerceAnOrderV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: CancelEcommerceAnOrderV1Request, + output: EcommerceV1OrderOrderResponseResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type CheckDomainDomainAvailabilityV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Check domain availability Check availability of domain names across multiple TLDs. Multiple TLDs can be checked at once. If you want alternative domains with response, provide only one TLD and set `with_alternatives` to `true`. TLDs should be provided without leading dot (e.g. `com`, `net`, `org`). Endpoint has rate limit of 90 requests per minute. Use this endpoint to verify domain availability before purchase. */ +export const checkDomainDomainAvailabilityV1: API.OperationMethod< + CheckDomainDomainAvailabilityV1Request, + CheckDomainDomainAvailabilityV1Response, + CheckDomainDomainAvailabilityV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: CheckDomainDomainAvailabilityV1Request, + output: CheckDomainDomainAvailabilityV1Response, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type CheckHostingIfWooCommerceIsInstalledV1Error = HostingerOpError; +/** Check if WooCommerce is installed Check whether WooCommerce is installed on any WordPress installation of a domain. Optionally filter by domain to scope the check. */ +export const checkHostingIfWooCommerceIsInstalledV1: API.OperationMethod< + CheckHostingIfWooCommerceIsInstalledV1Request, + WordPressV1PluginsWoocommerceInstalledResource, + CheckHostingIfWooCommerceIsInstalledV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: CheckHostingIfWooCommerceIsInstalledV1Request, + output: WordPressV1PluginsWoocommerceInstalledResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type CheckHostingIfWordPressInstallationsAreValidV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Check if WordPress installations are valid Check whether one or more WordPress installations are valid and working correctly. Detects broken installations caused by missing files, broken plugins, themes and similar issues. Provide the WordPress installation (software) identifiers in the body. They can be obtained from GET /api/hosting/v1/wordpress/installations (the `id` field). */ +export const checkHostingIfWordPressInstallationsAreValidV1: API.OperationMethod< + CheckHostingIfWordPressInstallationsAreValidV1Request, + CheckHostingIfWordPressInstallationsAreValidV1Response, + CheckHostingIfWordPressInstallationsAreValidV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: CheckHostingIfWordPressInstallationsAreValidV1Request, + output: CheckHostingIfWordPressInstallationsAreValidV1Response, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ClaimDomainFreeDomainTransferV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Claim free domain transfer Claim a free domain transfer available on your account and start the transfer. Unlike purchasing a transfer, this consumes a free domain transfer you already have, so no payment method is required. Before making request, unlock the domain at the current registrar and get its authorization code. The transfer is validated first, so domains which cannot be transferred are rejected before the free domain transfer is consumed. A successful response means the transfer has been started. Completion depends on the current registrar and can be followed with the [transfer list endpoint](#tag/domains-transfer). If no WHOIS information is provided, default contact information for that TLD will be used. Before making request, ensure WHOIS information for desired TLD exists in your account. Requests which cannot be fulfilled are rejected with an error code in the response body. Use this endpoint to transfer a domain using a free domain transfer from your account. */ +export const claimDomainFreeDomainTransferV1: API.OperationMethod< + ClaimDomainFreeDomainTransferV1Request, + DomainsV1TransferTransferResource, + ClaimDomainFreeDomainTransferV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ClaimDomainFreeDomainTransferV1Request, + output: DomainsV1TransferTransferResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ClaimDomainFreeDomainV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Claim free domain Claim a free domain available on your account and register it. Unlike purchasing a domain, this consumes a free domain you already have, so no payment method is required. A successful response means the domain is registered. If registration fails, login to [hPanel](https://hpanel.hostinger.com/) and check domain registration status. If no WHOIS information is provided, default contact information for that TLD will be used. Before making request, ensure WHOIS information for desired TLD exists in your account. Some TLDs require `additional_details` to be provided and these will be validated before claiming. Requests which cannot be fulfilled are rejected with an error code in the response body, for example `2037` when no free domain is available. Use this endpoint to register a domain using a free domain from your account. */ +export const claimDomainFreeDomainV1: API.OperationMethod< + ClaimDomainFreeDomainV1Request, + DomainsV1PortfolioClaimResource, + ClaimDomainFreeDomainV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ClaimDomainFreeDomainV1Request, + output: DomainsV1PortfolioClaimResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ClearAgencyHostingWebsiteCacheV1Error = HostingerOpError; +/** Clear website cache Clears cache for all domains associated with an Agency Plan website, including its preview domain. This operation clears all cache types for the website. */ +export const clearAgencyHostingWebsiteCacheV1: API.OperationMethod< + ClearAgencyHostingWebsiteCacheV1Request, + CommonSuccessEmptyResource, + ClearAgencyHostingWebsiteCacheV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ClearAgencyHostingWebsiteCacheV1Request, + output: CommonSuccessEmptyResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ClearHostingWebsiteCacheV1Error = HostingerOpError; +/** Clear website cache Permanently clears all server-side cache for the website at once. Use it when content was updated and needs to be visible immediately, or after making major changes. Also purges the Hostinger CDN cache when CDN is enabled on the website. For a WordPress installation living in a subdirectory, pass the directory query parameter to clear its cache. */ +export const clearHostingWebsiteCacheV1: API.OperationMethod< + ClearHostingWebsiteCacheV1Request, + CommonSuccessEmptyResource, + ClearHostingWebsiteCacheV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ClearHostingWebsiteCacheV1Request, + output: CommonSuccessEmptyResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type CreateAgencyHostingANewWebsiteV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Create a new website Provisions a new website on one of your Agency Plan hosting orders. Choose the datacenter, stack (`flavor`), and PHP version for the site. Optionally attach your own `domain` — omit it, set it to `null`, or leave it unavailable and a free `*.hostingersite.com` subdomain is generated instead — and/or install WordPress by supplying the `wordpress` details (admin account, site title, and language). Common setups: - **Plain PHP site**: `flavor` set to `php-fpm`, with `settings.php.version`; omit `wordpress` and `type`. - **WordPress site**: `flavor` set to the desired WordPress version (e.g. `wp-7.0`), plus the `wordpress` block (admin account, title, language). - **Static/Node.js frontend app**: `flavor` set to `php-fpm` and `type` set to `node-static`. Provisioning runs in the background, so the response returns immediately with a setup UUID that identifies the job. The new website becomes reachable once provisioning finishes. */ +export const createAgencyHostingANewWebsiteV1: API.OperationMethod< + CreateAgencyHostingANewWebsiteV1Request, + AgencyHostingV1SetupsWebsiteSetupResource, + CreateAgencyHostingANewWebsiteV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: CreateAgencyHostingANewWebsiteV1Request, + output: AgencyHostingV1SetupsWebsiteSetupResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type CreateAgencyHostingWebsiteCronJobV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Create website cron job Creates a cron job for an Agency Plan website from a schedule expression and a command. Returns the created cron job, including its uuid, which is required to delete the cron job. */ +export const createAgencyHostingWebsiteCronJobV1: API.OperationMethod< + CreateAgencyHostingWebsiteCronJobV1Request, + AgencyHostingV1WebsitesCronJobsCronJobResource, + CreateAgencyHostingWebsiteCronJobV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: CreateAgencyHostingWebsiteCronJobV1Request, + output: AgencyHostingV1WebsitesCronJobsCronJobResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type CreateAgencyHostingWebsiteDatabaseUserV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Create website database user Creates a user for an existing database on an Agency Plan website. Each database supports a single non-system user; creating a user for a database that already has one fails. */ +export const createAgencyHostingWebsiteDatabaseUserV1: API.OperationMethod< + CreateAgencyHostingWebsiteDatabaseUserV1Request, + AgencyHostingV1WebsitesDatabasesDatabaseUserResource, + CreateAgencyHostingWebsiteDatabaseUserV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: CreateAgencyHostingWebsiteDatabaseUserV1Request, + output: AgencyHostingV1WebsitesDatabasesDatabaseUserResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type CreateAgencyHostingWebsiteDatabaseV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Create website database Creates a MySQL database with a dedicated user for an Agency Plan website. The database name, username, and password must all be provided by the caller. */ +export const createAgencyHostingWebsiteDatabaseV1: API.OperationMethod< + CreateAgencyHostingWebsiteDatabaseV1Request, + AgencyHostingV1WebsitesDatabasesDatabaseResource, + CreateAgencyHostingWebsiteDatabaseV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: CreateAgencyHostingWebsiteDatabaseV1Request, + output: AgencyHostingV1WebsitesDatabasesDatabaseResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type CreateBillingPurchaseOrderV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Create purchase order Create a purchase order for any Hostinger product. This unified endpoint places an order for one or more catalog items and works across all Hostinger products, leveraging the existing billing infrastructure. Use the [catalog endpoint](#tag/billing-catalog) to look up the `item_id` values available for purchase. If no payment method is provided, your default payment method will be used automatically. This endpoint only places the order. Product-specific provisioning (e.g. VPS setup or domain registration) is not performed here — once the order completes, use the relevant product endpoints or [hPanel](https://hpanel.hostinger.com/) to finalize setup. Use this endpoint to purchase any product available in the catalog. */ +export const createBillingPurchaseOrderV1: API.OperationMethod< + CreateBillingPurchaseOrderV1Request, + BillingV1OrderOrderResource, + CreateBillingPurchaseOrderV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: CreateBillingPurchaseOrderV1Request, + output: BillingV1OrderOrderResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type CreateDomainDomainForwardingV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Create domain forwarding Create domain forwarding configuration. Use this endpoint to set up domain redirects to other URLs. */ +export const createDomainDomainForwardingV1: API.OperationMethod< + CreateDomainDomainForwardingV1Request, + DomainsV1ForwardingForwardingResource, + CreateDomainDomainForwardingV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: CreateDomainDomainForwardingV1Request, + output: DomainsV1ForwardingForwardingResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type CreateDomainWHOISProfileV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Create WHOIS profile Create WHOIS contact profile. Use this endpoint to add new contact information for domain registration. */ +export const createDomainWHOISProfileV1: API.OperationMethod< + CreateDomainWHOISProfileV1Request, + DomainsV1WHOISProfileResource, + CreateDomainWHOISProfileV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: CreateDomainWHOISProfileV1Request, + output: DomainsV1WHOISProfileResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type CreateEcommerceADiscountV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Create a discount Create a discount for a store. Fixed discounts take an amount in the smallest currency unit (e.g. $10 is 1000); percentage discounts take a whole-number value between 1 and 100. Free-shipping discounts ignore value. Returns the created discount. */ +export const createEcommerceADiscountV1: API.OperationMethod< + CreateEcommerceADiscountV1Request, + EcommerceV1DiscountDiscountResponseResource, + CreateEcommerceADiscountV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: CreateEcommerceADiscountV1Request, + output: EcommerceV1DiscountDiscountResponseResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type CreateEcommerceAProductVariantV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Create a product variant Add a variant to a product along one or more option dimensions (e.g. Size, Color). Options missing from the product are created automatically; provide a value for every option the product already has. Prices are integers in the smallest currency unit and default to the store currency. Returns the created variant. */ +export const createEcommerceAProductVariantV1: API.OperationMethod< + CreateEcommerceAProductVariantV1Request, + EcommerceV1VariantVariantResponseResource, + CreateEcommerceAProductVariantV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: CreateEcommerceAProductVariantV1Request, + output: EcommerceV1VariantVariantResponseResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type CreateEcommerceASalesChannelV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Create a sales channel Create a sales channel for a store. A "custom" channel is headless: build your own frontend and keep your catalog, orders, shipping and payments in sync through the Ecommerce API. A "quick-link" channel is a hosted one-page store whose handle is auto-generated. */ +export const createEcommerceASalesChannelV1: API.OperationMethod< + CreateEcommerceASalesChannelV1Request, + EcommerceV1SalesChannelSalesChannelCreationResource, + CreateEcommerceASalesChannelV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: CreateEcommerceASalesChannelV1Request, + output: EcommerceV1SalesChannelSalesChannelCreationResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type CreateEcommerceDigitalProductV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Create digital product Create a published digital product with a single variant and an optional external download link. */ +export const createEcommerceDigitalProductV1: API.OperationMethod< + CreateEcommerceDigitalProductV1Request, + EcommerceV1ProductProductCreationResource, + CreateEcommerceDigitalProductV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: CreateEcommerceDigitalProductV1Request, + output: EcommerceV1ProductProductCreationResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type CreateEcommercePhysicalProductV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Create physical product Create a published physical product with a single variant priced in the store currency. */ +export const createEcommercePhysicalProductV1: API.OperationMethod< + CreateEcommercePhysicalProductV1Request, + EcommerceV1ProductProductCreationResource, + CreateEcommercePhysicalProductV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: CreateEcommercePhysicalProductV1Request, + output: EcommerceV1ProductProductCreationResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type CreateEcommerceStoreV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Create store Create a new store for your account. A primary sales channel is created alongside the store. */ +export const createEcommerceStoreV1: API.OperationMethod< + CreateEcommerceStoreV1Request, + EcommerceV1StoreStoreCreationResource, + CreateEcommerceStoreV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: CreateEcommerceStoreV1Request, + output: EcommerceV1StoreStoreCreationResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type CreateHorizonWebsiteV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Create website Create new Hostinger Horizons website from the given message.\n Use this tool when user asks you to create a website, landing page, blog or any other type of application.\n This tool initiates the website creation process and returns a website URL and ID. The generation happens asynchronously.\n After invoking this tool, your chat reply must be EXACTLY 1 sentence summarizing that Hostinger Horizons is now creating their website and it will be ready in a few minutes and you should provide the website URL to the user immediately Do not write code.\n\nTo edit afterwards, users must go to Hostinger Horizons interface in the provided website URL. If the tool call fails with an error, you should provide a clear explanation of the error and do not generate code yourself in the chat. \n TECHNOLOGY STACK CONSTRAINTS (STRICTLY ENFORCED):\n The environment is limited to the following technologies. You MUST NOT use, suggest, or implement any technology outside this list:\n \n - Language: JavaScript ONLY. - Languages like TypeScript, Rust, Python, Java, PHP, etc., are STRICTLY PROHIBITED.\n - Framework: React.\n - Navigation: React Router.\n - Styling: TailwindCSS.\n - Components: shadcn/ui (built with @radix-ui primitives).\n - Icons: Lucide React.\n - Animations: Framer Motion.\n \n BACKEND & DATA STORAGE:\n - Horizons integrated backend is the EXCLUSIVE solution for persistent data storage, authentication, and database needs.\n - Local databases (SQLite, MySQL, etc.) are STRICTLY PROHIBITED.\n - Third-party services (Firebase, AWS Amplify) are allowed ONLY if explicitly requested by the user.\n \n MAPS:\n - OpenStreetMap is the default provider.\n - Alternative providers (Google Maps, Mapbox) are allowed ONLY if explicitly requested by the user.\n */ +export const createHorizonWebsiteV1: API.OperationMethod< + CreateHorizonWebsiteV1Request, + HorizonsV1WebsitesCreatedWebsiteResource, + CreateHorizonWebsiteV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: CreateHorizonWebsiteV1Request, + output: HorizonsV1WebsitesCreatedWebsiteResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type CreateHostingAccountCronJobV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Create account cron job Creates a cron job for the specified account from a schedule expression and a command. Returns the created cron job, including its uid, which is required to delete the cron job or fetch its output. */ +export const createHostingAccountCronJobV1: API.OperationMethod< + CreateHostingAccountCronJobV1Request, + HostingV1CronJobsCronJobResource, + CreateHostingAccountCronJobV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: CreateHostingAccountCronJobV1Request, + output: HostingV1CronJobsCronJobResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type CreateHostingAccountDatabaseV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Create account database Creates a database with a database user and password for the specified account. The database name and user are automatically prefixed with the account username when needed. */ +export const createHostingAccountDatabaseV1: API.OperationMethod< + CreateHostingAccountDatabaseV1Request, + CommonSuccessEmptyResource, + CreateHostingAccountDatabaseV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: CreateHostingAccountDatabaseV1Request, + output: CommonSuccessEmptyResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type CreateHostingDatabaseRemoteConnectionV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Create database remote connection Allows a remote host to connect to the specified database. Provide an IPv4/IPv6 address, or "%" to allow any host. The database name must be the full name returned by the list databases endpoint. */ +export const createHostingDatabaseRemoteConnectionV1: API.OperationMethod< + CreateHostingDatabaseRemoteConnectionV1Request, + CommonSuccessEmptyResource, + CreateHostingDatabaseRemoteConnectionV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: CreateHostingDatabaseRemoteConnectionV1Request, + output: CommonSuccessEmptyResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type CreateHostingLoginLinksV1Error = HostingerOpError; +/** Create login links Create temporary auto-login links for the specified WordPress installation. Provide the WordPress installation (software) identifier in the path. It can be obtained from GET /api/hosting/v1/wordpress/installations (the `id` field). */ +export const createHostingLoginLinksV1: API.OperationMethod< + CreateHostingLoginLinksV1Request, + WordPressV1LoginLoginLinksResource, + CreateHostingLoginLinksV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: CreateHostingLoginLinksV1Request, + output: WordPressV1LoginLoginLinksResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type CreateHostingWebsiteParkedDomainV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Create website parked domain Create a parked or alias domain for the selected website. Provide a domain name or IP address to park on the website so it serves the same content as the parent domain. */ +export const createHostingWebsiteParkedDomainV1: API.OperationMethod< + CreateHostingWebsiteParkedDomainV1Request, + CommonSuccessEmptyResource, + CreateHostingWebsiteParkedDomainV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: CreateHostingWebsiteParkedDomainV1Request, + output: CommonSuccessEmptyResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type CreateHostingWebsiteRedirectV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Create website redirect Creates a redirect from a URL on the selected website to another URL or IP address. */ +export const createHostingWebsiteRedirectV1: API.OperationMethod< + CreateHostingWebsiteRedirectV1Request, + HostingV1RedirectsRedirectResource, + CreateHostingWebsiteRedirectV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: CreateHostingWebsiteRedirectV1Request, + output: HostingV1RedirectsRedirectResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type CreateHostingWebsiteSubdomainV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Create website subdomain Create a new subdomain for the selected website. Provide a subdomain prefix and, optionally, a custom directory or the website public directory to use as the subdomain root. */ +export const createHostingWebsiteSubdomainV1: API.OperationMethod< + CreateHostingWebsiteSubdomainV1Request, + CommonSuccessEmptyResource, + CreateHostingWebsiteSubdomainV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: CreateHostingWebsiteSubdomainV1Request, + output: CommonSuccessEmptyResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type CreateHostingWebsiteV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Create website Create a new website for the authenticated client. Provide the domain name and associated order ID to create a new website. The datacenter_code parameter is required when creating the first website on a new hosting plan - this will set up and configure new hosting account in the selected datacenter. Subsequent websites will be hosted on the same datacenter automatically. Website creation takes up to a few minutes to complete. Check the websites list endpoint to see when your new website becomes available. */ +export const createHostingWebsiteV1: API.OperationMethod< + CreateHostingWebsiteV1Request, + CommonSuccessEmptyResource, + CreateHostingWebsiteV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: CreateHostingWebsiteV1Request, + output: CommonSuccessEmptyResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type CreateMailAliasV1Error = + | NotFound + | Conflict + | UnprocessableEntity + | HostingerOpError; +/** Create alias Create an alias for the given mailbox. The alias address is formed from the given local part and the domain of the mailbox. Messages sent to the alias are delivered to the mailbox. */ +export const createMailAliasV1: API.OperationMethod< + CreateMailAliasV1Request, + MailV1AliasesAliasResource, + CreateMailAliasV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: CreateMailAliasV1Request, + output: MailV1AliasesAliasResource, + errors: [NotFound, Conflict, UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type CreateMailAPITokenV1Error = + | NotFound + | Conflict + | UnprocessableEntity + | HostingerOpError; +/** Create API token Create an API token for the given mail order. The token grants access to the [Hostinger Email API](https://api.mail.hostinger.com/), where you can provision and manage the mailboxes it is scoped to. The plaintext token is returned only in this response, never again. A maximum of 10 tokens can exist per order. Use `scope.has_all_mailboxes` to cover all current and future mailboxes, or list specific mailboxes in `scope.mailbox_ids`. */ +export const createMailAPITokenV1: API.OperationMethod< + CreateMailAPITokenV1Request, + MailV1ApiTokensApiTokenCreatedResource, + CreateMailAPITokenV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: CreateMailAPITokenV1Request, + output: MailV1ApiTokensApiTokenCreatedResource, + errors: [NotFound, Conflict, UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type CreateMailAutoreplyV1Error = + | NotFound + | Conflict + | UnprocessableEntity + | HostingerOpError; +/** Create autoreply Create an automatic reply for the given mailbox. A mailbox can have only one autoreply. Omit `starts_at` to activate the autoreply immediately and omit `ends_at` to keep it active indefinitely. */ +export const createMailAutoreplyV1: API.OperationMethod< + CreateMailAutoreplyV1Request, + MailV1AutorepliesAutoreplyResource, + CreateMailAutoreplyV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: CreateMailAutoreplyV1Request, + output: MailV1AutorepliesAutoreplyResource, + errors: [NotFound, Conflict, UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type CreateMailCatchAllV1Error = + | NotFound + | Conflict + | UnprocessableEntity + | HostingerOpError; +/** Create catch-all Create a catch-all that routes all messages sent to unknown addresses of the domain to the given mailbox. The mailbox address receives a confirmation email and the catch-all becomes active only after it is confirmed. A domain can have only one catch-all. */ +export const createMailCatchAllV1: API.OperationMethod< + CreateMailCatchAllV1Request, + MailV1CatchallsCatchallResource, + CreateMailCatchAllV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: CreateMailCatchAllV1Request, + output: MailV1CatchallsCatchallResource, + errors: [NotFound, Conflict, UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type CreateMailForwarderV1Error = + | BadRequest + | NotFound + | Conflict + | UnprocessableEntity + | HostingerOpError; +/** Create forwarder Create a forwarder from the given mailbox to the destination address. The destination receives a confirmation email and forwarding becomes active only after it is confirmed. */ +export const createMailForwarderV1: API.OperationMethod< + CreateMailForwarderV1Request, + MailV1ForwardersForwarderResource, + CreateMailForwarderV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: CreateMailForwarderV1Request, + output: MailV1ForwardersForwarderResource, + errors: [ + BadRequest, + NotFound, + Conflict, + UnprocessableEntity, + UnknownHostingerError, + ], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type CreateMailMailboxV1Error = + | NotFound + | Conflict + | UnprocessableEntity + | HostingerOpError; +/** Create mailbox Create a mailbox under the given mail order. The full email address is composed from the given local part and the domain of the order. */ +export const createMailMailboxV1: API.OperationMethod< + CreateMailMailboxV1Request, + MailV1MailboxesMailboxResource, + CreateMailMailboxV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: CreateMailMailboxV1Request, + output: MailV1MailboxesMailboxResource, + errors: [NotFound, Conflict, UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type CreateMailWebhookV1Error = + | BadRequest + | NotFound + | Conflict + | UnprocessableEntity + | HostingerOpError; +/** Create webhook Create a webhook for the given mailbox. The generated secret is returned only in this response and is sent as a bearer token with every delivery. */ +export const createMailWebhookV1: API.OperationMethod< + CreateMailWebhookV1Request, + MailV1WebhooksWebhookCreatedResource, + CreateMailWebhookV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: CreateMailWebhookV1Request, + output: MailV1WebhooksWebhookCreatedResource, + errors: [ + BadRequest, + NotFound, + Conflict, + UnprocessableEntity, + UnknownHostingerError, + ], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type CreateReachAContactFieldV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Create a contact field Define a new custom contact field in a profile. The `slug` is derived from the label and, like the field type, cannot be changed later. Use the returned uuid to set values on contacts. */ +export const createReachAContactFieldV1: API.OperationMethod< + CreateReachAContactFieldV1Request, + ReachV1ContactsFieldsContactFieldResource, + CreateReachAContactFieldV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: CreateReachAContactFieldV1Request, + output: ReachV1ContactsFieldsContactFieldResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type CreateReachAProfileSegmentV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Create a profile segment Create a segment in a profile. A segment is a saved set of conditions rather than a fixed list, so its membership changes as contacts change. Creating one does not modify any contact. */ +export const createReachAProfileSegmentV1: API.OperationMethod< + CreateReachAProfileSegmentV1Request, + ReachV1ContactsSegmentsSegmentResource, + CreateReachAProfileSegmentV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: CreateReachAProfileSegmentV1Request, + output: ReachV1ContactsSegmentsSegmentResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type CreateReachNewContactsV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Create new contacts Create a new contact in the email marketing system. This endpoint allows you to create a new contact with basic information like name, email, and surname. If double opt-in is enabled, the contact will be created with a pending status and a confirmation email will be sent. */ +export const createReachNewContactsV1: API.OperationMethod< + CreateReachNewContactsV1Request, + CommonSuccessEmptyResource, + CreateReachNewContactsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: CreateReachNewContactsV1Request, + output: CommonSuccessEmptyResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type CreateVPSFirewallRuleV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Create firewall rule Create new firewall rule for a specified firewall. By default, the firewall drops all incoming traffic, which means you must add accept rules for all ports you want to use. Any virtual machine that has this firewall activated will lose sync with the firewall and will have to be synced again manually. Use this endpoint to add new security rules to firewalls. */ +export const createVPSFirewallRuleV1: API.OperationMethod< + CreateVPSFirewallRuleV1Request, + VPSV1FirewallFirewallRuleResource, + CreateVPSFirewallRuleV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: CreateVPSFirewallRuleV1Request, + output: VPSV1FirewallFirewallRuleResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type CreateVPSNewFirewallV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Create new firewall Create a new firewall. Use this endpoint to set up new firewall configurations for VPS security. */ +export const createVPSNewFirewallV1: API.OperationMethod< + CreateVPSNewFirewallV1Request, + VPSV1FirewallFirewallResource, + CreateVPSNewFirewallV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: CreateVPSNewFirewallV1Request, + output: VPSV1FirewallFirewallResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type CreateVPSNewProjectV1Error = UnprocessableEntity | HostingerOpError; +/** Create new project Deploy new project from docker-compose.yaml contents or download contents from URL. URL can be Github repository url in format https://github.com/[user]/[repo] and it will be automatically resolved to docker-compose.yaml file in master branch. Any other URL provided must return docker-compose.yaml file contents. If project with the same name already exists, existing project will be replaced. */ +export const createVPSNewProjectV1: API.OperationMethod< + CreateVPSNewProjectV1Request, + VPSV1ActionActionResource, + CreateVPSNewProjectV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: CreateVPSNewProjectV1Request, + output: VPSV1ActionActionResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type CreateVPSPTRRecordV1Error = UnprocessableEntity | HostingerOpError; +/** Create PTR record Create or update a PTR (Pointer) record for a specified virtual machine. Use this endpoint to configure reverse DNS lookup for VPS IP addresses. */ +export const createVPSPTRRecordV1: API.OperationMethod< + CreateVPSPTRRecordV1Request, + VPSV1ActionActionResource, + CreateVPSPTRRecordV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: CreateVPSPTRRecordV1Request, + output: VPSV1ActionActionResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type CreateVPSPublicKeyV1Error = UnprocessableEntity | HostingerOpError; +/** Create public key Add a new public key to your account. Use this endpoint to register SSH keys for VPS authentication. */ +export const createVPSPublicKeyV1: API.OperationMethod< + CreateVPSPublicKeyV1Request, + VPSV1PublicKeyPublicKeyResource, + CreateVPSPublicKeyV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: CreateVPSPublicKeyV1Request, + output: VPSV1PublicKeyPublicKeyResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type CreateVPSSnapshotV1Error = HostingerOpError; +/** Create snapshot Create a snapshot of a specified virtual machine. A snapshot captures the state and data of the virtual machine at a specific point in time, allowing users to restore the virtual machine to that state if needed. This operation is useful for backup purposes, system recovery, and testing changes without affecting the current state of the virtual machine. **Creating new snapshot will overwrite the existing snapshot!** Use this endpoint to capture VPS state for backup and recovery purposes. */ +export const createVPSSnapshotV1: API.OperationMethod< + CreateVPSSnapshotV1Request, + VPSV1ActionActionResource, + CreateVPSSnapshotV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: CreateVPSSnapshotV1Request, + output: VPSV1ActionActionResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DeactivateHostingWordPressPluginV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Deactivate WordPress plugin Deactivate an installed plugin on a WordPress installation. Provide the WordPress installation (software) identifier in the path. It can be obtained from GET /api/hosting/v1/wordpress/installations (the `id` field). This operation is asynchronous: a successful response only means the deactivation job has been queued. */ +export const deactivateHostingWordPressPluginV1: API.OperationMethod< + DeactivateHostingWordPressPluginV1Request, + CommonSuccessEmptyResource, + DeactivateHostingWordPressPluginV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DeactivateHostingWordPressPluginV1Request, + output: CommonSuccessEmptyResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DeactivateVPSFirewallV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Deactivate firewall Deactivate a firewall for a specified virtual machine. Use this endpoint to remove firewall protection from VPS instances. */ +export const deactivateVPSFirewallV1: API.OperationMethod< + DeactivateVPSFirewallV1Request, + VPSV1ActionActionResource, + DeactivateVPSFirewallV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DeactivateVPSFirewallV1Request, + output: VPSV1ActionActionResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DeleteAgencyHostingWebsiteCronJobV1Error = HostingerOpError; +/** Delete website cron job Permanently deletes the cron job identified by its uuid from an Agency Plan website. The operation is idempotent: deleting a cron job that does not exist succeeds without error. */ +export const deleteAgencyHostingWebsiteCronJobV1: API.OperationMethod< + DeleteAgencyHostingWebsiteCronJobV1Request, + CommonSuccessEmptyResource, + DeleteAgencyHostingWebsiteCronJobV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DeleteAgencyHostingWebsiteCronJobV1Request, + output: CommonSuccessEmptyResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DeleteAgencyHostingWebsiteDatabaseUserV1Error = HostingerOpError; +/** Delete website database user Permanently deletes a database user from an Agency Plan website database, revoking all access it had. The operation is idempotent: deleting a user that does not exist succeeds without error. */ +export const deleteAgencyHostingWebsiteDatabaseUserV1: API.OperationMethod< + DeleteAgencyHostingWebsiteDatabaseUserV1Request, + CommonSuccessEmptyResource, + DeleteAgencyHostingWebsiteDatabaseUserV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DeleteAgencyHostingWebsiteDatabaseUserV1Request, + output: CommonSuccessEmptyResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DeleteAgencyHostingWebsiteDatabaseV1Error = HostingerOpError; +/** Delete website database Permanently deletes a MySQL database and all its data from an Agency Plan website, including its users. The operation is idempotent: deleting a database that does not exist succeeds without error. */ +export const deleteAgencyHostingWebsiteDatabaseV1: API.OperationMethod< + DeleteAgencyHostingWebsiteDatabaseV1Request, + CommonSuccessEmptyResource, + DeleteAgencyHostingWebsiteDatabaseV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DeleteAgencyHostingWebsiteDatabaseV1Request, + output: CommonSuccessEmptyResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DeleteAgencyHostingWebsiteV1Error = HostingerOpError; +/** Delete website Permanently deletes an Agency Plan website. Deletion is processed asynchronously: the website is immediately transitioned to a deleting state and the underlying server resources are removed in the background. */ +export const deleteAgencyHostingWebsiteV1: API.OperationMethod< + DeleteAgencyHostingWebsiteV1Request, + CommonSuccessEmptyResource, + DeleteAgencyHostingWebsiteV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DeleteAgencyHostingWebsiteV1Request, + output: CommonSuccessEmptyResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DeleteBillingPaymentMethodV1Error = HostingerOpError; +/** Delete payment method Delete a payment method from your account. Use this endpoint to remove unused payment methods from user accounts. */ +export const deleteBillingPaymentMethodV1: API.OperationMethod< + DeleteBillingPaymentMethodV1Request, + CommonSuccessEmptyResource, + DeleteBillingPaymentMethodV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DeleteBillingPaymentMethodV1Request, + output: CommonSuccessEmptyResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DeleteDNSDNSRecordsV1Error = UnprocessableEntity | HostingerOpError; +/** Delete DNS records Delete DNS records for the selected domain. To filter which records to delete, add the `name` of the record and `type` to the filter. Multiple filters can be provided with single request. If you have multiple records with the same name and type, and you want to delete only part of them, refer to the `Update zone records` endpoint. Use this endpoint to remove specific DNS records from domains. */ +export const deleteDNSDNSRecordsV1: API.OperationMethod< + DeleteDNSDNSRecordsV1Request, + CommonSuccessEmptyResource, + DeleteDNSDNSRecordsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DeleteDNSDNSRecordsV1Request, + output: CommonSuccessEmptyResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DeleteDomainDomainForwardingV1Error = HostingerOpError; +/** Delete domain forwarding Delete domain forwarding data. Use this endpoint to remove redirect configuration from domains. */ +export const deleteDomainDomainForwardingV1: API.OperationMethod< + DeleteDomainDomainForwardingV1Request, + CommonSuccessEmptyResource, + DeleteDomainDomainForwardingV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DeleteDomainDomainForwardingV1Request, + output: CommonSuccessEmptyResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DeleteDomainWHOISProfileV1Error = HostingerOpError; +/** Delete WHOIS profile Delete WHOIS contact profile. Use this endpoint to remove unused contact profiles from account. */ +export const deleteDomainWHOISProfileV1: API.OperationMethod< + DeleteDomainWHOISProfileV1Request, + CommonSuccessEmptyResource, + DeleteDomainWHOISProfileV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DeleteDomainWHOISProfileV1Request, + output: CommonSuccessEmptyResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DeleteEcommerceAProductV1Error = HostingerOpError; +/** Delete a product Delete a product and its variants from the store. A subscription product with active subscribers is archived instead of deleted so its data stays available. */ +export const deleteEcommerceAProductV1: API.OperationMethod< + DeleteEcommerceAProductV1Request, + EcommerceV1ProductProductDeletedResource, + DeleteEcommerceAProductV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DeleteEcommerceAProductV1Request, + output: EcommerceV1ProductProductDeletedResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DeleteEcommerceAProductVariantV1Error = HostingerOpError; +/** Delete a product variant Delete a single variant from the product. */ +export const deleteEcommerceAProductVariantV1: API.OperationMethod< + DeleteEcommerceAProductVariantV1Request, + EcommerceV1VariantVariantDeletedResource, + DeleteEcommerceAProductVariantV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DeleteEcommerceAProductVariantV1Request, + output: EcommerceV1VariantVariantDeletedResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DeleteEcommerceStoreV1Error = HostingerOpError; +/** Delete store Soft-delete a store owned by your account. The underlying store data is preserved; only the store is marked as deleted. */ +export const deleteEcommerceStoreV1: API.OperationMethod< + DeleteEcommerceStoreV1Request, + EcommerceV1StoreStoreDeleteResource, + DeleteEcommerceStoreV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DeleteEcommerceStoreV1Request, + output: EcommerceV1StoreStoreDeleteResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DeleteHostingAccountCronJobV1Error = HostingerOpError; +/** Delete account cron job Permanently deletes the cron job identified by its uid. The uid is returned by the list cron jobs endpoint. */ +export const deleteHostingAccountCronJobV1: API.OperationMethod< + DeleteHostingAccountCronJobV1Request, + CommonSuccessEmptyResource, + DeleteHostingAccountCronJobV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DeleteHostingAccountCronJobV1Request, + output: CommonSuccessEmptyResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DeleteHostingAccountDatabaseV1Error = HostingerOpError; +/** Delete account database Permanently deletes a database and its remote connections. The database name must be the full name returned by the list databases endpoint. */ +export const deleteHostingAccountDatabaseV1: API.OperationMethod< + DeleteHostingAccountDatabaseV1Request, + CommonSuccessEmptyResource, + DeleteHostingAccountDatabaseV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DeleteHostingAccountDatabaseV1Request, + output: CommonSuccessEmptyResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DeleteHostingDatabaseRemoteConnectionV1Error = HostingerOpError; +/** Delete database remote connection Permanently removes a remote-access rule, revoking the given host's remote access to the database. Identify the rule with the required ip query parameter (the IPv4/IPv6 address, or "%", exactly as returned by the list remote connections endpoint). The database name must be the full name returned by the list databases endpoint. */ +export const deleteHostingDatabaseRemoteConnectionV1: API.OperationMethod< + DeleteHostingDatabaseRemoteConnectionV1Request, + CommonSuccessEmptyResource, + DeleteHostingDatabaseRemoteConnectionV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DeleteHostingDatabaseRemoteConnectionV1Request, + output: CommonSuccessEmptyResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DeleteHostingWebsiteParkedDomainV1Error = HostingerOpError; +/** Delete website parked domain Delete an existing parked or alias domain from the selected website. Use this endpoint to remove parked domains that are no longer needed. */ +export const deleteHostingWebsiteParkedDomainV1: API.OperationMethod< + DeleteHostingWebsiteParkedDomainV1Request, + CommonSuccessEmptyResource, + DeleteHostingWebsiteParkedDomainV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DeleteHostingWebsiteParkedDomainV1Request, + output: CommonSuccessEmptyResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DeleteHostingWebsiteRedirectV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Delete website redirect Permanently deletes the redirect identified by its source URL. Pass the `from` value exactly as returned by the list redirects endpoint. */ +export const deleteHostingWebsiteRedirectV1: API.OperationMethod< + DeleteHostingWebsiteRedirectV1Request, + CommonSuccessEmptyResource, + DeleteHostingWebsiteRedirectV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DeleteHostingWebsiteRedirectV1Request, + output: CommonSuccessEmptyResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DeleteHostingWebsiteSubdomainV1Error = HostingerOpError; +/** Delete website subdomain Delete an existing subdomain from the selected website. Use this endpoint to remove subdomains that are no longer needed. */ +export const deleteHostingWebsiteSubdomainV1: API.OperationMethod< + DeleteHostingWebsiteSubdomainV1Request, + CommonSuccessEmptyResource, + DeleteHostingWebsiteSubdomainV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DeleteHostingWebsiteSubdomainV1Request, + output: CommonSuccessEmptyResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DeleteHostingWebsiteV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Delete website This endpoint permanently removes a website and all of its data. This action cannot be undone. Before calling it, make sure the user understands the consequences and explicitly confirms that they want to proceed. All website files, databases and related configuration will be removed. The hosting plan itself is kept, so a new website can be created on it afterwards. Supported websites: main and addon domain websites on web hosting plans, and Website Builder websites. Parked domains and subdomains cannot be deleted with this endpoint. The domain must be the exact website domain, not a preview domain or an alias. Returns 404 when the domain does not exist or does not belong to the authenticated client. Website removal is processed asynchronously and can take a few minutes to complete. The response returns before the removal finishes. */ +export const deleteHostingWebsiteV1: API.OperationMethod< + DeleteHostingWebsiteV1Request, + CommonSuccessEmptyResource, + DeleteHostingWebsiteV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DeleteHostingWebsiteV1Request, + output: CommonSuccessEmptyResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DeleteHostingWordPressInstallationV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Delete WordPress installation Delete the specified WordPress installation, with optional file and database removal. This removes all associated components including plugins, themes, staging websites and any other related data. Provide the WordPress installation (software) identifier in the path. It can be obtained from GET /api/hosting/v1/wordpress/installations (the `id` field). */ +export const deleteHostingWordPressInstallationV1: API.OperationMethod< + DeleteHostingWordPressInstallationV1Request, + CommonSuccessEmptyResource, + DeleteHostingWordPressInstallationV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DeleteHostingWordPressInstallationV1Request, + output: CommonSuccessEmptyResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DeleteMailAliasV1Error = + | NotFound + | UnprocessableEntity + | HostingerOpError; +/** Delete alias Delete an alias. Messages sent to the alias address are no longer delivered to the mailbox. */ +export const deleteMailAliasV1: API.OperationMethod< + DeleteMailAliasV1Request, + CommonSuccessEmptyResource, + DeleteMailAliasV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DeleteMailAliasV1Request, + output: CommonSuccessEmptyResource, + errors: [NotFound, UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DeleteMailAutoreplyV1Error = + | NotFound + | UnprocessableEntity + | HostingerOpError; +/** Delete autoreply Delete the autoreply of a mailbox. The mailbox stops sending automatic replies immediately. */ +export const deleteMailAutoreplyV1: API.OperationMethod< + DeleteMailAutoreplyV1Request, + CommonSuccessEmptyResource, + DeleteMailAutoreplyV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DeleteMailAutoreplyV1Request, + output: CommonSuccessEmptyResource, + errors: [NotFound, UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DeleteMailCatchAllV1Error = + | NotFound + | UnprocessableEntity + | HostingerOpError; +/** Delete catch-all Delete a catch-all. Messages sent to unknown addresses of the domain are no longer routed to the mailbox. */ +export const deleteMailCatchAllV1: API.OperationMethod< + DeleteMailCatchAllV1Request, + CommonSuccessEmptyResource, + DeleteMailCatchAllV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DeleteMailCatchAllV1Request, + output: CommonSuccessEmptyResource, + errors: [NotFound, UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DeleteMailForwarderV1Error = + | NotFound + | UnprocessableEntity + | HostingerOpError; +/** Delete forwarder Delete a forwarder. The mailbox stops forwarding messages to the destination address immediately. */ +export const deleteMailForwarderV1: API.OperationMethod< + DeleteMailForwarderV1Request, + CommonSuccessEmptyResource, + DeleteMailForwarderV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DeleteMailForwarderV1Request, + output: CommonSuccessEmptyResource, + errors: [NotFound, UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DeleteMailMailboxV1Error = NotFound | Conflict | HostingerOpError; +/** Delete mailbox Delete a mailbox. The mailbox is soft-deleted and stays restorable for a limited period before it is permanently removed. */ +export const deleteMailMailboxV1: API.OperationMethod< + DeleteMailMailboxV1Request, + CommonSuccessEmptyResource, + DeleteMailMailboxV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DeleteMailMailboxV1Request, + output: CommonSuccessEmptyResource, + errors: [NotFound, Conflict, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DeleteMailWebhookV1Error = + | NotFound + | UnprocessableEntity + | HostingerOpError; +/** Delete webhook Permanently delete a webhook. This action cannot be undone. After deletion the URL no longer receives event notifications. */ +export const deleteMailWebhookV1: API.OperationMethod< + DeleteMailWebhookV1Request, + CommonSuccessEmptyResource, + DeleteMailWebhookV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DeleteMailWebhookV1Request, + output: CommonSuccessEmptyResource, + errors: [NotFound, UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DeleteReachAContactFieldV1Error = HostingerOpError; +/** Delete a contact field Delete a custom contact field. Every value contacts hold for the field is deleted with it, and for the choice types so are its options. The contacts themselves are not affected. */ +export const deleteReachAContactFieldV1: API.OperationMethod< + DeleteReachAContactFieldV1Request, + CommonSuccessEmptyResource, + DeleteReachAContactFieldV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DeleteReachAContactFieldV1Request, + output: CommonSuccessEmptyResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DeleteReachAProfileContactV1Error = HostingerOpError; +/** Delete a profile contact Permanently delete a contact from a profile. The contact is removed together with its custom field values and tag assignments. */ +export const deleteReachAProfileContactV1: API.OperationMethod< + DeleteReachAProfileContactV1Request, + CommonSuccessEmptyResource, + DeleteReachAProfileContactV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DeleteReachAProfileContactV1Request, + output: CommonSuccessEmptyResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DeleteReachAProfileSegmentV1Error = HostingerOpError; +/** Delete a profile segment Delete a segment. Only the segment definition is removed. The contacts that matched it are left untouched. */ +export const deleteReachAProfileSegmentV1: API.OperationMethod< + DeleteReachAProfileSegmentV1Request, + CommonSuccessEmptyResource, + DeleteReachAProfileSegmentV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DeleteReachAProfileSegmentV1Request, + output: CommonSuccessEmptyResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DeleteReachATagV1Error = HostingerOpError; +/** Delete a tag Delete a tag and remove it from every contact carrying it. The contacts themselves are not deleted. This is idempotent: deleting a tag that does not exist in the profile still succeeds. */ +export const deleteReachATagV1: API.OperationMethod< + DeleteReachATagV1Request, + CommonSuccessEmptyResource, + DeleteReachATagV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DeleteReachATagV1Request, + output: CommonSuccessEmptyResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DeleteReachFormV1Error = Conflict | HostingerOpError; +/** Delete form Permanently delete a form together with its template. A form that has already captured submissions cannot be deleted, so that the contacts it collected are never silently discarded - pause the form instead to stop it collecting new ones. Views alone do not block deletion. */ +export const deleteReachFormV1: API.OperationMethod< + DeleteReachFormV1Request, + CommonSuccessEmptyResource, + DeleteReachFormV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DeleteReachFormV1Request, + output: CommonSuccessEmptyResource, + errors: [Conflict, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DeleteVPSFirewallRuleV1Error = HostingerOpError; +/** Delete firewall rule Delete a specific firewall rule from a specified firewall. Any virtual machine that has this firewall activated will lose sync with the firewall and will have to be synced again manually. Use this endpoint to remove specific firewall rules. */ +export const deleteVPSFirewallRuleV1: API.OperationMethod< + DeleteVPSFirewallRuleV1Request, + CommonSuccessEmptyResource, + DeleteVPSFirewallRuleV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DeleteVPSFirewallRuleV1Request, + output: CommonSuccessEmptyResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DeleteVPSFirewallV1Error = HostingerOpError; +/** Delete firewall Delete a specified firewall. Any virtual machine that has this firewall activated will automatically have it deactivated. Use this endpoint to remove unused firewall configurations. */ +export const deleteVPSFirewallV1: API.OperationMethod< + DeleteVPSFirewallV1Request, + CommonSuccessEmptyResource, + DeleteVPSFirewallV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DeleteVPSFirewallV1Request, + output: CommonSuccessEmptyResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DeleteVPSProjectV1Error = UnprocessableEntity | HostingerOpError; +/** Delete project Completely removes a Docker Compose project from the virtual machine, stopping all containers and cleaning up associated resources including networks, volumes, and images. This operation is irreversible and will delete all project data. Use this when you want to permanently remove a project and free up system resources. */ +export const deleteVPSProjectV1: API.OperationMethod< + DeleteVPSProjectV1Request, + VPSV1ActionActionResource, + DeleteVPSProjectV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DeleteVPSProjectV1Request, + output: VPSV1ActionActionResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DeleteVPSPTRRecordV1Error = HostingerOpError; +/** Delete PTR record Delete a PTR (Pointer) record for a specified virtual machine. Once deleted, reverse DNS lookups to the virtual machine's IP address will no longer return the previously configured hostname. Use this endpoint to remove reverse DNS configuration from VPS instances. */ +export const deleteVPSPTRRecordV1: API.OperationMethod< + DeleteVPSPTRRecordV1Request, + VPSV1ActionActionResource, + DeleteVPSPTRRecordV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DeleteVPSPTRRecordV1Request, + output: VPSV1ActionActionResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DeleteVPSPublicKeyV1Error = HostingerOpError; +/** Delete public key Delete a public key from your account. **Deleting public key from account does not remove it from virtual machine** Use this endpoint to remove unused SSH keys from account. */ +export const deleteVPSPublicKeyV1: API.OperationMethod< + DeleteVPSPublicKeyV1Request, + CommonSuccessEmptyResource, + DeleteVPSPublicKeyV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DeleteVPSPublicKeyV1Request, + output: CommonSuccessEmptyResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DeleteVPSSnapshotV1Error = HostingerOpError; +/** Delete snapshot Delete a snapshot of a specified virtual machine. Use this endpoint to remove VPS snapshots. */ +export const deleteVPSSnapshotV1: API.OperationMethod< + DeleteVPSSnapshotV1Request, + VPSV1ActionActionResource, + DeleteVPSSnapshotV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DeleteVPSSnapshotV1Request, + output: VPSV1ActionActionResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DeployHostingWordPressPluginV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Deploy WordPress plugin Deploy a WordPress plugin from an already uploaded directory. This endpoint allows you to deploy a WordPress plugin that has been uploaded to the website's directory. The plugin will be activated and made available in the WordPress admin panel. */ +export const deployHostingWordPressPluginV1: API.OperationMethod< + DeployHostingWordPressPluginV1Request, + CommonSuccessEmptyResource, + DeployHostingWordPressPluginV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DeployHostingWordPressPluginV1Request, + output: CommonSuccessEmptyResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DeployHostingWordPressThemeV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Deploy WordPress theme Deploy a WordPress theme from an already uploaded directory. This endpoint allows you to deploy a WordPress theme that has been uploaded to the website's directory. The theme can be optionally activated after deployment. */ +export const deployHostingWordPressThemeV1: API.OperationMethod< + DeployHostingWordPressThemeV1Request, + CommonSuccessEmptyResource, + DeployHostingWordPressThemeV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DeployHostingWordPressThemeV1Request, + output: CommonSuccessEmptyResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DisableBillingAutoRenewalV1Error = HostingerOpError; +/** Disable auto-renewal Disable auto-renewal for a subscription. Use this endpoint when disable auto-renewal for a subscription. */ +export const disableBillingAutoRenewalV1: API.OperationMethod< + DisableBillingAutoRenewalV1Request, + BillingV1SubscriptionSubscriptionResource, + DisableBillingAutoRenewalV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DisableBillingAutoRenewalV1Request, + output: BillingV1SubscriptionSubscriptionResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DisableDomainDomainLockV1Error = HostingerOpError; +/** Disable domain lock Disable domain lock for the domain. Domain lock needs to be disabled before transferring the domain to another registrar. Use this endpoint to prepare domains for transfer to other registrars. */ +export const disableDomainDomainLockV1: API.OperationMethod< + DisableDomainDomainLockV1Request, + CommonSuccessEmptyResource, + DisableDomainDomainLockV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DisableDomainDomainLockV1Request, + output: CommonSuccessEmptyResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DisableDomainPrivacyProtectionV1Error = HostingerOpError; +/** Disable privacy protection Disable privacy protection for the domain. When privacy protection is disabled, domain owner's personal information is visible in public WHOIS database. Use this endpoint to make domain owner's information publicly visible. */ +export const disableDomainPrivacyProtectionV1: API.OperationMethod< + DisableDomainPrivacyProtectionV1Request, + CommonSuccessEmptyResource, + DisableDomainPrivacyProtectionV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DisableDomainPrivacyProtectionV1Request, + output: CommonSuccessEmptyResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DNSGetDNSSnapshotListV1Error = HostingerOpError; +/** Get DNS snapshot list Retrieve DNS snapshots for a domain. Use this endpoint to view available DNS backup points for restoration. */ +export const dNSGetDNSSnapshotListV1: API.OperationMethod< + DNSGetDNSSnapshotListV1Request, + DNSGetDNSSnapshotListV1Response, + DNSGetDNSSnapshotListV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DNSGetDNSSnapshotListV1Request, + output: DNSGetDNSSnapshotListV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DomainsAcceptIncomingDomainMoveV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Accept incoming domain move Accept an incoming move for a specified domain. The provided WHOIS profiles become the contacts of the domain, so they must belong to your account and satisfy the requirements of the TLD. Only the contact types the domain actually uses are applied, but all four profile IDs have to be provided. The move has to still be waiting for your decision, already accepted moves cannot be accepted again. Accepting does not complete the move. A confirmation email is sent to the email address of the new owner contact, and the domain changes hands only after the change is confirmed from it. Until then the move stays in the `activating` status, which can be followed with the [incoming move endpoint](#tag/domains-move). Use this endpoint to take ownership of a domain offered to you. */ +export const domainsAcceptIncomingDomainMoveV1: API.OperationMethod< + DomainsAcceptIncomingDomainMoveV1Request, + CommonSuccessEmptyResource, + DomainsAcceptIncomingDomainMoveV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DomainsAcceptIncomingDomainMoveV1Request, + output: CommonSuccessEmptyResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DomainsCancelOutgoingDomainMoveV1Error = HostingerOpError; +/** Cancel outgoing domain move Cancel an outgoing move for a specified domain. The move can only be cancelled while the receiving account has not accepted it yet. The domain stays in your account. Use this endpoint to withdraw a move you no longer want to complete. */ +export const domainsCancelOutgoingDomainMoveV1: API.OperationMethod< + DomainsCancelOutgoingDomainMoveV1Request, + CommonSuccessEmptyResource, + DomainsCancelOutgoingDomainMoveV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DomainsCancelOutgoingDomainMoveV1Request, + output: CommonSuccessEmptyResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DomainsChangeWHOISProfileForDomainV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Change WHOIS profile for domain Change WHOIS contact profile for a domain. Repoints the given contact roles to a new WHOIS profile and submits the change to the registry. The profile currently assigned to those roles is resolved automatically; the request fails if the given roles are not all on the same profile today. Changing transfer sensitive fields on the owner contact starts an IRTP verification. The change is processed asynchronously. Use this endpoint to move a registered domain onto different contact information. */ +export const domainsChangeWHOISProfileForDomainV1: API.OperationMethod< + DomainsChangeWHOISProfileForDomainV1Request, + CommonSuccessEmptyResource, + DomainsChangeWHOISProfileForDomainV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DomainsChangeWHOISProfileForDomainV1Request, + output: CommonSuccessEmptyResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DomainsGetDomainListV1Error = HostingerOpError; +/** Get domain list Retrieve all domains associated with your account. Use this endpoint to view user's domain portfolio. */ +export const domainsGetDomainListV1: API.OperationMethod< + DomainsGetDomainListV1Request, + DomainsGetDomainListV1Response, + DomainsGetDomainListV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DomainsGetDomainListV1Request, + output: DomainsGetDomainListV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DomainsGetIncomingDomainMoveListV1Error = HostingerOpError; +/** Get incoming domain move list Retrieve all domains other Hostinger accounts are moving to your account. Moves of every status are returned, including the ones which already completed. Use this endpoint to find domains waiting for you to accept them. */ +export const domainsGetIncomingDomainMoveListV1: API.OperationMethod< + DomainsGetIncomingDomainMoveListV1Request, + DomainsGetIncomingDomainMoveListV1Response, + DomainsGetIncomingDomainMoveListV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DomainsGetIncomingDomainMoveListV1Request, + output: DomainsGetIncomingDomainMoveListV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DomainsGetIncomingDomainMoveV1Error = HostingerOpError; +/** Get incoming domain move Retrieve the incoming move for a specified domain. Returns 404 when no account is moving this domain to you. Use this endpoint to check whether a domain addressed to you is still waiting to be accepted. */ +export const domainsGetIncomingDomainMoveV1: API.OperationMethod< + DomainsGetIncomingDomainMoveV1Request, + DomainsV1MoveMoveResource, + DomainsGetIncomingDomainMoveV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DomainsGetIncomingDomainMoveV1Request, + output: DomainsV1MoveMoveResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DomainsGetOutgoingDomainMoveListV1Error = HostingerOpError; +/** Get outgoing domain move list Retrieve all domains you are moving to other Hostinger accounts. Only moves which have not completed yet are returned. Use this endpoint to track moves you have initiated and the accounts they are addressed to. */ +export const domainsGetOutgoingDomainMoveListV1: API.OperationMethod< + DomainsGetOutgoingDomainMoveListV1Request, + DomainsGetOutgoingDomainMoveListV1Response, + DomainsGetOutgoingDomainMoveListV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DomainsGetOutgoingDomainMoveListV1Request, + output: DomainsGetOutgoingDomainMoveListV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DomainsGetOutgoingDomainMoveV1Error = HostingerOpError; +/** Get outgoing domain move Retrieve the outgoing move for a specified domain. Returns 404 when the domain has no move in progress. Use this endpoint to track the status of a move you have initiated for a single domain. */ +export const domainsGetOutgoingDomainMoveV1: API.OperationMethod< + DomainsGetOutgoingDomainMoveV1Request, + DomainsV1MoveMoveResource, + DomainsGetOutgoingDomainMoveV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DomainsGetOutgoingDomainMoveV1Request, + output: DomainsV1MoveMoveResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DomainsGetTransferListV1Error = HostingerOpError; +/** Get transfer list Retrieve all domain transfers in your portfolio. Use this endpoint to monitor incoming and outgoing registrar transfers across your domains. */ +export const domainsGetTransferListV1: API.OperationMethod< + DomainsGetTransferListV1Request, + DomainsGetTransferListV1Response, + DomainsGetTransferListV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DomainsGetTransferListV1Request, + output: DomainsGetTransferListV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DomainsGetWHOISProfileListV1Error = HostingerOpError; +/** Get WHOIS profile list Retrieve WHOIS contact profiles. Use this endpoint to view available contact profiles for domain registration. */ +export const domainsGetWHOISProfileListV1: API.OperationMethod< + DomainsGetWHOISProfileListV1Request, + DomainsGetWHOISProfileListV1Response, + DomainsGetWHOISProfileListV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DomainsGetWHOISProfileListV1Request, + output: DomainsGetWHOISProfileListV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DomainsPurchaseNewDomainV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Purchase new domain Purchase and register a new domain name. If registration fails, login to [hPanel](https://hpanel.hostinger.com/) and check domain registration status. If no payment method is provided, your default payment method will be used automatically. If no WHOIS information is provided, default contact information for that TLD will be used. Before making request, ensure WHOIS information for desired TLD exists in your account. Some TLDs require `additional_details` to be provided and these will be validated before completing purchase. Use this endpoint to register new domains for users. */ +export const domainsPurchaseNewDomainV1: API.OperationMethod< + DomainsPurchaseNewDomainV1Request, + BillingV1OrderOrderResource, + DomainsPurchaseNewDomainV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DomainsPurchaseNewDomainV1Request, + output: BillingV1OrderOrderResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DomainsRejectIncomingDomainMoveV1Error = HostingerOpError; +/** Reject incoming domain move Reject an incoming move for a specified domain. The domain stays in the account which initiated the move. Moves you have already accepted cannot be rejected anymore. Use this endpoint to decline a domain you do not want to take over. */ +export const domainsRejectIncomingDomainMoveV1: API.OperationMethod< + DomainsRejectIncomingDomainMoveV1Request, + CommonSuccessEmptyResource, + DomainsRejectIncomingDomainMoveV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DomainsRejectIncomingDomainMoveV1Request, + output: CommonSuccessEmptyResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DomainsStartOutgoingDomainMoveV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Start outgoing domain move Initiate a move of a specified domain to another Hostinger account. The receiving account has to already exist and accept the move before the domain changes hands. The domain must be active. The subscription it belongs to is resolved automatically, and the request is rejected with a 404 status code when the domain has no domain subscription of its own. Domains protected by premium protection require an additional verification step, such requests are rejected with a 428 status code. Use this endpoint to hand a domain over to another Hostinger user. */ +export const domainsStartOutgoingDomainMoveV1: API.OperationMethod< + DomainsStartOutgoingDomainMoveV1Request, + CommonSuccessEmptyResource, + DomainsStartOutgoingDomainMoveV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DomainsStartOutgoingDomainMoveV1Request, + output: CommonSuccessEmptyResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DomainsSuggestDomainNamesFromADescriptionV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Suggest domain names from a description Suggest available domain names based on a free-text description of your project. Suggestions are generated by an AI model, so they differ between calls. Endpoint has rate limit of 90 requests per minute. Use this endpoint to find a domain name when you only know what the website is about. */ +export const domainsSuggestDomainNamesFromADescriptionV1: API.OperationMethod< + DomainsSuggestDomainNamesFromADescriptionV1Request, + DomainsSuggestDomainNamesFromADescriptionV1Response, + DomainsSuggestDomainNamesFromADescriptionV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DomainsSuggestDomainNamesFromADescriptionV1Request, + output: DomainsSuggestDomainNamesFromADescriptionV1Response, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DomainsSuggestDomainNamesFromADomainV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Suggest domain names from a domain Suggest available domain names based on a domain name you already have in mind. Suggestions are generated by an AI model, so they differ between calls. Endpoint has rate limit of 90 requests per minute. Use this endpoint when the domain you wanted is taken and you need close alternatives. */ +export const domainsSuggestDomainNamesFromADomainV1: API.OperationMethod< + DomainsSuggestDomainNamesFromADomainV1Request, + DomainsSuggestDomainNamesFromADomainV1Response, + DomainsSuggestDomainNamesFromADomainV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DomainsSuggestDomainNamesFromADomainV1Request, + output: DomainsSuggestDomainNamesFromADomainV1Response, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type DomainsUnsetDefaultWHOISProfileV1Error = HostingerOpError; +/** Unset default WHOIS profile Unset WHOIS contact profile as default. The profile itself is kept, it is only no longer pre-selected for its TLD. Use this endpoint to stop reusing contact information for new registrations. */ +export const domainsUnsetDefaultWHOISProfileV1: API.OperationMethod< + DomainsUnsetDefaultWHOISProfileV1Request, + CommonSuccessEmptyResource, + DomainsUnsetDefaultWHOISProfileV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: DomainsUnsetDefaultWHOISProfileV1Request, + output: CommonSuccessEmptyResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type EcommerceCreateAPaymentProviderConnectLinkV1Error = + HostingerOpError; +/** Create a payment provider connect link Create an onboarding link for connecting a payment gateway to the store. Returns the gateway onboarding URL for the merchant to open and a deep-link into the store admin. */ +export const ecommerceCreateAPaymentProviderConnectLinkV1: API.OperationMethod< + EcommerceCreateAPaymentProviderConnectLinkV1Request, + EcommerceV1PaymentProviderPaymentProviderConnectLinkResource, + EcommerceCreateAPaymentProviderConnectLinkV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: EcommerceCreateAPaymentProviderConnectLinkV1Request, + output: EcommerceV1PaymentProviderPaymentProviderConnectLinkResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type EcommerceCreateAProductImageUploadURLV1Error = HostingerOpError; +/** Create a product image upload URL Returns a signed URL to upload a product image to (multipart/form-data POST). Then call the attach-image endpoint with the returned object_name to scan and attach it to the product. */ +export const ecommerceCreateAProductImageUploadURLV1: API.OperationMethod< + EcommerceCreateAProductImageUploadURLV1Request, + EcommerceV1ProductProductImageUploadUrlResource, + EcommerceCreateAProductImageUploadURLV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: EcommerceCreateAProductImageUploadURLV1Request, + output: EcommerceV1ProductProductImageUploadUrlResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type EcommerceFulfilAnOrderV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Fulfil an order Create a fulfilment for the order and attach tracking in one call. Omit items to fulfil every remaining unfulfilled item. Returns the updated order summary. */ +export const ecommerceFulfilAnOrderV1: API.OperationMethod< + EcommerceFulfilAnOrderV1Request, + EcommerceV1OrderOrderResponseResource, + EcommerceFulfilAnOrderV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: EcommerceFulfilAnOrderV1Request, + output: EcommerceV1OrderOrderResponseResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type EcommerceUploadAndAttachAProductImageV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Upload and attach a product image Fetch a raster image (JPEG, PNG, GIF or WebP, max 15MB) from a URL and attach it to a product in a single call. The image is virus-scanned and validated by content, then stored on the CDN. Set is_thumbnail to make it the product's primary image. */ +export const ecommerceUploadAndAttachAProductImageV1: API.OperationMethod< + EcommerceUploadAndAttachAProductImageV1Request, + EcommerceV1ProductProductImageUploadResource, + EcommerceUploadAndAttachAProductImageV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: EcommerceUploadAndAttachAProductImageV1Request, + output: EcommerceV1ProductProductImageUploadResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type EnableBillingAutoRenewalV1Error = HostingerOpError; +/** Enable auto-renewal Enable auto-renewal for a subscription. Use this endpoint when enable auto-renewal for a subscription. */ +export const enableBillingAutoRenewalV1: API.OperationMethod< + EnableBillingAutoRenewalV1Request, + BillingV1SubscriptionSubscriptionResource, + EnableBillingAutoRenewalV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: EnableBillingAutoRenewalV1Request, + output: BillingV1SubscriptionSubscriptionResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type EnableDomainDomainLockV1Error = HostingerOpError; +/** Enable domain lock Enable domain lock for the domain. When domain lock is enabled, the domain cannot be transferred to another registrar without first disabling the lock. Use this endpoint to secure domains against unauthorized transfers. */ +export const enableDomainDomainLockV1: API.OperationMethod< + EnableDomainDomainLockV1Request, + CommonSuccessEmptyResource, + EnableDomainDomainLockV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: EnableDomainDomainLockV1Request, + output: CommonSuccessEmptyResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type EnableDomainPrivacyProtectionV1Error = HostingerOpError; +/** Enable privacy protection Enable privacy protection for the domain. When privacy protection is enabled, domain owner's personal information is hidden from public WHOIS database. Use this endpoint to protect domain owner's personal information from public view. */ +export const enableDomainPrivacyProtectionV1: API.OperationMethod< + EnableDomainPrivacyProtectionV1Request, + CommonSuccessEmptyResource, + EnableDomainPrivacyProtectionV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: EnableDomainPrivacyProtectionV1Request, + output: CommonSuccessEmptyResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type EnableEcommerceManualPaymentMethodV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Enable manual payment method Enable a manual payment method so the store can accept orders without an online payment provider. */ +export const enableEcommerceManualPaymentMethodV1: API.OperationMethod< + EnableEcommerceManualPaymentMethodV1Request, + EcommerceV1PaymentManualPaymentResource, + EnableEcommerceManualPaymentMethodV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: EnableEcommerceManualPaymentMethodV1Request, + output: EcommerceV1PaymentManualPaymentResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type GenerateHostingAFreeSubdomainV1Error = HostingerOpError; +/** Generate a free subdomain Generate a unique free subdomain that can be used for hosting services without purchasing custom domains. Free subdomains allow you to start using hosting services immediately and you can always connect a custom domain to your site later. */ +export const generateHostingAFreeSubdomainV1: API.OperationMethod< + GenerateHostingAFreeSubdomainV1Request, + HostingV1DomainsFreeSubdomainResource, + GenerateHostingAFreeSubdomainV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: GenerateHostingAFreeSubdomainV1Request, + output: HostingV1DomainsFreeSubdomainResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type GetAgencyHostingWebsiteDetailsV1Error = HostingerOpError; +/** Get website details Retrieves detailed information about a specific Agency Plan website, including configuration, status, metadata, hosting plan details, and resource quotas. */ +export const getAgencyHostingWebsiteDetailsV1: API.OperationMethod< + GetAgencyHostingWebsiteDetailsV1Request, + AgencyHostingV1WebsitesWebsiteResource, + GetAgencyHostingWebsiteDetailsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: GetAgencyHostingWebsiteDetailsV1Request, + output: AgencyHostingV1WebsitesWebsiteResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type GetAgencyHostingWebsiteSetupStatusV1Error = HostingerOpError; +/** Get website setup status Returns the current status of an Agency Plan website setup started via the setups endpoint. Poll this endpoint using the `setup_uuid` returned from the provisioning request until `status` becomes `completed`, at which point `website_uid` identifies the new website. */ +export const getAgencyHostingWebsiteSetupStatusV1: API.OperationMethod< + GetAgencyHostingWebsiteSetupStatusV1Request, + AgencyHostingV1SetupsWebsiteSetupStatusResource, + GetAgencyHostingWebsiteSetupStatusV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: GetAgencyHostingWebsiteSetupStatusV1Request, + output: AgencyHostingV1SetupsWebsiteSetupStatusResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type GetAgencyHostingWordPressSettingsV1Error = HostingerOpError; +/** Get WordPress settings Returns the current WordPress settings for an Agency Plan website: installed core version, LiteSpeed Cache plugin status, object cache status, and maintenance mode status. */ +export const getAgencyHostingWordPressSettingsV1: API.OperationMethod< + GetAgencyHostingWordPressSettingsV1Request, + AgencyHostingV1WordPressSettingsResource, + GetAgencyHostingWordPressSettingsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: GetAgencyHostingWordPressSettingsV1Request, + output: AgencyHostingV1WordPressSettingsResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type GetDNSDNSRecordsV1Error = HostingerOpError; +/** Get DNS records Retrieve DNS zone records for a specific domain. Use this endpoint to view current DNS configuration for domain management. */ +export const getDNSDNSRecordsV1: API.OperationMethod< + GetDNSDNSRecordsV1Request, + GetDNSDNSRecordsV1Response, + GetDNSDNSRecordsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: GetDNSDNSRecordsV1Request, + output: GetDNSDNSRecordsV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type GetDNSDNSSnapshotV1Error = HostingerOpError; +/** Get DNS snapshot Retrieve particular DNS snapshot with contents of DNS zone records. Use this endpoint to view historical DNS configurations for domains. */ +export const getDNSDNSSnapshotV1: API.OperationMethod< + GetDNSDNSSnapshotV1Request, + DNSV1SnapshotSnapshotWithContentResource, + GetDNSDNSSnapshotV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: GetDNSDNSSnapshotV1Request, + output: DNSV1SnapshotSnapshotWithContentResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type GetDomainDomainAuthorizationCodeV1Error = HostingerOpError; +/** Get domain authorization code Retrieve the authorization (EPP) code for a specified domain so it can be transferred away from Hostinger to another registrar. Requesting a new code invalidates any code retrieved previously. Use this endpoint to obtain the code required to transfer a domain to another registrar. */ +export const getDomainDomainAuthorizationCodeV1: API.OperationMethod< + GetDomainDomainAuthorizationCodeV1Request, + DomainsV1PortfolioAuthCodeAuthCodeResource, + GetDomainDomainAuthorizationCodeV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: GetDomainDomainAuthorizationCodeV1Request, + output: DomainsV1PortfolioAuthCodeAuthCodeResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type GetDomainDomainDetailsV1Error = HostingerOpError; +/** Get domain details Retrieve detailed information for specified domain. Use this endpoint to view comprehensive domain configuration and status. */ +export const getDomainDomainDetailsV1: API.OperationMethod< + GetDomainDomainDetailsV1Request, + DomainsV1DomainDomainExtendedResource, + GetDomainDomainDetailsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: GetDomainDomainDetailsV1Request, + output: DomainsV1DomainDomainExtendedResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type GetDomainDomainForwardingV1Error = HostingerOpError; +/** Get domain forwarding Retrieve domain forwarding data. Use this endpoint to view current redirect configuration for domains. */ +export const getDomainDomainForwardingV1: API.OperationMethod< + GetDomainDomainForwardingV1Request, + DomainsV1ForwardingForwardingResource, + GetDomainDomainForwardingV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: GetDomainDomainForwardingV1Request, + output: DomainsV1ForwardingForwardingResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type GetDomainDomainRenewalInformationV1Error = HostingerOpError; +/** Get domain renewal information Retrieve renewal information for a specified domain, including its status and current expiration date. Use this endpoint to build renewal automation and expiry monitoring for a single domain. */ +export const getDomainDomainRenewalInformationV1: API.OperationMethod< + GetDomainDomainRenewalInformationV1Request, + DomainsV1PortfolioRenewalRenewalInformationResource, + GetDomainDomainRenewalInformationV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: GetDomainDomainRenewalInformationV1Request, + output: DomainsV1PortfolioRenewalRenewalInformationResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type GetDomainPendingIRTPVerificationV1Error = HostingerOpError; +/** Get pending IRTP verification Retrieve a pending IRTP verification for a domain. Both the old and new registrant must confirm it before the WHOIS change takes effect. Use this endpoint to check the status of a WHOIS change awaiting registrant confirmation. */ +export const getDomainPendingIRTPVerificationV1: API.OperationMethod< + GetDomainPendingIRTPVerificationV1Request, + DomainsV1IRTPVerificationResource, + GetDomainPendingIRTPVerificationV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: GetDomainPendingIRTPVerificationV1Request, + output: DomainsV1IRTPVerificationResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type GetDomainTransferV1Error = HostingerOpError; +/** Get transfer Retrieve the transfer for a specified domain. Use this endpoint to track an incoming or outgoing registrar transfer and its status. */ +export const getDomainTransferV1: API.OperationMethod< + GetDomainTransferV1Request, + DomainsV1TransferTransferResource, + GetDomainTransferV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: GetDomainTransferV1Request, + output: DomainsV1TransferTransferResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type GetDomainWHOISProfileUsageV1Error = HostingerOpError; +/** Get WHOIS profile usage Retrieve domain list where provided WHOIS contact profile is used. Use this endpoint to view which domains use specific contact profiles. */ +export const getDomainWHOISProfileUsageV1: API.OperationMethod< + GetDomainWHOISProfileUsageV1Request, + GetDomainWHOISProfileUsageV1Response, + GetDomainWHOISProfileUsageV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: GetDomainWHOISProfileUsageV1Request, + output: GetDomainWHOISProfileUsageV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type GetDomainWHOISProfileV1Error = HostingerOpError; +/** Get WHOIS profile Retrieve a WHOIS contact profile. Use this endpoint to view domain registration contact information. */ +export const getDomainWHOISProfileV1: API.OperationMethod< + GetDomainWHOISProfileV1Request, + DomainsV1WHOISProfileResource, + GetDomainWHOISProfileV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: GetDomainWHOISProfileV1Request, + output: DomainsV1WHOISProfileResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type GetEcommerceAnOrderV1Error = HostingerOpError; +/** Retrieve an order Retrieve one order in full: line items (each with the id the fulfil endpoint needs), addresses, the totals breakdown and fulfilments with tracking. Amounts are in the smallest currency unit. */ +export const getEcommerceAnOrderV1: API.OperationMethod< + GetEcommerceAnOrderV1Request, + EcommerceV1OrderOrderDetailResponseResource, + GetEcommerceAnOrderV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: GetEcommerceAnOrderV1Request, + output: EcommerceV1OrderOrderDetailResponseResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type GetEcommerceCustomStorefrontSetupInstructionsV1Error = + HostingerOpError; +/** Get custom storefront setup instructions Retrieve step-by-step setup instructions, formatted as Markdown, for connecting a custom sales channel to your store and keeping your catalog, orders, shipping and payments in sync through the Ecommerce API. */ +export const getEcommerceCustomStorefrontSetupInstructionsV1: API.OperationMethod< + GetEcommerceCustomStorefrontSetupInstructionsV1Request, + EcommerceV1MiscellaneousCustomStorefrontInstructionsResource, + GetEcommerceCustomStorefrontSetupInstructionsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: GetEcommerceCustomStorefrontSetupInstructionsV1Request, + output: EcommerceV1MiscellaneousCustomStorefrontInstructionsResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type GetEcommerceStoreMetadataV1Error = HostingerOpError; +/** Get store metadata Get a store's readiness metadata: whether payment methods and shipping are configured, plus its default currency. Useful to verify prerequisites before building a storefront. */ +export const getEcommerceStoreMetadataV1: API.OperationMethod< + GetEcommerceStoreMetadataV1Request, + EcommerceV1StoreStoreMetadataResource, + GetEcommerceStoreMetadataV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: GetEcommerceStoreMetadataV1Request, + output: EcommerceV1StoreStoreMetadataResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type GetEcommerceStoresV1Error = HostingerOpError; +/** Get stores Retrieve the stores associated with your account. */ +export const getEcommerceStoresV1: API.OperationMethod< + GetEcommerceStoresV1Request, + GetEcommerceStoresV1Response, + GetEcommerceStoresV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: GetEcommerceStoresV1Request, + output: GetEcommerceStoresV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type GetHorizonWebsiteV1Error = HostingerOpError; +/** Get website Get a link for the user to edit their website in Hostinger Horizons interface.\n Use this tool when user wants to modify, edit or add new features to an existing website.\n Websites can only be edited in Hostinger Horizons interface in the provided website URL. */ +export const getHorizonWebsiteV1: API.OperationMethod< + GetHorizonWebsiteV1Request, + HorizonsV1WebsitesWebsiteUrlResource, + GetHorizonWebsiteV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: GetHorizonWebsiteV1Request, + output: HorizonsV1WebsitesWebsiteUrlResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type GetHostingAIOptionStatusV1Error = HostingerOpError; +/** Show AI option status Show the current AI option status for the Hostinger Tools plugin on the specified WordPress installation. Filter by `option` to return a single option, or omit it to return all options. Provide the WordPress installation (software) identifier in the path. It can be obtained from GET /api/hosting/v1/wordpress/installations (the `id` field). */ +export const getHostingAIOptionStatusV1: API.OperationMethod< + GetHostingAIOptionStatusV1Request, + WordPressV1HostingerPluginsAiOptionStatusResource, + GetHostingAIOptionStatusV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: GetHostingAIOptionStatusV1Request, + output: WordPressV1HostingerPluginsAiOptionStatusResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type GetHostingCronJobOutputV1Error = HostingerOpError; +/** Get cron job output Returns the output captured from the last execution of the cron job identified by its uid. The uid is returned by the list cron jobs endpoint. */ +export const getHostingCronJobOutputV1: API.OperationMethod< + GetHostingCronJobOutputV1Request, + HostingV1CronJobsCronJobOutputResource, + GetHostingCronJobOutputV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: GetHostingCronJobOutputV1Request, + output: HostingV1CronJobsCronJobOutputResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type GetHostingInstallationJWTTokenV1Error = HostingerOpError; +/** Get installation JWT token Return a JWT token used to authenticate requests against the specified WordPress installation, including its MCP (Model Context Protocol) endpoint. Provide the WordPress installation (software) identifier in the path. It can be obtained from GET /api/hosting/v1/wordpress/installations (the `id` field). */ +export const getHostingInstallationJWTTokenV1: API.OperationMethod< + GetHostingInstallationJWTTokenV1Request, + WordPressV1InstallationsJwtTokenResource, + GetHostingInstallationJWTTokenV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: GetHostingInstallationJWTTokenV1Request, + output: WordPressV1InstallationsJwtTokenResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type GetHostingLiteSpeedCacheStatusV1Error = HostingerOpError; +/** Show LiteSpeed Cache status Show the LiteSpeed Cache status for the specified WordPress installation. Provide the WordPress installation (software) identifier in the path. It can be obtained from GET /api/hosting/v1/wordpress/installations (the `id` field). */ +export const getHostingLiteSpeedCacheStatusV1: API.OperationMethod< + GetHostingLiteSpeedCacheStatusV1Request, + WordPressV1LitespeedLitespeedCacheStatusResource, + GetHostingLiteSpeedCacheStatusV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: GetHostingLiteSpeedCacheStatusV1Request, + output: WordPressV1LitespeedLitespeedCacheStatusResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type GetHostingMaintenanceStatusV1Error = HostingerOpError; +/** Show maintenance status Show the maintenance mode status for the specified WordPress installation. Provide the WordPress installation (software) identifier in the path. It can be obtained from GET /api/hosting/v1/wordpress/installations (the `id` field). */ +export const getHostingMaintenanceStatusV1: API.OperationMethod< + GetHostingMaintenanceStatusV1Request, + WordPressV1MaintenanceMaintenanceStatusResource, + GetHostingMaintenanceStatusV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: GetHostingMaintenanceStatusV1Request, + output: WordPressV1MaintenanceMaintenanceStatusResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type GetHostingMemcachedObjectCacheStatusV1Error = HostingerOpError; +/** Show Memcached object cache status Show the Memcached object cache status for the specified WordPress installation. Provide the WordPress installation (software) identifier in the path. It can be obtained from GET /api/hosting/v1/wordpress/installations (the `id` field). */ +export const getHostingMemcachedObjectCacheStatusV1: API.OperationMethod< + GetHostingMemcachedObjectCacheStatusV1Request, + WordPressV1MemcachedMemcachedStatusResource, + GetHostingMemcachedObjectCacheStatusV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: GetHostingMemcachedObjectCacheStatusV1Request, + output: WordPressV1MemcachedMemcachedStatusResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type GetHostingNodeJSBuildLogsV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Get NodeJS build logs Retrieve logs from a specific Node.js build process. To stream live output while a build is running, poll this endpoint repeatedly while the build state is `running`, passing the previously returned `lines` count as `from_line` to fetch only new output since the last call. Log content may contain ANSI escape sequences (color codes). */ +export const getHostingNodeJSBuildLogsV1: API.OperationMethod< + GetHostingNodeJSBuildLogsV1Request, + HostingV1NodeJsBuildLogsResource, + GetHostingNodeJSBuildLogsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: GetHostingNodeJSBuildLogsV1Request, + output: HostingV1NodeJsBuildLogsResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type GetHostingPHPDetailsV1Error = HostingerOpError; +/** Get PHP details Returns the full PHP configuration for the website: current version, available versions (supported and unsupported), enabled/disabled extensions, options with their current value, default, type and the plan limit (`max`), and conflicting extension groups. Use it to check the current PHP setup before updating the version, extensions or options. */ +export const getHostingPHPDetailsV1: API.OperationMethod< + GetHostingPHPDetailsV1Request, + HostingV1PhpPhpDetailsResource, + GetHostingPHPDetailsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: GetHostingPHPDetailsV1Request, + output: HostingV1PhpPhpDetailsResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type GetHostingPHPInfoV1Error = HostingerOpError; +/** Get PHP info Returns the full phpinfo page (HTML) for the website. Use it to debug PHP issues or inspect the complete PHP environment of the website. */ +export const getHostingPHPInfoV1: API.OperationMethod< + GetHostingPHPInfoV1Request, + HostingV1PhpPhpInfoResource, + GetHostingPHPInfoV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: GetHostingPHPInfoV1Request, + output: HostingV1PhpPhpInfoResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type GetHostingPhpMyAdminLinkV1Error = HostingerOpError; +/** Get phpMyAdmin link Returns a direct sign-on link to phpMyAdmin for the specified database. Use this when a visual database interface is needed for SQL queries, imports, exports, or table management. The database name must be the full name returned by the list databases endpoint. */ +export const getHostingPhpMyAdminLinkV1: API.OperationMethod< + GetHostingPhpMyAdminLinkV1Request, + HostingV1DatabasesPhpMyAdminLinkResource, + GetHostingPhpMyAdminLinkV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: GetHostingPhpMyAdminLinkV1Request, + output: HostingV1DatabasesPhpMyAdminLinkResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type GetHostingWebsiteFileContentV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Get website file content Get a single file's content, relative to a website's document root. Read-only; refuses symlinks, oversized files, non-text file types, and files identified as containing secrets (e.g. credential files) — none of these are returned by this endpoint. */ +export const getHostingWebsiteFileContentV1: API.OperationMethod< + GetHostingWebsiteFileContentV1Request, + HostingV1FilesFileContentResource, + GetHostingWebsiteFileContentV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: GetHostingWebsiteFileContentV1Request, + output: HostingV1FilesFileContentResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type GetHostingWordPressCoreVersionV1Error = HostingerOpError; +/** Show WordPress core version Show the WordPress core version for the specified installation, along with known vulnerabilities affecting it. Provide the WordPress installation (software) identifier in the path. It can be obtained from GET /api/hosting/v1/wordpress/installations (the `id` field). */ +export const getHostingWordPressCoreVersionV1: API.OperationMethod< + GetHostingWordPressCoreVersionV1Request, + WordPressV1InstallationsVersionResource, + GetHostingWordPressCoreVersionV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: GetHostingWordPressCoreVersionV1Request, + output: WordPressV1InstallationsVersionResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type GetMailOrderPlanV1Error = NotFound | HostingerOpError; +/** Get order plan Retrieve the plan the given mail order was purchased with, including domain-level and mailbox-level quotas, limits, and protocol availability. */ +export const getMailOrderPlanV1: API.OperationMethod< + GetMailOrderPlanV1Request, + MailV1OrdersPlanResource, + GetMailOrderPlanV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: GetMailOrderPlanV1Request, + output: MailV1OrdersPlanResource, + errors: [NotFound, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type GetMailWebhookV1Error = + | NotFound + | UnprocessableEntity + | HostingerOpError; +/** Get webhook Retrieve the details of a single webhook. The webhook secret is never included; it is returned only when a webhook is created or its secret is regenerated. */ +export const getMailWebhookV1: API.OperationMethod< + GetMailWebhookV1Request, + MailV1WebhooksWebhookResource, + GetMailWebhookV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: GetMailWebhookV1Request, + output: MailV1WebhooksWebhookResource, + errors: [NotFound, UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type GetReachAutomationDetailsV1Error = HostingerOpError; +/** Get automation details Get a single automation with the counts of contacts that entered it, are moving through it, finished it or failed on the way. This describes the automation itself. To see the workflow it runs, use the steps endpoint. */ +export const getReachAutomationDetailsV1: API.OperationMethod< + GetReachAutomationDetailsV1Request, + ReachV1AutomationsAutomationResource, + GetReachAutomationDetailsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: GetReachAutomationDetailsV1Request, + output: ReachV1AutomationsAutomationResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type GetReachCampaignDetailsV1Error = HostingerOpError; +/** Get campaign details Get a single campaign with its sender, subject, template reference, targeting and delivery progress. This describes how the campaign was set up and how far it has got. For opens, clicks and unsubscribes use the campaign statistics endpoint. */ +export const getReachCampaignDetailsV1: API.OperationMethod< + GetReachCampaignDetailsV1Request, + ReachV1CampaignsCampaignDetailsResource, + GetReachCampaignDetailsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: GetReachCampaignDetailsV1Request, + output: ReachV1CampaignsCampaignDetailsResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type GetReachCampaignPerformanceV1Error = HostingerOpError; +/** Get campaign performance Get the performance of a campaign: delivery, opens, clicks and unsubscribes, with the matching rates. Every count is unique contacts rather than raw events, so a contact who opens the same email five times is counted once. */ +export const getReachCampaignPerformanceV1: API.OperationMethod< + GetReachCampaignPerformanceV1Request, + ReachV1CampaignsCampaignStatisticsResource, + GetReachCampaignPerformanceV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: GetReachCampaignPerformanceV1Request, + output: ReachV1CampaignsCampaignStatisticsResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type GetReachConnectedSendingDomainV1Error = HostingerOpError; +/** Get connected sending domain Get the sending domain connected to the profile, its verification status and any suspended sender addresses. Campaigns only go out once a domain is connected and active, so this is the cheapest way to check that precondition before building one. A profile with no domain connected returns the same shape with every field set to `null`. For the individual MX, SPF, DKIM and DMARC records behind the status, use the DNS status endpoint. */ +export const getReachConnectedSendingDomainV1: API.OperationMethod< + GetReachConnectedSendingDomainV1Request, + ReachV1ProfilesDomainsSendingDomainResource, + GetReachConnectedSendingDomainV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: GetReachConnectedSendingDomainV1Request, + output: ReachV1ProfilesDomainsSendingDomainResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type GetReachContactDetailsV1Error = HostingerOpError; +/** Get contact details Get the full details of a single contact. Alongside the contact's own attributes this returns the tags assigned to it and the values it holds for the profile's custom contact fields. */ +export const getReachContactDetailsV1: API.OperationMethod< + GetReachContactDetailsV1Request, + ReachV1ContactsContactDetailsResource, + GetReachContactDetailsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: GetReachContactDetailsV1Request, + output: ReachV1ContactsContactDetailsResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type GetReachFormDetailsV1Error = HostingerOpError; +/** Get form details Get a single form with the URL of its hosted template and the tags it applies to the contacts it captures. There is no ready-made embed snippet in the response - either serve the template HTML yourself or build your own embed around the form uuid. */ +export const getReachFormDetailsV1: API.OperationMethod< + GetReachFormDetailsV1Request, + ReachV1FormsFormDetailsResource, + GetReachFormDetailsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: GetReachFormDetailsV1Request, + output: ReachV1FormsFormDetailsResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type GetReachProfileDomainDNSStatusV1Error = HostingerOpError; +/** Get profile domain DNS status Retrieve the DNS configuration status for a profile's domain. This endpoint reports the state of MX, SPF, DKIM and DMARC records, including the actual records found and the suggested records required for correct email delivery. */ +export const getReachProfileDomainDNSStatusV1: API.OperationMethod< + GetReachProfileDomainDNSStatusV1Request, + ReachV1ProfilesDomainsDnsStatusResource, + GetReachProfileDomainDNSStatusV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: GetReachProfileDomainDNSStatusV1Request, + output: ReachV1ProfilesDomainsDnsStatusResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type GetReachProfileSegmentDetailsV1Error = HostingerOpError; +/** Get profile segment details Get a single segment of a profile, including the conditions that define it. To retrieve the contacts currently matching those conditions, use the segment contacts endpoint instead. */ +export const getReachProfileSegmentDetailsV1: API.OperationMethod< + GetReachProfileSegmentDetailsV1Request, + ReachV1ContactsSegmentsSegmentResource, + GetReachProfileSegmentDetailsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: GetReachProfileSegmentDetailsV1Request, + output: ReachV1ContactsSegmentsSegmentResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type GetReachRemainingPlanLimitsV1Error = HostingerOpError; +/** Get remaining plan limits Get how much of the plan is left for the current period. Two things to keep in mind before you build alerting on this. The period is a calendar month rather than a billing anniversary, so the counters reset on the 1st no matter when the subscription started. And usage is tracked per order, so every profile on the same order shares one pool and reports the same numbers here. Only the current period is available, past usage is not kept. */ +export const getReachRemainingPlanLimitsV1: API.OperationMethod< + GetReachRemainingPlanLimitsV1Request, + ReachV1ProfilesPlanLimitsResource, + GetReachRemainingPlanLimitsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: GetReachRemainingPlanLimitsV1Request, + output: ReachV1ProfilesPlanLimitsResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type GetV2DomainVerificationsDIRECTError = + | UnprocessableEntity + | HostingerOpError; +/** Get domain verifications Retrieve a list of pending and completed domain verifications. */ +export const getV2DomainVerificationsDIRECT: API.OperationMethod< + GetV2DomainVerificationsDIRECTRequest, + DomainAccessVerifierV2VerificationsActiveVerificationsCollection, + GetV2DomainVerificationsDIRECTError, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: GetV2DomainVerificationsDIRECTRequest, + output: DomainAccessVerifierV2VerificationsActiveVerificationsCollection, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type GetVPSActionDetailsV1Error = HostingerOpError; +/** Get action details Retrieve detailed information about a specific action performed on a specified virtual machine. Use this endpoint to monitor specific VPS operation status and details. */ +export const getVPSActionDetailsV1: API.OperationMethod< + GetVPSActionDetailsV1Request, + VPSV1ActionActionResource, + GetVPSActionDetailsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: GetVPSActionDetailsV1Request, + output: VPSV1ActionActionResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type GetVPSActionsV1Error = HostingerOpError; +/** Get actions Retrieve actions performed on a specified virtual machine. Actions are operations or events that have been executed on the virtual machine, such as starting, stopping, or modifying the machine. This endpoint allows you to view the history of these actions, providing details about each action, such as the action name, timestamp, and status. Use this endpoint to view VPS operation history and troubleshoot issues. */ +export const getVPSActionsV1: API.OperationMethod< + GetVPSActionsV1Request, + GetVPSActionsV1Response, + GetVPSActionsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: GetVPSActionsV1Request, + output: GetVPSActionsV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type GetVPSAttachedPublicKeysV1Error = HostingerOpError; +/** Get attached public keys Retrieve public keys attached to a specified virtual machine. Use this endpoint to view SSH keys configured for specific VPS instances. */ +export const getVPSAttachedPublicKeysV1: API.OperationMethod< + GetVPSAttachedPublicKeysV1Request, + GetVPSAttachedPublicKeysV1Response, + GetVPSAttachedPublicKeysV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: GetVPSAttachedPublicKeysV1Request, + output: GetVPSAttachedPublicKeysV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type GetVPSBackupsV1Error = HostingerOpError; +/** Get backups Retrieve backups for a specified virtual machine. Use this endpoint to view available backup points for VPS data recovery. */ +export const getVPSBackupsV1: API.OperationMethod< + GetVPSBackupsV1Request, + GetVPSBackupsV1Response, + GetVPSBackupsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: GetVPSBackupsV1Request, + output: GetVPSBackupsV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type GetVPSFirewallDetailsV1Error = HostingerOpError; +/** Get firewall details Retrieve firewall by its ID and rules associated with it. Use this endpoint to view specific firewall configuration and rules. */ +export const getVPSFirewallDetailsV1: API.OperationMethod< + GetVPSFirewallDetailsV1Request, + VPSV1FirewallFirewallResource, + GetVPSFirewallDetailsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: GetVPSFirewallDetailsV1Request, + output: VPSV1FirewallFirewallResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type GetVPSMetricsV1Error = UnprocessableEntity | HostingerOpError; +/** Get metrics Retrieve historical metrics for a specified virtual machine. It includes the following metrics: - CPU usage - Memory usage - Disk usage - Network usage - Uptime Use this endpoint to monitor VPS performance and resource utilization over time. */ +export const getVPSMetricsV1: API.OperationMethod< + GetVPSMetricsV1Request, + VPSV1MetricsMetricsCollection, + GetVPSMetricsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: GetVPSMetricsV1Request, + output: VPSV1MetricsMetricsCollection, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type GetVPSProjectContainersV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Get project containers Retrieves a list of all containers belonging to a specific Docker Compose project on the virtual machine. This endpoint returns detailed information about each container including their current status, port mappings, and runtime configuration. Use this to monitor the health and state of all services within your Docker Compose project. */ +export const getVPSProjectContainersV1: API.OperationMethod< + GetVPSProjectContainersV1Request, + GetVPSProjectContainersV1Response, + GetVPSProjectContainersV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: GetVPSProjectContainersV1Request, + output: GetVPSProjectContainersV1Response, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type GetVPSProjectContentsV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Get project contents Retrieves the complete project information including the docker-compose.yml file contents, project metadata, and current deployment status. This endpoint provides the full configuration and state details of a specific Docker Compose project. Use this to inspect project settings, review the compose file, or check the overall project health. */ +export const getVPSProjectContentsV1: API.OperationMethod< + GetVPSProjectContentsV1Request, + VPSV1DockerManagerContentResource, + GetVPSProjectContentsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: GetVPSProjectContentsV1Request, + output: VPSV1DockerManagerContentResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type GetVPSProjectLogsV1Error = UnprocessableEntity | HostingerOpError; +/** Get project logs Retrieves aggregated log entries from all services within a Docker Compose project. This endpoint returns recent log output from each container, organized by service name with timestamps. The response contains the last 300 log entries across all services. Use this for debugging, monitoring application behavior, and troubleshooting issues across your entire project stack. */ +export const getVPSProjectLogsV1: API.OperationMethod< + GetVPSProjectLogsV1Request, + GetVPSProjectLogsV1Response, + GetVPSProjectLogsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: GetVPSProjectLogsV1Request, + output: GetVPSProjectLogsV1Response, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type GetVPSPublicKeysV1Error = HostingerOpError; +/** Get public keys Retrieve public keys associated with your account. Use this endpoint to view available SSH keys for VPS authentication. */ +export const getVPSPublicKeysV1: API.OperationMethod< + GetVPSPublicKeysV1Request, + GetVPSPublicKeysV1Response, + GetVPSPublicKeysV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: GetVPSPublicKeysV1Request, + output: GetVPSPublicKeysV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type GetVPSScanMetricsV1Error = UnprocessableEntity | HostingerOpError; +/** Get scan metrics Retrieve scan metrics for the [Monarx](https://www.monarx.com/) malware scanner installed on a specified virtual machine. The scan metrics provide detailed information about malware scans performed by Monarx, including number of scans, detected threats, and other relevant statistics. This information is useful for monitoring security status of the virtual machine and assessing effectiveness of the malware scanner. Use this endpoint to monitor VPS security scan results and threat detection. */ +export const getVPSScanMetricsV1: API.OperationMethod< + GetVPSScanMetricsV1Request, + VPSV1MalwareMetricsResource, + GetVPSScanMetricsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: GetVPSScanMetricsV1Request, + output: VPSV1MalwareMetricsResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type GetVPSSnapshotV1Error = HostingerOpError; +/** Get snapshot Retrieve snapshot for a specified virtual machine. Use this endpoint to view current VPS snapshot information. */ +export const getVPSSnapshotV1: API.OperationMethod< + GetVPSSnapshotV1Request, + VPSV1SnapshotSnapshotResource, + GetVPSSnapshotV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: GetVPSSnapshotV1Request, + output: VPSV1SnapshotSnapshotResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type GetVPSTemplateDetailsV1Error = HostingerOpError; +/** Get template details Retrieve detailed information about a specific OS template for virtual machines. Use this endpoint to view specific template specifications before deployment. */ +export const getVPSTemplateDetailsV1: API.OperationMethod< + GetVPSTemplateDetailsV1Request, + VPSV1TemplateTemplateResource, + GetVPSTemplateDetailsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: GetVPSTemplateDetailsV1Request, + output: VPSV1TemplateTemplateResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type GetVPSTemplatesV1Error = HostingerOpError; +/** Get templates Retrieve available OS templates for virtual machines. Use this endpoint to view operating system options before creating or recreating VPS instances. */ +export const getVPSTemplatesV1: API.OperationMethod< + GetVPSTemplatesV1Request, + GetVPSTemplatesV1Response, + GetVPSTemplatesV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: GetVPSTemplatesV1Request, + output: GetVPSTemplatesV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type GetVPSVirtualMachineDetailsV1Error = HostingerOpError; +/** Get virtual machine details Retrieve detailed information about a specified virtual machine. Use this endpoint to view comprehensive VPS configuration and status. */ +export const getVPSVirtualMachineDetailsV1: API.OperationMethod< + GetVPSVirtualMachineDetailsV1Request, + VPSV1VirtualMachineVirtualMachineResource, + GetVPSVirtualMachineDetailsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: GetVPSVirtualMachineDetailsV1Request, + output: VPSV1VirtualMachineVirtualMachineResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type GetVPSVirtualMachinesV1Error = HostingerOpError; +/** Get virtual machines Retrieve all available virtual machines. Use this endpoint to view available VPS instances. */ +export const getVPSVirtualMachinesV1: API.OperationMethod< + GetVPSVirtualMachinesV1Request, + GetVPSVirtualMachinesV1Response, + GetVPSVirtualMachinesV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: GetVPSVirtualMachinesV1Request, + output: GetVPSVirtualMachinesV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type HostingChangeDatabasePasswordV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Change database password Changes the password for the specified database user. The database name must be the full name returned by the list databases endpoint. The password must also be updated in any website configuration that uses this database. */ +export const hostingChangeDatabasePasswordV1: API.OperationMethod< + HostingChangeDatabasePasswordV1Request, + CommonSuccessEmptyResource, + HostingChangeDatabasePasswordV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: HostingChangeDatabasePasswordV1Request, + output: CommonSuccessEmptyResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type HostingDeployStaticSiteArchiveV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Deploy static site archive Deploy a static application from an archive file. WARNING: this overwrites the website's existing contents and cannot be undone — verify this is intended before calling this endpoint. This endpoint allows you to deploy a static application from an archive file that has been uploaded to the website's directory. This only works for static sites (pre-built HTML/CSS/JS with no build step). For Node.js applications, use `Create NodeJS build from archive` instead, or `Start Node.js build` if the archive is already uploaded. For WordPress sites, use `Import WordPress website`. */ +export const hostingDeployStaticSiteArchiveV1: API.OperationMethod< + HostingDeployStaticSiteArchiveV1Request, + CommonSuccessEmptyResource, + HostingDeployStaticSiteArchiveV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: HostingDeployStaticSiteArchiveV1Request, + output: CommonSuccessEmptyResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type HostingDetectWordPressInstallationsV1Error = HostingerOpError; +/** Detect WordPress installations Trigger a background scan to detect WordPress installations for the account. This operation is asynchronous: a successful response only means the scan has been queued. Poll GET /api/hosting/v1/wordpress/installations to fetch the detected installations once the scan completes. */ +export const hostingDetectWordPressInstallationsV1: API.OperationMethod< + HostingDetectWordPressInstallationsV1Request, + CommonSuccessEmptyResource, + HostingDetectWordPressInstallationsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: HostingDetectWordPressInstallationsV1Request, + output: CommonSuccessEmptyResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type HostingGenerateUploadURLV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Generate upload URL Generate a file browser upload URL with authentication credentials for uploading files directly to a website's file storage. Returns `url`, `auth_key` and `rest_auth_key`. Use these to upload a file to the website's `public_html` directory via the TUS resumable upload protocol (TUS 1.0.0). Send `X-Auth: {auth_key}` and `X-Auth-Rest: {rest_auth_key}` headers on every request below. 1. Create the upload: `POST` to `{url}/{relative_file_path}?override=true` with headers `upload-length: {file size in bytes}` and `upload-offset: 0`. Expect `201 Created`. 2. Upload the file: send the file bytes to the same location (any TUS 1.0.0 client, or `PATCH` requests with an `upload-offset` header tracking progress) until complete. `relative_file_path` is the destination path inside `public_html`, e.g. `app.zip`. Instead of a TUS client, plain `curl` also works: ``` FILE=app.zip SIZE=$(stat -f%z "$FILE") # stat -c%s on Linux curl -i -X POST "{url}/${FILE}?override=true" \ -H "X-Auth: {auth_key}" \ -H "X-Auth-Rest: {rest_auth_key}" \ -H "Tus-Resumable: 1.0.0" \ -H "Upload-Length: ${SIZE}" \ -H "Upload-Offset: 0" # -> 201 Created curl -i -X PATCH "{url}/${FILE}?override=true" \ -H "X-Auth: {auth_key}" \ -H "X-Auth-Rest: {rest_auth_key}" \ -H "Tus-Resumable: 1.0.0" \ -H "Content-Type: application/offset+octet-stream" \ -H "Upload-Offset: 0" \ --data-binary "@${FILE}" # -> 204 No Content, Upload-Offset response header equals SIZE when done ``` */ +export const hostingGenerateUploadURLV1: API.OperationMethod< + HostingGenerateUploadURLV1Request, + HostingV1FilesUploadUrlResource, + HostingGenerateUploadURLV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: HostingGenerateUploadURLV1Request, + output: HostingV1FilesUploadUrlResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type HostingGetNodeJsBuildSettingsFromArchiveV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Get Node.js build settings from archive Auto-detect Node.js build settings from a package.json inside an archive already on the server. Use this before calling `Start Node.js Build` to preview what settings will be used, or to let the user review and override values (framework, node version, root directory, output directory, build script) before committing to a build. The archive must already be present on the website's file storage. Use the `Generate Upload URL` endpoint to obtain credentials and upload the archive first. */ +export const hostingGetNodeJsBuildSettingsFromArchiveV1: API.OperationMethod< + HostingGetNodeJsBuildSettingsFromArchiveV1Request, + HostingV1NodeJsBuildSettingsResource, + HostingGetNodeJsBuildSettingsFromArchiveV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: HostingGetNodeJsBuildSettingsFromArchiveV1Request, + output: HostingV1NodeJsBuildSettingsResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type HostingListWebsiteFilesAndDirectoriesV1Error = + | UnprocessableEntity + | HostingerOpError; +/** List website files and directories List files and directories under a website's document root. Use `directory` to browse a subdirectory relative to the document root. Symlinked entries are listed but never traversed into or resolved. */ +export const hostingListWebsiteFilesAndDirectoriesV1: API.OperationMethod< + HostingListWebsiteFilesAndDirectoriesV1Request, + HostingV1FilesFilesResource, + HostingListWebsiteFilesAndDirectoriesV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: HostingListWebsiteFilesAndDirectoriesV1Request, + output: HostingV1FilesFilesResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type HostingRepairDatabaseV1Error = HostingerOpError; +/** Repair database Repairs corrupted database tables asynchronously. Use when database errors, crashes, or corruption are reported. The database name must be the full name returned by the list databases endpoint. */ +export const hostingRepairDatabaseV1: API.OperationMethod< + HostingRepairDatabaseV1Request, + CommonSuccessEmptyResource, + HostingRepairDatabaseV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: HostingRepairDatabaseV1Request, + output: CommonSuccessEmptyResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ImportHostingWordPressWebsiteV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Import WordPress website Import WordPress website to the specified domain. WARNING: this overwrites the website's existing contents and cannot be undone — verify this is intended before calling this endpoint. This endpoint allows you to import a WordPress website from archive and database files that have been uploaded to the website's directory. */ +export const importHostingWordPressWebsiteV1: API.OperationMethod< + ImportHostingWordPressWebsiteV1Request, + CommonSuccessEmptyResource, + ImportHostingWordPressWebsiteV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ImportHostingWordPressWebsiteV1Request, + output: CommonSuccessEmptyResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type InstallHostingWordPressPluginsV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Install WordPress plugins Install one or more plugins on an existing WordPress installation. Provide the WordPress installation (software) identifier in the path. It can be obtained from GET /api/hosting/v1/wordpress/installations (the `id` field). Use GET /api/hosting/v1/wordpress/plugins to discover the plugin slugs available for installation. This operation is asynchronous: a successful response only means the install job has been queued, not that the plugins are ready. */ +export const installHostingWordPressPluginsV1: API.OperationMethod< + InstallHostingWordPressPluginsV1Request, + CommonSuccessEmptyResource, + InstallHostingWordPressPluginsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: InstallHostingWordPressPluginsV1Request, + output: CommonSuccessEmptyResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type InstallHostingWordPressThemeV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Install WordPress theme Install a theme on an existing WordPress installation. Provide the WordPress installation (software) identifier in the path. It can be obtained from GET /api/hosting/v1/wordpress/installations (the `id` field). When the theme is one of the Hostinger themes (hostinger-blog, hostinger-affiliate-theme, hostinger-ai-theme), the optional `palette`, `layout`, and `font` fields are forwarded to the custom installer (defaults: palette1, layout1, default). For any other theme they are ignored. This operation is asynchronous: a successful response only means the install job has been queued, not that the theme is ready. */ +export const installHostingWordPressThemeV1: API.OperationMethod< + InstallHostingWordPressThemeV1Request, + CommonSuccessEmptyResource, + InstallHostingWordPressThemeV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: InstallHostingWordPressThemeV1Request, + output: CommonSuccessEmptyResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type InstallHostingWordPressV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Install WordPress Install WordPress on an existing website. The website must already exist before calling this endpoint. To create a new website first, use POST /api/hosting/v1/websites and poll GET /api/hosting/v1/websites until it appears. Call GET /api/hosting/v1/wordpress/installations filtered by username and domain before proceeding to check whether WordPress is already installed on the target domain/path. If WordPress already exists and `overwrite` is false (the default), the async job will fail. This operation is asynchronous: a successful response only means the install job has been queued, not that WordPress is ready. Installation typically takes 1-2 minutes. Poll GET /api/hosting/v1/wordpress/installations filtered by username and domain to track progress. When the installation appears in that list, WordPress is ready. */ +export const installHostingWordPressV1: API.OperationMethod< + InstallHostingWordPressV1Request, + CommonSuccessEmptyResource, + InstallHostingWordPressV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: InstallHostingWordPressV1Request, + output: CommonSuccessEmptyResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type InstallVPSMonarxV1Error = UnprocessableEntity | HostingerOpError; +/** Install Monarx Install the Monarx malware scanner on a specified virtual machine. [Monarx](https://www.monarx.com/) is a security tool designed to detect and prevent malware infections on virtual machines. By installing Monarx, users can enhance the security of their virtual machines, ensuring that they are protected against malicious software. Use this endpoint to enable malware protection on VPS instances. */ +export const installVPSMonarxV1: API.OperationMethod< + InstallVPSMonarxV1Request, + VPSV1ActionActionResource, + InstallVPSMonarxV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: InstallVPSMonarxV1Request, + output: VPSV1ActionActionResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListAgencyHostingAgencyPlanOrderDiskUsageMetricsV1Error = + | UnprocessableEntity + | HostingerOpError; +/** List Agency Plan order disk usage metrics Returns aggregated disk and inode usage for the Agency Plan order over the selected time frame, plus the plan quotas. Figures cover the whole order account. Values may be up to one hour stale. CPU, memory, and process usage are on the resource-usage-metrics endpoint. */ +export const listAgencyHostingAgencyPlanOrderDiskUsageMetricsV1: API.OperationMethod< + ListAgencyHostingAgencyPlanOrderDiskUsageMetricsV1Request, + AgencyHostingV1OrdersDiskUsageMetricsMetricsResource, + ListAgencyHostingAgencyPlanOrderDiskUsageMetricsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListAgencyHostingAgencyPlanOrderDiskUsageMetricsV1Request, + output: AgencyHostingV1OrdersDiskUsageMetricsMetricsResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListAgencyHostingAgencyPlanWebsitesV1Error = HostingerOpError; +/** List Agency Plan websites Retrieve a paginated list of Agency Plan websites (H5G, Builder, and Horizons) accessible to the authenticated client. This endpoint returns websites from your hosting accounts as well as websites from other client hosting accounts that have shared access with you. The response shape differs per platform — see the `platform` field on each item. Use `website_types` to list only websites of a given detected type, e.g. only WordPress websites (`website_types=wordpress`) or only Node.js websites (`website_types=nodejs`). Combine with `order_ids`, `states`, or `domain` for more targeted results. */ +export const listAgencyHostingAgencyPlanWebsitesV1: API.OperationMethod< + ListAgencyHostingAgencyPlanWebsitesV1Request, + ListAgencyHostingAgencyPlanWebsitesV1Response, + ListAgencyHostingAgencyPlanWebsitesV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListAgencyHostingAgencyPlanWebsitesV1Request, + output: ListAgencyHostingAgencyPlanWebsitesV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListAgencyHostingAvailableDatacentersV1Error = HostingerOpError; +/** List available datacenters Lists the datacenters available for provisioning a new website on the given Agency Plan hosting order. Each datacenter includes a `pinger_url` you can ping from the client to measure round-trip latency; comparing the results across datacenters lets you pick the nearest one (lowest ping) before choosing its `code` as the `datacenter_code` when creating a website setup. */ +export const listAgencyHostingAvailableDatacentersV1: API.OperationMethod< + ListAgencyHostingAvailableDatacentersV1Request, + ListAgencyHostingAvailableDatacentersV1Response, + ListAgencyHostingAvailableDatacentersV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListAgencyHostingAvailableDatacentersV1Request, + output: ListAgencyHostingAvailableDatacentersV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListAgencyHostingAvailablePHPVersionsForAnOrderV1Error = + HostingerOpError; +/** List available PHP versions for an order Lists the PHP versions available to websites created under an Agency Plan order, determined by the server the order is hosted on. Use this before creating a website; for a website that already exists, call the website-scoped versions endpoint instead. */ +export const listAgencyHostingAvailablePHPVersionsForAnOrderV1: API.OperationMethod< + ListAgencyHostingAvailablePHPVersionsForAnOrderV1Request, + ListAgencyHostingAvailablePHPVersionsForAnOrderV1Response, + ListAgencyHostingAvailablePHPVersionsForAnOrderV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListAgencyHostingAvailablePHPVersionsForAnOrderV1Request, + output: ListAgencyHostingAvailablePHPVersionsForAnOrderV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListAgencyHostingAvailablePHPVersionsForAWebsiteV1Error = + HostingerOpError; +/** List available PHP versions for a website Lists the PHP versions an Agency Plan website can be switched to. The version the website is currently running is returned as settings.php.version by the website details endpoint. */ +export const listAgencyHostingAvailablePHPVersionsForAWebsiteV1: API.OperationMethod< + ListAgencyHostingAvailablePHPVersionsForAWebsiteV1Request, + ListAgencyHostingAvailablePHPVersionsForAWebsiteV1Response, + ListAgencyHostingAvailablePHPVersionsForAWebsiteV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListAgencyHostingAvailablePHPVersionsForAWebsiteV1Request, + output: ListAgencyHostingAvailablePHPVersionsForAWebsiteV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListAgencyHostingAvailableWordPressVersionsV1Error = + HostingerOpError; +/** List available WordPress versions Lists the WordPress core versions available for installation on an Agency Plan website. */ +export const listAgencyHostingAvailableWordPressVersionsV1: API.OperationMethod< + ListAgencyHostingAvailableWordPressVersionsV1Request, + ListAgencyHostingAvailableWordPressVersionsV1Response, + ListAgencyHostingAvailableWordPressVersionsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListAgencyHostingAvailableWordPressVersionsV1Request, + output: ListAgencyHostingAvailableWordPressVersionsV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListAgencyHostingDomainsV1Error = HostingerOpError; +/** List domains Returns a paginated list of domains associated with Agency Plan websites accessible to the authenticated client. Use the website_uuids filter to narrow results to specific websites. */ +export const listAgencyHostingDomainsV1: API.OperationMethod< + ListAgencyHostingDomainsV1Request, + ListAgencyHostingDomainsV1Response, + ListAgencyHostingDomainsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListAgencyHostingDomainsV1Request, + output: ListAgencyHostingDomainsV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListAgencyHostingOrderResourceUsageMetricsV1Error = + | UnprocessableEntity + | HostingerOpError; +/** List order resource usage metrics Returns aggregated CPU, memory, and process usage for the Agency Plan order over the selected time frame, plus the plan quotas and a per-website breakdown. Each website is identified by uid. Suspended and deleted websites are excluded from both the order totals and the per-website breakdown. Values may be up to one hour stale. Disk and inode usage are on the disk-usage-metrics endpoint. */ +export const listAgencyHostingOrderResourceUsageMetricsV1: API.OperationMethod< + ListAgencyHostingOrderResourceUsageMetricsV1Request, + AgencyHostingV1OrdersResourceUsageMetricsMetricsResource, + ListAgencyHostingOrderResourceUsageMetricsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListAgencyHostingOrderResourceUsageMetricsV1Request, + output: AgencyHostingV1OrdersResourceUsageMetricsMetricsResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListAgencyHostingOrdersV1Error = HostingerOpError; +/** List orders Returns a paginated list of Agency Plan orders accessible to the authenticated client. */ +export const listAgencyHostingOrdersV1: API.OperationMethod< + ListAgencyHostingOrdersV1Request, + ListAgencyHostingOrdersV1Response, + ListAgencyHostingOrdersV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListAgencyHostingOrdersV1Request, + output: ListAgencyHostingOrdersV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListAgencyHostingPHPExtensionsForAWebsiteV1Error = HostingerOpError; +/** List PHP extensions for a website Lists every PHP extension available to an Agency Plan website and whether it is currently enabled. */ +export const listAgencyHostingPHPExtensionsForAWebsiteV1: API.OperationMethod< + ListAgencyHostingPHPExtensionsForAWebsiteV1Request, + ListAgencyHostingPHPExtensionsForAWebsiteV1Response, + ListAgencyHostingPHPExtensionsForAWebsiteV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListAgencyHostingPHPExtensionsForAWebsiteV1Request, + output: ListAgencyHostingPHPExtensionsForAWebsiteV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListAgencyHostingPHPOptionsForAWebsiteV1Error = HostingerOpError; +/** List PHP options for a website Lists the php.ini directives that can be configured for an Agency Plan website, each with its default, the value currently in effect, and the values it accepts. */ +export const listAgencyHostingPHPOptionsForAWebsiteV1: API.OperationMethod< + ListAgencyHostingPHPOptionsForAWebsiteV1Request, + ListAgencyHostingPHPOptionsForAWebsiteV1Response, + ListAgencyHostingPHPOptionsForAWebsiteV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListAgencyHostingPHPOptionsForAWebsiteV1Request, + output: ListAgencyHostingPHPOptionsForAWebsiteV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListAgencyHostingWebsiteCronJobsV1Error = HostingerOpError; +/** List website cron jobs Returns a paginated list of cron jobs configured for an Agency Plan website. Each entry includes the schedule expression and the command executed on that schedule. */ +export const listAgencyHostingWebsiteCronJobsV1: API.OperationMethod< + ListAgencyHostingWebsiteCronJobsV1Request, + ListAgencyHostingWebsiteCronJobsV1Response, + ListAgencyHostingWebsiteCronJobsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListAgencyHostingWebsiteCronJobsV1Request, + output: ListAgencyHostingWebsiteCronJobsV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListAgencyHostingWebsiteDatabasesV1Error = HostingerOpError; +/** List website databases Returns a paginated list of MySQL databases created for an Agency Plan website. Each entry includes the database's non-system users. */ +export const listAgencyHostingWebsiteDatabasesV1: API.OperationMethod< + ListAgencyHostingWebsiteDatabasesV1Request, + ListAgencyHostingWebsiteDatabasesV1Response, + ListAgencyHostingWebsiteDatabasesV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListAgencyHostingWebsiteDatabasesV1Request, + output: ListAgencyHostingWebsiteDatabasesV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListAgencyHostingWebsiteProcessesV1Error = HostingerOpError; +/** List website processes Lists active and recently completed asynchronous processes for an Agency Plan website. Each process has a unique ID (for tracking), a type, and a status (running, completed, failed). Poll this endpoint after initiating async operations (SSL setup, backups, cloning) to track progress. */ +export const listAgencyHostingWebsiteProcessesV1: API.OperationMethod< + ListAgencyHostingWebsiteProcessesV1Request, + ListAgencyHostingWebsiteProcessesV1Response, + ListAgencyHostingWebsiteProcessesV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListAgencyHostingWebsiteProcessesV1Request, + output: ListAgencyHostingWebsiteProcessesV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListEcommerceDiscountsV1Error = HostingerOpError; +/** List discounts List a store's discounts. Filter by free text over code and name, or by disabled state. Amounts for fixed discounts are integers in the smallest currency unit; percentage discounts carry a whole-number value between 1 and 100. */ +export const listEcommerceDiscountsV1: API.OperationMethod< + ListEcommerceDiscountsV1Request, + ListEcommerceDiscountsV1Response, + ListEcommerceDiscountsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListEcommerceDiscountsV1Request, + output: ListEcommerceDiscountsV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListEcommerceProductsV1Error = HostingerOpError; +/** List products List a store's products newest first as lean summaries (name, status, thumbnail, variant count and price range). Prices are integers in the smallest currency unit and live on variants. Filter by status, free text or a set of product ids. Use include=variants to embed each product's variants with prices and inventory, and include=media to embed its media. */ +export const listEcommerceProductsV1: API.OperationMethod< + ListEcommerceProductsV1Request, + ListEcommerceProductsV1Response, + ListEcommerceProductsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListEcommerceProductsV1Request, + output: ListEcommerceProductsV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListEcommerceProductVariantsV1Error = HostingerOpError; +/** List product variants List a product's variants, ordered by rank, with their options, prices and inventory. Prices are integers in the smallest currency unit and live on variants. */ +export const listEcommerceProductVariantsV1: API.OperationMethod< + ListEcommerceProductVariantsV1Request, + ListEcommerceProductVariantsV1Response, + ListEcommerceProductVariantsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListEcommerceProductVariantsV1Request, + output: ListEcommerceProductVariantsV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListEcommerceSalesChannelsV1Error = HostingerOpError; +/** List sales channels List a store's active sales channels with their full metadata. */ +export const listEcommerceSalesChannelsV1: API.OperationMethod< + ListEcommerceSalesChannelsV1Request, + EcommerceV1SalesChannelSalesChannelListResource, + ListEcommerceSalesChannelsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListEcommerceSalesChannelsV1Request, + output: EcommerceV1SalesChannelSalesChannelListResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListEcommerceStoreOrdersV1Error = HostingerOpError; +/** List store orders List a store's orders newest first as summaries. Filter by status, payment or fulfilment status, customer email, order number or a free-text query. Amounts are in the smallest currency unit. Retrieve a single order for its line items, addresses and fulfilments. */ +export const listEcommerceStoreOrdersV1: API.OperationMethod< + ListEcommerceStoreOrdersV1Request, + ListEcommerceStoreOrdersV1Response, + ListEcommerceStoreOrdersV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListEcommerceStoreOrdersV1Request, + output: ListEcommerceStoreOrdersV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListEcommerceStorePaymentProvidersV1Error = HostingerOpError; +/** List store payment providers List a store's payment providers, split into providers already connected to the store and gateways available to install. Never exposes gateway credentials, secrets, or configuration. */ +export const listEcommerceStorePaymentProvidersV1: API.OperationMethod< + ListEcommerceStorePaymentProvidersV1Request, + EcommerceV1PaymentProviderPaymentProviderListResource, + ListEcommerceStorePaymentProvidersV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListEcommerceStorePaymentProvidersV1Request, + output: EcommerceV1PaymentProviderPaymentProviderListResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListHostingAccountCronJobsV1Error = HostingerOpError; +/** List account cron jobs Returns the list of cron jobs configured for the specified account, including their schedule and command. */ +export const listHostingAccountCronJobsV1: API.OperationMethod< + ListHostingAccountCronJobsV1Request, + ListHostingAccountCronJobsV1Response, + ListHostingAccountCronJobsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListHostingAccountCronJobsV1Request, + output: ListHostingAccountCronJobsV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListHostingAccountDatabasesV1Error = HostingerOpError; +/** List account databases Returns a paginated list of databases for the specified account. Use the domain and is_assigned filters to find databases assigned to a specific domain. */ +export const listHostingAccountDatabasesV1: API.OperationMethod< + ListHostingAccountDatabasesV1Request, + ListHostingAccountDatabasesV1Response, + ListHostingAccountDatabasesV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListHostingAccountDatabasesV1Request, + output: ListHostingAccountDatabasesV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListHostingAvailableDatacentersV1Error = HostingerOpError; +/** List available datacenters Retrieve a list of datacenters available for setting up hosting plans based on available datacenter capacity and hosting plan of your order. The first item in the list is the best match for your specific order requirements. */ +export const listHostingAvailableDatacentersV1: API.OperationMethod< + ListHostingAvailableDatacentersV1Request, + ListHostingAvailableDatacentersV1Response, + ListHostingAvailableDatacentersV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListHostingAvailableDatacentersV1Request, + output: ListHostingAvailableDatacentersV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListHostingAvailableWordPressCoreUpdatesV1Error = HostingerOpError; +/** List available WordPress core updates List available WordPress core updates for the specified installation. Provide the WordPress installation (software) identifier in the path. It can be obtained from GET /api/hosting/v1/wordpress/installations (the `id` field). */ +export const listHostingAvailableWordPressCoreUpdatesV1: API.OperationMethod< + ListHostingAvailableWordPressCoreUpdatesV1Request, + ListHostingAvailableWordPressCoreUpdatesV1Response, + ListHostingAvailableWordPressCoreUpdatesV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListHostingAvailableWordPressCoreUpdatesV1Request, + output: ListHostingAvailableWordPressCoreUpdatesV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListHostingAvailableWordPressPluginsV1Error = HostingerOpError; +/** List available WordPress plugins List plugins recommended for installation on a WordPress installation that are not yet installed. Provide the WordPress installation (software) identifier in the path. It can be obtained from GET /api/hosting/v1/wordpress/installations (the `id` field). */ +export const listHostingAvailableWordPressPluginsV1: API.OperationMethod< + ListHostingAvailableWordPressPluginsV1Request, + ListHostingAvailableWordPressPluginsV1Response, + ListHostingAvailableWordPressPluginsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListHostingAvailableWordPressPluginsV1Request, + output: ListHostingAvailableWordPressPluginsV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListHostingDatabaseRemoteConnectionsV1Error = HostingerOpError; +/** List database remote connections Returns the remote-access rules for the specified account: the remote hosts (IPv4/IPv6 addresses, or "%" for any host) allowed to connect to the account databases. Use the domain filter to only return rules for databases assigned to a specific domain. */ +export const listHostingDatabaseRemoteConnectionsV1: API.OperationMethod< + ListHostingDatabaseRemoteConnectionsV1Request, + ListHostingDatabaseRemoteConnectionsV1Response, + ListHostingDatabaseRemoteConnectionsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListHostingDatabaseRemoteConnectionsV1Request, + output: ListHostingDatabaseRemoteConnectionsV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListHostingInstalledWordPressPluginsV1Error = HostingerOpError; +/** List installed WordPress plugins List plugins installed on a WordPress installation, including their status, available updates and known vulnerabilities. Provide the WordPress installation (software) identifier in the path. It can be obtained from GET /api/hosting/v1/wordpress/installations (the `id` field). */ +export const listHostingInstalledWordPressPluginsV1: API.OperationMethod< + ListHostingInstalledWordPressPluginsV1Request, + ListHostingInstalledWordPressPluginsV1Response, + ListHostingInstalledWordPressPluginsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListHostingInstalledWordPressPluginsV1Request, + output: ListHostingInstalledWordPressPluginsV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListHostingInstalledWordPressThemesV1Error = HostingerOpError; +/** List installed WordPress themes List themes installed on a WordPress installation, including their status, available updates and known vulnerabilities. Provide the WordPress installation (software) identifier in the path. It can be obtained from GET /api/hosting/v1/wordpress/installations (the `id` field). */ +export const listHostingInstalledWordPressThemesV1: API.OperationMethod< + ListHostingInstalledWordPressThemesV1Request, + ListHostingInstalledWordPressThemesV1Response, + ListHostingInstalledWordPressThemesV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListHostingInstalledWordPressThemesV1Request, + output: ListHostingInstalledWordPressThemesV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListHostingNodeJSBuildsV1Error = HostingerOpError; +/** List NodeJS builds Retrieve a paginated list of Node.js build processes for a specific website. Each build represents a single run of the Node.js build pipeline. Use the `states` query parameter to filter results by build state (pending, running, completed, failed). Use the `uuid` from a build to poll its output via the `Get Node.js Build Logs` endpoint. */ +export const listHostingNodeJSBuildsV1: API.OperationMethod< + ListHostingNodeJSBuildsV1Request, + ListHostingNodeJSBuildsV1Response, + ListHostingNodeJSBuildsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListHostingNodeJSBuildsV1Request, + output: ListHostingNodeJSBuildsV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListHostingNodeJsEnvironmentVariablesV1Error = HostingerOpError; +/** List Node.js environment variables Lists the Node.js environment variables currently set for the website. Values are always masked as `********` and cannot be read back through this API. Use this endpoint to see which keys are configured or to verify a change, not to read values. To change variables, use the `Replace Node.js environment variables` endpoint. It replaces the whole set, so never copy the masked values from this response into that request; send the full desired set with real values taken from the project `.env` file or the user prompt instead. */ +export const listHostingNodeJsEnvironmentVariablesV1: API.OperationMethod< + ListHostingNodeJsEnvironmentVariablesV1Request, + ListHostingNodeJsEnvironmentVariablesV1Response, + ListHostingNodeJsEnvironmentVariablesV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListHostingNodeJsEnvironmentVariablesV1Request, + output: ListHostingNodeJsEnvironmentVariablesV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListHostingNodeJsVulnerabilitiesV1Error = HostingerOpError; +/** List Node.js vulnerabilities Lists known npm package vulnerabilities detected on a Node.js website, enriched with advisory metadata (severity, CVSS score, CVE, advisory URL). Results are sorted from the most severe to the least severe, then by publish date (newest first). Use the `severities` query parameter to filter. Vulnerabilities with `is_patchable` set to `true` can be auto-fixed via the `Patch Node.js Vulnerabilities` endpoint, which opens a GitHub pull request with updated package versions. Auto-fix is only available for websites deployed from a connected GitHub repository. Vulnerabilities with `is_patching_in_progress` set to `true` are already included in an open patch pull request; while any patch pull request is open, new patch requests for this website are rejected until it is merged or closed. Data comes from periodic dependency scans, so it may lag behind the latest deployment. An empty list means the most recent scan found no vulnerabilities; it does not guarantee the current deployment is vulnerability-free. Available on Business and Cloud Hosting plans. */ +export const listHostingNodeJsVulnerabilitiesV1: API.OperationMethod< + ListHostingNodeJsVulnerabilitiesV1Request, + ListHostingNodeJsVulnerabilitiesV1Response, + ListHostingNodeJsVulnerabilitiesV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListHostingNodeJsVulnerabilitiesV1Request, + output: ListHostingNodeJsVulnerabilitiesV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListHostingOrdersV1Error = HostingerOpError; +/** List orders Retrieve a paginated list of orders accessible to the authenticated client. This endpoint returns orders of your hosting accounts as well as orders of other client hosting accounts that have shared access with you. Use the available query parameters to filter results by order statuses or specific order IDs for more targeted results. */ +export const listHostingOrdersV1: API.OperationMethod< + ListHostingOrdersV1Request, + ListHostingOrdersV1Response, + ListHostingOrdersV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListHostingOrdersV1Request, + output: ListHostingOrdersV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListHostingSuggestedWordPressPluginsV1Error = HostingerOpError; +/** List suggested WordPress plugins List curated plugin suggestions grouped by website type. Use the returned `slug` values with POST /api/hosting/v1/accounts/{username}/wordpress/{software}/plugins/install. */ +export const listHostingSuggestedWordPressPluginsV1: API.OperationMethod< + ListHostingSuggestedWordPressPluginsV1Request, + ListHostingSuggestedWordPressPluginsV1Response, + ListHostingSuggestedWordPressPluginsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListHostingSuggestedWordPressPluginsV1Request, + output: ListHostingSuggestedWordPressPluginsV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListHostingWebsiteParkedDomainsV1Error = HostingerOpError; +/** List website parked domains Retrieve all parked or alias domains created under the selected website. Use this endpoint to inspect parked domain configuration for a specific website, including the parent domain and root directory assigned to each parked domain. */ +export const listHostingWebsiteParkedDomainsV1: API.OperationMethod< + ListHostingWebsiteParkedDomainsV1Request, + ListHostingWebsiteParkedDomainsV1Response, + ListHostingWebsiteParkedDomainsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListHostingWebsiteParkedDomainsV1Request, + output: ListHostingWebsiteParkedDomainsV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListHostingWebsiteRedirectsV1Error = HostingerOpError; +/** List website redirects Returns a paginated list of redirects configured for the selected website. */ +export const listHostingWebsiteRedirectsV1: API.OperationMethod< + ListHostingWebsiteRedirectsV1Request, + ListHostingWebsiteRedirectsV1Response, + ListHostingWebsiteRedirectsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListHostingWebsiteRedirectsV1Request, + output: ListHostingWebsiteRedirectsV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListHostingWebsiteSubdomainsV1Error = HostingerOpError; +/** List website subdomains Retrieve all subdomains created under the selected website. Use this endpoint to inspect subdomain configuration for a specific website, including the parent domain and root directory assigned to each subdomain. */ +export const listHostingWebsiteSubdomainsV1: API.OperationMethod< + ListHostingWebsiteSubdomainsV1Request, + ListHostingWebsiteSubdomainsV1Response, + ListHostingWebsiteSubdomainsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListHostingWebsiteSubdomainsV1Request, + output: ListHostingWebsiteSubdomainsV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListHostingWebsitesV1Error = HostingerOpError; +/** List websites Retrieve a paginated list of websites (CloudLinux, Builder, and Horizons) accessible to the authenticated client. This endpoint returns websites from your hosting accounts as well as websites from other client hosting accounts that have shared access with you. Each website includes a `website_type` field describing the type of website detected on the underlying platform (`wordpress`, `builder`, `horizons`, `nodejs`, or `other`). Some fields, such as `vhost_type`, `username`, and `root_directory`, only apply to CloudLinux websites and are null for other platforms. Use `website_types` to list only websites of a given detected type, e.g. only WordPress websites (`website_types=wordpress`) or only Node.js websites (`website_types=nodejs`). Combine with the other available query parameters to filter by username, order ID, enabled status, or domain name for more targeted results. */ +export const listHostingWebsitesV1: API.OperationMethod< + ListHostingWebsitesV1Request, + ListHostingWebsitesV1Response, + ListHostingWebsitesV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListHostingWebsitesV1Request, + output: ListHostingWebsitesV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListHostingWordPressInstallationsV1Error = HostingerOpError; +/** List WordPress installations List WordPress installations accessible to the authenticated client. Use this endpoint to discover existing WordPress installations and to poll for installation status after calling the install endpoint. When a newly requested installation appears in this list, WordPress is ready. Filter by username and domain to narrow results to a specific website. Each installation includes a `valid` flag and, when invalid, a `validationError` describing why. */ +export const listHostingWordPressInstallationsV1: API.OperationMethod< + ListHostingWordPressInstallationsV1Request, + ListHostingWordPressInstallationsV1Response, + ListHostingWordPressInstallationsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListHostingWordPressInstallationsV1Request, + output: ListHostingWordPressInstallationsV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListHostingWordPressThemesV1Error = HostingerOpError; +/** List WordPress themes List WordPress themes available to install. Use the returned `slug` values with POST /api/hosting/v1/accounts/{username}/wordpress/{software}/themes/install. */ +export const listHostingWordPressThemesV1: API.OperationMethod< + ListHostingWordPressThemesV1Request, + ListHostingWordPressThemesV1Response, + ListHostingWordPressThemesV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListHostingWordPressThemesV1Request, + output: ListHostingWordPressThemesV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListMailAccessLogsV1Error = + | NotFound + | UnprocessableEntity + | HostingerOpError; +/** List access logs Retrieve paginated access logs for the domain attached to the given mail order. Supports filtering by account, date range, protocol, status, and deletion flag. Results are sorted by timestamp descending. */ +export const listMailAccessLogsV1: API.OperationMethod< + ListMailAccessLogsV1Request, + ListMailAccessLogsV1Response, + ListMailAccessLogsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListMailAccessLogsV1Request, + output: ListMailAccessLogsV1Response, + errors: [NotFound, UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListMailActionLogsV1Error = + | NotFound + | UnprocessableEntity + | HostingerOpError; +/** List action logs Retrieve paginated account action logs (administrative and user actions) for the given mail order. Supports filtering by account, date range, and status. Results are sorted by timestamp descending. */ +export const listMailActionLogsV1: API.OperationMethod< + ListMailActionLogsV1Request, + ListMailActionLogsV1Response, + ListMailActionLogsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListMailActionLogsV1Request, + output: ListMailActionLogsV1Response, + errors: [NotFound, UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListMailAliasesV1Error = + | NotFound + | UnprocessableEntity + | HostingerOpError; +/** List aliases Retrieve a paginated list of aliases across all mailboxes of a mail order. */ +export const listMailAliasesV1: API.OperationMethod< + ListMailAliasesV1Request, + ListMailAliasesV1Response, + ListMailAliasesV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListMailAliasesV1Request, + output: ListMailAliasesV1Response, + errors: [NotFound, UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListMailAPITokensV1Error = UnprocessableEntity | HostingerOpError; +/** List API tokens Retrieve a paginated list of [Hostinger Email API](https://api.mail.hostinger.com/) tokens across all your mail orders, optionally filtered by order. Plaintext tokens are never included; they are returned only when a token is created. */ +export const listMailAPITokensV1: API.OperationMethod< + ListMailAPITokensV1Request, + ListMailAPITokensV1Response, + ListMailAPITokensV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListMailAPITokensV1Request, + output: ListMailAPITokensV1Response, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListMailAutorepliesV1Error = + | NotFound + | UnprocessableEntity + | HostingerOpError; +/** List autoreplies Retrieve a paginated list of autoreplies across all mailboxes of a mail order. */ +export const listMailAutorepliesV1: API.OperationMethod< + ListMailAutorepliesV1Request, + ListMailAutorepliesV1Response, + ListMailAutorepliesV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListMailAutorepliesV1Request, + output: ListMailAutorepliesV1Response, + errors: [NotFound, UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListMailCatchAllsV1Error = + | NotFound + | UnprocessableEntity + | HostingerOpError; +/** List catch-alls Retrieve a paginated list of catch-alls across all mailboxes of a mail order. */ +export const listMailCatchAllsV1: API.OperationMethod< + ListMailCatchAllsV1Request, + ListMailCatchAllsV1Response, + ListMailCatchAllsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListMailCatchAllsV1Request, + output: ListMailCatchAllsV1Response, + errors: [NotFound, UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListMailForwardersV1Error = + | NotFound + | UnprocessableEntity + | HostingerOpError; +/** List forwarders Retrieve a paginated list of forwarders across all mailboxes of a mail order. */ +export const listMailForwardersV1: API.OperationMethod< + ListMailForwardersV1Request, + ListMailForwardersV1Response, + ListMailForwardersV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListMailForwardersV1Request, + output: ListMailForwardersV1Response, + errors: [NotFound, UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListMailInboundLogsV1Error = + | NotFound + | UnprocessableEntity + | HostingerOpError; +/** List inbound logs Retrieve paginated inbound (received mail) delivery logs for the domain attached to the given mail order. Supports filtering by account, date range, status, sender, and recipient. Results are sorted by timestamp descending. */ +export const listMailInboundLogsV1: API.OperationMethod< + ListMailInboundLogsV1Request, + ListMailInboundLogsV1Response, + ListMailInboundLogsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListMailInboundLogsV1Request, + output: ListMailInboundLogsV1Response, + errors: [NotFound, UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListMailMailboxActionLogsV1Error = + | NotFound + | UnprocessableEntity + | HostingerOpError; +/** List mailbox action logs Retrieve paginated mailbox action logs (message and mailbox events) for a mailbox in the given mail order. The mailbox email must belong to the order's domain. Supports date range and event type filters. Results are sorted by timestamp descending. */ +export const listMailMailboxActionLogsV1: API.OperationMethod< + ListMailMailboxActionLogsV1Request, + ListMailMailboxActionLogsV1Response, + ListMailMailboxActionLogsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListMailMailboxActionLogsV1Request, + output: ListMailMailboxActionLogsV1Response, + errors: [NotFound, UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListMailMailboxesV1Error = + | NotFound + | UnprocessableEntity + | HostingerOpError; +/** List mailboxes Retrieve a paginated list of mailboxes belonging to a mail order. Use this endpoint to monitor mailboxes of your mail service, including their status, enabled protocols, attached resource counts, and periodically synced usage numbers (usage may lag behind live values). */ +export const listMailMailboxesV1: API.OperationMethod< + ListMailMailboxesV1Request, + ListMailMailboxesV1Response, + ListMailMailboxesV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListMailMailboxesV1Request, + output: ListMailMailboxesV1Response, + errors: [NotFound, UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListMailOrdersV1Error = UnprocessableEntity | HostingerOpError; +/** List orders Retrieve a paginated list of mail orders associated with your account. Use this endpoint to monitor your mail services, including their status, plan, attached domain, and expiration details. */ +export const listMailOrdersV1: API.OperationMethod< + ListMailOrdersV1Request, + ListMailOrdersV1Response, + ListMailOrdersV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListMailOrdersV1Request, + output: ListMailOrdersV1Response, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListMailOutboundLogsV1Error = + | NotFound + | UnprocessableEntity + | HostingerOpError; +/** List outbound logs Retrieve paginated outbound (sent mail) delivery logs for the domain attached to the given mail order. Supports filtering by account, date range, status, sender, and recipient. Results are sorted by timestamp descending. */ +export const listMailOutboundLogsV1: API.OperationMethod< + ListMailOutboundLogsV1Request, + ListMailOutboundLogsV1Response, + ListMailOutboundLogsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListMailOutboundLogsV1Request, + output: ListMailOutboundLogsV1Response, + errors: [NotFound, UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListMailWebhookDeliveryLogsV1Error = + | NotFound + | UnprocessableEntity + | HostingerOpError; +/** List webhook delivery logs Retrieve a paginated list of webhook delivery logs for the given mail order, including delivery outcome, duration, and retry counts. Supports filtering by mailbox. */ +export const listMailWebhookDeliveryLogsV1: API.OperationMethod< + ListMailWebhookDeliveryLogsV1Request, + ListMailWebhookDeliveryLogsV1Response, + ListMailWebhookDeliveryLogsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListMailWebhookDeliveryLogsV1Request, + output: ListMailWebhookDeliveryLogsV1Response, + errors: [NotFound, UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListMailWebhooksV1Error = + | NotFound + | UnprocessableEntity + | HostingerOpError; +/** List webhooks Retrieve a paginated list of webhooks belonging to the given mail order. Supports filtering by mailbox and status. The webhook secret is never included; it is returned only when a webhook is created or its secret is regenerated. */ +export const listMailWebhooksV1: API.OperationMethod< + ListMailWebhooksV1Request, + ListMailWebhooksV1Response, + ListMailWebhooksV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListMailWebhooksV1Request, + output: ListMailWebhooksV1Response, + errors: [NotFound, UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListReachAutomationStepsV1Error = HostingerOpError; +/** List automation steps Get the workflow of an automation as a flat list of steps. The steps form a tree rather than a straight line: follow `parent_uuid` to reconstruct the branches, and use `step_order` to order the steps that share a parent. An automation with no steps yet returns an empty list. */ +export const listReachAutomationStepsV1: API.OperationMethod< + ListReachAutomationStepsV1Request, + ListReachAutomationStepsV1Response, + ListReachAutomationStepsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListReachAutomationStepsV1Request, + output: ListReachAutomationStepsV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListReachAutomationsV1Error = HostingerOpError; +/** List automations Get a paginated list of the automations in a profile. Every automation comes with the counts of contacts that entered it, are moving through it, finished it or failed on the way. Those counts describe the contact journey and are not email engagement metrics - for opens, clicks and unsubscribes use the campaign statistics endpoint instead. */ +export const listReachAutomationsV1: API.OperationMethod< + ListReachAutomationsV1Request, + ListReachAutomationsV1Response, + ListReachAutomationsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListReachAutomationsV1Request, + output: ListReachAutomationsV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListReachCampaignsV1Error = HostingerOpError; +/** List campaigns Get a paginated list of the campaigns in a profile. Each campaign carries its headline engagement rates. Filter by status to find drafts, scheduled, sending or sent campaigns, keeping in mind that a fully sent campaign has the status `publish`. By default only regular campaigns are returned - pass `type` to get the emails sent by automations or the double opt-in confirmations instead. */ +export const listReachCampaignsV1: API.OperationMethod< + ListReachCampaignsV1Request, + ListReachCampaignsV1Response, + ListReachCampaignsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListReachCampaignsV1Request, + output: ListReachCampaignsV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListReachContactFieldsV1Error = HostingerOpError; +/** List contact fields Get the custom contact fields defined in a profile. Custom fields let you store your own attributes on contacts. The returned uuids are what you pass to the contact update endpoint to set values, and choice fields also list the options available to pick from. */ +export const listReachContactFieldsV1: API.OperationMethod< + ListReachContactFieldsV1Request, + ListReachContactFieldsV1Response, + ListReachContactFieldsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListReachContactFieldsV1Request, + output: ListReachContactFieldsV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListReachFormsV1Error = HostingerOpError; +/** List forms Get a paginated list of the signup forms in a profile. Each form carries a reference to the template that renders it. Get the form details for a directly usable template URL and for the tags the form puts on the contacts it captures. */ +export const listReachFormsV1: API.OperationMethod< + ListReachFormsV1Request, + ListReachFormsV1Response, + ListReachFormsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListReachFormsV1Request, + output: ListReachFormsV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListReachPlanFeatureAccessV1Error = HostingerOpError; +/** List plan feature access List which plan features the profile can use. This is the feature lock matrix, not a usage quota. `available` means the feature can be used right now and `locked` means it is not part of the base plan, so an upgrade is needed. For remaining emails, recipients and AI credits use the limits endpoint instead. Worth checking before building something that cannot be activated afterwards, such as an automation on a plan without automation activation. */ +export const listReachPlanFeatureAccessV1: API.OperationMethod< + ListReachPlanFeatureAccessV1Request, + ListReachPlanFeatureAccessV1Response, + ListReachPlanFeatureAccessV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListReachPlanFeatureAccessV1Request, + output: ListReachPlanFeatureAccessV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListReachProfileContactsV1Error = HostingerOpError; +/** List profile contacts Get a paginated list of contacts belonging to a profile. Contacts can be filtered by subscription status, by tag, and by an email search term. The `meta.total` field of the response is the number of contacts matching the filters, so calling this endpoint without filters gives the profile's total contact count. */ +export const listReachProfileContactsV1: API.OperationMethod< + ListReachProfileContactsV1Request, + ListReachProfileContactsV1Response, + ListReachProfileContactsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListReachProfileContactsV1Request, + output: ListReachProfileContactsV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListReachProfileSegmentContactsV1Error = HostingerOpError; +/** List profile segment contacts Retrieve contacts associated with a specific segment for a given profile. This endpoint allows you to fetch and filter contacts that belong to a particular segment, identified by its UUID, scoped to a specific profile. */ +export const listReachProfileSegmentContactsV1: API.OperationMethod< + ListReachProfileSegmentContactsV1Request, + ListReachProfileSegmentContactsV1Response, + ListReachProfileSegmentContactsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListReachProfileSegmentContactsV1Request, + output: ListReachProfileSegmentContactsV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListReachProfileSegmentsV1Error = HostingerOpError; +/** List profile segments Get a paginated list of the segments defined in a profile. Each entry carries the number of contacts currently matching it, which is recalculated on read rather than stored. Use `count_type` to count either every matching contact or only the subscribed ones. */ +export const listReachProfileSegmentsV1: API.OperationMethod< + ListReachProfileSegmentsV1Request, + ListReachProfileSegmentsV1Response, + ListReachProfileSegmentsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListReachProfileSegmentsV1Request, + output: ListReachProfileSegmentsV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListReachProfilesV1Error = HostingerOpError; +/** List Profiles This endpoint returns all profiles available to the client, including their basic information. */ +export const listReachProfilesV1: API.OperationMethod< + ListReachProfilesV1Request, + ListReachProfilesV1Response, + ListReachProfilesV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListReachProfilesV1Request, + output: ListReachProfilesV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListReachProfileTagsV1Error = HostingerOpError; +/** List profile tags Get all tags defined in a profile. Tags are the way contacts are grouped in Reach, and can be used to filter the contact list or to build segments. */ +export const listReachProfileTagsV1: API.OperationMethod< + ListReachProfileTagsV1Request, + ListReachProfileTagsV1Response, + ListReachProfileTagsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListReachProfileTagsV1Request, + output: ListReachProfileTagsV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ListReachSegmentFilterAttributesV1Error = HostingerOpError; +/** List segment filter attributes List every attribute a segment condition can filter on, with the operators each attribute accepts, the value format they expect and, where the value is constrained, the allowed values. The list is profile specific: it includes the profile's custom contact fields, its tags and its 20 most recently published campaigns, so the valid attributes cannot be hardcoded. Read it before creating or updating a segment to discover the valid `attribute`, `operator` and `value` combinations. */ +export const listReachSegmentFilterAttributesV1: API.OperationMethod< + ListReachSegmentFilterAttributesV1Request, + ReachV1ContactsSegmentsSegmentFilterAttributesResource, + ListReachSegmentFilterAttributesV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ListReachSegmentFilterAttributesV1Request, + output: ReachV1ContactsSegmentsSegmentFilterAttributesResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type MailChangeMailboxPasswordV1Error = + | BadRequest + | NotFound + | UnprocessableEntity + | HostingerOpError; +/** Change mailbox password Change the password of a mailbox. */ +export const mailChangeMailboxPasswordV1: API.OperationMethod< + MailChangeMailboxPasswordV1Request, + CommonSuccessEmptyResource, + MailChangeMailboxPasswordV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: MailChangeMailboxPasswordV1Request, + output: CommonSuccessEmptyResource, + errors: [BadRequest, NotFound, UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type MailUpdateForwarderKeepCopySettingV1Error = + | NotFound + | UnprocessableEntity + | HostingerOpError; +/** Update forwarder keep-copy setting Enable or disable keeping a copy of forwarded messages in the mailbox. */ +export const mailUpdateForwarderKeepCopySettingV1: API.OperationMethod< + MailUpdateForwarderKeepCopySettingV1Request, + CommonSuccessEmptyResource, + MailUpdateForwarderKeepCopySettingV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: MailUpdateForwarderKeepCopySettingV1Request, + output: CommonSuccessEmptyResource, + errors: [NotFound, UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type PatchHostingNodeJsVulnerabilitiesV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Patch Node.js vulnerabilities Patches the selected Node.js vulnerabilities by updating the affected package versions in `package.json` and opening a GitHub pull request in the connected repository. The customer reviews and merges the pull request; merging triggers the automatic deployment. Auto-fix is only available for websites deployed from a connected GitHub repository. Websites deployed from an archive have no auto-fix path and return a 404. The Hostinger GitHub App needs write access to the repository; without it the request fails with a 403 explaining the missing permission. Only vulnerabilities with `is_patchable` set to `true` can be patched. Non-patchable IDs in the selection are skipped; the pull request covers the patchable subset, listed in `patched_vulnerability_ids`. Selections without any patchable vulnerability are rejected with a 422. Only one patch pull request can be open at a time per website; close or merge it before patching again. Available on Business and Cloud Hosting plans. */ +export const patchHostingNodeJsVulnerabilitiesV1: API.OperationMethod< + PatchHostingNodeJsVulnerabilitiesV1Request, + HostingV1NodeJsPatchResultResource, + PatchHostingNodeJsVulnerabilitiesV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: PatchHostingNodeJsVulnerabilitiesV1Request, + output: HostingV1NodeJsPatchResultResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type PreviewReachContactsMatchingConditionsV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Preview contacts matching conditions Preview the contacts matching a set of conditions without saving a segment. The body is the same set of conditions accepted when creating or updating a segment, so this is how to check who a filter reaches, and how many, before persisting it. Nothing is stored and no contact is modified. Call the segment filter attributes endpoint first to discover the valid `attribute`, `operator` and `value` combinations. */ +export const previewReachContactsMatchingConditionsV1: API.OperationMethod< + PreviewReachContactsMatchingConditionsV1Request, + PreviewReachContactsMatchingConditionsV1Response, + PreviewReachContactsMatchingConditionsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: PreviewReachContactsMatchingConditionsV1Request, + output: PreviewReachContactsMatchingConditionsV1Response, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type PurgeHostingLiteSpeedCacheV1Error = HostingerOpError; +/** Purge LiteSpeed Cache Purge the LiteSpeed Cache for the specified WordPress installation. Provide the WordPress installation (software) identifier in the path. It can be obtained from GET /api/hosting/v1/wordpress/installations (the `id` field). */ +export const purgeHostingLiteSpeedCacheV1: API.OperationMethod< + PurgeHostingLiteSpeedCacheV1Request, + CommonSuccessEmptyResource, + PurgeHostingLiteSpeedCacheV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: PurgeHostingLiteSpeedCacheV1Request, + output: CommonSuccessEmptyResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ReachCountProfileSegmentContactsV1Error = HostingerOpError; +/** Count profile segment contacts Count the contacts currently matching a segment without listing them. Cheaper than paging through the segment contacts endpoint when only the size is needed. */ +export const reachCountProfileSegmentContactsV1: API.OperationMethod< + ReachCountProfileSegmentContactsV1Request, + ReachV1ContactsSegmentsSegmentContactsCountResource, + ReachCountProfileSegmentContactsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ReachCountProfileSegmentContactsV1Request, + output: ReachV1ContactsSegmentsSegmentContactsCountResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ReachCreateContactsInBulkV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Create contacts in bulk Create many contacts in a profile in a single call. The contacts are imported in the background, so a success response means the import was accepted rather than finished. Contacts whose email already exists in the profile are left as they are. If double opt-in is enabled, new contacts start off pending and are sent a confirmation email. */ +export const reachCreateContactsInBulkV1: API.OperationMethod< + ReachCreateContactsInBulkV1Request, + CommonSuccessEmptyResource, + ReachCreateContactsInBulkV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ReachCreateContactsInBulkV1Request, + output: CommonSuccessEmptyResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ReachCreateOrFindTagsV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Create or find tags Create tags in a profile. Names that already exist in the profile are not duplicated: the existing tag is returned instead, so the call is safe to repeat. Every tag in the request is returned, whether it was created now or already existed. */ +export const reachCreateOrFindTagsV1: API.OperationMethod< + ReachCreateOrFindTagsV1Request, + ReachCreateOrFindTagsV1Response, + ReachCreateOrFindTagsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ReachCreateOrFindTagsV1Request, + output: ReachCreateOrFindTagsV1Response, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type RecreateVPSVirtualMachineV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Recreate virtual machine Recreate a virtual machine from scratch. The recreation process involves reinstalling the operating system and resetting the virtual machine to its initial state. Snapshots, if there are any, will be deleted. ## Password Requirements Password will be checked against leaked password databases. Requirements for the password are: - At least 12 characters long - At least one uppercase letter - At least one lowercase letter - At least one number - Is not leaked publicly **This operation is irreversible and will result in the loss of all data stored on the virtual machine!** Use this endpoint to completely rebuild VPS instances with fresh OS installation. */ +export const recreateVPSVirtualMachineV1: API.OperationMethod< + RecreateVPSVirtualMachineV1Request, + VPSV1ActionActionResource, + RecreateVPSVirtualMachineV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: RecreateVPSVirtualMachineV1Request, + output: VPSV1ActionActionResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type RegenerateMailWebhookSecretV1Error = + | NotFound + | UnprocessableEntity + | HostingerOpError; +/** Regenerate webhook secret Regenerate the secret of a webhook. The previous secret is immediately invalidated. The new secret is returned only in this response and is sent as a bearer token with every delivery. */ +export const regenerateMailWebhookSecretV1: API.OperationMethod< + RegenerateMailWebhookSecretV1Request, + MailV1WebhooksWebhookSecretResource, + RegenerateMailWebhookSecretV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: RegenerateMailWebhookSecretV1Request, + output: MailV1WebhooksWebhookSecretResource, + errors: [NotFound, UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type RemoveReachAContactFromATagV1Error = HostingerOpError; +/** Remove a contact from a tag Remove a tag from a single contact. Unlike the bulk endpoint this is applied immediately rather than queued. Neither the tag nor the contact is deleted. */ +export const removeReachAContactFromATagV1: API.OperationMethod< + RemoveReachAContactFromATagV1Request, + CommonSuccessEmptyResource, + RemoveReachAContactFromATagV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: RemoveReachAContactFromATagV1Request, + output: CommonSuccessEmptyResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type RemoveReachContactsFromATagV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Remove contacts from a tag Remove a tag from many contacts at once. Pass `contact_uuids` to target specific contacts, or `all_contacts` to target every contact in the profile. The work is queued, so a success response means it was accepted rather than finished. The tag itself and the contacts are not deleted. */ +export const removeReachContactsFromATagV1: API.OperationMethod< + RemoveReachContactsFromATagV1Request, + CommonSuccessEmptyResource, + RemoveReachContactsFromATagV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: RemoveReachContactsFromATagV1Request, + output: CommonSuccessEmptyResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type RenameReachATagV1Error = UnprocessableEntity | HostingerOpError; +/** Rename a tag Rename a tag. The contacts assigned to the tag are unaffected. Names are unique within a profile, so renaming a tag to a name that is already taken is rejected. */ +export const renameReachATagV1: API.OperationMethod< + RenameReachATagV1Request, + ReachV1ContactsTagsTagResource, + RenameReachATagV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: RenameReachATagV1Request, + output: ReachV1ContactsTagsTagResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type RenewBillingSubscriptionV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Renew subscription Create a renewal order for an existing Hostinger subscription. This endpoint places a renewal order for a single subscription, leveraging the existing billing infrastructure. Use the [subscriptions endpoint](#tag/billing-subscriptions) to look up the `subscriptionId` values available for renewal. If no payment method is provided, your default payment method will be used automatically. Use this endpoint to renew any subscription available in your account. */ +export const renewBillingSubscriptionV1: API.OperationMethod< + RenewBillingSubscriptionV1Request, + BillingV1OrderOrderResource, + RenewBillingSubscriptionV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: RenewBillingSubscriptionV1Request, + output: BillingV1OrderOrderResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ReplaceAgencyHostingWebsitePHPExtensionsV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Replace website PHP extensions Replaces the set of PHP extensions enabled on an Agency Plan website with the ones provided. Any toggleable extension not in the request is disabled, so call the extensions endpoint first and send the full desired set. Extensions compiled into PHP, reported with the "built-in" state, are always active and are unaffected. */ +export const replaceAgencyHostingWebsitePHPExtensionsV1: API.OperationMethod< + ReplaceAgencyHostingWebsitePHPExtensionsV1Request, + CommonSuccessEmptyResource, + ReplaceAgencyHostingWebsitePHPExtensionsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ReplaceAgencyHostingWebsitePHPExtensionsV1Request, + output: CommonSuccessEmptyResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ReplaceAgencyHostingWebsitePHPOptionsV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Replace website PHP options Replaces the custom php.ini values on an Agency Plan website with the ones provided. Any option not in the request is reset to its default, so call the options endpoint first and send the full desired set. Sending an empty array resets every option to its default. */ +export const replaceAgencyHostingWebsitePHPOptionsV1: API.OperationMethod< + ReplaceAgencyHostingWebsitePHPOptionsV1Request, + CommonSuccessEmptyResource, + ReplaceAgencyHostingWebsitePHPOptionsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ReplaceAgencyHostingWebsitePHPOptionsV1Request, + output: CommonSuccessEmptyResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ReplaceHostingNodeJsEnvironmentVariablesV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Replace Node.js environment variables Replaces the website's Node.js environment variables with the ones provided. This is a full replace: any variable not in the request is deleted, and sending an empty `env_vars` array deletes every variable. Saving writes the values and restarts the running Node.js process. A restart is enough for apps that read environment variables at process start, such as Express or NestJS. It is not enough for frameworks that bake variables into the build. Next.js standalone is one of those: build-time values (including `NEXT_PUBLIC_*`) need a fresh build. After this call, use the `Start Node.js build` endpoint so those apps pick up the new values. The `List Node.js environment variables` endpoint returns masked values (`********`), so never copy values from it into this request. Always send the full desired set with real values taken from the project `.env` file or the user prompt. */ +export const replaceHostingNodeJsEnvironmentVariablesV1: API.OperationMethod< + ReplaceHostingNodeJsEnvironmentVariablesV1Request, + CommonSuccessEmptyResource, + ReplaceHostingNodeJsEnvironmentVariablesV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ReplaceHostingNodeJsEnvironmentVariablesV1Request, + output: CommonSuccessEmptyResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ReplaceVPSAllFirewallRulesInGroupV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Replace all firewall rules in group Replaces all firewall rules within a specified firewall group with the provided set of rules in a single atomic operation, instead of creating or deleting rules one by one. Any virtual machine using this firewall group will need to be synchronized after replacing rules; pass the "sync" parameter to trigger synchronization immediately. */ +export const replaceVPSAllFirewallRulesInGroupV1: API.OperationMethod< + ReplaceVPSAllFirewallRulesInGroupV1Request, + VPSV1FirewallFirewallResource, + ReplaceVPSAllFirewallRulesInGroupV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ReplaceVPSAllFirewallRulesInGroupV1Request, + output: VPSV1FirewallFirewallResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ResendMailCatchAllConfirmationV1Error = + | NotFound + | Conflict + | UnprocessableEntity + | HostingerOpError; +/** Resend catch-all confirmation Resend the confirmation email to the mailbox address of an unconfirmed catch-all. */ +export const resendMailCatchAllConfirmationV1: API.OperationMethod< + ResendMailCatchAllConfirmationV1Request, + CommonSuccessEmptyResource, + ResendMailCatchAllConfirmationV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ResendMailCatchAllConfirmationV1Request, + output: CommonSuccessEmptyResource, + errors: [NotFound, Conflict, UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ResendMailForwarderConfirmationV1Error = + | NotFound + | Conflict + | UnprocessableEntity + | HostingerOpError; +/** Resend forwarder confirmation Resend the confirmation email to the destination address of an unconfirmed forwarder. */ +export const resendMailForwarderConfirmationV1: API.OperationMethod< + ResendMailForwarderConfirmationV1Request, + CommonSuccessEmptyResource, + ResendMailForwarderConfirmationV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ResendMailForwarderConfirmationV1Request, + output: CommonSuccessEmptyResource, + errors: [NotFound, Conflict, UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ResetDNSDNSRecordsV1Error = UnprocessableEntity | HostingerOpError; +/** Reset DNS records Reset DNS zone to the default records. Use this endpoint to restore domain DNS to original configuration. */ +export const resetDNSDNSRecordsV1: API.OperationMethod< + ResetDNSDNSRecordsV1Request, + CommonSuccessEmptyResource, + ResetDNSDNSRecordsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ResetDNSDNSRecordsV1Request, + output: CommonSuccessEmptyResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ResetHostingPHPExtensionsV1Error = HostingerOpError; +/** Reset PHP extensions Resets all PHP extensions of the website to their default state. Use it to recover from extension conflicts or restore the original configuration. */ +export const resetHostingPHPExtensionsV1: API.OperationMethod< + ResetHostingPHPExtensionsV1Request, + CommonSuccessEmptyResource, + ResetHostingPHPExtensionsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ResetHostingPHPExtensionsV1Request, + output: CommonSuccessEmptyResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ResetVPSHostnameV1Error = HostingerOpError; +/** Reset hostname Reset hostname and PTR record of a specified virtual machine to default value. Use this endpoint to restore default hostname configuration for VPS instances. */ +export const resetVPSHostnameV1: API.OperationMethod< + ResetVPSHostnameV1Request, + VPSV1ActionActionResource, + ResetVPSHostnameV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ResetVPSHostnameV1Request, + output: VPSV1ActionActionResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type RestartHostingNodeJsApplicationV1Error = HostingerOpError; +/** Restart Node.js application Restarts the Node.js server process for the website. Does not rebuild or redeploy the application. Use it to apply environment or configuration changes, or to recover a hung application. Only applicable to server-side applications (Express, Next.js, NestJS, etc.). Static front-end apps (React, Vue, Vite) have no persistent server process, so restarting them has no effect. Returns success even when the website has no server process to restart. */ +export const restartHostingNodeJsApplicationV1: API.OperationMethod< + RestartHostingNodeJsApplicationV1Request, + CommonSuccessEmptyResource, + RestartHostingNodeJsApplicationV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: RestartHostingNodeJsApplicationV1Request, + output: CommonSuccessEmptyResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type RestartVPSProjectV1Error = UnprocessableEntity | HostingerOpError; +/** Restart project Restarts all services in a Docker Compose project by stopping and starting containers in the correct dependency order. This operation preserves data volumes and network configurations while refreshing the running containers. Use this to apply configuration changes or recover from service failures. */ +export const restartVPSProjectV1: API.OperationMethod< + RestartVPSProjectV1Request, + VPSV1ActionActionResource, + RestartVPSProjectV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: RestartVPSProjectV1Request, + output: VPSV1ActionActionResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type RestartVPSVirtualMachineV1Error = HostingerOpError; +/** Restart virtual machine Restart a specified virtual machine by fully stopping and starting it. If the virtual machine was stopped, it will be started. Use this endpoint to reboot VPS instances. */ +export const restartVPSVirtualMachineV1: API.OperationMethod< + RestartVPSVirtualMachineV1Request, + VPSV1ActionActionResource, + RestartVPSVirtualMachineV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: RestartVPSVirtualMachineV1Request, + output: VPSV1ActionActionResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type RestoreDNSDNSSnapshotV1Error = HostingerOpError; +/** Restore DNS snapshot Restore DNS zone to the selected snapshot. Use this endpoint to revert domain DNS to a previous configuration. */ +export const restoreDNSDNSSnapshotV1: API.OperationMethod< + RestoreDNSDNSSnapshotV1Request, + CommonSuccessEmptyResource, + RestoreDNSDNSSnapshotV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: RestoreDNSDNSSnapshotV1Request, + output: CommonSuccessEmptyResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type RestoreVPSBackupV1Error = HostingerOpError; +/** Restore backup Restore a backup for a specified virtual machine. The system will then initiate the restore process, which may take some time depending on the size of the backup. **All data on the virtual machine will be overwritten with the data from the backup.** Use this endpoint to recover VPS data from backup points. */ +export const restoreVPSBackupV1: API.OperationMethod< + RestoreVPSBackupV1Request, + VPSV1ActionActionResource, + RestoreVPSBackupV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: RestoreVPSBackupV1Request, + output: VPSV1ActionActionResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type RestoreVPSSnapshotV1Error = HostingerOpError; +/** Restore snapshot Restore a specified virtual machine to a previous state using a snapshot. Restoring from a snapshot allows users to revert the virtual machine to that state, which is useful for system recovery, undoing changes, or testing. Use this endpoint to revert VPS instances to previous saved states. */ +export const restoreVPSSnapshotV1: API.OperationMethod< + RestoreVPSSnapshotV1Request, + VPSV1ActionActionResource, + RestoreVPSSnapshotV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: RestoreVPSSnapshotV1Request, + output: VPSV1ActionActionResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type RevokeMailAPITokenV1Error = + | NotFound + | UnprocessableEntity + | HostingerOpError; +/** Revoke API token Revoke an API token. The token immediately loses access to the [Hostinger Email API](https://api.mail.hostinger.com/). This action cannot be undone. */ +export const revokeMailAPITokenV1: API.OperationMethod< + RevokeMailAPITokenV1Request, + CommonSuccessEmptyResource, + RevokeMailAPITokenV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: RevokeMailAPITokenV1Request, + output: CommonSuccessEmptyResource, + errors: [NotFound, UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type SearchHostingWordPressPluginsV1Error = HostingerOpError; +/** Search WordPress plugins Search the WordPress.org plugin directory for plugins available to install. Use the returned `slug` values with POST /api/hosting/v1/accounts/{username}/wordpress/{software}/plugins/install. */ +export const searchHostingWordPressPluginsV1: API.OperationMethod< + SearchHostingWordPressPluginsV1Request, + SearchHostingWordPressPluginsV1Response, + SearchHostingWordPressPluginsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: SearchHostingWordPressPluginsV1Request, + output: SearchHostingWordPressPluginsV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type SetBillingDefaultPaymentMethodV1Error = HostingerOpError; +/** Set default payment method Set the default payment method for your account. Use this endpoint to configure the primary payment method for future orders. */ +export const setBillingDefaultPaymentMethodV1: API.OperationMethod< + SetBillingDefaultPaymentMethodV1Request, + CommonSuccessEmptyResource, + SetBillingDefaultPaymentMethodV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: SetBillingDefaultPaymentMethodV1Request, + output: CommonSuccessEmptyResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type SetDomainWHOISProfileAsDefaultV1Error = HostingerOpError; +/** Set WHOIS profile as default Set WHOIS contact profile as default. The default profile is pre-selected for the TLD it belongs to when registering new domains. Use this endpoint to avoid picking contact information for every registration. */ +export const setDomainWHOISProfileAsDefaultV1: API.OperationMethod< + SetDomainWHOISProfileAsDefaultV1Request, + CommonSuccessEmptyResource, + SetDomainWHOISProfileAsDefaultV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: SetDomainWHOISProfileAsDefaultV1Request, + output: CommonSuccessEmptyResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type SetEcommerceStoreShippingV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Set store shipping Set the flat-rate shipping price for a store, creating the shipping zone if it does not exist yet. */ +export const setEcommerceStoreShippingV1: API.OperationMethod< + SetEcommerceStoreShippingV1Request, + EcommerceV1ShippingShippingResource, + SetEcommerceStoreShippingV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: SetEcommerceStoreShippingV1Request, + output: EcommerceV1ShippingShippingResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type SetHostingAIOptionStatusV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Set AI option status Enable or disable an AI option for the Hostinger Tools plugin on the specified WordPress installation. Provide the WordPress installation (software) identifier in the path. It can be obtained from GET /api/hosting/v1/wordpress/installations (the `id` field). */ +export const setHostingAIOptionStatusV1: API.OperationMethod< + SetHostingAIOptionStatusV1Request, + CommonSuccessEmptyResource, + SetHostingAIOptionStatusV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: SetHostingAIOptionStatusV1Request, + output: CommonSuccessEmptyResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type SetVPSHostnameV1Error = UnprocessableEntity | HostingerOpError; +/** Set hostname Set hostname for a specified virtual machine. Changing hostname does not update PTR record automatically. If you want your virtual machine to be reachable by a hostname, you need to point your domain A/AAAA records to virtual machine IP as well. Use this endpoint to configure custom hostnames for VPS instances. */ +export const setVPSHostnameV1: API.OperationMethod< + SetVPSHostnameV1Request, + VPSV1ActionActionResource, + SetVPSHostnameV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: SetVPSHostnameV1Request, + output: VPSV1ActionActionResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type SetVPSNameserversV1Error = UnprocessableEntity | HostingerOpError; +/** Set nameservers Set nameservers for a specified virtual machine. Be aware, that improper nameserver configuration can lead to the virtual machine being unable to resolve domain names. Use this endpoint to configure custom DNS resolvers for VPS instances. */ +export const setVPSNameserversV1: API.OperationMethod< + SetVPSNameserversV1Request, + VPSV1ActionActionResource, + SetVPSNameserversV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: SetVPSNameserversV1Request, + output: VPSV1ActionActionResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type SetVPSPanelPasswordV1Error = UnprocessableEntity | HostingerOpError; +/** Set panel password Set panel password for a specified virtual machine. If virtual machine does not use panel OS, the request will still be processed without any effect. Requirements for password are same as in the [recreate virtual machine endpoint](/#tag/vps-virtual-machine/POST/api/vps/v1/virtual-machines/{virtualMachineId}/recreate). Use this endpoint to configure control panel access credentials for VPS instances. */ +export const setVPSPanelPasswordV1: API.OperationMethod< + SetVPSPanelPasswordV1Request, + VPSV1ActionActionResource, + SetVPSPanelPasswordV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: SetVPSPanelPasswordV1Request, + output: VPSV1ActionActionResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type SetVPSRootPasswordV1Error = UnprocessableEntity | HostingerOpError; +/** Set root password Set root password for a specified virtual machine. Requirements for password are same as in the [recreate virtual machine endpoint](/#tag/vps-virtual-machine/POST/api/vps/v1/virtual-machines/{virtualMachineId}/recreate). Use this endpoint to update administrator credentials for VPS instances. */ +export const setVPSRootPasswordV1: API.OperationMethod< + SetVPSRootPasswordV1Request, + VPSV1ActionActionResource, + SetVPSRootPasswordV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: SetVPSRootPasswordV1Request, + output: VPSV1ActionActionResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type StartHostingNodeJsBuildV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Start Node.js build Start a Node.js build process using files already present on the website's file storage. WARNING: on success this overwrites the website's existing contents and cannot be undone — verify this is intended before calling this endpoint. The `source_type` must be `archive` and `source_options.archive_path` must point to an existing archive file on the server (relative to the website document root). Use the `Generate Upload URL` endpoint to obtain credentials and upload the archive first. To auto-detect build settings from an archive before starting, first call the `Get Node.js Build Settings from Archive` endpoint. The returned build `uuid` can be used to poll progress and retrieve logs via the `Get Node.js Build Logs` endpoint. */ +export const startHostingNodeJsBuildV1: API.OperationMethod< + StartHostingNodeJsBuildV1Request, + HostingV1NodeJsBuildResource, + StartHostingNodeJsBuildV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: StartHostingNodeJsBuildV1Request, + output: HostingV1NodeJsBuildResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type StartVPSProjectV1Error = UnprocessableEntity | HostingerOpError; +/** Start project Starts all services in a Docker Compose project that are currently stopped. This operation brings up containers in the correct dependency order as defined in the compose file. Use this to resume a project that was previously stopped or to start services after a system reboot. */ +export const startVPSProjectV1: API.OperationMethod< + StartVPSProjectV1Request, + VPSV1ActionActionResource, + StartVPSProjectV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: StartVPSProjectV1Request, + output: VPSV1ActionActionResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type StartVPSRecoveryModeV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Start recovery mode Initiate recovery mode for a specified virtual machine. Recovery mode is a special state that allows users to perform system rescue operations, such as repairing file systems, recovering data, or troubleshooting issues that prevent the virtual machine from booting normally. Virtual machine will boot recovery disk image and original disk image will be mounted in `/mnt` directory. Use this endpoint to enable system rescue operations on VPS instances. */ +export const startVPSRecoveryModeV1: API.OperationMethod< + StartVPSRecoveryModeV1Request, + VPSV1ActionActionResource, + StartVPSRecoveryModeV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: StartVPSRecoveryModeV1Request, + output: VPSV1ActionActionResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type StartVPSVirtualMachineV1Error = HostingerOpError; +/** Start virtual machine Start a specified virtual machine. If the virtual machine is already running, the request will still be processed without any effect. Use this endpoint to power on stopped VPS instances. */ +export const startVPSVirtualMachineV1: API.OperationMethod< + StartVPSVirtualMachineV1Request, + VPSV1ActionActionResource, + StartVPSVirtualMachineV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: StartVPSVirtualMachineV1Request, + output: VPSV1ActionActionResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type StopVPSProjectV1Error = UnprocessableEntity | HostingerOpError; +/** Stop project Stops all running services in a Docker Compose project while preserving container configurations and data volumes. This operation gracefully shuts down containers in reverse dependency order. Use this to temporarily halt a project without removing data or configurations. */ +export const stopVPSProjectV1: API.OperationMethod< + StopVPSProjectV1Request, + VPSV1ActionActionResource, + StopVPSProjectV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: StopVPSProjectV1Request, + output: VPSV1ActionActionResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type StopVPSRecoveryModeV1Error = HostingerOpError; +/** Stop recovery mode Stop recovery mode for a specified virtual machine. If virtual machine is not in recovery mode, this operation will fail. Use this endpoint to exit system rescue mode and return VPS to normal operation. */ +export const stopVPSRecoveryModeV1: API.OperationMethod< + StopVPSRecoveryModeV1Request, + VPSV1ActionActionResource, + StopVPSRecoveryModeV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: StopVPSRecoveryModeV1Request, + output: VPSV1ActionActionResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type StopVPSVirtualMachineV1Error = HostingerOpError; +/** Stop virtual machine Stop a specified virtual machine. If the virtual machine is already stopped, the request will still be processed without any effect. This is a compute-only power state change and does not affect billing. To stop future charges, disable auto-renewal on the owning subscription. Use this endpoint to power off running VPS instances. */ +export const stopVPSVirtualMachineV1: API.OperationMethod< + StopVPSVirtualMachineV1Request, + VPSV1ActionActionResource, + StopVPSVirtualMachineV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: StopVPSVirtualMachineV1Request, + output: VPSV1ActionActionResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type SyncVPSFirewallV1Error = UnprocessableEntity | HostingerOpError; +/** Sync firewall Sync a firewall for a specified virtual machine. Firewall can lose sync with virtual machine if the firewall has new rules added, removed or updated. Use this endpoint to apply updated firewall rules to VPS instances. */ +export const syncVPSFirewallV1: API.OperationMethod< + SyncVPSFirewallV1Request, + VPSV1ActionActionResource, + SyncVPSFirewallV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: SyncVPSFirewallV1Request, + output: VPSV1ActionActionResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type TestMailWebhookV1Error = + | NotFound + | UnprocessableEntity + | HostingerOpError; +/** Test webhook Send a test delivery to the webhook URL and return the result. Test requests are rate limited upstream. */ +export const testMailWebhookV1: API.OperationMethod< + TestMailWebhookV1Request, + MailV1WebhooksWebhookTestResultResource, + TestMailWebhookV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: TestMailWebhookV1Request, + output: MailV1WebhooksWebhookTestResultResource, + errors: [NotFound, UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ToggleHostingCachelessModeV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Toggle cacheless mode Turns development (cacheless) mode on or off, based on the enabled flag. When enabled, nothing is cached, effectively turning off all caching for the website; use it while actively developing, testing changes, debugging issues, or when real-time updates must be visible. Disable it after finishing development work to restore the performance benefits of caching. */ +export const toggleHostingCachelessModeV1: API.OperationMethod< + ToggleHostingCachelessModeV1Request, + CommonSuccessEmptyResource, + ToggleHostingCachelessModeV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ToggleHostingCachelessModeV1Request, + output: CommonSuccessEmptyResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ToggleHostingMaintenanceModeV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Toggle maintenance mode Enable or disable maintenance mode for the specified WordPress installation, based on the `enabled` flag. Provide the WordPress installation (software) identifier in the path. It can be obtained from GET /api/hosting/v1/wordpress/installations (the `id` field). */ +export const toggleHostingMaintenanceModeV1: API.OperationMethod< + ToggleHostingMaintenanceModeV1Request, + CommonSuccessEmptyResource, + ToggleHostingMaintenanceModeV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ToggleHostingMaintenanceModeV1Request, + output: CommonSuccessEmptyResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ToggleHostingMemcachedObjectCacheV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Toggle Memcached object cache Activate or deactivate the Memcached object cache for the specified WordPress installation, based on the `enabled` flag. Provide the WordPress installation (software) identifier in the path. It can be obtained from GET /api/hosting/v1/wordpress/installations (the `id` field). */ +export const toggleHostingMemcachedObjectCacheV1: API.OperationMethod< + ToggleHostingMemcachedObjectCacheV1Request, + CommonSuccessEmptyResource, + ToggleHostingMemcachedObjectCacheV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ToggleHostingMemcachedObjectCacheV1Request, + output: CommonSuccessEmptyResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ToggleHostingWebsiteCacheV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Toggle website cache Turns server-side caching for the website on or off, based on the enabled flag. Enable it for faster page loads, reduced server load, and improved user experience; recommended for production websites. Disabling may impact performance; to temporarily bypass caching while developing or debugging, prefer toggling cacheless mode instead. Does nothing if caching is already in the requested state. */ +export const toggleHostingWebsiteCacheV1: API.OperationMethod< + ToggleHostingWebsiteCacheV1Request, + CommonSuccessEmptyResource, + ToggleHostingWebsiteCacheV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ToggleHostingWebsiteCacheV1Request, + output: CommonSuccessEmptyResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type UninstallHostingWordPressPluginsV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Uninstall WordPress plugins Uninstall one or more plugins from a WordPress installation. Provide the WordPress installation (software) identifier in the path. It can be obtained from GET /api/hosting/v1/wordpress/installations (the `id` field). This operation is asynchronous: a successful response only means the uninstall job has been queued. */ +export const uninstallHostingWordPressPluginsV1: API.OperationMethod< + UninstallHostingWordPressPluginsV1Request, + CommonSuccessEmptyResource, + UninstallHostingWordPressPluginsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: UninstallHostingWordPressPluginsV1Request, + output: CommonSuccessEmptyResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type UninstallHostingWordPressThemesV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Uninstall WordPress themes Uninstall one or more themes from a WordPress installation. Provide the WordPress installation (software) identifier in the path. It can be obtained from GET /api/hosting/v1/wordpress/installations (the `id` field). This operation is asynchronous: a successful response only means the uninstall job has been queued. */ +export const uninstallHostingWordPressThemesV1: API.OperationMethod< + UninstallHostingWordPressThemesV1Request, + CommonSuccessEmptyResource, + UninstallHostingWordPressThemesV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: UninstallHostingWordPressThemesV1Request, + output: CommonSuccessEmptyResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type UninstallVPSMonarxV1Error = UnprocessableEntity | HostingerOpError; +/** Uninstall Monarx Uninstall the Monarx malware scanner on a specified virtual machine. If Monarx is not installed, the request will still be processed without any effect. Use this endpoint to remove malware scanner from VPS instances. */ +export const uninstallVPSMonarxV1: API.OperationMethod< + UninstallVPSMonarxV1Request, + VPSV1ActionActionResource, + UninstallVPSMonarxV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: UninstallVPSMonarxV1Request, + output: VPSV1ActionActionResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type UnlinkAgencyHostingDomainFromWebsiteV1Error = HostingerOpError; +/** Unlink domain from website Unlinks a domain from the specified Agency Plan website. The website stops serving traffic on this domain immediately. Website files and database are preserved, and any other linked domains remain accessible. If this is the only domain on the website, unlinking leaves the website without an accessible domain. */ +export const unlinkAgencyHostingDomainFromWebsiteV1: API.OperationMethod< + UnlinkAgencyHostingDomainFromWebsiteV1Request, + CommonSuccessEmptyResource, + UnlinkAgencyHostingDomainFromWebsiteV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: UnlinkAgencyHostingDomainFromWebsiteV1Request, + output: CommonSuccessEmptyResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type UpdateAgencyHostingWebsitePHPVersionV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Update website PHP version Switches an Agency Plan website to a different PHP version. Call the available versions endpoint first to see which versions can be selected. The website restarts on the new version, so requests served during the switch may fail and code that is incompatible with the target version will break. */ +export const updateAgencyHostingWebsitePHPVersionV1: API.OperationMethod< + UpdateAgencyHostingWebsitePHPVersionV1Request, + CommonSuccessEmptyResource, + UpdateAgencyHostingWebsitePHPVersionV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: UpdateAgencyHostingWebsitePHPVersionV1Request, + output: CommonSuccessEmptyResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type UpdateDNSDNSRecordsV1Error = UnprocessableEntity | HostingerOpError; +/** Update DNS records Update DNS records for the selected domain. Using `overwrite = true` will replace existing records with the provided ones. Otherwise existing records will be updated and new records will be added. Use this endpoint to modify domain DNS configuration. */ +export const updateDNSDNSRecordsV1: API.OperationMethod< + UpdateDNSDNSRecordsV1Request, + CommonSuccessEmptyResource, + UpdateDNSDNSRecordsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: UpdateDNSDNSRecordsV1Request, + output: CommonSuccessEmptyResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type UpdateDomainDomainForwardingV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Update domain forwarding Update domain forwarding configuration. Use this endpoint to modify existing redirect configuration for domains. */ +export const updateDomainDomainForwardingV1: API.OperationMethod< + UpdateDomainDomainForwardingV1Request, + DomainsV1ForwardingForwardingResource, + UpdateDomainDomainForwardingV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: UpdateDomainDomainForwardingV1Request, + output: DomainsV1ForwardingForwardingResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type UpdateDomainDomainNameserversV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Update domain nameservers Set nameservers for a specified domain. Be aware, that improper nameserver configuration can lead to the domain being unresolvable or unavailable. Use this endpoint to configure custom DNS hosting for domains. */ +export const updateDomainDomainNameserversV1: API.OperationMethod< + UpdateDomainDomainNameserversV1Request, + CommonSuccessEmptyResource, + UpdateDomainDomainNameserversV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: UpdateDomainDomainNameserversV1Request, + output: CommonSuccessEmptyResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type UpdateEcommerceAProductV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Update a product Update a product's name, description or status. Set status to published to make it buyable, draft to hide it, or archived to retire it. Variants, prices and inventory are managed through the variant endpoints, not here. Returns the updated product summary. */ +export const updateEcommerceAProductV1: API.OperationMethod< + UpdateEcommerceAProductV1Request, + EcommerceV1ProductProductResponseResource, + UpdateEcommerceAProductV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: UpdateEcommerceAProductV1Request, + output: EcommerceV1ProductProductResponseResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type UpdateEcommerceProductVariantsInBatchV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Update product variants in batch Update up to 100 existing variants in place by id — title, inventory, stock tracking and prices. Variants omitted from the request are left untouched. Prices replace the variant's existing prices in full. Returns the updated variants. */ +export const updateEcommerceProductVariantsInBatchV1: API.OperationMethod< + UpdateEcommerceProductVariantsInBatchV1Request, + EcommerceV1VariantVariantListResponseResource, + UpdateEcommerceProductVariantsInBatchV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: UpdateEcommerceProductVariantsInBatchV1Request, + output: EcommerceV1VariantVariantListResponseResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type UpdateEcommerceSalesChannelV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Update sales channel Update a custom sales channel. The merchant-facing `name` and the public `url` (returned as the channel `domain`) can be changed. Pass `null` to clear a value. */ +export const updateEcommerceSalesChannelV1: API.OperationMethod< + UpdateEcommerceSalesChannelV1Request, + EcommerceV1SalesChannelSalesChannelUpdateResource, + UpdateEcommerceSalesChannelV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: UpdateEcommerceSalesChannelV1Request, + output: EcommerceV1SalesChannelSalesChannelUpdateResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type UpdateHostingHostingerWordPressPluginV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Update Hostinger WordPress plugin Update a Hostinger plugin to its latest version on a WordPress installation. Provide the WordPress installation (software) identifier in the path. It can be obtained from GET /api/hosting/v1/wordpress/installations (the `id` field). This operation is asynchronous: a successful response only means the update job has been queued. */ +export const updateHostingHostingerWordPressPluginV1: API.OperationMethod< + UpdateHostingHostingerWordPressPluginV1Request, + CommonSuccessEmptyResource, + UpdateHostingHostingerWordPressPluginV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: UpdateHostingHostingerWordPressPluginV1Request, + output: CommonSuccessEmptyResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type UpdateHostingPHPExtensionsV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Update PHP extensions Enables or disables PHP extensions (modules) for the website. Use the Get PHP details endpoint to check the current extension states before changing them. */ +export const updateHostingPHPExtensionsV1: API.OperationMethod< + UpdateHostingPHPExtensionsV1Request, + CommonSuccessEmptyResource, + UpdateHostingPHPExtensionsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: UpdateHostingPHPExtensionsV1Request, + output: CommonSuccessEmptyResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type UpdateHostingPHPOptionsV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Update PHP options Updates PHP options for the website (e.g. `memory_limit`, `max_execution_time`, `upload_max_filesize`). Only provide the options you want to change, inside the `options` object. Values above the account plan limit are silently capped to that limit, so the request can succeed with a smaller applied value. Call the Get PHP details endpoint afterwards to read the applied value. */ +export const updateHostingPHPOptionsV1: API.OperationMethod< + UpdateHostingPHPOptionsV1Request, + CommonSuccessEmptyResource, + UpdateHostingPHPOptionsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: UpdateHostingPHPOptionsV1Request, + output: CommonSuccessEmptyResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type UpdateHostingPHPVersionV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Update PHP version Changes the PHP version of the website. Use the Get PHP details endpoint to see the versions available for the website. */ +export const updateHostingPHPVersionV1: API.OperationMethod< + UpdateHostingPHPVersionV1Request, + CommonSuccessEmptyResource, + UpdateHostingPHPVersionV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: UpdateHostingPHPVersionV1Request, + output: CommonSuccessEmptyResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type UpdateHostingWordPressCoreV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Update WordPress core Update the WordPress core for the specified installation (minor update or a specific version). Provide the WordPress installation (software) identifier in the path. It can be obtained from GET /api/hosting/v1/wordpress/installations (the `id` field). This operation is asynchronous: a successful response only means the update job has been queued. */ +export const updateHostingWordPressCoreV1: API.OperationMethod< + UpdateHostingWordPressCoreV1Request, + CommonSuccessEmptyResource, + UpdateHostingWordPressCoreV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: UpdateHostingWordPressCoreV1Request, + output: CommonSuccessEmptyResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type UpdateHostingWordPressPluginsV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Update WordPress plugins Update one or more installed plugins to their latest version on a WordPress installation. Provide the WordPress installation (software) identifier in the path. It can be obtained from GET /api/hosting/v1/wordpress/installations (the `id` field). This operation is asynchronous: a successful response only means the update job has been queued. */ +export const updateHostingWordPressPluginsV1: API.OperationMethod< + UpdateHostingWordPressPluginsV1Request, + CommonSuccessEmptyResource, + UpdateHostingWordPressPluginsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: UpdateHostingWordPressPluginsV1Request, + output: CommonSuccessEmptyResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type UpdateHostingWordPressThemesV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Update WordPress themes Update one or more installed themes to their latest version on a WordPress installation. Provide the WordPress installation (software) identifier in the path. It can be obtained from GET /api/hosting/v1/wordpress/installations (the `id` field). This operation is asynchronous: a successful response only means the update job has been queued. */ +export const updateHostingWordPressThemesV1: API.OperationMethod< + UpdateHostingWordPressThemesV1Request, + CommonSuccessEmptyResource, + UpdateHostingWordPressThemesV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: UpdateHostingWordPressThemesV1Request, + output: CommonSuccessEmptyResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type UpdateMailAutoreplyV1Error = + | NotFound + | UnprocessableEntity + | HostingerOpError; +/** Update autoreply Replace the autoreply with the given content and schedule. Omitted optional fields are cleared: omit `starts_at` to activate the autoreply immediately and omit `ends_at` to keep it active indefinitely. */ +export const updateMailAutoreplyV1: API.OperationMethod< + UpdateMailAutoreplyV1Request, + MailV1AutorepliesAutoreplyResource, + UpdateMailAutoreplyV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: UpdateMailAutoreplyV1Request, + output: MailV1AutorepliesAutoreplyResource, + errors: [NotFound, UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type UpdateMailWebhookV1Error = + | BadRequest + | NotFound + | UnprocessableEntity + | HostingerOpError; +/** Update webhook Partially update a webhook. Only the fields included in the request body are changed; omitted fields retain their current values. Pass `"description": null` to clear the description. */ +export const updateMailWebhookV1: API.OperationMethod< + UpdateMailWebhookV1Request, + MailV1WebhooksWebhookResource, + UpdateMailWebhookV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: UpdateMailWebhookV1Request, + output: MailV1WebhooksWebhookResource, + errors: [BadRequest, NotFound, UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type UpdateReachAContactFieldV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Update a contact field Rename a custom contact field and, for the choice types, replace its option set. Options carrying a uuid are kept and relabelled, options without one are created, and any existing option left out of the list is deleted along with the values contacts hold for it. The field type and slug cannot be changed. */ +export const updateReachAContactFieldV1: API.OperationMethod< + UpdateReachAContactFieldV1Request, + ReachV1ContactsFieldsContactFieldResource, + UpdateReachAContactFieldV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: UpdateReachAContactFieldV1Request, + output: ReachV1ContactsFieldsContactFieldResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type UpdateReachAContactV1Error = UnprocessableEntity | HostingerOpError; +/** Update a contact Update a contact's attributes and custom field values. Only the properties present in the request body are changed, so a partial body is enough to change a single attribute. Sending a property as `null` clears it. The response carries the contact's core attributes. Read back its tags, custom field values, source and note with `GET /api/reach/v1/profiles/{profileUuid}/contacts/{contactUuid}`. */ +export const updateReachAContactV1: API.OperationMethod< + UpdateReachAContactV1Request, + ReachV1ContactsProfileContactUpdateResource, + UpdateReachAContactV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: UpdateReachAContactV1Request, + output: ReachV1ContactsProfileContactUpdateResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type UpdateReachAProfileSegmentV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Update a profile segment Rename a segment and/or replace the conditions that define it. `name` is always required. Omit `conditions` to rename without touching the conditions; supply them and they replace the existing set entirely rather than being merged into it. Contacts are never modified, but which of them match the segment can change immediately. */ +export const updateReachAProfileSegmentV1: API.OperationMethod< + UpdateReachAProfileSegmentV1Request, + ReachV1ContactsSegmentsSegmentResource, + UpdateReachAProfileSegmentV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: UpdateReachAProfileSegmentV1Request, + output: ReachV1ContactsSegmentsSegmentResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type UpdateVPSFirewallRuleV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Update firewall rule Update a specific firewall rule from a specified firewall. Any virtual machine that has this firewall activated will lose sync with the firewall and will have to be synced again manually. Use this endpoint to modify existing firewall rules. */ +export const updateVPSFirewallRuleV1: API.OperationMethod< + UpdateVPSFirewallRuleV1Request, + VPSV1FirewallFirewallRuleResource, + UpdateVPSFirewallRuleV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: UpdateVPSFirewallRuleV1Request, + output: VPSV1FirewallFirewallRuleResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type UpdateVPSProjectV1Error = UnprocessableEntity | HostingerOpError; +/** Update project Updates a Docker Compose project by pulling the latest image versions and recreating containers with new configurations. This operation preserves data volumes while applying changes from the compose file. Use this to deploy application updates, apply configuration changes, or refresh container images to their latest versions. */ +export const updateVPSProjectV1: API.OperationMethod< + UpdateVPSProjectV1Request, + VPSV1ActionActionResource, + UpdateVPSProjectV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: UpdateVPSProjectV1Request, + output: VPSV1ActionActionResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type ValidateDNSDNSRecordsV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Validate DNS records Validate DNS records prior to update for the selected domain. If the validation is successful, the response will contain `200 Success` code. If there is validation error, the response will fail with `422 Validation error` code. Use this endpoint to verify DNS record validity before applying changes. */ +export const validateDNSDNSRecordsV1: API.OperationMethod< + ValidateDNSDNSRecordsV1Request, + CommonSuccessEmptyResource, + ValidateDNSDNSRecordsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: ValidateDNSDNSRecordsV1Request, + output: CommonSuccessEmptyResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type VerifyHostingDomainOwnershipV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Verify domain ownership Verify ownership of a single domain and return the verification status. Use this endpoint to check if a domain is accessible for you before using it for new websites. If the domain is accessible, the response will have `is_accessible: true`. If not, add the given TXT record to your domain's DNS records and try verifying again. Keep in mind that it may take up to 10 minutes for new TXT DNS records to propagate. Skip this verification when using Hostinger's free subdomains (*.hostingersite.com). */ +export const verifyHostingDomainOwnershipV1: API.OperationMethod< + VerifyHostingDomainOwnershipV1Request, + HostingV1DomainsDomainAccessResource, + VerifyHostingDomainOwnershipV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: VerifyHostingDomainOwnershipV1Request, + output: HostingV1DomainsDomainAccessResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type VPSCreatePostInstallScriptV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Create post-install script Add a new post-install script to your account, which can then be used after virtual machine installation. The script contents will be saved to the file `/post_install` with executable attribute set and will be executed once virtual machine is installed. The output of the script will be redirected to `/post_install.log`. Maximum script size is 48KB. Use this endpoint to create automation scripts for VPS setup tasks. */ +export const vPSCreatePostInstallScriptV1: API.OperationMethod< + VPSCreatePostInstallScriptV1Request, + VPSV1PostInstallScriptPostInstallScriptResource, + VPSCreatePostInstallScriptV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: VPSCreatePostInstallScriptV1Request, + output: VPSV1PostInstallScriptPostInstallScriptResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type VPSDeletePostInstallScriptV1Error = HostingerOpError; +/** Delete post-install script Delete a post-install script from your account. Use this endpoint to remove unused automation scripts. */ +export const vPSDeletePostInstallScriptV1: API.OperationMethod< + VPSDeletePostInstallScriptV1Request, + CommonSuccessEmptyResource, + VPSDeletePostInstallScriptV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: VPSDeletePostInstallScriptV1Request, + output: CommonSuccessEmptyResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type VPSGetDataCenterListV1Error = HostingerOpError; +/** Get data center list Retrieve all available data centers. Use this endpoint to view location options before deploying VPS instances. */ +export const vPSGetDataCenterListV1: API.OperationMethod< + VPSGetDataCenterListV1Request, + VPSGetDataCenterListV1Response, + VPSGetDataCenterListV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: VPSGetDataCenterListV1Request, + output: VPSGetDataCenterListV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type VPSGetFirewallListV1Error = HostingerOpError; +/** Get firewall list Retrieve all available firewalls. Use this endpoint to view existing firewall configurations. */ +export const vPSGetFirewallListV1: API.OperationMethod< + VPSGetFirewallListV1Request, + VPSGetFirewallListV1Response, + VPSGetFirewallListV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: VPSGetFirewallListV1Request, + output: VPSGetFirewallListV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type VPSGetPostInstallScriptsV1Error = HostingerOpError; +/** Get post-install scripts Retrieve post-install scripts associated with your account. Use this endpoint to view available automation scripts for VPS deployment. */ +export const vPSGetPostInstallScriptsV1: API.OperationMethod< + VPSGetPostInstallScriptsV1Request, + VPSGetPostInstallScriptsV1Response, + VPSGetPostInstallScriptsV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: VPSGetPostInstallScriptsV1Request, + output: VPSGetPostInstallScriptsV1Response, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type VPSGetPostInstallScriptV1Error = HostingerOpError; +/** Get post-install script Retrieve post-install script by its ID. Use this endpoint to view specific automation script details. */ +export const vPSGetPostInstallScriptV1: API.OperationMethod< + VPSGetPostInstallScriptV1Request, + VPSV1PostInstallScriptPostInstallScriptResource, + VPSGetPostInstallScriptV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: VPSGetPostInstallScriptV1Request, + output: VPSV1PostInstallScriptPostInstallScriptResource, + errors: [UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type VPSGetProjectListV1Error = UnprocessableEntity | HostingerOpError; +/** Get project list Retrieves a list of all Docker Compose projects currently deployed on the virtual machine. This endpoint returns basic information about each project including name, status, file path and list of containers with details about their names, image, status, health and ports. Container stats are omitted in this endpoint. If you need to get detailed information about container with stats included, use the `Get project containers` endpoint. Use this to get an overview of all Docker projects on your VPS instance. */ +export const vPSGetProjectListV1: API.OperationMethod< + VPSGetProjectListV1Request, + VPSGetProjectListV1Response, + VPSGetProjectListV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: VPSGetProjectListV1Request, + output: VPSGetProjectListV1Response, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type VPSPurchaseNewVirtualMachineV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Purchase new virtual machine Purchase and setup a new virtual machine. If virtual machine setup fails for any reason, login to [hPanel](https://hpanel.hostinger.com/) and complete the setup manually. If no payment method is provided, your default payment method will be used automatically. Use this endpoint to create new VPS instances. */ +export const vPSPurchaseNewVirtualMachineV1: API.OperationMethod< + VPSPurchaseNewVirtualMachineV1Request, + BillingV1OrderVirtualMachineOrderResource, + VPSPurchaseNewVirtualMachineV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: VPSPurchaseNewVirtualMachineV1Request, + output: BillingV1OrderVirtualMachineOrderResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type VPSSetupPurchasedVirtualMachineV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Setup purchased virtual machine Setup newly purchased virtual machine with `initial` state. Use this endpoint to configure and initialize purchased VPS instances. */ +export const vPSSetupPurchasedVirtualMachineV1: API.OperationMethod< + VPSSetupPurchasedVirtualMachineV1Request, + VPSV1VirtualMachineVirtualMachineResource, + VPSSetupPurchasedVirtualMachineV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: VPSSetupPurchasedVirtualMachineV1Request, + output: VPSV1VirtualMachineVirtualMachineResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); + +export type VPSUpdatePostInstallScriptV1Error = + | UnprocessableEntity + | HostingerOpError; +/** Update post-install script Update a specific post-install script. Use this endpoint to modify existing automation scripts. */ +export const vPSUpdatePostInstallScriptV1: API.OperationMethod< + VPSUpdatePostInstallScriptV1Request, + VPSV1PostInstallScriptPostInstallScriptResource, + VPSUpdatePostInstallScriptV1Error, + HostingerOpContext +> = /*@__PURE__*/ API.make(() => ({ + input: VPSUpdatePostInstallScriptV1Request, + output: VPSV1PostInstallScriptPostInstallScriptResource, + errors: [UnprocessableEntity, UnknownHostingerError], + protocol: HostingerProtocol, + retry: Retry.Retry, +})); diff --git a/packages/hostinger/src/services/index.ts b/packages/hostinger/src/services/index.ts new file mode 100644 index 0000000000..d4db770531 --- /dev/null +++ b/packages/hostinger/src/services/index.ts @@ -0,0 +1,2 @@ +// AUTO-GENERATED by scripts/generate.ts. Do not edit. +export * as hostinger from "./hostinger.ts"; diff --git a/packages/hostinger/src/traits.ts b/packages/hostinger/src/traits.ts new file mode 100644 index 0000000000..55cb359960 --- /dev/null +++ b/packages/hostinger/src/traits.ts @@ -0,0 +1,44 @@ +/** + * Hostinger SDK trait surface — hand-written. + * + * Re-exports the generic protocol traits from core (so generated operations + * import everything from one place). Hostinger has no envelope of its own; + * the REST-protocol traits (SensitiveValue / RawResponse) come from + * `core/protocol-rest`. + */ +export { + Body, + Header, + Query, + Label, + Http, + ResponseCode, + HttpBody, + FormDataFile, + KeyDictionary, + UnionCases, + applyErrorMatchers, + getErrorMatchers, + type HttpTrait, + type ErrorMatcher, + bodySymbol, + headerSymbol, + querySymbol, + labelSymbol, + httpSymbol, + responseCodeSymbol, + httpBodySymbol, + formDataFileSymbol, + keyDictionarySymbol, + unionCasesSymbol, + errorMatchersSymbol, +} from "@distilled.cloud/core/trait"; + +export { + SensitiveValue, + RawResponse, + RawResponseRoot, + sensitiveValueSymbol, + rawResponseSymbol, + rawResponseRootSymbol, +} from "@distilled.cloud/core/protocol-rest"; diff --git a/packages/hostinger/tsconfig.json b/packages/hostinger/tsconfig.json new file mode 100644 index 0000000000..56b16e575f --- /dev/null +++ b/packages/hostinger/tsconfig.json @@ -0,0 +1,14 @@ +{ + "extends": "../../tsconfig.base.json", + "include": ["src/**/*.ts"], + "compilerOptions": { + "composite": true, + "noEmit": false, + "outDir": "./lib", + "rootDir": "./src", + "paths": { + "@distilled.cloud/core/*": ["../core/src/*"] + } + }, + "references": [{ "path": "../core" }] +} diff --git a/packages/hostinger/tsconfig.scripts.json b/packages/hostinger/tsconfig.scripts.json new file mode 100644 index 0000000000..be37c34749 --- /dev/null +++ b/packages/hostinger/tsconfig.scripts.json @@ -0,0 +1,17 @@ +{ + "extends": "../../tsconfig.base.json", + "include": ["scripts/**/*.ts"], + "compilerOptions": { + "composite": true, + "noEmit": false, + "emitDeclarationOnly": true, + "outDir": "./.scripts-types", + "rootDir": "./scripts", + "tsBuildInfoFile": "./.scripts-types/tsconfig.scripts.tsbuildinfo", + // Resolve @distilled.cloud/core/* to src (the bun condition), matching + // how the scripts actually run under bun. + "rewriteRelativeImportExtensions": false, + "customConditions": ["bun"] + }, + "references": [{ "path": "../core" }] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ca24a85345..87881df50f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -636,6 +636,25 @@ importers: specifier: catalog:tooling version: 26.4.1 + packages/hostinger: + dependencies: + '@distilled.cloud/core': + specifier: workspace:* + version: link:../core + effect: + specifier: catalog:effect + version: 4.0.0-rc.112 + devDependencies: + '@effect/platform-bun': + specifier: catalog:effect + version: 4.0.0-rc.112(effect@4.0.0-rc.112) + '@types/bun': + specifier: catalog:tooling + version: 1.4.1 + '@types/node': + specifier: catalog:tooling + version: 26.4.1 + packages/huggingface: dependencies: '@distilled.cloud/core': diff --git a/stacks/distilled-submodules/SpecRepos.ts b/stacks/distilled-submodules/SpecRepos.ts index da7accfc3d..be169ccfc4 100644 --- a/stacks/distilled-submodules/SpecRepos.ts +++ b/stacks/distilled-submodules/SpecRepos.ts @@ -75,6 +75,7 @@ export const SPEC_REPOS: readonly SpecRepo[] = [ { package: "grafana" }, { package: "gusto" }, { package: "hetzner" }, + { package: "hostinger" }, { package: "huggingface" }, { package: "kubernetes" }, { package: "mongodb-atlas" }, diff --git a/stacks/distilled-submodules/spec-repos/hostinger/fetch-specs.ts b/stacks/distilled-submodules/spec-repos/hostinger/fetch-specs.ts new file mode 100644 index 0000000000..94a28f76b2 --- /dev/null +++ b/stacks/distilled-submodules/spec-repos/hostinger/fetch-specs.ts @@ -0,0 +1,127 @@ +#!/usr/bin/env bun +/** + * Mirrors Hostinger's OpenAPI spec and first-party docs into ../specs/. + * + * Hostinger publishes ONE OpenAPI 3.0 document in github.com/hostinger/api + * (`openapi.json`) — the same file Scalar serves from developers.hostinger.com. + * The upstream repository is never cloned: each file is fetched from + * raw.githubusercontent.com. + * + * Usage: + * bun run fetch-specs.ts + * + * The files are saved to: + * ../specs/openapi.json + * ../specs/docs/README.md + * ../specs/docs/CHANGELOG.md + * ../specs/docs/_manifest.json + */ + +import { existsSync, mkdirSync } from "fs"; + +/** Upstream repository, as `/`. */ +const REPO = "hostinger/api"; +/** Branch (or tag/commit) to mirror. */ +const REF = "main"; + +const SPECS_DIR = "../specs"; +const DOCS_DIR = `${SPECS_DIR}/docs`; +const OPENAPI_OUTPUT = `${SPECS_DIR}/openapi.json`; + +const OPENAPI_PATH = "openapi.json"; + +const DOC_FILES = [ + { path: "README.md", output: "README.md" }, + { path: "CHANGELOG.md", output: "CHANGELOG.md" }, +] as const; + +const rawUrl = (path: string) => + `https://raw.githubusercontent.com/${REPO}/${REF}/${path + .split("/") + .map(encodeURIComponent) + .join("/")}`; + +const USER_AGENT = "distilled.cloud-hostinger-spec-mirror"; + +if (!existsSync(SPECS_DIR)) { + mkdirSync(SPECS_DIR, { recursive: true }); +} +if (!existsSync(DOCS_DIR)) { + mkdirSync(DOCS_DIR, { recursive: true }); +} + +const fetchText = async (url: string): Promise => { + const response = await fetch(url, { + headers: { + accept: "text/plain, application/json, */*", + "user-agent": USER_AGENT, + }, + }); + if (!response.ok) { + throw new Error( + `Failed to fetch ${url}: ${response.status} ${response.statusText}`, + ); + } + return await response.text(); +}; + +async function main() { + const openapiUrl = rawUrl(OPENAPI_PATH); + console.log(`Fetching OpenAPI spec from ${openapiUrl}...`); + const spec = JSON.parse(await fetchText(openapiUrl)) as Record< + string, + unknown + >; + + // Fail here rather than three steps later in the generator: a login page or + // a gutted response is still valid JSON, but it is not an OpenAPI document. + if (typeof spec.openapi !== "string" || spec.paths === undefined) { + throw new Error( + `${openapiUrl} returned JSON without \`openapi\`/\`paths\` — not an OpenAPI document`, + ); + } + + console.log(`Writing spec to ${OPENAPI_OUTPUT}...`); + await Bun.write(OPENAPI_OUTPUT, JSON.stringify(spec, null, 2) + "\n"); + + const docs: Array<{ path: string; source: string; bytes: number }> = []; + for (const file of DOC_FILES) { + const url = rawUrl(file.path); + console.log(`Fetching docs ${url}...`); + const text = await fetchText(url); + const outputPath = `${DOCS_DIR}/${file.output}`; + await Bun.write(outputPath, text.endsWith("\n") ? text : `${text}\n`); + docs.push({ path: file.output, source: url, bytes: text.length }); + } + + const manifest = { + origin: `https://github.com/${REPO}`, + ref: REF, + openapi: { + file: "openapi.json", + source: openapiUrl, + version: typeof spec.openapi === "string" ? spec.openapi : undefined, + infoVersion: + spec.info && + typeof spec.info === "object" && + typeof (spec.info as { version?: unknown }).version === "string" + ? (spec.info as { version: string }).version + : undefined, + paths: Object.keys(spec.paths as object).length, + }, + docs, + }; + await Bun.write( + `${DOCS_DIR}/_manifest.json`, + JSON.stringify(manifest, null, 2) + "\n", + ); + + console.log( + `Done! OpenAPI ${spec.openapi} — ${Object.keys(spec.paths as object).length} paths, ${docs.length} docs`, + ); +} + +main().catch((err) => { + console.error("Fatal error:", err); + process.exit(1); +}); diff --git a/stacks/distilled-submodules/spec-repos/hostinger/package.json b/stacks/distilled-submodules/spec-repos/hostinger/package.json new file mode 100644 index 0000000000..ee88a32489 --- /dev/null +++ b/stacks/distilled-submodules/spec-repos/hostinger/package.json @@ -0,0 +1,27 @@ +{ + "name": "hostinger-spec", + "private": true, + "type": "module", + "scripts": { + "fetch-specs": "bun run fetch-specs.ts", + "tsc": "tsc --noEmit", + "lint": "oxlint .", + "fmt": "oxfmt --write .", + "fmt:check": "oxfmt --check .", + "check": "bun run tsc && bun run lint && bun run fmt:check" + }, + "workspaces": { + "catalog": { + "@typescript/native-preview": "latest", + "oxfmt": "0.21.0", + "oxlint": "1.36.0" + } + }, + "dependencies": { + "@typescript/native-preview": "catalog:" + }, + "devDependencies": { + "oxfmt": "catalog:", + "oxlint": "catalog:" + } +} diff --git a/stacks/distilled-submodules/spec-repos/hostinger/readme.md b/stacks/distilled-submodules/spec-repos/hostinger/readme.md new file mode 100644 index 0000000000..f00ba426fe --- /dev/null +++ b/stacks/distilled-submodules/spec-repos/hostinger/readme.md @@ -0,0 +1,29 @@ +# spec-mirror-hostinger + +A git mirror of Hostinger's [OpenAPI spec](https://github.com/hostinger/api/blob/main/openapi.json) +(the same document Scalar serves from [developers.hostinger.com](https://developers.hostinger.com/)). +The spec and first-party docs (`README.md`, `CHANGELOG.md`) are fetched and +committed so the repo serves as a versioned snapshot. + +The mirror is updated every 24 hours and is designed to be used as a stable git submodule. + +## Usage as a submodule + +```sh +git submodule add https://github.com/distilled-mirror/spec-mirror-hostinger.git +``` + +## Updating specs + +From `.meta/`: + +```sh +bun install +bun run fetch-specs +``` + +--- + +This repository is managed by the `distilled-submodules` Alchemy stack in +[alchemy-run/distilled](https://github.com/alchemy-run/distilled) (`stacks/distilled-submodules`). +Its scaffolding is generated — edit it there, not here. diff --git a/tsconfig.json b/tsconfig.json index c66edafdad..f758fe7170 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -309,6 +309,12 @@ }, { "path": "./packages/gusto/tsconfig.scripts.json" + }, + { + "path": "./packages/hostinger/tsconfig.json" + }, + { + "path": "./packages/hostinger/tsconfig.scripts.json" } ] }