{
  "openapi": "3.1.0",
  "info": {
    "title": "API Center",
    "version": "1.0.0",
    "summary": "REST API for customers: keys, permissions, limits and usage records.",
    "description": "JSON over HTTPS. Authenticate with `Authorization: Bearer <key>`. The base URL is the same in both modes: the key decides the mode. Keys that start with `sandbox_` are in Sandbox mode (reads are real, writes are simulated and never charge); keys that start with `prod_` are in Production mode (changes are real and can charge). Every authenticated response carries `X-API-Mode`, and simulated writes carry `X-API-Simulated: true`. Send `Accept-Language: pt` or `en` to choose the language of error messages; `en` is the default and `code` never changes.",
    "x-description-pt": "JSON sobre HTTPS. Autentique-se com `Authorization: Bearer <chave>`. O endereço é o mesmo nos dois modos: quem decide o modo é a chave. As chaves que começam por `sandbox_` estão em modo Sandbox (lê dados verdadeiros da conta; as escritas são simuladas e nunca cobram); as que começam por `prod_` estão em modo Produção (altera a conta e pode cobrar). Todas as respostas com chave levam `X-API-Mode`, e as escritas simuladas levam `X-API-Simulated: true`. Envie `Accept-Language: pt` ou `en` para escolher a língua das mensagens de erro; a omissão é `en` e o `code` nunca muda."
  },
  "servers": [
    {
      "url": "https://api.interweb.ao"
    }
  ],
  "security": [
    {
      "bearerAuth": []
    }
  ],
  "tags": [
    {
      "name": "status",
      "description": "Service status.",
      "x-description-pt": "Estado do serviço."
    },
    {
      "name": "token",
      "description": "The key in use and its limits.",
      "x-description-pt": "A chave em uso e os seus limites."
    },
    {
      "name": "actions",
      "description": "Long-running operations.",
      "x-description-pt": "Operações longas."
    },
    {
      "name": "specification",
      "description": "This API described in OpenAPI.",
      "x-description-pt": "Esta API descrita em OpenAPI."
    },
    {
      "name": "sms",
      "description": "Send SMS and check balance and senders. Only for active SMS reseller accounts.",
      "x-description-pt": "Enviar SMS e consultar saldo e remetentes. Só para contas revendedoras de SMS activas."
    },
    {
      "name": "account",
      "description": "Details of the account, its contacts and users.",
      "x-description-pt": "Dados da conta, contactos e utilizadores."
    },
    {
      "name": "catalog",
      "description": "What is for sale, with prices.",
      "x-description-pt": "O que está à venda, com preços."
    },
    {
      "name": "domains",
      "description": "The domains of the account.",
      "x-description-pt": "Os domínios da conta."
    },
    {
      "name": "services",
      "description": "The services of the account: hosting, servers and others.",
      "x-description-pt": "Os serviços da conta: hospedagem, servidores e outros."
    },
    {
      "name": "billing",
      "description": "Invoices, credit and transactions.",
      "x-description-pt": "Facturas, saldo e transacções."
    },
    {
      "name": "support",
      "description": "Tickets and departments.",
      "x-description-pt": "Tickets e departamentos."
    },
    {
      "name": "dns",
      "description": "The DNS zone of each domain.",
      "x-description-pt": "A zona DNS de cada domínio."
    },
    {
      "name": "servers",
      "description": "VPS servers: state, power, password, backups, reverse DNS and reinstall.",
      "x-description-pt": "Servidores VPS: estado, energia, senha, cópias, DNS reverso e reinstalação."
    },
    {
      "name": "hosting",
      "description": "Usage, panel login, domains, databases, cron, SSL, PHP, backups and FTP of a hosting service.",
      "x-description-pt": "Uso, entrada no painel, domínios, bases de dados, cron, SSL, PHP, cópias e FTP de uma hospedagem."
    },
    {
      "name": "email",
      "description": "Mailboxes, forwarders, autoresponders, default address and authentication of a hosting service.",
      "x-description-pt": "Caixas, reencaminhadores, respostas automáticas, conta geral e autenticação de uma hospedagem."
    },
    {
      "name": "extras",
      "description": "Certificates, SiteLock, radio and other extras of the account.",
      "x-description-pt": "Certificados, SiteLock, rádio e outros extras da conta."
    },
    {
      "name": "reseller",
      "description": "The reseller programs and accounts of this account.",
      "x-description-pt": "Os programas e as contas de revenda desta conta."
    }
  ],
  "x-permissions": {
    "areas": [
      "account",
      "catalog",
      "domains",
      "dns",
      "hosting",
      "email",
      "wordpress",
      "vps",
      "billing",
      "support",
      "extras",
      "reseller",
      "sms",
      "webhooks"
    ],
    "levels": [
      "read",
      "write"
    ],
    "dangerous": [
      "domains:transfer_code",
      "domains:owner_change",
      "vps:reinstall",
      "vps:restore",
      "billing:pay",
      "billing:purchase",
      "services:cancel"
    ],
    "description": "Each area has `:read` and `:write`. Dangerous permissions are separate and off by default.",
    "x-description-pt": "Cada área tem `:read` e `:write`. As permissões perigosas são separadas e vêm desligadas."
  },
  "x-limits": {
    "requests_per_minute_per_key": 90,
    "requests_per_minute_per_ip_without_valid_key": 30,
    "idempotency_window_hours": 24,
    "max_keys_per_customer": 20,
    "key_validity_days": [
      30,
      90,
      365,
      0
    ],
    "max_request_body_bytes": 1048576
  },
  "paths": {
    "/v1/ping": {
      "get": {
        "operationId": "ping.get",
        "tags": [
          "status"
        ],
        "summary": "Check that the API is responding",
        "description": "Answers without a key. Use it to test connectivity.",
        "x-summary-pt": "Confirmar que a API responde",
        "x-description-pt": "Responde sem chave. Serve para testar a ligação.",
        "security": [],
        "responses": {
          "200": {
            "description": "The API is responding.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PingResponse"
                },
                "example": {
                  "data": {
                    "status": "ok",
                    "version": "v1",
                    "time": "2026-11-04T21:30:00+02:00"
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/token": {
      "get": {
        "operationId": "token.get",
        "tags": [
          "token"
        ],
        "summary": "See the key in use",
        "description": "Returns the permissions, validity and limits of the key that made the request. Any valid key can call it. The key itself is never returned.",
        "x-summary-pt": "Ver a chave em uso",
        "x-description-pt": "Devolve as permissões, a validade e os limites da chave que fez o pedido. Qualquer chave válida pode chamar. A chave em si nunca é devolvida.",
        "responses": {
          "200": {
            "description": "Data about the key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TokenResponse"
                },
                "example": {
                  "data": {
                    "id": 12,
                    "name": "Example key",
                    "type": "sandbox",
                    "mode": "sandbox",
                    "writes_simulated": true,
                    "suffix": "AbCd",
                    "permissions": [
                      "dns:read"
                    ],
                    "allowed_ips": [
                      "198.51.100.0/24"
                    ],
                    "expires_at": "2027-02-02T10:00:00+02:00",
                    "created_at": "2026-11-04T10:00:00+02:00",
                    "last_used_at": "2026-11-04T21:30:00+02:00",
                    "rate_limit": {
                      "limit": 90,
                      "remaining": 89,
                      "reset": 1793820660,
                      "window_seconds": 60
                    },
                    "spending": {
                      "limit": 0,
                      "spent": 0,
                      "currency": "MZN",
                      "window_days": 30
                    }
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ]
      }
    },
    "/v1/limits": {
      "get": {
        "operationId": "limits.get",
        "tags": [
          "token"
        ],
        "summary": "See the limits of the key",
        "description": "Returns the requests left in the current minute and the spending limit of the key.",
        "x-summary-pt": "Ver os limites da chave",
        "x-description-pt": "Devolve os pedidos que restam no minuto actual e o limite de gastos da chave.",
        "responses": {
          "200": {
            "description": "The limits of the key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LimitsResponse"
                },
                "example": {
                  "data": {
                    "mode": "sandbox",
                    "requests": {
                      "limit": 90,
                      "remaining": 88,
                      "reset": 1793820660,
                      "window_seconds": 60
                    },
                    "unauthenticated_requests_per_minute": 30,
                    "spending": {
                      "limit": 500,
                      "spent": 120.5,
                      "currency": "MZN",
                      "window_days": 30
                    }
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ]
      }
    },
    "/v1/actions/{id}": {
      "get": {
        "operationId": "actions.get",
        "tags": [
          "actions"
        ],
        "summary": "Follow a long-running operation",
        "description": "Long operations answer `202` with an `action_id`. Use this operation to follow the result instead of repeating the request. Only actions of your own account can be seen.",
        "x-summary-pt": "Acompanhar uma operação longa",
        "x-description-pt": "As operações longas respondem `202` com um `action_id`. Use esta operação para ver o resultado, em vez de repetir o pedido. Só se vêem as acções da própria conta.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The action_id received in the 202 answer.",
            "x-description-pt": "O action_id recebido na resposta 202.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "The state of the action.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ActionResponse"
                },
                "example": {
                  "data": {
                    "id": "0f8fad5b-d9cb-469f-a165-70867728950e",
                    "type": "example.operation",
                    "target": "example.com",
                    "status": "running",
                    "result": null,
                    "created_at": "2026-11-04T21:30:00+02:00",
                    "updated_at": "2026-11-04T21:30:05+02:00"
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/openapi.json": {
      "get": {
        "operationId": "openapi.get",
        "tags": [
          "specification"
        ],
        "summary": "Download this specification",
        "description": "Answers without a key. Returns this OpenAPI document as it is, without the data and meta envelope.",
        "x-summary-pt": "Descarregar esta especificação",
        "x-description-pt": "Responde sem chave. Devolve este documento OpenAPI tal como está, sem o envelope data e meta.",
        "security": [],
        "responses": {
          "200": {
            "description": "The OpenAPI document.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/sms/messages": {
      "post": {
        "operationId": "sms.messages.create",
        "tags": [
          "sms"
        ],
        "summary": "Send an SMS",
        "x-summary-pt": "Enviar um SMS",
        "description": "Needs `sms:write` and an active SMS reseller account. With a Sandbox key, or while the API is in preparation, the message is simulated: nothing is sent and no credits are used. With a Production key the message enters the queue and credits are taken from the SMS balance (the key spending limit, in currency, does not apply to these credits). Send `Idempotency-Key` so a retry never sends twice. Without `send_at` the message goes out right away and the answer brings its real status: `sent`, `failed`, or `queued` if it has to wait its turn. With `send_at` it stays `scheduled`: the balance is only checked now and the credits leave it when the message goes out (`charged` is `false` until then); if the balance is short at that time, the message is not sent and ends up `failed` with `error` set to `insufficient_credits`. A scheduled message can be cancelled with POST /v1/sms/messages/{id}/cancel.",
        "x-description-pt": "Precisa de `sms:write` e de uma conta revendedora de SMS activa. Com uma chave de Sandbox, ou enquanto a API está em preparação, a mensagem é simulada: não sai nada e não se gastam créditos. Com uma chave de Produção, a mensagem entra na fila e os créditos saem do saldo de SMS (o limite de gastos da chave, em moeda, não se aplica a estes créditos). Envie `Idempotency-Key` para uma repetição nunca enviar duas vezes. Sem `send_at` a mensagem sai logo e a resposta traz o estado real: `sent`, `failed`, ou `queued` se tiver de esperar a vez. Com `send_at` fica `scheduled`: agora só se confere o saldo, e os créditos saem dele quando a mensagem sair (`charged` fica `false` até lá); se nessa hora o saldo não chegar, a mensagem não sai e fica `failed`, com `error` a `insufficient_credits`. Uma mensagem agendada pode ser cancelada com POST /v1/sms/messages/{id}/cancel.",
        "x-permission": "sms:write",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "number",
                  "text"
                ],
                "properties": {
                  "number": {
                    "type": "string",
                    "description": "With or without the country code, spaces allowed: +258841234567, 258 84 123 4567 or 84 123 4567. Mozambican and Angolan mobile numbers are recognised on their own; any other number without a code uses the country of your account.",
                    "x-description-pt": "Com ou sem indicativo, e pode ter espaços: +258841234567, 258 84 123 4567 ou 84 123 4567. Os telemóveis de Moçambique e de Angola reconhecem-se sozinhos; qualquer outro sem indicativo segue o país da sua conta."
                  },
                  "text": {
                    "type": "string",
                    "maxLength": 1600
                  },
                  "sender": {
                    "type": "string",
                    "description": "Optional. An approved sender; if omitted, the free sender (see GET /v1/sms/senders).",
                    "x-description-pt": "Opcional. Um remetente aprovado; se faltar, o remetente grátis (veja GET /v1/sms/senders)."
                  },
                  "send_at": {
                    "type": "string",
                    "format": "date-time",
                    "description": "Optional. Schedules the message: ISO 8601 date and time with the time zone, such as `2026-11-20T09:30:00+02:00`. It must be in the future and at most 365 days from now. Without it, the message goes out right away.",
                    "x-description-pt": "Opcional. Agenda a mensagem: data e hora em ISO 8601 com o fuso horário, como `2026-11-20T09:30:00+02:00`. Tem de ser no futuro e, no máximo, daqui a 365 dias. Sem este campo, a mensagem sai logo."
                  }
                }
              },
              "example": {
                "number": "+258841234567",
                "text": "Your order is ready.",
                "send_at": "2026-11-20T09:30:00+02:00"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "The message: sent, simulated, scheduled or waiting in the queue.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SmsMessageResponse"
                },
                "example": {
                  "data": {
                    "id": "412",
                    "status": "scheduled",
                    "simulated": false,
                    "to": "25884****567",
                    "sender": "NETMSG",
                    "parts": 1,
                    "encoding": "GSM",
                    "credits": 1.0,
                    "charged": false,
                    "mode": "production",
                    "error": null,
                    "scheduled_for": "2026-11-20T09:30:00+02:00",
                    "created_at": "2026-11-10T12:00:00+02:00",
                    "sent_at": null
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              },
              "X-API-Simulated": {
                "$ref": "#/components/headers/X-API-Simulated"
              }
            },
            "x-description-pt": "A mensagem: enviada, simulada, agendada ou à espera na fila."
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/SmsResellerRequired"
          },
          "409": {
            "$ref": "#/components/responses/IdempotencyConflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      },
      "get": {
        "operationId": "sms.messages.list",
        "tags": [
          "sms"
        ],
        "summary": "List sent messages",
        "x-summary-pt": "Listar as mensagens enviadas",
        "description": "Needs `sms:read`. The messages this account sent, newest first. Account notices and verification codes are not listed, and messages simulated with a Sandbox key are not either. The number comes masked. If a message fails, `error` is `delivery_failed`. `charged` says whether the credits already left the balance.",
        "x-description-pt": "Precisa de `sms:read`. As mensagens que esta conta enviou, as mais recentes primeiro. Os avisos da conta e os códigos de verificação não aparecem, nem as mensagens simuladas com uma chave de Sandbox. O número vem tapado. Se uma mensagem falhar, `error` é `delivery_failed`. `charged` diz se os créditos já saíram do saldo.",
        "x-permission": "sms:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "status",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "scheduled",
                "queued",
                "sending",
                "sent",
                "simulated",
                "failed",
                "cancelled"
              ]
            },
            "description": "Only this status.",
            "x-description-pt": "Só este estado."
          },
          {
            "name": "from",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date"
            },
            "description": "First day, `YYYY-MM-DD`.",
            "x-description-pt": "Primeiro dia, `AAAA-MM-DD`."
          },
          {
            "name": "to",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date"
            },
            "description": "Last day, `YYYY-MM-DD`.",
            "x-description-pt": "Último dia, `AAAA-MM-DD`."
          },
          {
            "name": "number",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Only this number, with or without the country code.",
            "x-description-pt": "Só este número, com ou sem indicativo."
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "List sent messages.",
            "x-description-pt": "Listar as mensagens enviadas.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SmsMessagesListResponse"
                },
                "example": {
                  "data": [
                    {
                      "id": "128",
                      "status": "sent",
                      "simulated": false,
                      "to": "25884****567",
                      "sender": "NETMSG",
                      "text": "A sua encomenda está pronta.",
                      "parts": 1,
                      "encoding": "GSM",
                      "credits": 1.0,
                      "campaign_id": null,
                      "error": null,
                      "scheduled_for": "2026-11-05T09:30:00+02:00",
                      "created_at": "2026-11-05T09:30:00+02:00",
                      "sent_at": "2026-11-05T09:30:04+02:00",
                      "charged": true
                    }
                  ],
                  "meta": {
                    "page": 1,
                    "per_page": 10,
                    "total": 1,
                    "total_pages": 1
                  }
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/sms/messages/{id}": {
      "get": {
        "operationId": "sms.messages.get",
        "tags": [
          "sms"
        ],
        "summary": "See one SMS",
        "x-summary-pt": "Ver um SMS",
        "description": "Needs `sms:read`. Simulated messages can only be seen with the key that created them.",
        "x-description-pt": "Precisa de `sms:read`. As mensagens simuladas só se vêem com a chave que as criou.",
        "x-permission": "sms:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` returned when sending.",
            "x-description-pt": "O `id` devolvido ao enviar."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "The message.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SmsMessageResponse"
                },
                "example": {
                  "data": {
                    "id": "7f0c9d2e-3a51-4c7e-9b1a-2d4f6a8b0c11",
                    "status": "simulated",
                    "simulated": true,
                    "to": "25884****567",
                    "sender": "NETMSG",
                    "parts": 1,
                    "encoding": "GSM",
                    "would_cost": 1,
                    "mode": "sandbox",
                    "credits": 0,
                    "created_at": "2026-11-04T10:00:00+02:00",
                    "error": null,
                    "sent_at": null,
                    "charged": false,
                    "scheduled_for": null
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/SmsResellerRequired"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/sms/balance": {
      "get": {
        "operationId": "sms.balance.get",
        "tags": [
          "sms"
        ],
        "summary": "See the SMS balance",
        "x-summary-pt": "Ver o saldo de SMS",
        "description": "Needs `sms:read`. The balance is real in both modes.",
        "x-description-pt": "Precisa de `sms:read`. O saldo é o verdadeiro nos dois modos.",
        "x-permission": "sms:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "Balance and daily limit.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SmsBalanceResponse"
                },
                "example": {
                  "data": {
                    "balance": 50,
                    "unit": "credits",
                    "daily_limit": 200,
                    "sent_today": 3,
                    "mode": "sandbox",
                    "scheduled_credits": 0.0
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/SmsResellerRequired"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/sms/senders": {
      "get": {
        "operationId": "sms.senders.list",
        "tags": [
          "sms"
        ],
        "summary": "List the SMS senders",
        "x-summary-pt": "Listar os remetentes de SMS",
        "description": "Needs `sms:read`. The free sender always comes first, with `free: true`.",
        "x-description-pt": "Precisa de `sms:read`. O remetente grátis vem sempre em primeiro, com `free: true`.",
        "x-permission": "sms:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "The senders of this account.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SmsSendersResponse"
                },
                "example": {
                  "data": [
                    {
                      "sender": "NETMSG",
                      "status": "approved",
                      "free": true
                    },
                    {
                      "sender": "MINHAEMPRESA",
                      "status": "pending",
                      "free": false
                    }
                  ],
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/SmsResellerRequired"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      },
      "post": {
        "operationId": "sms.senders.create",
        "tags": [
          "sms"
        ],
        "summary": "Request a sender",
        "x-summary-pt": "Pedir um remetente",
        "description": "Needs `sms:write`. Up to 11 letters, numbers and spaces, at most 30 in the account. The team reviews the request and registers it with the operators; approval depends on them. After a rejection, send it again with the data corrected. Documents are sent in the account portal, when the request is made there. Limited to 20 changes per minute.",
        "x-description-pt": "Precisa de `sms:write`. O nome tem até 11 caracteres, entre letras, números e espaços. Cada conta tem até 30 remetentes. A equipa analisa o pedido e regista-o junto das operadoras; a aprovação depende delas. Depois de uma recusa, envie de novo com os dados corrigidos. Os documentos enviam-se no portal da conta, quando o pedido é feito lá. Limite de 20 alterações por minuto.",
        "x-permission": "sms:write",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "201": {
            "description": "Request a sender.",
            "x-description-pt": "Pedir um remetente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SmsSendersCreateResponse"
                },
                "example": {
                  "data": {
                    "id": 7,
                    "sender": "AMINHAMARCA",
                    "status": "pending",
                    "free": false,
                    "entity": "A Minha Empresa, Lda",
                    "country": "Moçambique",
                    "purpose": "Avisos de encomenda aos nossos clientes.",
                    "sample": "A sua encomenda está pronta.",
                    "note": null,
                    "documents": 0,
                    "documents_url": "https://my.example.com/sms-center.php?view=senders&language=portuguese&currency=5",
                    "created_at": "2026-11-05T09:30:00+02:00",
                    "updated_at": "2026-11-05T09:30:00+02:00",
                    "simulated": true
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "sender",
                  "entity",
                  "country",
                  "tax_id",
                  "purpose",
                  "sample"
                ],
                "properties": {
                  "sender": {
                    "type": "string",
                    "maxLength": 11
                  },
                  "entity": {
                    "type": "string",
                    "maxLength": 150
                  },
                  "country": {
                    "type": "string",
                    "maxLength": 60
                  },
                  "tax_id": {
                    "type": "string",
                    "maxLength": 30
                  },
                  "purpose": {
                    "type": "string",
                    "minLength": 10,
                    "maxLength": 500
                  },
                  "sample": {
                    "type": "string",
                    "minLength": 5,
                    "maxLength": 480
                  }
                }
              },
              "example": {
                "sender": "AMINHAMARCA",
                "entity": "A Minha Empresa, Lda",
                "country": "Moçambique",
                "tax_id": "123456789",
                "purpose": "Avisos de encomenda aos nossos clientes.",
                "sample": "A sua encomenda está pronta."
              }
            }
          }
        }
      }
    },
    "/v1/account": {
      "get": {
        "operationId": "account.get",
        "tags": [
          "account"
        ],
        "summary": "See the account",
        "x-summary-pt": "Ver a conta",
        "description": "Needs `account:read`. Never returns passwords or card data.",
        "x-description-pt": "Precisa de `account:read`. Nunca devolve senhas nem dados de cartão.",
        "x-permission": "account:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "See the account.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccountGetResponse"
                },
                "example": {
                  "data": {
                    "id": 35,
                    "first_name": "Ana",
                    "last_name": "Silva",
                    "company": "Exemplo, Lda",
                    "email": "ana@example.com",
                    "phone": "+258.841234567",
                    "tax_id": "",
                    "address": {
                      "line1": "Av. 25 de Setembro, 100",
                      "line2": "",
                      "city": "Maputo",
                      "state": "Maputo",
                      "postcode": "1100",
                      "country": "MZ"
                    },
                    "currency": "MZN",
                    "language": "portuguese",
                    "status": "active",
                    "email_verified": true,
                    "created_at": "2026-01-15"
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/account/contacts": {
      "get": {
        "operationId": "account.contacts.list",
        "tags": [
          "account"
        ],
        "summary": "List the contacts",
        "x-summary-pt": "Listar os contactos",
        "description": "Needs `account:read`. The contacts registered on the account.",
        "x-description-pt": "Precisa de `account:read`. Os contactos registados na conta.",
        "x-permission": "account:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "List the contacts.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccountContactsListResponse"
                },
                "example": {
                  "data": [
                    {
                      "id": 7,
                      "first_name": "Rui",
                      "last_name": "Costa",
                      "company": "",
                      "email": "rui@example.com",
                      "phone": "+258.821234567",
                      "address": {
                        "line1": "Av. 25 de Setembro, 100",
                        "line2": "",
                        "city": "Maputo",
                        "state": "Maputo",
                        "postcode": "1100",
                        "country": "MZ"
                      }
                    }
                  ],
                  "meta": {
                    "page": 1,
                    "per_page": 10,
                    "total": 1,
                    "total_pages": 1
                  }
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/account/users": {
      "get": {
        "operationId": "account.users.list",
        "tags": [
          "account"
        ],
        "summary": "List the users",
        "x-summary-pt": "Listar os utilizadores",
        "description": "Needs `account:read`. The people with access to the account. The owner comes first.",
        "x-description-pt": "Precisa de `account:read`. As pessoas com acesso à conta. Primeiro vem o dono.",
        "x-permission": "account:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "List the users.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccountUsersListResponse"
                },
                "example": {
                  "data": [
                    {
                      "id": 35,
                      "first_name": "Ana",
                      "last_name": "Silva",
                      "email": "ana@example.com",
                      "owner": true,
                      "two_factor_enabled": false,
                      "permissions": [],
                      "last_login_at": "2026-11-04T09:30:00+02:00"
                    }
                  ],
                  "meta": {
                    "page": 1,
                    "per_page": 10,
                    "total": 1,
                    "total_pages": 1
                  }
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/catalog/products": {
      "get": {
        "operationId": "catalog.products.list",
        "tags": [
          "catalog"
        ],
        "summary": "List the products",
        "x-summary-pt": "Listar os produtos",
        "description": "Needs `catalog:read`. Only what is on sale, with the prices of each billing cycle.",
        "x-description-pt": "Precisa de `catalog:read`. Só o que está à venda, com os preços de cada ciclo.",
        "x-permission": "catalog:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/Currency"
          },
          {
            "name": "group_id",
            "in": "query",
            "required": false,
            "description": "Only the products of this group.",
            "x-description-pt": "Só os produtos deste grupo.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "List the products.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CatalogProductsListResponse"
                },
                "example": {
                  "data": [
                    {
                      "id": 12,
                      "name": "Plano Empresas",
                      "type": "hostingaccount",
                      "description": "",
                      "group": {
                        "id": 3,
                        "name": "Hospedagem"
                      },
                      "free": false,
                      "currency": "MZN",
                      "prices": [
                        {
                          "billing_cycle": "annually",
                          "price": 3600.0,
                          "setup_fee": 0.0
                        }
                      ]
                    }
                  ],
                  "meta": {
                    "page": 1,
                    "per_page": 10,
                    "total": 1,
                    "total_pages": 1
                  }
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/catalog/tlds": {
      "get": {
        "operationId": "catalog.tlds.list",
        "tags": [
          "catalog"
        ],
        "summary": "List the domain extensions",
        "x-summary-pt": "Listar as extensões de domínio",
        "description": "Needs `catalog:read`. Register, renew and transfer prices per number of years. A number of years that is missing is not available.",
        "x-description-pt": "Precisa de `catalog:read`. Preços de registo, renovação e transferência por número de anos. Um número de anos que não aparece não está disponível.",
        "x-permission": "catalog:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/Currency"
          },
          {
            "name": "extension",
            "in": "query",
            "required": false,
            "description": "Only this extension, with or without the dot.",
            "x-description-pt": "Só esta extensão, com ou sem o ponto.",
            "schema": {
              "type": "string"
            },
            "example": "co.mz"
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "List the domain extensions.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CatalogTldsListResponse"
                },
                "example": {
                  "data": [
                    {
                      "extension": ".co.mz",
                      "currency": "MZN",
                      "register": {
                        "1": 1900.0,
                        "2": 3800.0
                      },
                      "renew": {
                        "1": 1900.0
                      },
                      "transfer": {
                        "1": 0.0
                      },
                      "features": {
                        "dns_management": true,
                        "email_forwarding": true,
                        "id_protection": false,
                        "transfer_code_required": true
                      },
                      "label": null
                    }
                  ],
                  "meta": {
                    "page": 1,
                    "per_page": 10,
                    "total": 1,
                    "total_pages": 1
                  }
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/catalog/currencies": {
      "get": {
        "operationId": "catalog.currencies.list",
        "tags": [
          "catalog"
        ],
        "summary": "List the currencies",
        "x-summary-pt": "Listar as moedas",
        "description": "Needs `catalog:read`. The currencies accepted on the `currency` parameter.",
        "x-description-pt": "Precisa de `catalog:read`. As moedas aceites no parâmetro `currency`.",
        "x-permission": "catalog:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "List the currencies.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CatalogCurrenciesListResponse"
                },
                "example": {
                  "data": [
                    {
                      "code": "MZN",
                      "prefix": "",
                      "suffix": "MT",
                      "default": true
                    }
                  ],
                  "meta": {
                    "total": 1
                  }
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/catalog/billing-cycles": {
      "get": {
        "operationId": "catalog.billing_cycles.list",
        "tags": [
          "catalog"
        ],
        "summary": "List the billing cycles",
        "x-summary-pt": "Listar os ciclos de pagamento",
        "description": "Needs `catalog:read`. The names used on prices and services.",
        "x-description-pt": "Precisa de `catalog:read`. Os nomes usados nos preços e nos serviços.",
        "x-permission": "catalog:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "List the billing cycles.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CatalogBillingCyclesListResponse"
                },
                "example": {
                  "data": [
                    {
                      "billing_cycle": "annually",
                      "months": 12
                    }
                  ],
                  "meta": {
                    "total": 1
                  }
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/domains": {
      "get": {
        "operationId": "domains.list",
        "tags": [
          "domains"
        ],
        "summary": "List the domains",
        "x-summary-pt": "Listar os domínios",
        "description": "Needs `domains:read`. The domains of the account, the next to expire first.",
        "x-description-pt": "Precisa de `domains:read`. Os domínios da conta, primeiro os próximos a expirar.",
        "x-permission": "domains:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "status",
            "in": "query",
            "required": false,
            "description": "Only results in this status.",
            "x-description-pt": "Só os resultados neste estado.",
            "schema": {
              "type": "string",
              "enum": [
                "pending",
                "pending_registration",
                "pending_transfer",
                "active",
                "grace",
                "redemption",
                "expired",
                "transferred_away",
                "cancelled",
                "fraud"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "List the domains.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DomainsListResponse"
                },
                "example": {
                  "data": [
                    {
                      "id": 41,
                      "domain": "example.co.mz",
                      "status": "active",
                      "type": "register",
                      "registered_at": "2026-02-01",
                      "expires_at": "2027-02-01",
                      "next_due_date": "2027-02-01",
                      "period_years": 1,
                      "renewal_amount": 1900.0,
                      "currency": "MZN",
                      "auto_renew": true,
                      "premium": false,
                      "features": {
                        "dns_management": true,
                        "email_forwarding": false,
                        "id_protection": false
                      }
                    }
                  ],
                  "meta": {
                    "page": 1,
                    "per_page": 10,
                    "total": 1,
                    "total_pages": 1
                  }
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/domains/{domain}": {
      "get": {
        "operationId": "domains.get",
        "tags": [
          "domains"
        ],
        "summary": "See a domain",
        "x-summary-pt": "Ver um domínio",
        "description": "Needs `domains:read`. By name or by `id`.",
        "x-description-pt": "Precisa de `domains:read`. Pelo nome ou pelo `id`.",
        "x-permission": "domains:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "domain",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The domain name or its `id`.",
            "x-description-pt": "O nome do domínio ou o seu `id`."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "See a domain.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DomainsGetResponse"
                },
                "example": {
                  "data": {
                    "id": 41,
                    "domain": "example.co.mz",
                    "status": "active",
                    "type": "register",
                    "registered_at": "2026-02-01",
                    "expires_at": "2027-02-01",
                    "next_due_date": "2027-02-01",
                    "period_years": 1,
                    "renewal_amount": 1900.0,
                    "currency": "MZN",
                    "auto_renew": true,
                    "premium": false,
                    "features": {
                      "dns_management": true,
                      "email_forwarding": false,
                      "id_protection": false
                    }
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/services": {
      "get": {
        "operationId": "services.list",
        "tags": [
          "services"
        ],
        "summary": "List the services",
        "x-summary-pt": "Listar os serviços",
        "description": "Needs `hosting:read`. All the services of the account, the newest first. While a service is unpaid, `domain` and `username` may come as `null`.",
        "x-description-pt": "Precisa de `hosting:read`. Todos os serviços da conta, primeiro os mais recentes. Enquanto um serviço está por pagar, `domain` e `username` podem vir a `null`.",
        "x-permission": "hosting:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "status",
            "in": "query",
            "required": false,
            "description": "Only results in this status.",
            "x-description-pt": "Só os resultados neste estado.",
            "schema": {
              "type": "string",
              "enum": [
                "pending",
                "active",
                "suspended",
                "terminated",
                "cancelled",
                "fraud",
                "completed"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "List the services.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServicesListResponse"
                },
                "example": {
                  "data": [
                    {
                      "id": 88,
                      "product": {
                        "id": 12,
                        "name": "Plano Empresas",
                        "group": "Hospedagem",
                        "type": "hostingaccount"
                      },
                      "domain": "example.co.mz",
                      "username": "exemplo88",
                      "dedicated_ip": null,
                      "status": "active",
                      "suspension_reason": null,
                      "billing_cycle": "annually",
                      "amount": 3600.0,
                      "currency": "MZN",
                      "payment_method": "M-Pesa",
                      "registered_at": "2026-02-01",
                      "next_due_date": "2027-02-01",
                      "terminated_at": null
                    }
                  ],
                  "meta": {
                    "page": 1,
                    "per_page": 10,
                    "total": 1,
                    "total_pages": 1
                  }
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/services/{id}": {
      "get": {
        "operationId": "services.get",
        "tags": [
          "services"
        ],
        "summary": "See a service",
        "x-summary-pt": "Ver um serviço",
        "description": "Needs `hosting:read`. Never returns passwords.",
        "x-description-pt": "Precisa de `hosting:read`. Nunca devolve senhas.",
        "x-permission": "hosting:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the service.",
            "x-description-pt": "O `id` do serviço."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "See a service.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServicesGetResponse"
                },
                "example": {
                  "data": {
                    "id": 88,
                    "product": {
                      "id": 12,
                      "name": "Plano Empresas",
                      "group": "Hospedagem",
                      "type": "hostingaccount"
                    },
                    "domain": "example.co.mz",
                    "username": "exemplo88",
                    "dedicated_ip": null,
                    "status": "active",
                    "suspension_reason": null,
                    "billing_cycle": "annually",
                    "amount": 3600.0,
                    "currency": "MZN",
                    "payment_method": "M-Pesa",
                    "registered_at": "2026-02-01",
                    "next_due_date": "2027-02-01",
                    "terminated_at": null
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/invoices": {
      "get": {
        "operationId": "invoices.list",
        "tags": [
          "billing"
        ],
        "summary": "List the invoices",
        "x-summary-pt": "Listar as facturas",
        "description": "Needs `billing:read`. The newest first. `total` includes what was paid with credit; `balance_due` is what is still to pay.",
        "x-description-pt": "Precisa de `billing:read`. Primeiro as mais recentes. `total` inclui o que foi pago com saldo; `balance_due` é o que falta pagar.",
        "x-permission": "billing:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "status",
            "in": "query",
            "required": false,
            "description": "Only results in this status.",
            "x-description-pt": "Só os resultados neste estado.",
            "schema": {
              "type": "string",
              "enum": [
                "unpaid",
                "paid",
                "cancelled",
                "refunded",
                "collections",
                "payment_pending"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "List the invoices.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InvoicesListResponse"
                },
                "example": {
                  "data": [
                    {
                      "id": 1042,
                      "number": "0542/2026",
                      "status": "unpaid",
                      "date": "2026-11-01",
                      "due_date": "2026-11-15",
                      "paid_at": null,
                      "subtotal": 3600.0,
                      "tax": 0.0,
                      "credit_applied": 100.0,
                      "total": 3600.0,
                      "balance_due": 3500.0,
                      "currency": "MZN",
                      "payment_method": "M-Pesa",
                      "url": "https://my.example.com/viewinvoice.php?id=1042&language=portuguese&currency=1"
                    }
                  ],
                  "meta": {
                    "page": 1,
                    "per_page": 10,
                    "total": 1,
                    "total_pages": 1
                  }
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/invoices/{id}": {
      "get": {
        "operationId": "invoices.get",
        "tags": [
          "billing"
        ],
        "summary": "See an invoice",
        "x-summary-pt": "Ver uma factura",
        "description": "Needs `billing:read`. With the lines of the invoice.",
        "x-description-pt": "Precisa de `billing:read`. Com as linhas da factura.",
        "x-permission": "billing:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the invoice.",
            "x-description-pt": "O `id` da factura."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "See an invoice.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InvoicesGetResponse"
                },
                "example": {
                  "data": {
                    "id": 1042,
                    "number": "0542/2026",
                    "status": "unpaid",
                    "date": "2026-11-01",
                    "due_date": "2026-11-15",
                    "paid_at": null,
                    "subtotal": 3600.0,
                    "tax": 0.0,
                    "credit_applied": 100.0,
                    "total": 3600.0,
                    "balance_due": 3500.0,
                    "currency": "MZN",
                    "payment_method": "M-Pesa",
                    "url": "https://my.example.com/viewinvoice.php?id=1042&language=portuguese&currency=1",
                    "items": [
                      {
                        "id": 5,
                        "type": "Hosting",
                        "related_id": 88,
                        "description": "Plano Empresas (01/11/2026 - 31/10/2027)",
                        "amount": 3600.0,
                        "taxed": false
                      }
                    ],
                    "notes": ""
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/billing/credit": {
      "get": {
        "operationId": "billing.credit.get",
        "tags": [
          "billing"
        ],
        "summary": "See the credit",
        "x-summary-pt": "Ver o saldo",
        "description": "Needs `billing:read`. The credit available on the account.",
        "x-description-pt": "Precisa de `billing:read`. O saldo disponível na conta.",
        "x-permission": "billing:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "See the credit.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BillingCreditGetResponse"
                },
                "example": {
                  "data": {
                    "balance": 250.0,
                    "currency": "MZN"
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/billing/transactions": {
      "get": {
        "operationId": "billing.transactions.list",
        "tags": [
          "billing"
        ],
        "summary": "List the transactions",
        "x-summary-pt": "Listar as transacções",
        "description": "Needs `billing:read`. The payments and refunds of the account, the newest first.",
        "x-description-pt": "Precisa de `billing:read`. Os pagamentos e devoluções da conta, primeiro os mais recentes.",
        "x-permission": "billing:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "List the transactions.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BillingTransactionsListResponse"
                },
                "example": {
                  "data": [
                    {
                      "id": 300,
                      "date": "2026-11-02T10:15:00+02:00",
                      "description": "Pagamento da factura 0542/2026",
                      "amount_in": 3500.0,
                      "amount_out": 0.0,
                      "currency": "MZN",
                      "invoice_id": 1042,
                      "payment_method": "M-Pesa",
                      "transaction_id": "ABC123"
                    }
                  ],
                  "meta": {
                    "page": 1,
                    "per_page": 10,
                    "total": 1,
                    "total_pages": 1
                  }
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/tickets": {
      "get": {
        "operationId": "tickets.list",
        "tags": [
          "support"
        ],
        "summary": "List the tickets",
        "x-summary-pt": "Listar os tickets",
        "description": "Needs `support:read`. The most recent replies first. The `status` values are the slugs of the status names, such as `open`, `answered` and `closed`.",
        "x-description-pt": "Precisa de `support:read`. Primeiro os que têm a resposta mais recente. Os valores de `status` são os nomes dos estados, como `open`, `answered` e `closed`.",
        "x-permission": "support:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "status",
            "in": "query",
            "required": false,
            "description": "Only tickets in this status.",
            "x-description-pt": "Só os tickets neste estado.",
            "schema": {
              "type": "string"
            },
            "example": "open"
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "List the tickets.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TicketsListResponse"
                },
                "example": {
                  "data": [
                    {
                      "id": "482913",
                      "subject": "Dúvida sobre o e-mail",
                      "status": "answered",
                      "priority": "medium",
                      "department": {
                        "id": 2,
                        "name": "Departamento Técnico"
                      },
                      "unread": false,
                      "created_at": "2026-11-03T08:00:00+02:00",
                      "last_reply_at": "2026-11-03T09:00:00+02:00"
                    }
                  ],
                  "meta": {
                    "page": 1,
                    "per_page": 10,
                    "total": 1,
                    "total_pages": 1
                  }
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      },
      "post": {
        "operationId": "tickets.create",
        "tags": [
          "support"
        ],
        "summary": "Open a ticket",
        "x-summary-pt": "Abrir um ticket",
        "description": "Needs `support:write`. The ticket stays in the name of the account. Needs the `Idempotency-Key` header. Limited to 10 per hour per account. A department that asks for extra data answers `422` with `department_portal_only`: use the portal. In Sandbox, `id` is `null`.",
        "x-description-pt": "Precisa de `support:write`. O ticket fica em nome da conta. Precisa do cabeçalho `Idempotency-Key`. Limite de 10 por hora por conta. Um departamento que peça dados extra responde `422` com `department_portal_only`: use o portal. Em Sandbox, `id` é `null`.",
        "x-permission": "support:write",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "201": {
            "description": "Open a ticket.",
            "x-description-pt": "Abrir um ticket.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TicketsCreateResponse"
                },
                "example": {
                  "data": {
                    "id": "731942",
                    "subject": "Help with the plan",
                    "status": "open",
                    "priority": "medium",
                    "department": {
                      "id": 1,
                      "name": "Technical Department"
                    },
                    "unread": false,
                    "created_at": "2026-11-05T09:30:00+02:00",
                    "last_reply_at": "2026-11-05T09:30:00+02:00",
                    "simulated": false
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "department_id",
                  "subject",
                  "message"
                ],
                "properties": {
                  "department_id": {
                    "type": "integer"
                  },
                  "subject": {
                    "type": "string",
                    "minLength": 3,
                    "maxLength": 200
                  },
                  "message": {
                    "type": "string",
                    "minLength": 3,
                    "maxLength": 20000
                  },
                  "priority": {
                    "type": "string",
                    "enum": [
                      "low",
                      "medium",
                      "high"
                    ],
                    "default": "medium"
                  },
                  "service_id": {
                    "type": "integer",
                    "description": "A service of the account this ticket is about.",
                    "x-description-pt": "Um serviço da conta a que o ticket diz respeito."
                  },
                  "domain_id": {
                    "type": "integer",
                    "description": "A domain of the account. Use it instead of `service_id`.",
                    "x-description-pt": "Um domínio da conta. Use-o em vez de `service_id`."
                  }
                }
              },
              "example": {
                "department_id": 1,
                "subject": "Help with the plan",
                "message": "I need help with my plan."
              }
            }
          }
        }
      }
    },
    "/v1/tickets/{id}": {
      "get": {
        "operationId": "tickets.get",
        "tags": [
          "support"
        ],
        "summary": "See a ticket",
        "x-summary-pt": "Ver um ticket",
        "description": "Needs `support:read`. With all the messages, the oldest first. Attachments come by name only.",
        "x-description-pt": "Precisa de `support:read`. Com todas as mensagens, primeiro as mais antigas. Dos anexos, vem só o nome.",
        "x-permission": "support:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The number of the ticket.",
            "x-description-pt": "O número do ticket."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "See a ticket.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TicketsGetResponse"
                },
                "example": {
                  "data": {
                    "id": "482913",
                    "subject": "Dúvida sobre o e-mail",
                    "status": "answered",
                    "priority": "medium",
                    "department": {
                      "id": 2,
                      "name": "Departamento Técnico"
                    },
                    "unread": false,
                    "created_at": "2026-11-03T08:00:00+02:00",
                    "last_reply_at": "2026-11-03T09:00:00+02:00",
                    "messages": [
                      {
                        "id": "ticket",
                        "from": "client",
                        "author": "Ana Silva",
                        "message": "Bom dia. Como configuro o e-mail?",
                        "attachments": [],
                        "created_at": "2026-11-03T08:00:00+02:00"
                      }
                    ]
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/support/departments": {
      "get": {
        "operationId": "support.departments.list",
        "tags": [
          "support"
        ],
        "summary": "List the departments",
        "x-summary-pt": "Listar os departamentos",
        "description": "Needs `support:read`. The departments that can receive tickets.",
        "x-description-pt": "Precisa de `support:read`. Os departamentos que podem receber tickets.",
        "x-permission": "support:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "List the departments.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupportDepartmentsListResponse"
                },
                "example": {
                  "data": [
                    {
                      "id": 2,
                      "name": "Departamento Técnico",
                      "description": ""
                    }
                  ],
                  "meta": {
                    "total": 1
                  }
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/domains/availability": {
      "get": {
        "operationId": "domains.availability",
        "tags": [
          "domains"
        ],
        "summary": "Check a domain name",
        "x-summary-pt": "Consultar um nome de domínio",
        "description": "Needs `domains:read`. Limited to 30 per minute. `unknown` means the answer could not be confirmed. `portal_only` means this name is handled in the account portal.",
        "x-description-pt": "Precisa de `domains:read`. Limite de 30 por minuto. `unknown` quer dizer que não foi possível confirmar. `portal_only` quer dizer que este nome se trata no portal da conta.",
        "x-permission": "domains:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "domain",
            "in": "query",
            "required": true,
            "description": "The domain name.",
            "x-description-pt": "O nome de domínio.",
            "schema": {
              "type": "string"
            },
            "example": "example.co.mz"
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "Check a domain name.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DomainsAvailabilityResponse"
                },
                "example": {
                  "data": {
                    "domain": "example.co.mz",
                    "extension": ".co.mz",
                    "status": "available",
                    "available": true,
                    "one_year_price": {
                      "register": 1900.0,
                      "renew": 1900.0,
                      "transfer": 1900.0
                    },
                    "currency": "MZN",
                    "portal_only": false,
                    "portal_reason": null
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/domains/register": {
      "post": {
        "operationId": "domains.register",
        "tags": [
          "domains"
        ],
        "summary": "Register a domain",
        "x-summary-pt": "Registar um domínio",
        "description": "Needs `billing:purchase`. Also needs `domains:write` and the `Idempotency-Key` header. Paid with credit only, within the spending limit of the key. Answers `202`: follow it with `GET /v1/actions/{id}`. Limited to 5 per minute. On the domain of the account email, or of the email of a user of the account, it answers `409` with the code `account_email_domain`: make the change in the account portal.",
        "x-description-pt": "Precisa de `billing:purchase`. Precisa também de `domains:write` e do cabeçalho `Idempotency-Key`. Paga-se só com saldo, dentro do limite de gastos da chave. Responde `202`: acompanhe com `GET /v1/actions/{id}`. Limite de 5 por minuto. No domínio do e-mail da conta, ou do e-mail de um utilizador dela, responde `409` com o código `account_email_domain`: faça a alteração no portal da conta.",
        "x-permission": "billing:purchase",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "202": {
            "description": "Register a domain.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DomainsRegisterResponse"
                },
                "example": {
                  "data": {
                    "action_id": "6f1d2c3a-8b4e-4f7a-9c21-1d2e3f4a5b6c",
                    "status": "simulated",
                    "simulated": true,
                    "domain": "example.co.mz",
                    "years": 1,
                    "amount": 1900.0,
                    "currency": "MZN",
                    "credit_sufficient": true,
                    "within_spending_limit": true
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "402": {
            "$ref": "#/components/responses/InsufficientCredit"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "domain"
                ],
                "properties": {
                  "domain": {
                    "type": "string"
                  },
                  "years": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 10,
                    "default": 1
                  },
                  "nameservers": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "minItems": 2,
                    "maxItems": 5
                  }
                }
              },
              "example": {
                "domain": "example.co.mz",
                "years": 1
              }
            }
          }
        }
      }
    },
    "/v1/domains/transfer": {
      "post": {
        "operationId": "domains.transfer",
        "tags": [
          "domains"
        ],
        "summary": "Transfer a domain to us",
        "x-summary-pt": "Transferir um domínio para nós",
        "description": "Needs `billing:purchase`. Also needs `domains:write` and the `Idempotency-Key` header. Paid with credit only, within the spending limit of the key. Answers `202`: follow it with `GET /v1/actions/{id}`. Limited to 5 per minute.",
        "x-description-pt": "Precisa de `billing:purchase`. Precisa também de `domains:write` e do cabeçalho `Idempotency-Key`. Paga-se só com saldo, dentro do limite de gastos da chave. Responde `202`: acompanhe com `GET /v1/actions/{id}`. Limite de 5 por minuto.",
        "x-permission": "billing:purchase",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "202": {
            "description": "Transfer a domain to us.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DomainsTransferResponse"
                },
                "example": {
                  "data": {
                    "action_id": "6f1d2c3a-8b4e-4f7a-9c21-1d2e3f4a5b6c",
                    "status": "simulated",
                    "simulated": true,
                    "domain": "example.co.mz",
                    "years": 1,
                    "amount": 1900.0,
                    "currency": "MZN",
                    "credit_sufficient": true,
                    "within_spending_limit": true
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "402": {
            "$ref": "#/components/responses/InsufficientCredit"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "domain",
                  "transfer_code"
                ],
                "properties": {
                  "domain": {
                    "type": "string"
                  },
                  "transfer_code": {
                    "type": "string",
                    "maxLength": 128
                  }
                }
              },
              "example": {
                "domain": "example.com",
                "transfer_code": "CODIGO-DO-DOMINIO"
              }
            }
          }
        }
      }
    },
    "/v1/domains/{domain}/renew": {
      "post": {
        "operationId": "domains.renew",
        "tags": [
          "domains"
        ],
        "summary": "Renew a domain",
        "x-summary-pt": "Renovar um domínio",
        "description": "Needs `billing:purchase`. Also needs `domains:write` and the `Idempotency-Key` header. Paid with credit only, within the spending limit of the key. Answers `202`: follow it with `GET /v1/actions/{id}`. Limited to 5 per minute. If there is already an unpaid invoice for the domain, it answers `409` with `invoice_id`.",
        "x-description-pt": "Precisa de `billing:purchase`. Precisa também de `domains:write` e do cabeçalho `Idempotency-Key`. Paga-se só com saldo, dentro do limite de gastos da chave. Responde `202`: acompanhe com `GET /v1/actions/{id}`. Limite de 5 por minuto. Se já houver uma factura por pagar para o domínio, responde `409` com `invoice_id`.",
        "x-permission": "billing:purchase",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "domain",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The domain name or its `id`.",
            "x-description-pt": "O nome do domínio ou o seu `id`."
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "202": {
            "description": "Renew a domain.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DomainsRenewResponse"
                },
                "example": {
                  "data": {
                    "action_id": "6f1d2c3a-8b4e-4f7a-9c21-1d2e3f4a5b6c",
                    "status": "simulated",
                    "simulated": true,
                    "domain": "example.co.mz",
                    "years": 1,
                    "amount": 1900.0,
                    "currency": "MZN",
                    "credit_sufficient": true,
                    "within_spending_limit": true
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "402": {
            "$ref": "#/components/responses/InsufficientCredit"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "years": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 10,
                    "default": 1
                  }
                }
              },
              "example": {
                "years": 1
              }
            }
          }
        }
      }
    },
    "/v1/domains/{domain}/nameservers": {
      "get": {
        "operationId": "domains.nameservers.get",
        "tags": [
          "domains"
        ],
        "summary": "See the nameservers",
        "x-summary-pt": "Ver os nameservers",
        "description": "Needs `domains:read`. Reads them from the registry. Limit: 30 per minute, per account. The answer can come from a copy up to 60 seconds old, which does not count towards the limit.",
        "x-description-pt": "Precisa de `domains:read`. Lê-os no registo do domínio. Limite: 30 por minuto, por conta. A resposta pode vir de uma cópia com até 60 segundos, que não conta para o limite.",
        "x-permission": "domains:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "domain",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The domain name or its `id`.",
            "x-description-pt": "O nome do domínio ou o seu `id`."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "See the nameservers.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DomainsNameserversGetResponse"
                },
                "example": {
                  "data": {
                    "domain": "example.co.mz",
                    "nameservers": [
                      "ns1.example.com",
                      "ns2.example.com"
                    ],
                    "uses_our_nameservers": false
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      },
      "put": {
        "operationId": "domains.nameservers.update",
        "tags": [
          "domains"
        ],
        "summary": "Change the nameservers",
        "x-summary-pt": "Mudar os nameservers",
        "description": "Needs `domains:write`. From 2 to 5. Limited to 20 changes per minute. On the domain of the account email, or of the email of a user of the account, it answers `409` with the code `account_email_domain`: make the change in the account portal.",
        "x-description-pt": "Precisa de `domains:write`. Indique de 2 a 5 nameservers. Limite de 20 alterações por minuto. No domínio do e-mail da conta, ou do e-mail de um utilizador dela, responde `409` com o código `account_email_domain`: faça a alteração no portal da conta.",
        "x-permission": "domains:write",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "domain",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The domain name or its `id`.",
            "x-description-pt": "O nome do domínio ou o seu `id`."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "Change the nameservers.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DomainsNameserversUpdateResponse"
                },
                "example": {
                  "data": {
                    "domain": "example.co.mz",
                    "nameservers": [
                      "ns1.example.com",
                      "ns2.example.com"
                    ],
                    "simulated": true
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "nameservers"
                ],
                "properties": {
                  "nameservers": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "minItems": 2,
                    "maxItems": 5
                  }
                }
              },
              "example": {
                "nameservers": [
                  "ns1.example.com",
                  "ns2.example.com"
                ]
              }
            }
          }
        }
      }
    },
    "/v1/domains/{domain}/lock": {
      "get": {
        "operationId": "domains.lock.get",
        "tags": [
          "domains"
        ],
        "summary": "See the transfer lock",
        "x-summary-pt": "Ver o bloqueio de transferência",
        "description": "Needs `domains:read`. `null` means the registry does not say. Limit: 30 per minute, per account. The answer can come from a copy up to 60 seconds old, which does not count towards the limit.",
        "x-description-pt": "Precisa de `domains:read`. `null` quer dizer que o registo do domínio não informa. Limite: 30 por minuto, por conta. A resposta pode vir de uma cópia com até 60 segundos, que não conta para o limite.",
        "x-permission": "domains:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "domain",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The domain name or its `id`.",
            "x-description-pt": "O nome do domínio ou o seu `id`."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "See the transfer lock.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DomainsLockGetResponse"
                },
                "example": {
                  "data": {
                    "domain": "example.co.mz",
                    "locked": true
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      },
      "put": {
        "operationId": "domains.lock.update",
        "tags": [
          "domains"
        ],
        "summary": "Change the transfer lock",
        "x-summary-pt": "Mudar o bloqueio de transferência",
        "description": "Needs `domains:write`. Turns the lock on or off.",
        "x-description-pt": "Precisa de `domains:write`. Liga ou desliga o bloqueio.",
        "x-permission": "domains:write",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "domain",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The domain name or its `id`.",
            "x-description-pt": "O nome do domínio ou o seu `id`."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "Change the transfer lock.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DomainsLockUpdateResponse"
                },
                "example": {
                  "data": {
                    "domain": "example.co.mz",
                    "locked": true,
                    "simulated": true
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "locked"
                ],
                "properties": {
                  "locked": {
                    "type": "boolean"
                  }
                }
              },
              "example": {
                "locked": true
              }
            }
          }
        }
      }
    },
    "/v1/domains/{domain}/auto-renew": {
      "put": {
        "operationId": "domains.auto_renew.update",
        "tags": [
          "domains"
        ],
        "summary": "Change auto-renewal",
        "x-summary-pt": "Mudar a renovação automática",
        "description": "Needs `domains:write`. Turns the renewal invoices of the domain on or off.",
        "x-description-pt": "Precisa de `domains:write`. Liga ou desliga a emissão das facturas de renovação do domínio.",
        "x-permission": "domains:write",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "domain",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The domain name or its `id`.",
            "x-description-pt": "O nome do domínio ou o seu `id`."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "Change auto-renewal.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DomainsAutoRenewUpdateResponse"
                },
                "example": {
                  "data": {
                    "domain": "example.co.mz",
                    "auto_renew": true,
                    "simulated": true
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "auto_renew"
                ],
                "properties": {
                  "auto_renew": {
                    "type": "boolean"
                  }
                }
              },
              "example": {
                "auto_renew": true
              }
            }
          }
        }
      }
    },
    "/v1/domains/{domain}/contacts": {
      "get": {
        "operationId": "domains.contacts.get",
        "tags": [
          "domains"
        ],
        "summary": "See the domain contacts",
        "x-summary-pt": "Ver os contactos do domínio",
        "description": "Needs `domains:read`. As the registry has them. The fields depend on the extension. Limit: 30 per minute, per account. Always read live.",
        "x-description-pt": "Precisa de `domains:read`. Como estão no registo do domínio. Os campos dependem da extensão. Limite: 30 por minuto, por conta. Lidos sempre na hora.",
        "x-permission": "domains:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "domain",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The domain name or its `id`.",
            "x-description-pt": "O nome do domínio ou o seu `id`."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "See the domain contacts.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DomainsContactsGetResponse"
                },
                "example": {
                  "data": {
                    "domain": "example.co.mz",
                    "contacts": {
                      "Registrant": {
                        "Full Name": "Ana Silva",
                        "Email": "ana@example.com"
                      }
                    }
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/domains/{domain}/transfer-code": {
      "post": {
        "operationId": "domains.transfer_code.request",
        "tags": [
          "domains"
        ],
        "summary": "Request the transfer code",
        "x-summary-pt": "Pedir o código de transferência",
        "description": "Needs `domains:transfer_code`. The code never comes in the response: it goes to the email of the account or of the domain owner. Limited to 3 per hour.",
        "x-description-pt": "Precisa de `domains:transfer_code`. O código nunca vem na resposta: vai para o e-mail da conta ou do titular. Limite de 3 por hora.",
        "x-permission": "domains:transfer_code",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "domain",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The domain name or its `id`.",
            "x-description-pt": "O nome do domínio ou o seu `id`."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "Request the transfer code.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DomainsTransferCodeRequestResponse"
                },
                "example": {
                  "data": {
                    "domain": "example.co.mz",
                    "status": "simulated",
                    "simulated": true
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "confirm"
                ],
                "properties": {
                  "confirm": {
                    "type": "string",
                    "description": "The domain name, to confirm.",
                    "x-description-pt": "O nome do domínio, para confirmar."
                  }
                }
              },
              "example": {
                "confirm": "example.co.mz"
              }
            }
          }
        }
      }
    },
    "/v1/domains/{domain}/dns": {
      "get": {
        "operationId": "dns.records.list",
        "tags": [
          "dns"
        ],
        "summary": "List the DNS records",
        "x-summary-pt": "Listar os registos DNS",
        "description": "Needs `dns:read`. `read_only` marks the records that cannot be changed. Limit: 30 per minute, per account. The answer can come from a copy up to 60 seconds old, which does not count towards the limit.",
        "x-description-pt": "Precisa de `dns:read`. `read_only` marca os registos que não se podem alterar. Limite: 30 por minuto, por conta. A resposta pode vir de uma cópia com até 60 segundos, que não conta para o limite.",
        "x-permission": "dns:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "domain",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The domain name or its `id`.",
            "x-description-pt": "O nome do domínio ou o seu `id`."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "List the DNS records.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DnsRecordsListResponse"
                },
                "example": {
                  "data": [
                    {
                      "id": "3f2a91c07d11e4b6",
                      "name": "www",
                      "type": "A",
                      "value": "192.0.2.10",
                      "ttl": 14400,
                      "priority": 0,
                      "read_only": false
                    }
                  ],
                  "meta": {
                    "domain": "example.co.mz",
                    "dns_enabled": true,
                    "total": 1
                  }
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      },
      "post": {
        "operationId": "dns.records.create",
        "tags": [
          "dns"
        ],
        "summary": "Add a DNS record",
        "x-summary-pt": "Adicionar um registo DNS",
        "description": "Needs `dns:write`. A copy of the zone is kept before each change. In a `TXT` record, quotes around the whole value are removed, and quotes or backslashes inside it are refused with `422`. The response shows what stayed in the zone: an `AAAA` address comes in its short form. A CNAME cannot share its name with other records: it answers `409` with `cname_conflict`. If it touches the MX records, or the names they point to, of the domain of the account email or of the email of a user of the account, it answers `409` with the code `account_email_domain`: make the change in the account portal.",
        "x-description-pt": "Precisa de `dns:write`. Fica uma cópia da zona antes de cada alteração. Num registo `TXT`, as aspas à volta de todo o valor saem, e aspas ou barras invertidas no meio são recusadas com `422`. A resposta mostra o que ficou na zona: um endereço `AAAA` vem na forma curta. Um CNAME não pode ficar com outros registos no mesmo nome: responde `409` com `cname_conflict`. Se mexer nos MX, ou nos nomes para onde apontam, do domínio do e-mail da conta ou do e-mail de um utilizador dela, responde `409` com o código `account_email_domain`: faça a alteração no portal da conta.",
        "x-permission": "dns:write",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "domain",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The domain name or its `id`.",
            "x-description-pt": "O nome do domínio ou o seu `id`."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "201": {
            "description": "Add a DNS record.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DnsRecordsCreateResponse"
                },
                "example": {
                  "data": {
                    "id": "3f2a91c07d11e4b6",
                    "name": "www",
                    "type": "A",
                    "value": "192.0.2.10",
                    "ttl": 14400,
                    "priority": 0,
                    "read_only": false,
                    "simulated": true
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "name",
                  "type",
                  "value"
                ],
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "The name, such as `www`. Use `@` for the domain itself.",
                    "x-description-pt": "O nome, como `www`. Use `@` para o próprio domínio."
                  },
                  "type": {
                    "type": "string",
                    "enum": [
                      "A",
                      "AAAA",
                      "CNAME",
                      "MX",
                      "TXT",
                      "NS",
                      "SRV",
                      "CAA"
                    ]
                  },
                  "value": {
                    "type": "string",
                    "description": "SRV: `weight port target`. CAA: `tag value`.",
                    "x-description-pt": "SRV: `weight port target`. CAA: `tag value`."
                  },
                  "ttl": {
                    "type": "integer",
                    "minimum": 60,
                    "maximum": 604800,
                    "default": 14400
                  },
                  "priority": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 65535,
                    "default": 0,
                    "description": "For MX and SRV. On CAA it is the flag.",
                    "x-description-pt": "Para MX e SRV. No CAA é a flag."
                  }
                }
              },
              "example": {
                "name": "www",
                "type": "A",
                "value": "192.0.2.10",
                "ttl": 14400
              }
            }
          }
        }
      }
    },
    "/v1/domains/{domain}/dns/validate": {
      "post": {
        "operationId": "dns.records.validate",
        "tags": [
          "dns"
        ],
        "summary": "Check a DNS record",
        "x-summary-pt": "Validar um registo DNS",
        "description": "Needs `dns:read`. Checks the record without saving anything.",
        "x-description-pt": "Precisa de `dns:read`. Confere o registo sem gravar nada.",
        "x-permission": "dns:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "domain",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The domain name or its `id`.",
            "x-description-pt": "O nome do domínio ou o seu `id`."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "Check a DNS record.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DnsRecordsValidateResponse"
                },
                "example": {
                  "data": {
                    "valid": true,
                    "record": {
                      "name": "www",
                      "type": "A",
                      "value": "192.0.2.10",
                      "ttl": 14400,
                      "priority": 0
                    }
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "name",
                  "type",
                  "value"
                ],
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "The name, such as `www`. Use `@` for the domain itself.",
                    "x-description-pt": "O nome, como `www`. Use `@` para o próprio domínio."
                  },
                  "type": {
                    "type": "string",
                    "enum": [
                      "A",
                      "AAAA",
                      "CNAME",
                      "MX",
                      "TXT",
                      "NS",
                      "SRV",
                      "CAA"
                    ]
                  },
                  "value": {
                    "type": "string",
                    "description": "SRV: `weight port target`. CAA: `tag value`.",
                    "x-description-pt": "SRV: `weight port target`. CAA: `tag value`."
                  },
                  "ttl": {
                    "type": "integer",
                    "minimum": 60,
                    "maximum": 604800,
                    "default": 14400
                  },
                  "priority": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 65535,
                    "default": 0,
                    "description": "For MX and SRV. On CAA it is the flag.",
                    "x-description-pt": "Para MX e SRV. No CAA é a flag."
                  }
                }
              },
              "example": {
                "name": "www",
                "type": "A",
                "value": "192.0.2.10",
                "ttl": 14400
              }
            }
          }
        }
      }
    },
    "/v1/domains/{domain}/dns/{record_id}": {
      "put": {
        "operationId": "dns.records.update",
        "tags": [
          "dns"
        ],
        "summary": "Change a DNS record",
        "x-summary-pt": "Alterar um registo DNS",
        "description": "Needs `dns:write`. The answer brings the new `id`. In a `TXT` record, quotes around the whole value are removed, and quotes or backslashes inside it are refused with `422`. The response shows what stayed in the zone: an `AAAA` address comes in its short form. A CNAME cannot share its name with other records: it answers `409` with `cname_conflict`. If it touches the MX records, or the names they point to, of the domain of the account email or of the email of a user of the account, it answers `409` with the code `account_email_domain`: make the change in the account portal.",
        "x-description-pt": "Precisa de `dns:write`. A resposta traz o novo `id`. Num registo `TXT`, as aspas à volta de todo o valor saem, e aspas ou barras invertidas no meio são recusadas com `422`. A resposta mostra o que ficou na zona: um endereço `AAAA` vem na forma curta. Um CNAME não pode ficar com outros registos no mesmo nome: responde `409` com `cname_conflict`. Se mexer nos MX, ou nos nomes para onde apontam, do domínio do e-mail da conta ou do e-mail de um utilizador dela, responde `409` com o código `account_email_domain`: faça a alteração no portal da conta.",
        "x-permission": "dns:write",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "domain",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The domain name or its `id`.",
            "x-description-pt": "O nome do domínio ou o seu `id`."
          },
          {
            "name": "record_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the record, from the list. It changes when the record changes.",
            "x-description-pt": "O `id` do registo, da lista. Muda quando o registo muda."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "Change a DNS record.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DnsRecordsUpdateResponse"
                },
                "example": {
                  "data": {
                    "id": "3f2a91c07d11e4b6",
                    "name": "www",
                    "type": "A",
                    "value": "192.0.2.10",
                    "ttl": 14400,
                    "priority": 0,
                    "read_only": false,
                    "simulated": true
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "name",
                  "type",
                  "value"
                ],
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "The name, such as `www`. Use `@` for the domain itself.",
                    "x-description-pt": "O nome, como `www`. Use `@` para o próprio domínio."
                  },
                  "type": {
                    "type": "string",
                    "enum": [
                      "A",
                      "AAAA",
                      "CNAME",
                      "MX",
                      "TXT",
                      "NS",
                      "SRV",
                      "CAA"
                    ]
                  },
                  "value": {
                    "type": "string",
                    "description": "SRV: `weight port target`. CAA: `tag value`.",
                    "x-description-pt": "SRV: `weight port target`. CAA: `tag value`."
                  },
                  "ttl": {
                    "type": "integer",
                    "minimum": 60,
                    "maximum": 604800,
                    "default": 14400
                  },
                  "priority": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 65535,
                    "default": 0,
                    "description": "For MX and SRV. On CAA it is the flag.",
                    "x-description-pt": "Para MX e SRV. No CAA é a flag."
                  }
                }
              },
              "example": {
                "name": "www",
                "type": "A",
                "value": "192.0.2.10",
                "ttl": 14400
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "dns.records.delete",
        "tags": [
          "dns"
        ],
        "summary": "Delete a DNS record",
        "x-summary-pt": "Apagar um registo DNS",
        "description": "Needs `dns:write`. A copy of the zone is kept first. If it touches the MX records, or the names they point to, of the domain of the account email or of the email of a user of the account, it answers `409` with the code `account_email_domain`: make the change in the account portal.",
        "x-description-pt": "Precisa de `dns:write`. Fica primeiro uma cópia da zona. Se mexer nos MX, ou nos nomes para onde apontam, do domínio do e-mail da conta ou do e-mail de um utilizador dela, responde `409` com o código `account_email_domain`: faça a alteração no portal da conta.",
        "x-permission": "dns:write",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "domain",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The domain name or its `id`.",
            "x-description-pt": "O nome do domínio ou o seu `id`."
          },
          {
            "name": "record_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the record, from the list. It changes when the record changes.",
            "x-description-pt": "O `id` do registo, da lista. Muda quando o registo muda."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "Delete a DNS record.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DnsRecordsDeleteResponse"
                },
                "example": {
                  "data": {
                    "id": "3f2a91c07d11e4b6",
                    "deleted": true,
                    "simulated": true
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/domains/{domain}/dns/reset": {
      "post": {
        "operationId": "dns.zone.reset",
        "tags": [
          "dns"
        ],
        "summary": "Reset the DNS zone",
        "x-summary-pt": "Repor a zona DNS",
        "description": "Needs `dns:write`. Leaves the zone without your records. A copy of the zone is kept first. If it touches the MX records, or the names they point to, of the domain of the account email or of the email of a user of the account, it answers `409` with the code `account_email_domain`: make the change in the account portal.",
        "x-description-pt": "Precisa de `dns:write`. Deixa a zona sem os seus registos. Fica primeiro uma cópia da zona. Se mexer nos MX, ou nos nomes para onde apontam, do domínio do e-mail da conta ou do e-mail de um utilizador dela, responde `409` com o código `account_email_domain`: faça a alteração no portal da conta.",
        "x-permission": "dns:write",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "domain",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The domain name or its `id`.",
            "x-description-pt": "O nome do domínio ou o seu `id`."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "Reset the DNS zone.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DnsZoneResetResponse"
                },
                "example": {
                  "data": {
                    "domain": "example.co.mz",
                    "reset": true,
                    "simulated": true
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "confirm"
                ],
                "properties": {
                  "confirm": {
                    "type": "string",
                    "description": "The domain name, to confirm.",
                    "x-description-pt": "O nome do domínio, para confirmar."
                  }
                }
              },
              "example": {
                "confirm": "example.co.mz"
              }
            }
          }
        }
      }
    },
    "/v1/domains/{domain}/dns/backups": {
      "get": {
        "operationId": "dns.backups.list",
        "tags": [
          "dns"
        ],
        "summary": "List the zone backups",
        "x-summary-pt": "Listar as cópias da zona",
        "description": "Needs `dns:read`. The last 20 copies, the newest first.",
        "x-description-pt": "Precisa de `dns:read`. As últimas 20 cópias, primeiro as mais recentes.",
        "x-permission": "dns:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "domain",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The domain name or its `id`.",
            "x-description-pt": "O nome do domínio ou o seu `id`."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "List the zone backups.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DnsBackupsListResponse"
                },
                "example": {
                  "data": [
                    {
                      "id": 12,
                      "reason": "update",
                      "records": 8,
                      "created_at": "2026-11-05T09:00:00+02:00"
                    }
                  ],
                  "meta": {
                    "total": 1
                  }
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/domains/{domain}/dns/backups/{id}/restore": {
      "post": {
        "operationId": "dns.backups.restore",
        "tags": [
          "dns"
        ],
        "summary": "Restore a zone backup",
        "x-summary-pt": "Restaurar uma cópia da zona",
        "description": "Needs `dns:write`. Removes what was not in the copy and adds what was missing. `complete` is `false` when a record of the copy could not stay exactly as it was. If it touches the MX records, or the names they point to, of the domain of the account email or of the email of a user of the account, it answers `409` with the code `account_email_domain`: make the change in the account portal.",
        "x-description-pt": "Precisa de `dns:write`. Tira o que não estava na cópia e põe o que faltava. `complete` vem a `false` quando um registo da cópia não pôde ficar exactamente como estava. Se mexer nos MX, ou nos nomes para onde apontam, do domínio do e-mail da conta ou do e-mail de um utilizador dela, responde `409` com o código `account_email_domain`: faça a alteração no portal da conta.",
        "x-permission": "dns:write",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "domain",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The domain name or its `id`.",
            "x-description-pt": "O nome do domínio ou o seu `id`."
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the backup.",
            "x-description-pt": "O `id` da cópia."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "Restore a zone backup.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DnsBackupsRestoreResponse"
                },
                "example": {
                  "data": {
                    "domain": "example.co.mz",
                    "removed": 1,
                    "added": 2,
                    "simulated": true,
                    "complete": true
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/invoices/{id}/pdf": {
      "get": {
        "operationId": "invoices.pdf",
        "tags": [
          "billing"
        ],
        "summary": "Get the PDF of an invoice",
        "x-summary-pt": "Obter o PDF de uma factura",
        "description": "Needs `billing:read`. The PDF comes in `content`, in base64. When `pdf_available` is `false`, use `url`; `reason` says why: `internal_text`, `temporary_address`, `not_generated` or `too_large`. Limited to 20 per minute.",
        "x-description-pt": "Precisa de `billing:read`. O PDF vem em `content`, em base64. Quando `pdf_available` é `false`, use `url`; `reason` diz porquê: `internal_text`, `temporary_address`, `not_generated` ou `too_large`. Limite de 20 por minuto.",
        "x-permission": "billing:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the invoice.",
            "x-description-pt": "O `id` da factura."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "Get the PDF of an invoice.",
            "x-description-pt": "Obter o PDF de uma factura.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InvoicesPdfResponse"
                },
                "example": {
                  "data": {
                    "pdf_available": true,
                    "filename": "invoice-0669-2026.pdf",
                    "content_type": "application/pdf",
                    "encoding": "base64",
                    "size_bytes": 29556,
                    "content": "JVBERi0xLjcK",
                    "invoice_id": 3127,
                    "number": "0669/2026",
                    "url": "https://my.example.co.mz/viewinvoice.php?id=3127&language=portuguese-mz&currency=1",
                    "reason": null
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/invoices/{id}/pay": {
      "post": {
        "operationId": "invoices.pay",
        "tags": [
          "billing"
        ],
        "summary": "Pay an invoice with credit",
        "x-summary-pt": "Pagar uma factura com saldo",
        "description": "Needs `billing:pay`. Pays what is still due, with the credit of the account and nothing else. Needs the `Idempotency-Key` header. The invoice total counts towards the spending limit of the key. Limited to 5 per minute, shared with domain purchases. In `conflict`, `details.reason` can be `invoice_not_unpaid`, `credit_not_allowed`, `nothing_to_pay` or `profile_incomplete`.",
        "x-description-pt": "Precisa de `billing:pay`. Paga o que falta, só com o saldo da conta. Precisa do cabeçalho `Idempotency-Key`. O total da factura conta para o limite de gastos da chave. Limite de 5 por minuto, junto com as compras de domínios e de extras. Em `conflict`, `details.reason` pode ser `invoice_not_unpaid`, `credit_not_allowed`, `nothing_to_pay` ou `profile_incomplete`.",
        "x-permission": "billing:pay",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the invoice.",
            "x-description-pt": "O `id` da factura."
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "Pay an invoice with credit.",
            "x-description-pt": "Pagar uma factura com saldo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InvoicesPayResponse"
                },
                "example": {
                  "data": {
                    "status": "paid",
                    "amount_charged": 229.68,
                    "balance_due": 0.0,
                    "credit_balance": 770.32,
                    "simulated": false,
                    "invoice_id": 3127,
                    "invoice_total": 229.68,
                    "currency": "MZN",
                    "url": "https://my.example.co.mz/viewinvoice.php?id=3127&language=portuguese-mz&currency=1"
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/InsufficientCredit"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/orders": {
      "get": {
        "operationId": "orders.list",
        "tags": [
          "billing"
        ],
        "summary": "List the orders",
        "x-summary-pt": "Listar as encomendas",
        "description": "Needs `billing:read`. The most recent first.",
        "x-description-pt": "Precisa de `billing:read`. Primeiro as mais recentes.",
        "x-permission": "billing:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "status",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filter by status: `pending`, `active`, `cancelled` or `fraud`.",
            "x-description-pt": "Filtra pelo estado: `pending`, `active`, `cancelled` ou `fraud`."
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "List the orders.",
            "x-description-pt": "Listar as encomendas.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrdersListResponse"
                },
                "example": {
                  "data": [
                    {
                      "id": 961,
                      "number": "7794007796",
                      "status": "active",
                      "date": "2026-10-31T14:20:18+02:00",
                      "amount": 2900.93,
                      "currency": "MZN",
                      "payment_method": "M-Pesa",
                      "invoice_id": 3100,
                      "promo_code": null
                    }
                  ],
                  "meta": {
                    "page": 1,
                    "per_page": 10,
                    "total": 1,
                    "total_pages": 1
                  }
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/orders/{id}": {
      "get": {
        "operationId": "orders.get",
        "tags": [
          "billing"
        ],
        "summary": "See an order",
        "x-summary-pt": "Ver uma encomenda",
        "description": "Needs `billing:read`. With what came in the order: services, domains, addons and upgrades. A temporary address only appears when the service is active.",
        "x-description-pt": "Precisa de `billing:read`. Com o que veio na encomenda: serviços, domínios, adicionais e upgrades. O endereço temporário só aparece com o serviço activo.",
        "x-permission": "billing:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the order.",
            "x-description-pt": "O `id` da encomenda."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "See an order.",
            "x-description-pt": "Ver uma encomenda.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrdersGetResponse"
                },
                "example": {
                  "data": {
                    "id": 961,
                    "number": "7794007796",
                    "status": "active",
                    "date": "2026-10-31T14:20:18+02:00",
                    "amount": 2900.93,
                    "currency": "MZN",
                    "payment_method": "M-Pesa",
                    "invoice_id": 3100,
                    "promo_code": null,
                    "items": [
                      {
                        "type": "service",
                        "id": 695,
                        "name": "Plano Pro",
                        "domain": "example.co.mz",
                        "status": "active",
                        "billing_cycle": "annually",
                        "first_payment": 2900.93,
                        "recurring_amount": 2900.93
                      }
                    ]
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/quotes": {
      "get": {
        "operationId": "quotes.list",
        "tags": [
          "billing"
        ],
        "summary": "List the quotes",
        "x-summary-pt": "Listar as cotações",
        "description": "Needs `billing:read`. Only the quotes delivered to the account.",
        "x-description-pt": "Precisa de `billing:read`. Só as cotações entregues à conta.",
        "x-permission": "billing:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "status",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filter by status: `delivered`, `accepted`, `lost` or `dead`.",
            "x-description-pt": "Filtra pelo estado: `delivered`, `accepted`, `lost` ou `dead`."
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "List the quotes.",
            "x-description-pt": "Listar as cotações.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QuotesListResponse"
                },
                "example": {
                  "data": [
                    {
                      "id": 15,
                      "subject": "Website",
                      "status": "delivered",
                      "created_at": "2026-10-01",
                      "sent_at": "2026-10-01",
                      "valid_until": "2026-11-01",
                      "accepted_at": null,
                      "subtotal": 28000.0,
                      "tax": 4559.0,
                      "total": 32559.0,
                      "currency": "MZN",
                      "url": "https://my.example.co.mz/viewquote.php?id=15&language=portuguese-mz&currency=1"
                    }
                  ],
                  "meta": {
                    "page": 1,
                    "per_page": 10,
                    "total": 1,
                    "total_pages": 1
                  }
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/quotes/{id}": {
      "get": {
        "operationId": "quotes.get",
        "tags": [
          "billing"
        ],
        "summary": "See a quote",
        "x-summary-pt": "Ver uma cotação",
        "description": "Needs `billing:read`. With the proposal, the notes for you and the lines.",
        "x-description-pt": "Precisa de `billing:read`. Com a proposta, as notas para si e as linhas.",
        "x-permission": "billing:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the quote.",
            "x-description-pt": "O `id` da cotação."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "See a quote.",
            "x-description-pt": "Ver uma cotação.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QuotesGetResponse"
                },
                "example": {
                  "data": {
                    "id": 15,
                    "subject": "Website",
                    "status": "delivered",
                    "created_at": "2026-10-01",
                    "sent_at": "2026-10-01",
                    "valid_until": "2026-11-01",
                    "accepted_at": null,
                    "subtotal": 28000.0,
                    "tax": 4559.0,
                    "total": 32559.0,
                    "currency": "MZN",
                    "url": "https://my.example.co.mz/viewquote.php?id=15&language=portuguese-mz&currency=1",
                    "proposal": "Proposal text",
                    "notes": "Notes for you",
                    "items": [
                      {
                        "id": 1,
                        "description": "Website",
                        "quantity": 1.0,
                        "unit_price": 28000.0,
                        "discount_percent": 0.0,
                        "taxed": true
                      }
                    ]
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/services/{id}/billing-cycles": {
      "get": {
        "operationId": "services.billing_cycles.list",
        "tags": [
          "billing"
        ],
        "summary": "See the renewal cycles of a service",
        "x-summary-pt": "Ver os ciclos de renovação de um serviço",
        "description": "Needs `billing:read`. Only the cycles on sale, with the price of each renewal. A cycle where a paid option of the service has no price is not on sale. Nothing changes. `blocked_reason` says why it cannot change now: `service_not_active`, `vps_not_supported`, `no_cycles`, `custom_price` or `invoice_open`. With `vps_not_supported` or `custom_price`, `cycles` is empty: handle the change in the portal or with support.",
        "x-description-pt": "Precisa de `billing:read`. Só os ciclos à venda, com o preço de cada renovação. Um ciclo em que uma opção paga do serviço não tem preço não está à venda. Nada muda. `blocked_reason` diz porque não se pode mudar agora: `service_not_active`, `vps_not_supported`, `no_cycles`, `custom_price` ou `invoice_open`. Com `vps_not_supported` ou `custom_price`, `cycles` vem vazio: trate a mudança no portal ou com o suporte.",
        "x-permission": "billing:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the service.",
            "x-description-pt": "O `id` do serviço."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "See the renewal cycles of a service.",
            "x-description-pt": "Ver os ciclos de renovação de um serviço.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServicesBillingCyclesListResponse"
                },
                "example": {
                  "data": {
                    "service_id": 695,
                    "current_cycle": "monthly",
                    "current_amount": 350.0,
                    "currency": "MZN",
                    "next_due_date": "2026-12-20",
                    "can_change": true,
                    "blocked_reason": null,
                    "invoice_id": null,
                    "cycles": [
                      {
                        "cycle": "annually",
                        "amount": 3500.0,
                        "current": false
                      }
                    ]
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/services/{id}/billing-cycle": {
      "put": {
        "operationId": "services.billing_cycle.update",
        "tags": [
          "billing"
        ],
        "summary": "Change the cycle of the next renewal",
        "x-summary-pt": "Mudar o ciclo da próxima renovação",
        "description": "Needs `billing:write`. Nothing is charged now and the next due date stays. Give in `expected_amount` the price from the query: if it changed, it answers `409` with `price_changed`. A VPS or server answers `409` with `vps_not_supported`, and a service whose amount differs from the list price of its current cycle answers `409` with `custom_price`: handle these in the portal or with support. Limited to 20 per minute.",
        "x-description-pt": "Precisa de `billing:write`. Nada se cobra agora e a próxima data de vencimento não muda. Indique em `expected_amount` o preço da consulta: se tiver mudado, responde `409` com `price_changed`. Um VPS ou servidor responde `409` com `vps_not_supported`, e um serviço cujo valor não bate com o preço de lista do ciclo actual responde `409` com `custom_price`: trate-os no portal ou com o suporte. Limite de 20 por minuto.",
        "x-permission": "billing:write",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the service.",
            "x-description-pt": "O `id` do serviço."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "Change the cycle of the next renewal.",
            "x-description-pt": "Mudar o ciclo da próxima renovação.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServicesBillingCycleUpdateResponse"
                },
                "example": {
                  "data": {
                    "service_id": 695,
                    "previous_cycle": "monthly",
                    "cycle": "annually",
                    "amount": 3500.0,
                    "currency": "MZN",
                    "applies_from": "2026-12-20",
                    "simulated": true
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "cycle",
                  "expected_amount"
                ],
                "properties": {
                  "cycle": {
                    "type": "string",
                    "enum": [
                      "monthly",
                      "quarterly",
                      "semi_annually",
                      "annually",
                      "biennially",
                      "triennially"
                    ]
                  },
                  "expected_amount": {
                    "type": "number",
                    "description": "The price from the query.",
                    "x-description-pt": "O preço da consulta."
                  }
                }
              },
              "example": {
                "cycle": "annually",
                "expected_amount": 3500.0
              }
            }
          }
        }
      }
    },
    "/v1/services/{id}/upgrade-link": {
      "get": {
        "operationId": "services.upgrade_link.get",
        "tags": [
          "billing"
        ],
        "summary": "Get the upgrade link of a service",
        "x-summary-pt": "Obter a ligação de upgrade de um serviço",
        "description": "Needs `billing:read`. On that page you choose the new plan and see the amount before paying. Nothing changes here.",
        "x-description-pt": "Precisa de `billing:read`. Nessa página escolhe o plano novo e vê o valor antes de pagar. Aqui nada muda.",
        "x-permission": "billing:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the service.",
            "x-description-pt": "O `id` do serviço."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "Get the upgrade link of a service.",
            "x-description-pt": "Obter a ligação de upgrade de um serviço.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServicesUpgradeLinkGetResponse"
                },
                "example": {
                  "data": {
                    "service_id": 695,
                    "url": "https://my.example.co.mz/onestep/upgrade/695?language=portuguese-mz&currency=1"
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/services/{id}/cancellation": {
      "post": {
        "operationId": "services.cancellation.create",
        "tags": [
          "billing"
        ],
        "summary": "Request the cancellation of a service",
        "x-summary-pt": "Pedir o cancelamento de um serviço",
        "description": "Needs `services:cancel`. Always at the end of the paid period, never right away. The service stays active until `service_ends_at`. A service with no paid period still running answers `409` with `no_period_end`: ask support. Unpaid invoices of the service can be cancelled. Limited to 5 per hour.",
        "x-description-pt": "Precisa de `services:cancel`. Sempre no fim do período pago, nunca de imediato. O serviço continua activo até `service_ends_at`. Um serviço sem período pago em curso responde `409` com `no_period_end`: fale com o suporte. As facturas por pagar do serviço podem ser canceladas. Limite de 5 por hora.",
        "x-permission": "services:cancel",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the service.",
            "x-description-pt": "O `id` do serviço."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "201": {
            "description": "Request the cancellation of a service.",
            "x-description-pt": "Pedir o cancelamento de um serviço.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServicesCancellationCreateResponse"
                },
                "example": {
                  "data": {
                    "status": "requested",
                    "service_id": 695,
                    "type": "end_of_billing_period",
                    "service_ends_at": "2026-12-20",
                    "simulated": false
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "reason",
                  "confirm"
                ],
                "properties": {
                  "reason": {
                    "type": "string",
                    "minLength": 3,
                    "maxLength": 300,
                    "description": "Why you are cancelling.",
                    "x-description-pt": "O motivo do cancelamento."
                  },
                  "confirm": {
                    "type": "string",
                    "description": "The domain of the service or, if it has none, the plan name.",
                    "x-description-pt": "O domínio do serviço ou, se não tiver, o nome do plano."
                  },
                  "type": {
                    "type": "string",
                    "enum": [
                      "end_of_billing_period"
                    ],
                    "default": "end_of_billing_period"
                  }
                }
              },
              "example": {
                "reason": "I no longer need this plan",
                "confirm": "example.co.mz"
              }
            }
          }
        }
      }
    },
    "/v1/tickets/{id}/replies": {
      "post": {
        "operationId": "tickets.replies.create",
        "tags": [
          "support"
        ],
        "summary": "Reply to a ticket",
        "x-summary-pt": "Responder a um ticket",
        "description": "Needs `support:write`. The reply stays in the name of the account. Replying to a closed ticket opens it again. Limited to 30 per hour per account. Send `Idempotency-Key` so that a retry does not reply twice.",
        "x-description-pt": "Precisa de `support:write`. A resposta fica em nome da conta. Responder a um ticket fechado volta a abri-lo. Limite de 30 por hora por conta. Envie `Idempotency-Key` para que repetir o pedido não responda duas vezes.",
        "x-permission": "support:write",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The ticket number.",
            "x-description-pt": "O número do ticket."
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "201": {
            "description": "Reply to a ticket.",
            "x-description-pt": "Responder a um ticket.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TicketsRepliesCreateResponse"
                },
                "example": {
                  "data": {
                    "ticket_id": "731942",
                    "reply_id": "392",
                    "status": "customer_reply",
                    "reopened": false,
                    "simulated": false
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "message"
                ],
                "properties": {
                  "message": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 20000
                  }
                }
              },
              "example": {
                "message": "Thank you, it works now."
              }
            }
          }
        }
      }
    },
    "/v1/tickets/{id}/close": {
      "post": {
        "operationId": "tickets.close",
        "tags": [
          "support"
        ],
        "summary": "Close a ticket",
        "x-summary-pt": "Fechar um ticket",
        "description": "Needs `support:write`. In `conflict`, `details.reason` can be `already_closed` or `closure_not_allowed`.",
        "x-description-pt": "Precisa de `support:write`. Em `conflict`, `details.reason` pode ser `already_closed` ou `closure_not_allowed`.",
        "x-permission": "support:write",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The ticket number.",
            "x-description-pt": "O número do ticket."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "Close a ticket.",
            "x-description-pt": "Fechar um ticket.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TicketsCloseResponse"
                },
                "example": {
                  "data": {
                    "ticket_id": "731942",
                    "status": "closed",
                    "simulated": false
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/kb/categories": {
      "get": {
        "operationId": "kb.categories.list",
        "tags": [
          "support"
        ],
        "summary": "List the Knowledge Base categories",
        "x-summary-pt": "Listar as categorias da Base de Conhecimento",
        "description": "Needs `support:read`. In the language of `Accept-Language`, when there is a translation.",
        "x-description-pt": "Precisa de `support:read`. Na língua do `Accept-Language`, quando houver tradução.",
        "x-permission": "support:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "List the Knowledge Base categories.",
            "x-description-pt": "Listar as categorias da Base de Conhecimento.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/KbCategoriesListResponse"
                },
                "example": {
                  "data": [
                    {
                      "id": 9,
                      "name": "Billing and payments",
                      "description": "",
                      "articles": 40
                    }
                  ],
                  "meta": {
                    "total": 1
                  }
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/kb/articles": {
      "get": {
        "operationId": "kb.articles.list",
        "tags": [
          "support"
        ],
        "summary": "List or search Knowledge Base articles",
        "x-summary-pt": "Listar ou pesquisar artigos da Base de Conhecimento",
        "description": "Needs `support:read`. Only published articles. Searches are limited to 30 per minute.",
        "x-description-pt": "Precisa de `support:read`. Só os artigos publicados. As pesquisas têm um limite de 30 por minuto.",
        "x-permission": "support:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Words to find, from 2 to 100 characters.",
            "x-description-pt": "As palavras a procurar, de 2 a 100 caracteres."
          },
          {
            "name": "category",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of a category.",
            "x-description-pt": "O `id` de uma categoria."
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "List or search Knowledge Base articles.",
            "x-description-pt": "Listar ou pesquisar artigos da Base de Conhecimento.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/KbArticlesListResponse"
                },
                "example": {
                  "data": [
                    {
                      "id": 28,
                      "title": "How to access cPanel",
                      "categories": [
                        {
                          "id": 1,
                          "name": "cPanel and WHM"
                        }
                      ],
                      "views": 120,
                      "translated": false,
                      "url": "https://my.example.co.mz/knowledgebase/28?language=english&currency=1",
                      "excerpt": "First words of the article."
                    }
                  ],
                  "meta": {
                    "page": 1,
                    "per_page": 10,
                    "total": 1,
                    "total_pages": 1
                  }
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/kb/articles/{id}": {
      "get": {
        "operationId": "kb.articles.get",
        "tags": [
          "support"
        ],
        "summary": "Read a Knowledge Base article",
        "x-summary-pt": "Ler um artigo da Base de Conhecimento",
        "description": "Needs `support:read`. The text comes in HTML. In the language of `Accept-Language`, when there is a translation; `translated` says if there was.",
        "x-description-pt": "Precisa de `support:read`. O texto vem em HTML. Na língua do `Accept-Language`, quando houver tradução; `translated` diz se houve.",
        "x-permission": "support:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the article.",
            "x-description-pt": "O `id` do artigo."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "Read a Knowledge Base article.",
            "x-description-pt": "Ler um artigo da Base de Conhecimento.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/KbArticlesGetResponse"
                },
                "example": {
                  "data": {
                    "id": 28,
                    "title": "How to access cPanel",
                    "categories": [
                      {
                        "id": 1,
                        "name": "cPanel and WHM"
                      }
                    ],
                    "views": 120,
                    "translated": false,
                    "url": "https://my.example.co.mz/knowledgebase/28?language=english&currency=1",
                    "body_html": "<p>Article text.</p>"
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/announcements": {
      "get": {
        "operationId": "announcements.list",
        "tags": [
          "support"
        ],
        "summary": "List the announcements",
        "x-summary-pt": "Listar os anúncios",
        "description": "Needs `support:read`. Only published announcements, the most recent first.",
        "x-description-pt": "Precisa de `support:read`. Só os anúncios publicados, primeiro os mais recentes.",
        "x-permission": "support:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "List the announcements.",
            "x-description-pt": "Listar os anúncios.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AnnouncementsListResponse"
                },
                "example": {
                  "data": [
                    {
                      "id": 7,
                      "title": "Scheduled maintenance",
                      "published_at": "2026-11-01T08:00:00+02:00",
                      "translated": false,
                      "url": "https://my.example.co.mz/announcements/7/scheduled-maintenance.html?language=english&currency=1"
                    }
                  ],
                  "meta": {
                    "page": 1,
                    "per_page": 10,
                    "total": 1,
                    "total_pages": 1
                  }
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/announcements/{id}": {
      "get": {
        "operationId": "announcements.get",
        "tags": [
          "support"
        ],
        "summary": "Read an announcement",
        "x-summary-pt": "Ler um anúncio",
        "description": "Needs `support:read`. The text comes in HTML.",
        "x-description-pt": "Precisa de `support:read`. O texto vem em HTML.",
        "x-permission": "support:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the announcement.",
            "x-description-pt": "O `id` do anúncio."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "Read an announcement.",
            "x-description-pt": "Ler um anúncio.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AnnouncementsGetResponse"
                },
                "example": {
                  "data": {
                    "id": 7,
                    "title": "Scheduled maintenance",
                    "published_at": "2026-11-01T08:00:00+02:00",
                    "translated": false,
                    "url": "https://my.example.co.mz/announcements/7/scheduled-maintenance.html?language=english&currency=1",
                    "body_html": "<p>Announcement text.</p>"
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/servers": {
      "get": {
        "operationId": "servers.list",
        "tags": [
          "servers"
        ],
        "summary": "List the servers",
        "x-summary-pt": "Listar os servidores",
        "description": "Needs `vps:read`. The active and suspended servers of the account, the newest first. The state comes from a recent copy; `state_checked_at` says when it was read, and is null if it has not been read yet. The states of `power_state` are `running`, `stopped`, `starting`, `stopping`, `restarting`, `reinstalling`, `backing_up` and `unknown`.",
        "x-description-pt": "Precisa de `vps:read`. Os servidores activos e suspensos da conta, primeiro os mais recentes. O estado vem de uma cópia recente; `state_checked_at` diz quando foi lido, e é null se ainda não foi lido. Os estados de `power_state` são `running`, `stopped`, `starting`, `stopping`, `restarting`, `reinstalling`, `backing_up` e `unknown`.",
        "x-permission": "vps:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "status",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filter by `active` or `suspended`.",
            "x-description-pt": "Filtra por `active` ou `suspended`."
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "List the servers.",
            "x-description-pt": "Listar os servidores.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServersListResponse"
                },
                "example": {
                  "data": [
                    {
                      "id": 700,
                      "name": "web1.example.co.mz",
                      "status": "active",
                      "product": "VPS 1",
                      "ip": "203.0.113.10",
                      "power_state": "running",
                      "state_checked_at": "2026-11-05T09:00:00+02:00",
                      "next_due_date": "2026-12-01"
                    }
                  ],
                  "meta": {
                    "page": 1,
                    "per_page": 10,
                    "total": 1,
                    "total_pages": 1
                  }
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/servers/{id}": {
      "get": {
        "operationId": "servers.get",
        "tags": [
          "servers"
        ],
        "summary": "See a server",
        "x-summary-pt": "Ver um servidor",
        "description": "Needs `vps:read`. The state comes from a copy up to 60 seconds old. If it cannot be read now, `state_stale` is true and the last known state is shown. The states of `power_state` are `running`, `stopped`, `starting`, `stopping`, `restarting`, `reinstalling`, `backing_up` and `unknown`.",
        "x-description-pt": "Precisa de `vps:read`. O estado vem de uma cópia com até 60 segundos. Se não for possível ler agora, `state_stale` é true e mostra-se o último estado conhecido. Os estados de `power_state` são `running`, `stopped`, `starting`, `stopping`, `restarting`, `reinstalling`, `backing_up` e `unknown`.",
        "x-permission": "vps:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the server, the same as the `id` of its service.",
            "x-description-pt": "O `id` do servidor, o mesmo do seu serviço."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "See a server.",
            "x-description-pt": "Ver um servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServersGetResponse"
                },
                "example": {
                  "data": {
                    "id": 700,
                    "name": "web1.example.co.mz",
                    "status": "active",
                    "product": "VPS 1",
                    "ip": "203.0.113.10",
                    "power_state": "running",
                    "state_checked_at": "2026-11-05T09:00:00+02:00",
                    "next_due_date": "2026-12-01",
                    "additional_ips": [
                      "203.0.113.11"
                    ],
                    "operating_system": {
                      "name": "Ubuntu",
                      "version": "24.04"
                    },
                    "location": "New Jersey, USA",
                    "resources": {
                      "vcpu": 2,
                      "ram_gb": 4,
                      "disk_gb": 80,
                      "traffic_gb": 4000
                    },
                    "billing_cycle": "monthly",
                    "state_stale": false,
                    "portal_url": "https://portal.example.co.mz/clientarea.php?action=productdetails&id=700&language=english&currency=1"
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/servers/{id}/traffic": {
      "get": {
        "operationId": "servers.traffic.get",
        "tags": [
          "servers"
        ],
        "summary": "See the traffic of the month",
        "x-summary-pt": "Ver o tráfego do mês",
        "description": "Needs `vps:read`. Traffic this month, per day and in total, in GB. Comes from a copy up to 5 minutes old.",
        "x-description-pt": "Precisa de `vps:read`. O tráfego deste mês, por dia e no total, em GB. Vem de uma cópia com até 5 minutos.",
        "x-permission": "vps:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the server, the same as the `id` of its service.",
            "x-description-pt": "O `id` do servidor, o mesmo do seu serviço."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "See the traffic of the month.",
            "x-description-pt": "Ver o tráfego do mês.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServersTrafficGetResponse"
                },
                "example": {
                  "data": {
                    "server_id": 700,
                    "month": "2026-11",
                    "total_gb": 31.5,
                    "in_gb": 8.2,
                    "out_gb": 23.3,
                    "limit_gb": 4000,
                    "days": [
                      {
                        "date": "2026-11-01",
                        "total_gb": 6.4
                      }
                    ],
                    "checked_at": "2026-11-05T09:00:00+02:00"
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/servers/{id}/operating-systems": {
      "get": {
        "operationId": "servers.operating_systems.list",
        "tags": [
          "servers"
        ],
        "summary": "List the systems to reinstall",
        "x-summary-pt": "Listar os sistemas para reinstalar",
        "description": "Needs `vps:read`. The systems this server can install. Use the `id` in the reinstall operation.",
        "x-description-pt": "Precisa de `vps:read`. Os sistemas que este servidor pode instalar. Use o `id` na operação de reinstalar.",
        "x-permission": "vps:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the server, the same as the `id` of its service.",
            "x-description-pt": "O `id` do servidor, o mesmo do seu serviço."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "List the systems to reinstall.",
            "x-description-pt": "Listar os sistemas para reinstalar.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServersOperatingSystemsListResponse"
                },
                "example": {
                  "data": [
                    {
                      "id": "ubuntu-24.04",
                      "name": "Ubuntu",
                      "version": "24.04"
                    }
                  ],
                  "meta": {
                    "total": 1
                  }
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/servers/{id}/backups": {
      "get": {
        "operationId": "servers.backups.list",
        "tags": [
          "servers"
        ],
        "summary": "List the backups",
        "x-summary-pt": "Listar as cópias",
        "description": "Needs `vps:read`. `kind` is `automatic` or `on_demand`. A server has at most 4 backups, counting the automatic ones. The `id` changes when the backup changes. Comes from a copy up to 2 minutes old.",
        "x-description-pt": "Precisa de `vps:read`. `kind` é `automatic` ou `on_demand`. Um servidor tem no máximo 4 cópias, contando as automáticas. O `id` muda quando a cópia muda. Vem de uma cópia com até 2 minutos.",
        "x-permission": "vps:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the server, the same as the `id` of its service.",
            "x-description-pt": "O `id` do servidor, o mesmo do seu serviço."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "List the backups.",
            "x-description-pt": "Listar as cópias.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServersBackupsListResponse"
                },
                "example": {
                  "data": [
                    {
                      "id": "3f9a1c7e5b2d4860",
                      "title": "Daily automatic backup",
                      "kind": "automatic",
                      "created_at": "2026-11-05T02:10:00+02:00",
                      "size_gb": 12.4
                    }
                  ],
                  "meta": {
                    "total": 1,
                    "max": 4,
                    "checked_at": "2026-11-05T09:00:00+02:00"
                  }
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      },
      "post": {
        "operationId": "servers.backups.create",
        "tags": [
          "servers"
        ],
        "summary": "Make a backup",
        "x-summary-pt": "Fazer uma cópia",
        "description": "Needs `vps:write`. Answers `202`; the backup can take up to 50 minutes to appear. With 4 backups it answers `409` with `backup_limit_reached`.",
        "x-description-pt": "Precisa de `vps:write`. Responde `202`; a cópia pode demorar até 50 minutos a aparecer. Com 4 cópias responde `409` com `backup_limit_reached`.",
        "x-permission": "vps:write",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the server, the same as the `id` of its service.",
            "x-description-pt": "O `id` do servidor, o mesmo do seu serviço."
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "202": {
            "description": "Make a backup.",
            "x-description-pt": "Fazer uma cópia.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServersBackupsCreateResponse"
                },
                "example": {
                  "data": {
                    "action_id": "6f1d2c3a-8b4e-4f7a-9c21-1d2e3f4a5b6c",
                    "status": "running",
                    "simulated": false,
                    "server_id": 700,
                    "server": "web1.example.co.mz",
                    "name": "before-update"
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "name"
                ],
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "Letters, digits, dot, hyphen and underscore, up to 30.",
                    "x-description-pt": "Letras, algarismos, ponto, hífen e sublinhado, até 30."
                  }
                }
              },
              "example": {
                "name": "before-update"
              }
            }
          }
        }
      }
    },
    "/v1/servers/{id}/start": {
      "post": {
        "operationId": "servers.start",
        "tags": [
          "servers"
        ],
        "summary": "Start a server",
        "x-summary-pt": "Ligar um servidor",
        "description": "Needs `vps:write`. Answers `202`. It takes about 2 minutes. If it is already running, `409` with `already_running`.",
        "x-description-pt": "Precisa de `vps:write`. Responde `202`. Demora cerca de 2 minutos. Se já estiver ligado, `409` com `already_running`.",
        "x-permission": "vps:write",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the server, the same as the `id` of its service.",
            "x-description-pt": "O `id` do servidor, o mesmo do seu serviço."
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "202": {
            "description": "Start a server.",
            "x-description-pt": "Ligar um servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServersStartResponse"
                },
                "example": {
                  "data": {
                    "action_id": "6f1d2c3a-8b4e-4f7a-9c21-1d2e3f4a5b6c",
                    "status": "running",
                    "simulated": false,
                    "server_id": 700,
                    "server": "web1.example.co.mz"
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/servers/{id}/stop": {
      "post": {
        "operationId": "servers.stop",
        "tags": [
          "servers"
        ],
        "summary": "Stop a server",
        "x-summary-pt": "Desligar um servidor",
        "description": "Needs `vps:write`. Answers `202`. It can take about 6 minutes. If it is already stopped, `409` with `already_stopped`.",
        "x-description-pt": "Precisa de `vps:write`. Responde `202`. Pode demorar cerca de 6 minutos. Se já estiver desligado, `409` com `already_stopped`.",
        "x-permission": "vps:write",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the server, the same as the `id` of its service.",
            "x-description-pt": "O `id` do servidor, o mesmo do seu serviço."
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "202": {
            "description": "Stop a server.",
            "x-description-pt": "Desligar um servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServersStopResponse"
                },
                "example": {
                  "data": {
                    "action_id": "6f1d2c3a-8b4e-4f7a-9c21-1d2e3f4a5b6c",
                    "status": "running",
                    "simulated": false,
                    "server_id": 700,
                    "server": "web1.example.co.mz"
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/servers/{id}/restart": {
      "post": {
        "operationId": "servers.restart",
        "tags": [
          "servers"
        ],
        "summary": "Restart a server",
        "x-summary-pt": "Reiniciar um servidor",
        "description": "Needs `vps:write`. Answers `202`. If it is stopped, `409` with `server_stopped`.",
        "x-description-pt": "Precisa de `vps:write`. Responde `202`. Se estiver desligado, `409` com `server_stopped`.",
        "x-permission": "vps:write",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the server, the same as the `id` of its service.",
            "x-description-pt": "O `id` do servidor, o mesmo do seu serviço."
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "202": {
            "description": "Restart a server.",
            "x-description-pt": "Reiniciar um servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServersRestartResponse"
                },
                "example": {
                  "data": {
                    "action_id": "6f1d2c3a-8b4e-4f7a-9c21-1d2e3f4a5b6c",
                    "status": "running",
                    "simulated": false,
                    "server_id": 700,
                    "server": "web1.example.co.mz"
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/servers/{id}/password": {
      "post": {
        "operationId": "servers.password.change",
        "tags": [
          "servers"
        ],
        "summary": "Generate a new root password",
        "x-summary-pt": "Gerar uma nova senha de root",
        "description": "Needs `vps:password`. This permission is separate from `vps:write` and off by default, because the answer brings the root password. Needs the name of the server in `confirm`. The server restarts to apply it, and the new password works after that, in 1 to 2 minutes. It appears only in this response: we do not keep it in the API records. Repeating with the same `Idempotency-Key` does not generate another one and returns `password` as null. In Sandbox the password is not real.",
        "x-description-pt": "Precisa de `vps:password`. Esta permissão é separada de `vps:write` e fica desligada por omissão, porque a resposta traz a senha de root. Precisa do nome do servidor em `confirm`. O servidor reinicia para a aplicar, e a nova senha funciona depois disso, em 1 a 2 minutos. Aparece só nesta resposta: não a guardamos nos registos da API. Repetir com a mesma `Idempotency-Key` não gera outra e devolve `password` a null. Em Sandbox a senha não é verdadeira.",
        "x-permission": "vps:password",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the server, the same as the `id` of its service.",
            "x-description-pt": "O `id` do servidor, o mesmo do seu serviço."
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "202": {
            "description": "Generate a new root password.",
            "x-description-pt": "Gerar uma nova senha de root.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServersPasswordChangeResponse"
                },
                "example": {
                  "data": {
                    "action_id": "6f1d2c3a-8b4e-4f7a-9c21-1d2e3f4a5b6c",
                    "status": "running",
                    "simulated": false,
                    "server_id": 700,
                    "server": "web1.example.co.mz",
                    "password": "pP7-kX2mQ9vL4tR8wZ3a"
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "confirm"
                ],
                "properties": {
                  "confirm": {
                    "type": "string",
                    "description": "The `name` of the server, to confirm.",
                    "x-description-pt": "O `name` do servidor, para confirmar."
                  }
                }
              },
              "example": {
                "confirm": "web1.example.co.mz"
              }
            }
          }
        }
      }
    },
    "/v1/servers/{id}/reverse-dns": {
      "get": {
        "operationId": "servers.reverse_dns.get",
        "tags": [
          "servers"
        ],
        "summary": "See the reverse DNS",
        "x-summary-pt": "Ver o DNS reverso",
        "description": "Needs `vps:read`. The name of each IP of the server. `hostname` is null while it is the default one. Comes from a copy up to 5 minutes old.",
        "x-description-pt": "Precisa de `vps:read`. O nome de cada IP do servidor. `hostname` é null enquanto for o de origem. Vem de uma cópia com até 5 minutos.",
        "x-permission": "vps:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the server, the same as the `id` of its service.",
            "x-description-pt": "O `id` do servidor, o mesmo do seu serviço."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "See the reverse DNS.",
            "x-description-pt": "Ver o DNS reverso.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServersReverseDnsGetResponse"
                },
                "example": {
                  "data": {
                    "server_id": 700,
                    "records": [
                      {
                        "ip": "203.0.113.10",
                        "hostname": "mail.example.co.mz"
                      }
                    ],
                    "checked_at": "2026-11-05T09:00:00+02:00"
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      },
      "put": {
        "operationId": "servers.reverse_dns.update",
        "tags": [
          "servers"
        ],
        "summary": "Change the reverse DNS",
        "x-summary-pt": "Mudar o DNS reverso",
        "description": "Needs `vps:write`. If the list of IPs of the server cannot be read, it answers `502` and nothing changes. Only the IPs of this server, up to 64. An empty `hostname` clears it. `changed` says how many were different.",
        "x-description-pt": "Precisa de `vps:write`. Se não for possível ler a lista de IP do servidor, responde `502` e nada muda. Só os IP deste servidor, até 64. Um `hostname` vazio limpa-o. `changed` diz quantos estavam diferentes.",
        "x-permission": "vps:write",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the server, the same as the `id` of its service.",
            "x-description-pt": "O `id` do servidor, o mesmo do seu serviço."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "Change the reverse DNS.",
            "x-description-pt": "Mudar o DNS reverso.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServersReverseDnsUpdateResponse"
                },
                "example": {
                  "data": {
                    "server_id": 700,
                    "server": "web1.example.co.mz",
                    "changed": 1,
                    "simulated": false
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "records"
                ],
                "properties": {
                  "records": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "required": [
                        "ip",
                        "hostname"
                      ],
                      "properties": {
                        "ip": {
                          "type": "string"
                        },
                        "hostname": {
                          "type": "string"
                        }
                      }
                    }
                  }
                }
              },
              "example": {
                "records": [
                  {
                    "ip": "203.0.113.10",
                    "hostname": "mail.example.co.mz"
                  }
                ]
              }
            }
          }
        }
      }
    },
    "/v1/servers/{id}/timezone": {
      "get": {
        "operationId": "servers.timezone.get",
        "tags": [
          "servers"
        ],
        "summary": "See the time zone",
        "x-summary-pt": "Ver o fuso horário",
        "description": "Needs `vps:read`. The last time zone saved, and the ones you can choose. `timezone` is null if none was chosen yet.",
        "x-description-pt": "Precisa de `vps:read`. O último fuso gravado e os que pode escolher. `timezone` é null se ainda não foi escolhido.",
        "x-permission": "vps:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the server, the same as the `id` of its service.",
            "x-description-pt": "O `id` do servidor, o mesmo do seu serviço."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "See the time zone.",
            "x-description-pt": "Ver o fuso horário.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServersTimezoneGetResponse"
                },
                "example": {
                  "data": {
                    "server_id": 700,
                    "timezone": "Africa/Maputo",
                    "available": [
                      "Africa/Maputo",
                      "UTC"
                    ]
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      },
      "put": {
        "operationId": "servers.timezone.update",
        "tags": [
          "servers"
        ],
        "summary": "Change the time zone",
        "x-summary-pt": "Mudar o fuso horário",
        "description": "Needs `vps:write`. Answers `202`. The action ends after about 2 minutes, without a check on the server.",
        "x-description-pt": "Precisa de `vps:write`. Responde `202`. A acção acaba passados cerca de 2 minutos, sem confirmação no servidor.",
        "x-permission": "vps:write",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the server, the same as the `id` of its service.",
            "x-description-pt": "O `id` do servidor, o mesmo do seu serviço."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "202": {
            "description": "Change the time zone.",
            "x-description-pt": "Mudar o fuso horário.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServersTimezoneUpdateResponse"
                },
                "example": {
                  "data": {
                    "action_id": "6f1d2c3a-8b4e-4f7a-9c21-1d2e3f4a5b6c",
                    "status": "running",
                    "simulated": false,
                    "server_id": 700,
                    "server": "web1.example.co.mz",
                    "timezone": "Africa/Maputo"
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "timezone"
                ],
                "properties": {
                  "timezone": {
                    "type": "string"
                  }
                }
              },
              "example": {
                "timezone": "Africa/Maputo"
              }
            }
          }
        }
      }
    },
    "/v1/servers/{id}/reinstall": {
      "post": {
        "operationId": "servers.reinstall",
        "tags": [
          "servers"
        ],
        "summary": "Reinstall a server",
        "x-summary-pt": "Reinstalar um servidor",
        "description": "Needs `vps:reinstall`. Deletes everything on the server. Needs `Idempotency-Key`, the name of the server in `confirm`, and `backup_first`. With `backup_first` true, it first makes a backup and reinstalls by itself when the backup appears, which can take up to an hour; with 4 backups it answers `409` with `backup_limit_reached` and deletes nothing. The new root password appears only in this response and works when the reinstall ends. Up to 3 per hour, counting restores.",
        "x-description-pt": "Precisa de `vps:reinstall`. Apaga tudo o que está no servidor. Precisa de `Idempotency-Key`, do nome do servidor em `confirm` e de `backup_first`. Com `backup_first` a true, primeiro faz uma cópia e reinstala sozinho quando a cópia aparecer, o que pode demorar até uma hora; com 4 cópias responde `409` com `backup_limit_reached` e não apaga nada. A nova senha de root aparece só nesta resposta e funciona quando a reinstalação acabar. Até 3 por hora, contando os restauros.",
        "x-permission": "vps:reinstall",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the server, the same as the `id` of its service.",
            "x-description-pt": "O `id` do servidor, o mesmo do seu serviço."
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "202": {
            "description": "Reinstall a server.",
            "x-description-pt": "Reinstalar um servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServersReinstallResponse"
                },
                "example": {
                  "data": {
                    "action_id": "6f1d2c3a-8b4e-4f7a-9c21-1d2e3f4a5b6c",
                    "status": "running",
                    "simulated": false,
                    "server_id": 700,
                    "server": "web1.example.co.mz",
                    "operating_system": "ubuntu-24.04",
                    "backup_first": true,
                    "password": "pP7-kX2mQ9vL4tR8wZ3a"
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "confirm",
                  "operating_system",
                  "backup_first"
                ],
                "properties": {
                  "confirm": {
                    "type": "string",
                    "description": "The `name` of the server, to confirm.",
                    "x-description-pt": "O `name` do servidor, para confirmar."
                  },
                  "operating_system": {
                    "type": "string",
                    "description": "The `id` of the system, from the list.",
                    "x-description-pt": "O `id` do sistema, da lista."
                  },
                  "backup_first": {
                    "type": "boolean",
                    "description": "Make a backup before reinstalling.",
                    "x-description-pt": "Fazer uma cópia antes de reinstalar."
                  }
                }
              },
              "example": {
                "confirm": "web1.example.co.mz",
                "operating_system": "ubuntu-24.04",
                "backup_first": true
              }
            }
          }
        }
      }
    },
    "/v1/servers/{id}/restore": {
      "post": {
        "operationId": "servers.restore",
        "tags": [
          "servers"
        ],
        "summary": "Restore a backup",
        "x-summary-pt": "Restaurar uma cópia",
        "description": "Needs `vps:restore`. The server goes back to the state of the backup: everything changed after it is lost. Needs `Idempotency-Key` and the name of the server in `confirm`. Up to 3 per hour, counting reinstalls.",
        "x-description-pt": "Precisa de `vps:restore`. O servidor volta ao estado da cópia: tudo o que mudou depois dela perde-se. Precisa de `Idempotency-Key` e do nome do servidor em `confirm`. Até 3 por hora, contando as reinstalações.",
        "x-permission": "vps:restore",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the server, the same as the `id` of its service.",
            "x-description-pt": "O `id` do servidor, o mesmo do seu serviço."
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "202": {
            "description": "Restore a backup.",
            "x-description-pt": "Restaurar uma cópia.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServersRestoreResponse"
                },
                "example": {
                  "data": {
                    "action_id": "6f1d2c3a-8b4e-4f7a-9c21-1d2e3f4a5b6c",
                    "status": "running",
                    "simulated": false,
                    "server_id": 700,
                    "server": "web1.example.co.mz",
                    "backup": "3f9a1c7e5b2d4860"
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "confirm",
                  "backup"
                ],
                "properties": {
                  "confirm": {
                    "type": "string",
                    "description": "The `name` of the server, to confirm.",
                    "x-description-pt": "O `name` do servidor, para confirmar."
                  },
                  "backup": {
                    "type": "string",
                    "description": "The `id` of the backup, from the list.",
                    "x-description-pt": "O `id` da cópia, da lista."
                  }
                }
              },
              "example": {
                "confirm": "web1.example.co.mz",
                "backup": "3f9a1c7e5b2d4860"
              }
            }
          }
        }
      }
    },
    "/v1/services/{id}/usage": {
      "get": {
        "operationId": "hosting.usage.get",
        "tags": [
          "hosting"
        ],
        "summary": "See disk, traffic and resource usage",
        "x-summary-pt": "Ver o uso de disco, tráfego e recursos",
        "description": "Needs `hosting:read`. Disk and traffic in bytes. `limit_bytes` is `null` when there is no limit. The items in `resources` depend on the server. If the service is not active, or is not a supported hosting account, it answers `409` with the reason in `details.reason`.",
        "x-description-pt": "Precisa de `hosting:read`. Disco e tráfego em bytes. `limit_bytes` vem a `null` quando não há limite. Os itens de `resources` dependem do servidor. Se o serviço não estiver activo, ou não for uma hospedagem suportada, responde `409` com a razão em `details.reason`.",
        "x-permission": "hosting:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the hosting service.",
            "x-description-pt": "O `id` do serviço de hospedagem."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "See disk, traffic and resource usage.",
            "x-description-pt": "Ver o uso de disco, tráfego e recursos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HostingUsageGetResponse"
                },
                "example": {
                  "data": {
                    "disk": {
                      "used_bytes": 1048576,
                      "limit_bytes": 10737418240
                    },
                    "bandwidth": {
                      "used_bytes": 5242880,
                      "limit_bytes": null
                    },
                    "resources": [
                      {
                        "id": "email_accounts",
                        "used": 2,
                        "limit": null
                      }
                    ]
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/services/{id}/cpanel-login": {
      "post": {
        "operationId": "hosting.login.create",
        "tags": [
          "hosting"
        ],
        "summary": "Create a direct login link",
        "x-summary-pt": "Criar uma ligação de entrada directa",
        "description": "Needs `hosting:login`. The link works once and gives full access to the panel of this account, so keep it private. It is never stored, so `Idempotency-Key` is not kept here: each call creates a new link. Limit: 5 per minute. With a `sandbox_` key it only checks the request and changes nothing.",
        "x-description-pt": "Precisa de `hosting:login`. A ligação só serve uma vez e dá acesso total ao painel desta conta, por isso não a partilhe. A API não a guarda, por isso aqui a `Idempotency-Key` não tem efeito: repetir o pedido volta a executá-lo: cada pedido cria uma ligação nova. Limite: 5 por minuto. Com uma chave `sandbox_`, só confere o pedido e não altera nada.",
        "x-permission": "hosting:login",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the hosting service.",
            "x-description-pt": "O `id` do serviço de hospedagem."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "201": {
            "description": "Create a direct login link.",
            "x-description-pt": "Criar uma ligação de entrada directa.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HostingLoginCreateResponse"
                },
                "example": {
                  "data": {
                    "url": "https://srv.example.com:2083/cpsess0000000000/login/?session=exemplo",
                    "single_use": true,
                    "simulated": false
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/services/{id}/subdomains": {
      "get": {
        "operationId": "hosting.subdomains.list",
        "tags": [
          "hosting"
        ],
        "summary": "List subdomains",
        "x-summary-pt": "Listar subdomínios",
        "description": "Needs `hosting:read`. Each one with its folder, relative to the account folder. If the service is not active, or is not a supported hosting account, it answers `409` with the reason in `details.reason`.",
        "x-description-pt": "Precisa de `hosting:read`. Cada um com a sua pasta, relativa à pasta da conta. Se o serviço não estiver activo, ou não for uma hospedagem suportada, responde `409` com a razão em `details.reason`.",
        "x-permission": "hosting:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the hosting service.",
            "x-description-pt": "O `id` do serviço de hospedagem."
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "List subdomains.",
            "x-description-pt": "Listar subdomínios.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HostingSubdomainsListResponse"
                },
                "example": {
                  "data": [
                    {
                      "domain": "blog.example.co.mz",
                      "root_domain": "example.co.mz",
                      "directory": "public_html/blog"
                    }
                  ],
                  "meta": {
                    "page": 1,
                    "per_page": 10,
                    "total": 1,
                    "total_pages": 1
                  }
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      },
      "post": {
        "operationId": "hosting.subdomains.create",
        "tags": [
          "hosting"
        ],
        "summary": "Create a subdomain",
        "x-summary-pt": "Criar um subdomínio",
        "description": "Needs `hosting:write`. The `root_domain` must be active in your account: registered with us (or a subdomain of one that is), or the domain of an active hosting service, otherwise it answers `409` with `domain_not_owned`. A domain registered elsewhere is added in cPanel. The `root_domain` must be a domain of this hosting account. With a `sandbox_` key it only checks the request and changes nothing.",
        "x-description-pt": "Precisa de `hosting:write`. O `root_domain` tem de estar activo na sua conta: registado connosco (ou subdomínio de um que esteja), ou ser o de uma hospedagem activa; caso contrário responde `409` com `domain_not_owned`. Um domínio registado noutro lado junta-se no cPanel. O `root_domain` tem de ser um domínio desta hospedagem. Com uma chave `sandbox_`, só confere o pedido e não altera nada.",
        "x-permission": "hosting:write",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the hosting service.",
            "x-description-pt": "O `id` do serviço de hospedagem."
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "201": {
            "description": "Create a subdomain.",
            "x-description-pt": "Criar um subdomínio.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HostingSubdomainsCreateResponse"
                },
                "example": {
                  "data": {
                    "domain": "blog.example.co.mz",
                    "root_domain": "example.co.mz",
                    "directory": "public_html/blog",
                    "simulated": false
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "root_domain": {
                    "description": "A domain of this hosting account.",
                    "x-description-pt": "Um domínio desta hospedagem.",
                    "type": "string"
                  },
                  "name": {
                    "description": "The name before the domain.",
                    "x-description-pt": "O nome antes do domínio.",
                    "type": "string"
                  },
                  "directory": {
                    "description": "Folder relative to the account folder, without `..` and outside system folders.",
                    "x-description-pt": "Pasta relativa à pasta da conta, sem `..` e fora das pastas de sistema.",
                    "type": "string"
                  }
                },
                "required": [
                  "root_domain",
                  "name"
                ]
              },
              "example": {
                "root_domain": "example.co.mz",
                "name": "blog",
                "directory": "public_html/blog"
              }
            }
          }
        }
      }
    },
    "/v1/services/{id}/subdomains/{domain}": {
      "delete": {
        "operationId": "hosting.subdomains.delete",
        "tags": [
          "hosting"
        ],
        "summary": "Delete a subdomain",
        "x-summary-pt": "Apagar um subdomínio",
        "description": "Needs `hosting:write`. Needs the name in `confirm`. The files stay in the folder. With a `sandbox_` key it only checks the request and changes nothing.",
        "x-description-pt": "Precisa de `hosting:write`. Precisa do nome em `confirm`. Os ficheiros ficam na pasta. Com uma chave `sandbox_`, só confere o pedido e não altera nada.",
        "x-permission": "hosting:write",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the hosting service.",
            "x-description-pt": "O `id` do serviço de hospedagem."
          },
          {
            "name": "domain",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The full name of the domain.",
            "x-description-pt": "O nome completo do domínio."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "Delete a subdomain.",
            "x-description-pt": "Apagar um subdomínio.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HostingSubdomainsDeleteResponse"
                },
                "example": {
                  "data": {
                    "domain": "blog.example.co.mz",
                    "deleted": true,
                    "simulated": false
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "confirm": {
                    "description": "The exact name of what you are deleting, to confirm.",
                    "x-description-pt": "O nome exacto do que vai apagar, para confirmar.",
                    "type": "string"
                  }
                },
                "required": [
                  "confirm"
                ]
              },
              "example": {
                "confirm": "blog.example.co.mz"
              }
            }
          }
        }
      }
    },
    "/v1/services/{id}/addon-domains": {
      "get": {
        "operationId": "hosting.addon_domains.list",
        "tags": [
          "hosting"
        ],
        "summary": "List addon domains",
        "x-summary-pt": "Listar domínios adicionais",
        "description": "Needs `hosting:read`. The domains with their own site in this account. If the service is not active, or is not a supported hosting account, it answers `409` with the reason in `details.reason`.",
        "x-description-pt": "Precisa de `hosting:read`. Os domínios com site próprio nesta conta. Se o serviço não estiver activo, ou não for uma hospedagem suportada, responde `409` com a razão em `details.reason`.",
        "x-permission": "hosting:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the hosting service.",
            "x-description-pt": "O `id` do serviço de hospedagem."
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "List addon domains.",
            "x-description-pt": "Listar domínios adicionais.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HostingAddonDomainsListResponse"
                },
                "example": {
                  "data": [
                    {
                      "domain": "outro.co.mz",
                      "directory": "public_html/outro.co.mz"
                    }
                  ],
                  "meta": {
                    "page": 1,
                    "per_page": 10,
                    "total": 1,
                    "total_pages": 1
                  }
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      },
      "post": {
        "operationId": "hosting.addon_domains.create",
        "tags": [
          "hosting"
        ],
        "summary": "Add an addon domain",
        "x-summary-pt": "Adicionar um domínio adicional",
        "description": "Needs `hosting:write`. The domain must be active in your account: registered with us (or a subdomain of one that is), or the domain of an active hosting service, otherwise it answers `409` with `domain_not_owned`. A domain registered elsewhere is added in cPanel. Counts towards the limit of sites of the plan. The domain must point to our nameservers. With a `sandbox_` key it only checks the request and changes nothing.",
        "x-description-pt": "Precisa de `hosting:write`. O domínio tem de estar activo na sua conta: registado connosco (ou subdomínio de um que esteja), ou ser o de uma hospedagem activa; caso contrário responde `409` com `domain_not_owned`. Um domínio registado noutro lado junta-se no cPanel. Conta para o limite de sites do plano. O domínio tem de apontar para os nossos nameservers. Com uma chave `sandbox_`, só confere o pedido e não altera nada.",
        "x-permission": "hosting:write",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the hosting service.",
            "x-description-pt": "O `id` do serviço de hospedagem."
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "201": {
            "description": "Add an addon domain.",
            "x-description-pt": "Adicionar um domínio adicional.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HostingAddonDomainsCreateResponse"
                },
                "example": {
                  "data": {
                    "domain": "outro.co.mz",
                    "directory": "public_html/outro.co.mz",
                    "simulated": false
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "domain": {
                    "description": "The domain to add.",
                    "x-description-pt": "O domínio a adicionar.",
                    "type": "string"
                  },
                  "directory": {
                    "description": "Folder relative to the account folder, without `..` and outside system folders.",
                    "x-description-pt": "Pasta relativa à pasta da conta, sem `..` e fora das pastas de sistema.",
                    "type": "string"
                  }
                },
                "required": [
                  "domain"
                ]
              },
              "example": {
                "domain": "outro.co.mz"
              }
            }
          }
        }
      }
    },
    "/v1/services/{id}/addon-domains/{domain}": {
      "delete": {
        "operationId": "hosting.addon_domains.delete",
        "tags": [
          "hosting"
        ],
        "summary": "Remove an addon domain",
        "x-summary-pt": "Retirar um domínio adicional",
        "description": "Needs `hosting:write`. Needs the name in `confirm`. The files stay in the folder. With a `sandbox_` key it only checks the request and changes nothing.",
        "x-description-pt": "Precisa de `hosting:write`. Precisa do nome em `confirm`. Os ficheiros ficam na pasta. Com uma chave `sandbox_`, só confere o pedido e não altera nada.",
        "x-permission": "hosting:write",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the hosting service.",
            "x-description-pt": "O `id` do serviço de hospedagem."
          },
          {
            "name": "domain",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The full name of the domain.",
            "x-description-pt": "O nome completo do domínio."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "Remove an addon domain.",
            "x-description-pt": "Retirar um domínio adicional.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HostingAddonDomainsDeleteResponse"
                },
                "example": {
                  "data": {
                    "domain": "outro.co.mz",
                    "deleted": true,
                    "simulated": false
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "confirm": {
                    "description": "The exact name of what you are deleting, to confirm.",
                    "x-description-pt": "O nome exacto do que vai apagar, para confirmar.",
                    "type": "string"
                  }
                },
                "required": [
                  "confirm"
                ]
              },
              "example": {
                "confirm": "outro.co.mz"
              }
            }
          }
        }
      }
    },
    "/v1/services/{id}/redirects": {
      "get": {
        "operationId": "hosting.redirects.list",
        "tags": [
          "hosting"
        ],
        "summary": "List redirects",
        "x-summary-pt": "Listar redireccionamentos",
        "description": "Needs `hosting:read`. A `domain` of `all` applies to every domain of the account. If the service is not active, or is not a supported hosting account, it answers `409` with the reason in `details.reason`.",
        "x-description-pt": "Precisa de `hosting:read`. Um `domain` igual a `all` vale para todos os domínios da conta. Se o serviço não estiver activo, ou não for uma hospedagem suportada, responde `409` com a razão em `details.reason`.",
        "x-permission": "hosting:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the hosting service.",
            "x-description-pt": "O `id` do serviço de hospedagem."
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "List redirects.",
            "x-description-pt": "Listar redireccionamentos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HostingRedirectsListResponse"
                },
                "example": {
                  "data": [
                    {
                      "id": "3f2a9c1b7d4e8f60",
                      "domain": "example.co.mz",
                      "source": "/antigo",
                      "destination": "https://www.example.co.mz/novo",
                      "type": "permanent",
                      "wildcard": false
                    }
                  ],
                  "meta": {
                    "page": 1,
                    "per_page": 10,
                    "total": 1,
                    "total_pages": 1
                  }
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      },
      "post": {
        "operationId": "hosting.redirects.create",
        "tags": [
          "hosting"
        ],
        "summary": "Create a redirect",
        "x-summary-pt": "Criar um redireccionamento",
        "description": "Needs `hosting:write`. The `destination` starts with `http://` or `https://` and cannot have spaces, quotes or `%`. With a `sandbox_` key it only checks the request and changes nothing.",
        "x-description-pt": "Precisa de `hosting:write`. O `destination` começa por `http://` ou `https://` e não pode ter espaços, aspas nem `%`. Com uma chave `sandbox_`, só confere o pedido e não altera nada.",
        "x-permission": "hosting:write",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the hosting service.",
            "x-description-pt": "O `id` do serviço de hospedagem."
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "201": {
            "description": "Create a redirect.",
            "x-description-pt": "Criar um redireccionamento.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HostingRedirectsCreateResponse"
                },
                "example": {
                  "data": {
                    "id": "3f2a9c1b7d4e8f60",
                    "domain": "example.co.mz",
                    "source": "/antigo",
                    "destination": "https://www.example.co.mz/novo",
                    "type": "permanent",
                    "wildcard": false,
                    "simulated": false
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "domain": {
                    "description": "A domain of this hosting account.",
                    "x-description-pt": "Um domínio desta hospedagem.",
                    "type": "string"
                  },
                  "source": {
                    "description": "Path starting with `/`. If omitted, `/`.",
                    "x-description-pt": "Caminho a começar por `/`. Sem ele, `/`.",
                    "type": "string"
                  },
                  "destination": {
                    "description": "Where it goes.",
                    "x-description-pt": "Para onde vai.",
                    "type": "string"
                  },
                  "type": {
                    "description": "`permanent` or `temporary`.",
                    "x-description-pt": "`permanent` ou `temporary`.",
                    "type": "string"
                  },
                  "wildcard": {
                    "description": "Keeps the rest of the path.",
                    "x-description-pt": "Mantém o resto do caminho.",
                    "type": "boolean"
                  }
                },
                "required": [
                  "domain",
                  "destination"
                ]
              },
              "example": {
                "domain": "example.co.mz",
                "source": "/antigo",
                "destination": "https://www.example.co.mz/novo"
              }
            }
          }
        }
      }
    },
    "/v1/services/{id}/redirects/{redirect_id}": {
      "delete": {
        "operationId": "hosting.redirects.delete",
        "tags": [
          "hosting"
        ],
        "summary": "Delete a redirect",
        "x-summary-pt": "Apagar um redireccionamento",
        "description": "Needs `hosting:write`. Use the `id` from the list. With a `sandbox_` key it only checks the request and changes nothing.",
        "x-description-pt": "Precisa de `hosting:write`. Use o `id` da lista. Com uma chave `sandbox_`, só confere o pedido e não altera nada.",
        "x-permission": "hosting:write",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the hosting service.",
            "x-description-pt": "O `id` do serviço de hospedagem."
          },
          {
            "name": "redirect_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` from the list.",
            "x-description-pt": "O `id` da lista."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "Delete a redirect.",
            "x-description-pt": "Apagar um redireccionamento.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HostingRedirectsDeleteResponse"
                },
                "example": {
                  "data": {
                    "id": "3f2a9c1b7d4e8f60",
                    "deleted": true,
                    "simulated": false
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/services/{id}/databases": {
      "get": {
        "operationId": "hosting.databases.list",
        "tags": [
          "hosting"
        ],
        "summary": "List databases",
        "x-summary-pt": "Listar bases de dados",
        "description": "Needs `hosting:read`. Each one with its size and users. If the service is not active, or is not a supported hosting account, it answers `409` with the reason in `details.reason`.",
        "x-description-pt": "Precisa de `hosting:read`. Cada uma com o tamanho e os utilizadores. Se o serviço não estiver activo, ou não for uma hospedagem suportada, responde `409` com a razão em `details.reason`.",
        "x-permission": "hosting:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the hosting service.",
            "x-description-pt": "O `id` do serviço de hospedagem."
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "List databases.",
            "x-description-pt": "Listar bases de dados.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HostingDatabasesListResponse"
                },
                "example": {
                  "data": [
                    {
                      "name": "conta_site",
                      "disk_usage_bytes": 1048576,
                      "users": [
                        "conta_site"
                      ]
                    }
                  ],
                  "meta": {
                    "page": 1,
                    "per_page": 10,
                    "total": 1,
                    "total_pages": 1
                  }
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      },
      "post": {
        "operationId": "hosting.databases.create",
        "tags": [
          "hosting"
        ],
        "summary": "Create a database",
        "x-summary-pt": "Criar uma base de dados",
        "description": "Needs `hosting:write`. The answer gives the final name, with the prefix. With a `sandbox_` key it only checks the request and changes nothing.",
        "x-description-pt": "Precisa de `hosting:write`. A resposta traz o nome final, com o prefixo. Com uma chave `sandbox_`, só confere o pedido e não altera nada.",
        "x-permission": "hosting:write",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the hosting service.",
            "x-description-pt": "O `id` do serviço de hospedagem."
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "201": {
            "description": "Create a database.",
            "x-description-pt": "Criar uma base de dados.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HostingDatabasesCreateResponse"
                },
                "example": {
                  "data": {
                    "name": "conta_site",
                    "simulated": false
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "description": "Lowercase letters, digits and `_`. The account prefix is added if missing.",
                    "x-description-pt": "Letras minúsculas, números e `_`. O prefixo da conta junta-se se faltar.",
                    "type": "string"
                  }
                },
                "required": [
                  "name"
                ]
              },
              "example": {
                "name": "site"
              }
            }
          }
        }
      }
    },
    "/v1/services/{id}/databases/{name}": {
      "delete": {
        "operationId": "hosting.databases.delete",
        "tags": [
          "hosting"
        ],
        "summary": "Delete a database",
        "x-summary-pt": "Apagar uma base de dados",
        "description": "Needs `hosting:write`. Needs the name in `confirm`. The data is lost. With a `sandbox_` key it only checks the request and changes nothing.",
        "x-description-pt": "Precisa de `hosting:write`. Precisa do nome em `confirm`. Os dados perdem-se. Com uma chave `sandbox_`, só confere o pedido e não altera nada.",
        "x-permission": "hosting:write",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the hosting service.",
            "x-description-pt": "O `id` do serviço de hospedagem."
          },
          {
            "name": "name",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The full name, with the account prefix.",
            "x-description-pt": "O nome completo, com o prefixo da conta."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "Delete a database.",
            "x-description-pt": "Apagar uma base de dados.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HostingDatabasesDeleteResponse"
                },
                "example": {
                  "data": {
                    "name": "conta_site",
                    "deleted": true,
                    "simulated": false
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "confirm": {
                    "description": "The exact name of what you are deleting, to confirm.",
                    "x-description-pt": "O nome exacto do que vai apagar, para confirmar.",
                    "type": "string"
                  }
                },
                "required": [
                  "confirm"
                ]
              },
              "example": {
                "confirm": "conta_site"
              }
            }
          }
        }
      }
    },
    "/v1/services/{id}/database-users": {
      "get": {
        "operationId": "hosting.database_users.list",
        "tags": [
          "hosting"
        ],
        "summary": "List database users",
        "x-summary-pt": "Listar utilizadores de bases de dados",
        "description": "Needs `hosting:read`. Each one with the databases it can reach. If the service is not active, or is not a supported hosting account, it answers `409` with the reason in `details.reason`.",
        "x-description-pt": "Precisa de `hosting:read`. Cada um com as bases a que tem acesso. Se o serviço não estiver activo, ou não for uma hospedagem suportada, responde `409` com a razão em `details.reason`.",
        "x-permission": "hosting:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the hosting service.",
            "x-description-pt": "O `id` do serviço de hospedagem."
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "List database users.",
            "x-description-pt": "Listar utilizadores de bases de dados.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HostingDatabaseUsersListResponse"
                },
                "example": {
                  "data": [
                    {
                      "name": "conta_site",
                      "databases": [
                        "conta_site"
                      ]
                    }
                  ],
                  "meta": {
                    "page": 1,
                    "per_page": 10,
                    "total": 1,
                    "total_pages": 1
                  }
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      },
      "post": {
        "operationId": "hosting.database_users.create",
        "tags": [
          "hosting"
        ],
        "summary": "Create a database user",
        "x-summary-pt": "Criar um utilizador de bases de dados",
        "description": "Needs `hosting:write`. The password is never stored by the API, so `Idempotency-Key` is not kept here. With a `sandbox_` key it only checks the request and changes nothing.",
        "x-description-pt": "Precisa de `hosting:write`. A API nunca guarda a senha, por isso aqui a `Idempotency-Key` não tem efeito: repetir o pedido volta a executá-lo. Com uma chave `sandbox_`, só confere o pedido e não altera nada.",
        "x-permission": "hosting:write",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the hosting service.",
            "x-description-pt": "O `id` do serviço de hospedagem."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "201": {
            "description": "Create a database user.",
            "x-description-pt": "Criar um utilizador de bases de dados.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HostingDatabaseUsersCreateResponse"
                },
                "example": {
                  "data": {
                    "name": "conta_site",
                    "simulated": false
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "description": "Lowercase letters, digits and `_`. The account prefix is added if missing.",
                    "x-description-pt": "Letras minúsculas, números e `_`. O prefixo da conta junta-se se faltar.",
                    "type": "string"
                  },
                  "password": {
                    "description": "12 to 128 characters, with at least 3 kinds among lowercase, uppercase, digits and symbols, without the account name. It never comes back.",
                    "x-description-pt": "De 12 a 128 caracteres, com pelo menos 3 tipos entre minúsculas, maiúsculas, números e símbolos, sem o nome da conta, nem o do utilizador ou da caixa. Nunca volta.",
                    "type": "string"
                  }
                },
                "required": [
                  "name",
                  "password"
                ]
              },
              "example": {
                "name": "site",
                "password": "pP7-kX2mQ9vL4tR8wZ3a"
              }
            }
          }
        }
      }
    },
    "/v1/services/{id}/database-users/{name}/password": {
      "put": {
        "operationId": "hosting.database_users.password",
        "tags": [
          "hosting"
        ],
        "summary": "Change a database user password",
        "x-summary-pt": "Mudar a senha de um utilizador de bases de dados",
        "description": "Needs `hosting:write`. The password never comes back. With a `sandbox_` key it only checks the request and changes nothing.",
        "x-description-pt": "Precisa de `hosting:write`. A senha nunca volta. Com uma chave `sandbox_`, só confere o pedido e não altera nada.",
        "x-permission": "hosting:write",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the hosting service.",
            "x-description-pt": "O `id` do serviço de hospedagem."
          },
          {
            "name": "name",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The full name, with the account prefix.",
            "x-description-pt": "O nome completo, com o prefixo da conta."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "Change a database user password.",
            "x-description-pt": "Mudar a senha de um utilizador de bases de dados.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HostingDatabaseUsersPasswordResponse"
                },
                "example": {
                  "data": {
                    "name": "conta_site",
                    "password_changed": true,
                    "simulated": false
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "password": {
                    "description": "12 to 128 characters, with at least 3 kinds among lowercase, uppercase, digits and symbols, without the account name. It never comes back.",
                    "x-description-pt": "De 12 a 128 caracteres, com pelo menos 3 tipos entre minúsculas, maiúsculas, números e símbolos, sem o nome da conta, nem o do utilizador ou da caixa. Nunca volta.",
                    "type": "string"
                  }
                },
                "required": [
                  "password"
                ]
              },
              "example": {
                "password": "pP7-kX2mQ9vL4tR8wZ3a"
              }
            }
          }
        }
      }
    },
    "/v1/services/{id}/database-users/{name}": {
      "delete": {
        "operationId": "hosting.database_users.delete",
        "tags": [
          "hosting"
        ],
        "summary": "Delete a database user",
        "x-summary-pt": "Apagar um utilizador de bases de dados",
        "description": "Needs `hosting:write`. Needs the name in `confirm`. With a `sandbox_` key it only checks the request and changes nothing.",
        "x-description-pt": "Precisa de `hosting:write`. Precisa do nome em `confirm`. Com uma chave `sandbox_`, só confere o pedido e não altera nada.",
        "x-permission": "hosting:write",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the hosting service.",
            "x-description-pt": "O `id` do serviço de hospedagem."
          },
          {
            "name": "name",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The full name, with the account prefix.",
            "x-description-pt": "O nome completo, com o prefixo da conta."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "Delete a database user.",
            "x-description-pt": "Apagar um utilizador de bases de dados.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HostingDatabaseUsersDeleteResponse"
                },
                "example": {
                  "data": {
                    "name": "conta_site",
                    "deleted": true,
                    "simulated": false
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "confirm": {
                    "description": "The exact name of what you are deleting, to confirm.",
                    "x-description-pt": "O nome exacto do que vai apagar, para confirmar.",
                    "type": "string"
                  }
                },
                "required": [
                  "confirm"
                ]
              },
              "example": {
                "confirm": "conta_site"
              }
            }
          }
        }
      }
    },
    "/v1/services/{id}/databases/{name}/users/{user}": {
      "put": {
        "operationId": "hosting.databases.grant",
        "tags": [
          "hosting"
        ],
        "summary": "Give a user access to a database",
        "x-summary-pt": "Dar a um utilizador acesso a uma base",
        "description": "Needs `hosting:write`. Use `ALL`, or a list such as `SELECT` and `INSERT`. With a `sandbox_` key it only checks the request and changes nothing.",
        "x-description-pt": "Precisa de `hosting:write`. Use `ALL`, ou uma lista como `SELECT` e `INSERT`. Com uma chave `sandbox_`, só confere o pedido e não altera nada.",
        "x-permission": "hosting:write",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the hosting service.",
            "x-description-pt": "O `id` do serviço de hospedagem."
          },
          {
            "name": "name",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The full name, with the account prefix.",
            "x-description-pt": "O nome completo, com o prefixo da conta."
          },
          {
            "name": "user",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The full name of the user, with the account prefix.",
            "x-description-pt": "O nome completo do utilizador, com o prefixo da conta."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "Give a user access to a database.",
            "x-description-pt": "Dar a um utilizador acesso a uma base.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HostingDatabasesGrantResponse"
                },
                "example": {
                  "data": {
                    "database": "conta_site",
                    "user": "conta_site",
                    "privileges": [
                      "ALL"
                    ],
                    "simulated": false
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "privileges": {
                    "description": "If omitted, `ALL`.",
                    "x-description-pt": "Sem ele, `ALL`.",
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                }
              },
              "example": {
                "privileges": [
                  "ALL"
                ]
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "hosting.databases.revoke",
        "tags": [
          "hosting"
        ],
        "summary": "Remove a user access to a database",
        "x-summary-pt": "Retirar o acesso de um utilizador a uma base",
        "description": "Needs `hosting:write`. The user and the database stay. With a `sandbox_` key it only checks the request and changes nothing.",
        "x-description-pt": "Precisa de `hosting:write`. O utilizador e a base ficam. Com uma chave `sandbox_`, só confere o pedido e não altera nada.",
        "x-permission": "hosting:write",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the hosting service.",
            "x-description-pt": "O `id` do serviço de hospedagem."
          },
          {
            "name": "name",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The full name, with the account prefix.",
            "x-description-pt": "O nome completo, com o prefixo da conta."
          },
          {
            "name": "user",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The full name of the user, with the account prefix.",
            "x-description-pt": "O nome completo do utilizador, com o prefixo da conta."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "Remove a user access to a database.",
            "x-description-pt": "Retirar o acesso de um utilizador a uma base.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HostingDatabasesRevokeResponse"
                },
                "example": {
                  "data": {
                    "database": "conta_site",
                    "user": "conta_site",
                    "revoked": true,
                    "simulated": false
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/services/{id}/cron": {
      "get": {
        "operationId": "hosting.cron.list",
        "tags": [
          "hosting"
        ],
        "summary": "List cron jobs",
        "x-summary-pt": "Listar tarefas cron",
        "description": "Needs `hosting:read`. Includes the jobs created in the panel. If the service is not active, or is not a supported hosting account, it answers `409` with the reason in `details.reason`. `command` can contain passwords: it is only filled in with `hosting:code`; without it, it is `null` and `command_hidden` is `true`.",
        "x-description-pt": "Precisa de `hosting:read`. Inclui as tarefas criadas no painel. Se o serviço não estiver activo, ou não for uma hospedagem suportada, responde `409` com a razão em `details.reason`. `command` pode ter senhas: só vem preenchido com `hosting:code`; sem ela, vem a `null` e `command_hidden` a `true`.",
        "x-permission": "hosting:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the hosting service.",
            "x-description-pt": "O `id` do serviço de hospedagem."
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "List cron jobs.",
            "x-description-pt": "Listar tarefas cron.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HostingCronListResponse"
                },
                "example": {
                  "data": [
                    {
                      "id": "a1b2c3d4",
                      "schedule": "*/15 * * * *",
                      "command": null,
                      "command_hidden": true
                    }
                  ],
                  "meta": {
                    "page": 1,
                    "per_page": 10,
                    "total": 1,
                    "total_pages": 1
                  }
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      },
      "post": {
        "operationId": "hosting.cron.create",
        "tags": [
          "hosting"
        ],
        "summary": "Create a cron job",
        "x-summary-pt": "Criar uma tarefa cron",
        "description": "Needs `hosting:code`. A cron job runs code on the account, so this permission is separate from `hosting:write` and off by default. In `url`, only public domain names that resolve to public addresses are accepted. Free commands are not accepted: give either `php_script`, a PHP file of the account, or `url`, a public address that is called. The minimum interval is 5 minutes and each account has up to 20 jobs. With a `sandbox_` key it only checks the request and changes nothing.",
        "x-description-pt": "Precisa de `hosting:code`. Uma tarefa cron corre código na conta, por isso esta permissão é separada de `hosting:write` e fica desligada por omissão. Em `url`, só se aceitam nomes de domínio públicos, que resolvam para endereços públicos. Não se aceitam comandos livres: indique `php_script`, um ficheiro PHP da conta, ou `url`, um endereço público que é chamado. O intervalo mínimo é de 5 minutos e cada conta tem até 20 tarefas. Com uma chave `sandbox_`, só confere o pedido e não altera nada.",
        "x-permission": "hosting:code",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the hosting service.",
            "x-description-pt": "O `id` do serviço de hospedagem."
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "201": {
            "description": "Create a cron job.",
            "x-description-pt": "Criar uma tarefa cron.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HostingCronCreateResponse"
                },
                "example": {
                  "data": {
                    "id": "a1b2c3d4",
                    "schedule": "*/15 * * * *",
                    "command": "/usr/local/bin/php -q public_html/cron.php >/dev/null 2>&1",
                    "simulated": false
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "schedule": {
                    "description": "Five fields, with digits and `*`, `,`, `/`, `-`.",
                    "x-description-pt": "Cinco campos, com números e `*`, `,`, `/`, `-`.",
                    "type": "string"
                  },
                  "php_script": {
                    "description": "A PHP file, relative to the account folder.",
                    "x-description-pt": "Um ficheiro PHP, relativo à pasta da conta.",
                    "type": "string"
                  },
                  "url": {
                    "description": "A public `http://` or `https://` address, without `%`.",
                    "x-description-pt": "Um endereço público `http://` ou `https://`, sem `%`.",
                    "type": "string"
                  },
                  "args": {
                    "description": "Up to 8 values for the script.",
                    "x-description-pt": "Até 8 valores para o script.",
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                },
                "required": [
                  "schedule"
                ]
              },
              "example": {
                "schedule": "*/15 * * * *",
                "php_script": "public_html/cron.php"
              }
            }
          }
        }
      }
    },
    "/v1/services/{id}/cron/{cron_id}": {
      "delete": {
        "operationId": "hosting.cron.delete",
        "tags": [
          "hosting"
        ],
        "summary": "Delete a cron job",
        "x-summary-pt": "Apagar uma tarefa cron",
        "description": "Needs `hosting:write`. Use the `id` from the list. With a `sandbox_` key it only checks the request and changes nothing.",
        "x-description-pt": "Precisa de `hosting:write`. Use o `id` da lista. Com uma chave `sandbox_`, só confere o pedido e não altera nada.",
        "x-permission": "hosting:write",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the hosting service.",
            "x-description-pt": "O `id` do serviço de hospedagem."
          },
          {
            "name": "cron_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` from the list.",
            "x-description-pt": "O `id` da lista."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "Delete a cron job.",
            "x-description-pt": "Apagar uma tarefa cron.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HostingCronDeleteResponse"
                },
                "example": {
                  "data": {
                    "id": "a1b2c3d4",
                    "deleted": true,
                    "simulated": false
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/services/{id}/ssl": {
      "get": {
        "operationId": "hosting.ssl.get",
        "tags": [
          "hosting"
        ],
        "summary": "See the SSL certificates",
        "x-summary-pt": "Ver os certificados SSL",
        "description": "Needs `hosting:read`. The certificate of each site and its expiry date. `meta.autossl_running` says if a free certificate is being requested. If the service is not active, or is not a supported hosting account, it answers `409` with the reason in `details.reason`.",
        "x-description-pt": "Precisa de `hosting:read`. O certificado de cada site e a data de fim. `meta.autossl_running` diz se está a ser pedido um certificado gratuito. Se o serviço não estiver activo, ou não for uma hospedagem suportada, responde `409` com a razão em `details.reason`.",
        "x-permission": "hosting:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the hosting service.",
            "x-description-pt": "O `id` do serviço de hospedagem."
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "See the SSL certificates.",
            "x-description-pt": "Ver os certificados SSL.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HostingSslGetResponse"
                },
                "example": {
                  "data": [
                    {
                      "domain": "example.co.mz",
                      "domains": [
                        "example.co.mz",
                        "www.example.co.mz"
                      ],
                      "expires_at": "2027-02-01T10:00:00+02:00",
                      "self_signed": false,
                      "validation_type": "dv"
                    }
                  ],
                  "meta": {
                    "page": 1,
                    "per_page": 10,
                    "total": 1,
                    "total_pages": 1,
                    "autossl_running": false
                  }
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/services/{id}/ssl/autossl": {
      "post": {
        "operationId": "hosting.ssl.autossl",
        "tags": [
          "hosting"
        ],
        "summary": "Request free certificates",
        "x-summary-pt": "Pedir certificados gratuitos",
        "description": "Needs `hosting:write`. It only works for domains that point to our servers. Limit: once every 15 minutes per account. With a `sandbox_` key it only checks the request and changes nothing.",
        "x-description-pt": "Precisa de `hosting:write`. Só resulta nos domínios que apontam para os nossos servidores. Limite: uma vez a cada 15 minutos por hospedagem. Com uma chave `sandbox_`, só confere o pedido e não altera nada.",
        "x-permission": "hosting:write",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the hosting service.",
            "x-description-pt": "O `id` do serviço de hospedagem."
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "202": {
            "description": "Request free certificates.",
            "x-description-pt": "Pedir certificados gratuitos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HostingSslAutosslResponse"
                },
                "example": {
                  "data": {
                    "requested": true,
                    "action_id": "6f1d2c3a-8b4e-4f7a-9c21-1d2e3f4a5b6c",
                    "simulated": false
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/services/{id}/php": {
      "get": {
        "operationId": "hosting.php.get",
        "tags": [
          "hosting"
        ],
        "summary": "See the PHP version of each site",
        "x-summary-pt": "Ver a versão do PHP de cada site",
        "description": "Needs `hosting:read`. The version of each domain, or `inherit`. To change the version, use the panel. If the service is not active, or is not a supported hosting account, it answers `409` with the reason in `details.reason`.",
        "x-description-pt": "Precisa de `hosting:read`. A versão de cada domínio, ou `inherit`. Para mudar a versão, use o painel. Se o serviço não estiver activo, ou não for uma hospedagem suportada, responde `409` com a razão em `details.reason`.",
        "x-permission": "hosting:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the hosting service.",
            "x-description-pt": "O `id` do serviço de hospedagem."
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "See the PHP version of each site.",
            "x-description-pt": "Ver a versão do PHP de cada site.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HostingPhpGetResponse"
                },
                "example": {
                  "data": [
                    {
                      "domain": "example.co.mz",
                      "version": "8.2"
                    }
                  ],
                  "meta": {
                    "page": 1,
                    "per_page": 10,
                    "total": 1,
                    "total_pages": 1,
                    "available_versions": [
                      "7.4",
                      "8.2"
                    ]
                  }
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/services/{id}/php/options": {
      "get": {
        "operationId": "hosting.php.options",
        "tags": [
          "hosting"
        ],
        "summary": "See the PHP options",
        "x-summary-pt": "Ver as opções do PHP",
        "description": "Needs `hosting:read`. Only the options that can be changed through the API. If the service is not active, or is not a supported hosting account, it answers `409` with the reason in `details.reason`.",
        "x-description-pt": "Precisa de `hosting:read`. Só as opções que se podem alterar pela API. Se o serviço não estiver activo, ou não for uma hospedagem suportada, responde `409` com a razão em `details.reason`.",
        "x-permission": "hosting:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the hosting service.",
            "x-description-pt": "O `id` do serviço de hospedagem."
          },
          {
            "name": "domain",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "A domain of this hosting account. If omitted, the main domain.",
            "x-description-pt": "Um domínio desta hospedagem. Sem ele, o domínio principal."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "See the PHP options.",
            "x-description-pt": "Ver as opções do PHP.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HostingPhpOptionsResponse"
                },
                "example": {
                  "data": {
                    "domain": "example.co.mz",
                    "options": {
                      "memory_limit": "256M",
                      "max_execution_time": "60"
                    }
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      },
      "put": {
        "operationId": "hosting.php.options.update",
        "tags": [
          "hosting"
        ],
        "summary": "Change the PHP options",
        "x-summary-pt": "Alterar as opções do PHP",
        "description": "Needs `hosting:write`. Accepted: `memory_limit` (32M to 2048M), `post_max_size` and `upload_max_filesize` (1M to 2048M), `max_execution_time` and `max_input_time` (1 to 600), `max_input_vars` (100 to 20000), `session.gc_maxlifetime` (60 to 86400), `display_errors` and `zlib.output_compression` (true or false). With a `sandbox_` key it only checks the request and changes nothing.",
        "x-description-pt": "Precisa de `hosting:write`. Aceites: `memory_limit` (32M a 2048M), `post_max_size` e `upload_max_filesize` (1M a 2048M), `max_execution_time` e `max_input_time` (1 a 600), `max_input_vars` (100 a 20000), `session.gc_maxlifetime` (60 a 86400), `display_errors` e `zlib.output_compression` (true ou false). Com uma chave `sandbox_`, só confere o pedido e não altera nada.",
        "x-permission": "hosting:write",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the hosting service.",
            "x-description-pt": "O `id` do serviço de hospedagem."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "Change the PHP options.",
            "x-description-pt": "Alterar as opções do PHP.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HostingPhpOptionsUpdateResponse"
                },
                "example": {
                  "data": {
                    "domain": "example.co.mz",
                    "options": {
                      "memory_limit": "256M"
                    },
                    "simulated": false
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "domain": {
                    "description": "A domain of this hosting account.",
                    "x-description-pt": "Um domínio desta hospedagem.",
                    "type": "string"
                  },
                  "options": {
                    "description": "The options to change.",
                    "x-description-pt": "As opções a alterar.",
                    "type": "object"
                  }
                },
                "required": [
                  "domain",
                  "options"
                ]
              },
              "example": {
                "domain": "example.co.mz",
                "options": {
                  "memory_limit": "256M",
                  "max_execution_time": 60
                }
              }
            }
          }
        }
      }
    },
    "/v1/services/{id}/backups": {
      "get": {
        "operationId": "hosting.backups.list",
        "tags": [
          "hosting"
        ],
        "summary": "List backup dates",
        "x-summary-pt": "Listar as datas das cópias",
        "description": "Needs `hosting:read`. The dates with a backup on the server. The backup requested with `POST` stays in the account folder and is not in this list. To restore, use the portal or ask support. If the service is not active, or is not a supported hosting account, it answers `409` with the reason in `details.reason`.",
        "x-description-pt": "Precisa de `hosting:read`. As datas com cópia no servidor. A cópia pedida com `POST` fica na pasta da conta e não entra nesta lista. Para restaurar, use o portal ou fale com o suporte. Se o serviço não estiver activo, ou não for uma hospedagem suportada, responde `409` com a razão em `details.reason`.",
        "x-permission": "hosting:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the hosting service.",
            "x-description-pt": "O `id` do serviço de hospedagem."
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "List backup dates.",
            "x-description-pt": "Listar as datas das cópias.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HostingBackupsListResponse"
                },
                "example": {
                  "data": [
                    {
                      "date": "2026-11-01"
                    }
                  ],
                  "meta": {
                    "page": 1,
                    "per_page": 10,
                    "total": 1,
                    "total_pages": 1
                  }
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      },
      "post": {
        "operationId": "hosting.backups.create",
        "tags": [
          "hosting"
        ],
        "summary": "Request a full backup",
        "x-summary-pt": "Pedir uma cópia completa",
        "description": "Needs `hosting:write`. The file stays in the account folder and takes up space of the plan. Limit: once a day per account. With a `sandbox_` key it only checks the request and changes nothing.",
        "x-description-pt": "Precisa de `hosting:write`. O ficheiro fica na pasta da conta e ocupa espaço do plano. Limite: uma vez por dia por hospedagem. Com uma chave `sandbox_`, só confere o pedido e não altera nada.",
        "x-permission": "hosting:write",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the hosting service.",
            "x-description-pt": "O `id` do serviço de hospedagem."
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "202": {
            "description": "Request a full backup.",
            "x-description-pt": "Pedir uma cópia completa.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HostingBackupsCreateResponse"
                },
                "example": {
                  "data": {
                    "requested": true,
                    "action_id": "6f1d2c3a-8b4e-4f7a-9c21-1d2e3f4a5b6c",
                    "simulated": false
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/services/{id}/ftp-accounts": {
      "get": {
        "operationId": "hosting.ftp.list",
        "tags": [
          "hosting"
        ],
        "summary": "List FTP accounts",
        "x-summary-pt": "Listar acessos FTP",
        "description": "Needs `hosting:read`. `quota_mb` is `null` when there is no limit. If the service is not active, or is not a supported hosting account, it answers `409` with the reason in `details.reason`.",
        "x-description-pt": "Precisa de `hosting:read`. `quota_mb` vem a `null` quando não há limite. Se o serviço não estiver activo, ou não for uma hospedagem suportada, responde `409` com a razão em `details.reason`.",
        "x-permission": "hosting:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the hosting service.",
            "x-description-pt": "O `id` do serviço de hospedagem."
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "List FTP accounts.",
            "x-description-pt": "Listar acessos FTP.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HostingFtpListResponse"
                },
                "example": {
                  "data": [
                    {
                      "login": "ana@example.com",
                      "type": "sub",
                      "directory": "public_html/ana",
                      "used_mb": 1.5,
                      "quota_mb": 1024
                    }
                  ],
                  "meta": {
                    "page": 1,
                    "per_page": 10,
                    "total": 1,
                    "total_pages": 1
                  }
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      },
      "post": {
        "operationId": "hosting.ftp.create",
        "tags": [
          "hosting"
        ],
        "summary": "Create an FTP account",
        "x-summary-pt": "Criar um acesso FTP",
        "description": "Needs `hosting:code`. FTP in the site folder can run code on the account, so this permission is separate from `hosting:write` and off by default. The access only sees its folder. The password is never stored by the API, so `Idempotency-Key` is not kept here. With a `sandbox_` key it only checks the request and changes nothing.",
        "x-description-pt": "Precisa de `hosting:code`. O FTP na pasta do site pode correr código na conta, por isso esta permissão é separada de `hosting:write` e fica desligada por omissão. O acesso só vê a sua pasta. A API nunca guarda a senha, por isso aqui a `Idempotency-Key` não tem efeito: repetir o pedido volta a executá-lo. Com uma chave `sandbox_`, só confere o pedido e não altera nada.",
        "x-permission": "hosting:code",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the hosting service.",
            "x-description-pt": "O `id` do serviço de hospedagem."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "201": {
            "description": "Create an FTP account.",
            "x-description-pt": "Criar um acesso FTP.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HostingFtpCreateResponse"
                },
                "example": {
                  "data": {
                    "login": "ana@example.com",
                    "directory": "public_html/ana",
                    "quota_mb": 1024,
                    "simulated": false
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "user": {
                    "description": "The name before the domain.",
                    "x-description-pt": "O nome antes do domínio.",
                    "type": "string"
                  },
                  "domain": {
                    "description": "A domain of this hosting account.",
                    "x-description-pt": "Um domínio desta hospedagem.",
                    "type": "string"
                  },
                  "password": {
                    "description": "12 to 128 characters, with at least 3 kinds among lowercase, uppercase, digits and symbols, without the account name. It never comes back.",
                    "x-description-pt": "De 12 a 128 caracteres, com pelo menos 3 tipos entre minúsculas, maiúsculas, números e símbolos, sem o nome da conta, nem o do utilizador ou da caixa. Nunca volta.",
                    "type": "string"
                  },
                  "directory": {
                    "description": "Folder relative to the account folder, without `..` and outside system folders.",
                    "x-description-pt": "Pasta relativa à pasta da conta, sem `..` e fora das pastas de sistema.",
                    "type": "string"
                  },
                  "quota_mb": {
                    "description": "From 1 to 102400. If omitted, 1024.",
                    "x-description-pt": "De 1 a 102400. Sem ele, 1024.",
                    "type": "integer"
                  }
                },
                "required": [
                  "user",
                  "domain",
                  "password",
                  "directory"
                ]
              },
              "example": {
                "user": "ana",
                "domain": "example.co.mz",
                "password": "pP7-kX2mQ9vL4tR8wZ3a",
                "directory": "public_html/ana"
              }
            }
          }
        }
      }
    },
    "/v1/services/{id}/ftp-accounts/{login}/password": {
      "put": {
        "operationId": "hosting.ftp.password",
        "tags": [
          "hosting"
        ],
        "summary": "Change an FTP password",
        "x-summary-pt": "Mudar a senha de um acesso FTP",
        "description": "Needs `hosting:code`. FTP in the site folder can run code on the account, so this permission is separate from `hosting:write` and off by default. The main account cannot be changed here. With a `sandbox_` key it only checks the request and changes nothing.",
        "x-description-pt": "Precisa de `hosting:code`. O FTP na pasta do site pode correr código na conta, por isso esta permissão é separada de `hosting:write` e fica desligada por omissão. A conta principal não se altera por aqui. Com uma chave `sandbox_`, só confere o pedido e não altera nada.",
        "x-permission": "hosting:code",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the hosting service.",
            "x-description-pt": "O `id` do serviço de hospedagem."
          },
          {
            "name": "login",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The login, as `name@domain`.",
            "x-description-pt": "O acesso, como `nome@dominio`."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "Change an FTP password.",
            "x-description-pt": "Mudar a senha de um acesso FTP.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HostingFtpPasswordResponse"
                },
                "example": {
                  "data": {
                    "login": "ana@example.com",
                    "password_changed": true,
                    "simulated": false
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "password": {
                    "description": "12 to 128 characters, with at least 3 kinds among lowercase, uppercase, digits and symbols, without the account name. It never comes back.",
                    "x-description-pt": "De 12 a 128 caracteres, com pelo menos 3 tipos entre minúsculas, maiúsculas, números e símbolos, sem o nome da conta, nem o do utilizador ou da caixa. Nunca volta.",
                    "type": "string"
                  }
                },
                "required": [
                  "password"
                ]
              },
              "example": {
                "password": "pP7-kX2mQ9vL4tR8wZ3a"
              }
            }
          }
        }
      }
    },
    "/v1/services/{id}/ftp-accounts/{login}": {
      "delete": {
        "operationId": "hosting.ftp.delete",
        "tags": [
          "hosting"
        ],
        "summary": "Delete an FTP account",
        "x-summary-pt": "Apagar um acesso FTP",
        "description": "Needs `hosting:write`. Needs the login in `confirm`. The files stay. The main account cannot be deleted. With a `sandbox_` key it only checks the request and changes nothing.",
        "x-description-pt": "Precisa de `hosting:write`. Precisa do acesso em `confirm`. Os ficheiros ficam. A conta principal não se apaga. Com uma chave `sandbox_`, só confere o pedido e não altera nada.",
        "x-permission": "hosting:write",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the hosting service.",
            "x-description-pt": "O `id` do serviço de hospedagem."
          },
          {
            "name": "login",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The login, as `name@domain`.",
            "x-description-pt": "O acesso, como `nome@dominio`."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "Delete an FTP account.",
            "x-description-pt": "Apagar um acesso FTP.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HostingFtpDeleteResponse"
                },
                "example": {
                  "data": {
                    "login": "ana@example.com",
                    "deleted": true,
                    "simulated": false
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "confirm": {
                    "description": "The exact name of what you are deleting, to confirm.",
                    "x-description-pt": "O nome exacto do que vai apagar, para confirmar.",
                    "type": "string"
                  }
                },
                "required": [
                  "confirm"
                ]
              },
              "example": {
                "confirm": "ana@example.com"
              }
            }
          }
        }
      }
    },
    "/v1/services/{id}/email/mailboxes": {
      "get": {
        "operationId": "email.mailboxes.list",
        "tags": [
          "email"
        ],
        "summary": "List mailboxes",
        "x-summary-pt": "Listar caixas de e-mail",
        "description": "Needs `email:read`. `quota_mb` is `null` when the mailbox has no limit of its own. If the service is not active, or is not a supported hosting account, it answers `409` with the reason in `details.reason`.",
        "x-description-pt": "Precisa de `email:read`. `quota_mb` vem a `null` quando a caixa não tem limite próprio. Se o serviço não estiver activo, ou não for uma hospedagem suportada, responde `409` com a razão em `details.reason`.",
        "x-permission": "email:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the hosting service.",
            "x-description-pt": "O `id` do serviço de hospedagem."
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "List mailboxes.",
            "x-description-pt": "Listar caixas de e-mail.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EmailMailboxesListResponse"
                },
                "example": {
                  "data": [
                    {
                      "address": "info@example.com",
                      "used_mb": 12.5,
                      "quota_mb": 1024
                    }
                  ],
                  "meta": {
                    "page": 1,
                    "per_page": 10,
                    "total": 1,
                    "total_pages": 1
                  }
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      },
      "post": {
        "operationId": "email.mailboxes.create",
        "tags": [
          "email"
        ],
        "summary": "Create a mailbox",
        "x-summary-pt": "Criar uma caixa de e-mail",
        "description": "Needs `email:write`. System names of the server, such as `_mainaccount`, are not accepted. The domain must be of this hosting account. The password is never stored by the API, so `Idempotency-Key` is not kept here. With a `sandbox_` key it only checks the request and changes nothing. On the domain of the account email, or of the email of a user of the account, it answers `409` with the code `account_email_domain`: make the change in the account portal.",
        "x-description-pt": "Precisa de `email:write`. Os nomes de sistema do servidor, como `_mainaccount`, não são aceites. O domínio tem de ser desta hospedagem. A API nunca guarda a senha, por isso aqui a `Idempotency-Key` não tem efeito: repetir o pedido volta a executá-lo. Com uma chave `sandbox_`, só confere o pedido e não altera nada. No domínio do e-mail da conta, ou do e-mail de um utilizador dela, responde `409` com o código `account_email_domain`: faça a alteração no portal da conta.",
        "x-permission": "email:write",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the hosting service.",
            "x-description-pt": "O `id` do serviço de hospedagem."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "201": {
            "description": "Create a mailbox.",
            "x-description-pt": "Criar uma caixa de e-mail.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EmailMailboxesCreateResponse"
                },
                "example": {
                  "data": {
                    "address": "info@example.com",
                    "quota_mb": 1024,
                    "simulated": false
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "address": {
                    "description": "The full email address.",
                    "x-description-pt": "O endereço de e-mail completo.",
                    "type": "string"
                  },
                  "password": {
                    "description": "12 to 128 characters, with at least 3 kinds among lowercase, uppercase, digits and symbols, without the account name. It never comes back.",
                    "x-description-pt": "De 12 a 128 caracteres, com pelo menos 3 tipos entre minúsculas, maiúsculas, números e símbolos, sem o nome da conta, nem o do utilizador ou da caixa. Nunca volta.",
                    "type": "string"
                  },
                  "quota_mb": {
                    "description": "In MB, from 1 to the disk space of the plan. Unlimited is not accepted.",
                    "x-description-pt": "Em MB, de 1 ao espaço do plano. Não se aceita quota ilimitada.",
                    "type": "integer"
                  }
                },
                "required": [
                  "address",
                  "password"
                ]
              },
              "example": {
                "address": "info@example.com",
                "password": "pP7-kX2mQ9vL4tR8wZ3a",
                "quota_mb": 1024
              }
            }
          }
        }
      }
    },
    "/v1/services/{id}/email/mailboxes/{address}": {
      "delete": {
        "operationId": "email.mailboxes.delete",
        "tags": [
          "email"
        ],
        "summary": "Delete a mailbox",
        "x-summary-pt": "Apagar uma caixa de e-mail",
        "description": "Needs `email:write`. Needs the address in `confirm`. The messages are lost. With a `sandbox_` key it only checks the request and changes nothing. On the domain of the account email, or of the email of a user of the account, it answers `409` with the code `account_email_domain`: make the change in the account portal.",
        "x-description-pt": "Precisa de `email:write`. Precisa do endereço em `confirm`. As mensagens perdem-se. Com uma chave `sandbox_`, só confere o pedido e não altera nada. No domínio do e-mail da conta, ou do e-mail de um utilizador dela, responde `409` com o código `account_email_domain`: faça a alteração no portal da conta.",
        "x-permission": "email:write",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the hosting service.",
            "x-description-pt": "O `id` do serviço de hospedagem."
          },
          {
            "name": "address",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The full email address.",
            "x-description-pt": "O endereço de e-mail completo."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "Delete a mailbox.",
            "x-description-pt": "Apagar uma caixa de e-mail.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EmailMailboxesDeleteResponse"
                },
                "example": {
                  "data": {
                    "address": "info@example.com",
                    "deleted": true,
                    "simulated": false
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "confirm": {
                    "description": "The exact name of what you are deleting, to confirm.",
                    "x-description-pt": "O nome exacto do que vai apagar, para confirmar.",
                    "type": "string"
                  }
                },
                "required": [
                  "confirm"
                ]
              },
              "example": {
                "confirm": "info@example.com"
              }
            }
          }
        }
      }
    },
    "/v1/services/{id}/email/mailboxes/{address}/password": {
      "put": {
        "operationId": "email.mailboxes.password",
        "tags": [
          "email"
        ],
        "summary": "Change a mailbox password",
        "x-summary-pt": "Mudar a senha de uma caixa",
        "description": "Needs `email:write`. System names of the server, such as `_mainaccount`, are not accepted. The password never comes back. Limit: 10 per minute per account. With a `sandbox_` key it only checks the request and changes nothing. On the domain of the account email, or of the email of a user of the account, it answers `409` with the code `account_email_domain`: make the change in the account portal.",
        "x-description-pt": "Precisa de `email:write`. Os nomes de sistema do servidor, como `_mainaccount`, não são aceites. A senha nunca volta. Limite: 10 por minuto por hospedagem. Com uma chave `sandbox_`, só confere o pedido e não altera nada. No domínio do e-mail da conta, ou do e-mail de um utilizador dela, responde `409` com o código `account_email_domain`: faça a alteração no portal da conta.",
        "x-permission": "email:write",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the hosting service.",
            "x-description-pt": "O `id` do serviço de hospedagem."
          },
          {
            "name": "address",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The full email address.",
            "x-description-pt": "O endereço de e-mail completo."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "Change a mailbox password.",
            "x-description-pt": "Mudar a senha de uma caixa.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EmailMailboxesPasswordResponse"
                },
                "example": {
                  "data": {
                    "address": "info@example.com",
                    "password_changed": true,
                    "simulated": false
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "password": {
                    "description": "12 to 128 characters, with at least 3 kinds among lowercase, uppercase, digits and symbols, without the account name. It never comes back.",
                    "x-description-pt": "De 12 a 128 caracteres, com pelo menos 3 tipos entre minúsculas, maiúsculas, números e símbolos, sem o nome da conta, nem o do utilizador ou da caixa. Nunca volta.",
                    "type": "string"
                  }
                },
                "required": [
                  "password"
                ]
              },
              "example": {
                "password": "pP7-kX2mQ9vL4tR8wZ3a"
              }
            }
          }
        }
      }
    },
    "/v1/services/{id}/email/mailboxes/{address}/quota": {
      "put": {
        "operationId": "email.mailboxes.quota",
        "tags": [
          "email"
        ],
        "summary": "Change a mailbox quota",
        "x-summary-pt": "Mudar a quota de uma caixa",
        "description": "Needs `email:write`. The quota can never go above the disk space of the plan. With a `sandbox_` key it only checks the request and changes nothing. On the domain of the account email, or of the email of a user of the account, it answers `409` with the code `account_email_domain`: make the change in the account portal.",
        "x-description-pt": "Precisa de `email:write`. A quota nunca passa do espaço do plano. Com uma chave `sandbox_`, só confere o pedido e não altera nada. No domínio do e-mail da conta, ou do e-mail de um utilizador dela, responde `409` com o código `account_email_domain`: faça a alteração no portal da conta.",
        "x-permission": "email:write",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the hosting service.",
            "x-description-pt": "O `id` do serviço de hospedagem."
          },
          {
            "name": "address",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The full email address.",
            "x-description-pt": "O endereço de e-mail completo."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "Change a mailbox quota.",
            "x-description-pt": "Mudar a quota de uma caixa.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EmailMailboxesQuotaResponse"
                },
                "example": {
                  "data": {
                    "address": "info@example.com",
                    "quota_mb": 2048,
                    "simulated": false
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "quota_mb": {
                    "description": "In MB, from 1 to the disk space of the plan. Unlimited is not accepted.",
                    "x-description-pt": "Em MB, de 1 ao espaço do plano. Não se aceita quota ilimitada.",
                    "type": "integer"
                  }
                },
                "required": [
                  "quota_mb"
                ]
              },
              "example": {
                "quota_mb": 2048
              }
            }
          }
        }
      }
    },
    "/v1/services/{id}/email/forwarders": {
      "get": {
        "operationId": "email.forwarders.list",
        "tags": [
          "email"
        ],
        "summary": "List forwarders",
        "x-summary-pt": "Listar reencaminhadores",
        "description": "Needs `email:read`. `forward_to` is `null` if the forwarder goes to a program, set in the panel. If the service is not active, or is not a supported hosting account, it answers `409` with the reason in `details.reason`.",
        "x-description-pt": "Precisa de `email:read`. `forward_to` vem a `null` se o reencaminhador for para um programa, definido no painel. Se o serviço não estiver activo, ou não for uma hospedagem suportada, responde `409` com a razão em `details.reason`.",
        "x-permission": "email:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the hosting service.",
            "x-description-pt": "O `id` do serviço de hospedagem."
          },
          {
            "name": "domain",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "A domain of this hosting account. If omitted, the main domain.",
            "x-description-pt": "Um domínio desta hospedagem. Sem ele, o domínio principal."
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "List forwarders.",
            "x-description-pt": "Listar reencaminhadores.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EmailForwardersListResponse"
                },
                "example": {
                  "data": [
                    {
                      "address": "info@example.com",
                      "forward_to": "ana@example.com"
                    }
                  ],
                  "meta": {
                    "page": 1,
                    "per_page": 10,
                    "total": 1,
                    "total_pages": 1
                  }
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      },
      "post": {
        "operationId": "email.forwarders.create",
        "tags": [
          "email"
        ],
        "summary": "Create a forwarder",
        "x-summary-pt": "Criar um reencaminhador",
        "description": "Needs `email:write`. Only to email addresses, never to programs. With a `sandbox_` key it only checks the request and changes nothing. On the domain of the account email, or of the email of a user of the account, it answers `409` with the code `account_email_domain`: make the change in the account portal.",
        "x-description-pt": "Precisa de `email:write`. Só para endereços de e-mail, nunca para programas. Com uma chave `sandbox_`, só confere o pedido e não altera nada. No domínio do e-mail da conta, ou do e-mail de um utilizador dela, responde `409` com o código `account_email_domain`: faça a alteração no portal da conta.",
        "x-permission": "email:write",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the hosting service.",
            "x-description-pt": "O `id` do serviço de hospedagem."
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "201": {
            "description": "Create a forwarder.",
            "x-description-pt": "Criar um reencaminhador.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EmailForwardersCreateResponse"
                },
                "example": {
                  "data": {
                    "address": "info@example.com",
                    "forward_to": "ana@example.com",
                    "simulated": false
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "address": {
                    "description": "The full email address.",
                    "x-description-pt": "O endereço de e-mail completo.",
                    "type": "string"
                  },
                  "forward_to": {
                    "description": "The address it forwards to.",
                    "x-description-pt": "O endereço para onde reencaminha.",
                    "type": "string"
                  }
                },
                "required": [
                  "address",
                  "forward_to"
                ]
              },
              "example": {
                "address": "info@example.com",
                "forward_to": "ana@example.com"
              }
            }
          }
        }
      }
    },
    "/v1/services/{id}/email/forwarders/{address}/{forward_to}": {
      "delete": {
        "operationId": "email.forwarders.delete",
        "tags": [
          "email"
        ],
        "summary": "Delete a forwarder",
        "x-summary-pt": "Apagar um reencaminhador",
        "description": "Needs `email:write`. Give the two addresses in the path. With a `sandbox_` key it only checks the request and changes nothing. On the domain of the account email, or of the email of a user of the account, it answers `409` with the code `account_email_domain`: make the change in the account portal.",
        "x-description-pt": "Precisa de `email:write`. Indique os dois endereços no caminho. Com uma chave `sandbox_`, só confere o pedido e não altera nada. No domínio do e-mail da conta, ou do e-mail de um utilizador dela, responde `409` com o código `account_email_domain`: faça a alteração no portal da conta.",
        "x-permission": "email:write",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the hosting service.",
            "x-description-pt": "O `id` do serviço de hospedagem."
          },
          {
            "name": "address",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The full email address.",
            "x-description-pt": "O endereço de e-mail completo."
          },
          {
            "name": "forward_to",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The address it forwards to.",
            "x-description-pt": "O endereço para onde reencaminha."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "Delete a forwarder.",
            "x-description-pt": "Apagar um reencaminhador.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EmailForwardersDeleteResponse"
                },
                "example": {
                  "data": {
                    "address": "info@example.com",
                    "forward_to": "ana@example.com",
                    "deleted": true,
                    "simulated": false
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/services/{id}/email/autoresponders": {
      "get": {
        "operationId": "email.autoresponders.list",
        "tags": [
          "email"
        ],
        "summary": "List autoresponders",
        "x-summary-pt": "Listar respostas automáticas",
        "description": "Needs `email:read`. The autoresponders of one domain. If the service is not active, or is not a supported hosting account, it answers `409` with the reason in `details.reason`.",
        "x-description-pt": "Precisa de `email:read`. As respostas automáticas de um domínio. Se o serviço não estiver activo, ou não for uma hospedagem suportada, responde `409` com a razão em `details.reason`.",
        "x-permission": "email:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the hosting service.",
            "x-description-pt": "O `id` do serviço de hospedagem."
          },
          {
            "name": "domain",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "A domain of this hosting account. If omitted, the main domain.",
            "x-description-pt": "Um domínio desta hospedagem. Sem ele, o domínio principal."
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "List autoresponders.",
            "x-description-pt": "Listar respostas automáticas.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EmailAutorespondersListResponse"
                },
                "example": {
                  "data": [
                    {
                      "address": "info@example.com",
                      "subject": "Fora do escritório"
                    }
                  ],
                  "meta": {
                    "page": 1,
                    "per_page": 10,
                    "total": 1,
                    "total_pages": 1
                  }
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/services/{id}/email/autoresponders/{address}": {
      "get": {
        "operationId": "email.autoresponders.get",
        "tags": [
          "email"
        ],
        "summary": "See an autoresponder",
        "x-summary-pt": "Ver uma resposta automática",
        "description": "Needs `email:read`. With the text and the dates. If the service is not active, or is not a supported hosting account, it answers `409` with the reason in `details.reason`.",
        "x-description-pt": "Precisa de `email:read`. Com o texto e as datas. Se o serviço não estiver activo, ou não for uma hospedagem suportada, responde `409` com a razão em `details.reason`.",
        "x-permission": "email:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the hosting service.",
            "x-description-pt": "O `id` do serviço de hospedagem."
          },
          {
            "name": "address",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The full email address.",
            "x-description-pt": "O endereço de e-mail completo."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "See an autoresponder.",
            "x-description-pt": "Ver uma resposta automática.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EmailAutorespondersGetResponse"
                },
                "example": {
                  "data": {
                    "address": "info@example.com",
                    "from": "Info",
                    "subject": "Fora do escritório",
                    "body": "Volto na segunda.",
                    "html": false,
                    "interval_hours": 8,
                    "start_at": null,
                    "stop_at": null
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      },
      "put": {
        "operationId": "email.autoresponders.put",
        "tags": [
          "email"
        ],
        "summary": "Save an autoresponder",
        "x-summary-pt": "Gravar uma resposta automática",
        "description": "Needs `email:write`. Creates or replaces the autoresponder of this address. With a `sandbox_` key it only checks the request and changes nothing.",
        "x-description-pt": "Precisa de `email:write`. Cria ou substitui a resposta automática deste endereço. Com uma chave `sandbox_`, só confere o pedido e não altera nada.",
        "x-permission": "email:write",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the hosting service.",
            "x-description-pt": "O `id` do serviço de hospedagem."
          },
          {
            "name": "address",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The full email address.",
            "x-description-pt": "O endereço de e-mail completo."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "Save an autoresponder.",
            "x-description-pt": "Gravar uma resposta automática.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EmailAutorespondersPutResponse"
                },
                "example": {
                  "data": {
                    "address": "info@example.com",
                    "subject": "Fora do escritório",
                    "simulated": false
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "from": {
                    "description": "The name of the sender, up to 100 characters.",
                    "x-description-pt": "O nome do remetente, até 100 caracteres.",
                    "type": "string"
                  },
                  "subject": {
                    "description": "Up to 200 characters.",
                    "x-description-pt": "Até 200 caracteres.",
                    "type": "string"
                  },
                  "body": {
                    "description": "Up to 20000 characters.",
                    "x-description-pt": "Até 20000 caracteres.",
                    "type": "string"
                  },
                  "html": {
                    "description": "If the text is HTML.",
                    "x-description-pt": "Se o texto é HTML.",
                    "type": "boolean"
                  },
                  "interval_hours": {
                    "description": "Hours between answers to the same sender, from 0 to 720. If omitted, 8.",
                    "x-description-pt": "Horas entre respostas ao mesmo remetente, de 0 a 720. Sem ele, 8.",
                    "type": "integer"
                  },
                  "start_at": {
                    "description": "Start, in ISO 8601.",
                    "x-description-pt": "Início, em ISO 8601.",
                    "type": "string"
                  },
                  "stop_at": {
                    "description": "End, in ISO 8601.",
                    "x-description-pt": "Fim, em ISO 8601.",
                    "type": "string"
                  }
                },
                "required": [
                  "from",
                  "subject",
                  "body"
                ]
              },
              "example": {
                "from": "Info",
                "subject": "Fora do escritório",
                "body": "Volto na segunda."
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "email.autoresponders.delete",
        "tags": [
          "email"
        ],
        "summary": "Delete an autoresponder",
        "x-summary-pt": "Apagar uma resposta automática",
        "description": "Needs `email:write`. The mailbox stays. With a `sandbox_` key it only checks the request and changes nothing.",
        "x-description-pt": "Precisa de `email:write`. A caixa fica. Com uma chave `sandbox_`, só confere o pedido e não altera nada.",
        "x-permission": "email:write",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the hosting service.",
            "x-description-pt": "O `id` do serviço de hospedagem."
          },
          {
            "name": "address",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The full email address.",
            "x-description-pt": "O endereço de e-mail completo."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "Delete an autoresponder.",
            "x-description-pt": "Apagar uma resposta automática.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EmailAutorespondersDeleteResponse"
                },
                "example": {
                  "data": {
                    "address": "info@example.com",
                    "deleted": true,
                    "simulated": false
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/services/{id}/email/default-address": {
      "get": {
        "operationId": "email.default_address.get",
        "tags": [
          "email"
        ],
        "summary": "See the default address",
        "x-summary-pt": "Ver a conta geral",
        "description": "Needs `email:read`. What happens to mail for addresses that do not exist. `action` is `fail`, `forward`, `discard`, `main_account` or `other`. If the service is not active, or is not a supported hosting account, it answers `409` with the reason in `details.reason`.",
        "x-description-pt": "Precisa de `email:read`. O que acontece ao correio para endereços que não existem. `action` é `fail`, `forward`, `discard`, `main_account` ou `other`. Se o serviço não estiver activo, ou não for uma hospedagem suportada, responde `409` com a razão em `details.reason`.",
        "x-permission": "email:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the hosting service.",
            "x-description-pt": "O `id` do serviço de hospedagem."
          },
          {
            "name": "domain",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "A domain of this hosting account. If omitted, the main domain.",
            "x-description-pt": "Um domínio desta hospedagem. Sem ele, o domínio principal."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "See the default address.",
            "x-description-pt": "Ver a conta geral.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EmailDefaultAddressGetResponse"
                },
                "example": {
                  "data": {
                    "domain": "example.co.mz",
                    "action": "fail",
                    "forward_to": null,
                    "message": "No such person at this address."
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      },
      "put": {
        "operationId": "email.default_address.put",
        "tags": [
          "email"
        ],
        "summary": "Change the default address",
        "x-summary-pt": "Alterar a conta geral",
        "description": "Needs `email:write`. Accepted actions: `fail`, `forward`, `discard` and `main_account`. With a `sandbox_` key it only checks the request and changes nothing. On the domain of the account email, or of the email of a user of the account, it answers `409` with the code `account_email_domain`: make the change in the account portal.",
        "x-description-pt": "Precisa de `email:write`. Acções aceites: `fail`, `forward`, `discard` e `main_account`. Com uma chave `sandbox_`, só confere o pedido e não altera nada. No domínio do e-mail da conta, ou do e-mail de um utilizador dela, responde `409` com o código `account_email_domain`: faça a alteração no portal da conta.",
        "x-permission": "email:write",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the hosting service.",
            "x-description-pt": "O `id` do serviço de hospedagem."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "Change the default address.",
            "x-description-pt": "Alterar a conta geral.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EmailDefaultAddressPutResponse"
                },
                "example": {
                  "data": {
                    "domain": "example.co.mz",
                    "action": "fail",
                    "forward_to": null,
                    "message": "No such person at this address.",
                    "simulated": false
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "domain": {
                    "description": "A domain of this hosting account.",
                    "x-description-pt": "Um domínio desta hospedagem.",
                    "type": "string"
                  },
                  "action": {
                    "description": "`fail`, `forward`, `discard` or `main_account`.",
                    "x-description-pt": "`fail`, `forward`, `discard` ou `main_account`.",
                    "type": "string"
                  },
                  "forward_to": {
                    "description": "Needed with `forward`.",
                    "x-description-pt": "Necessário com `forward`.",
                    "type": "string"
                  },
                  "message": {
                    "description": "The message with `fail`, up to 200 characters.",
                    "x-description-pt": "A mensagem com `fail`, até 200 caracteres.",
                    "type": "string"
                  }
                },
                "required": [
                  "domain",
                  "action"
                ]
              },
              "example": {
                "domain": "example.co.mz",
                "action": "fail",
                "message": "No such person at this address."
              }
            }
          }
        }
      }
    },
    "/v1/services/{id}/email/authentication": {
      "get": {
        "operationId": "email.authentication.get",
        "tags": [
          "email"
        ],
        "summary": "See SPF, DKIM and DMARC",
        "x-summary-pt": "Ver SPF, DKIM e DMARC",
        "description": "Needs `email:read`. The state of the three records of a domain, as published in DNS. If the service is not active, or is not a supported hosting account, it answers `409` with the reason in `details.reason`.",
        "x-description-pt": "Precisa de `email:read`. O estado dos três registos de um domínio, como estão publicados no DNS. Se o serviço não estiver activo, ou não for uma hospedagem suportada, responde `409` com a razão em `details.reason`.",
        "x-permission": "email:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the hosting service.",
            "x-description-pt": "O `id` do serviço de hospedagem."
          },
          {
            "name": "domain",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "A domain of this hosting account. If omitted, the main domain.",
            "x-description-pt": "Um domínio desta hospedagem. Sem ele, o domínio principal."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "See SPF, DKIM and DMARC.",
            "x-description-pt": "Ver SPF, DKIM e DMARC.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EmailAuthenticationGetResponse"
                },
                "example": {
                  "data": {
                    "domain": "example.co.mz",
                    "spf": {
                      "state": "pass"
                    },
                    "dkim": {
                      "state": "valid"
                    },
                    "dmarc": {
                      "state": "missing"
                    }
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/sms/stats": {
      "get": {
        "operationId": "sms.stats.get",
        "tags": [
          "sms"
        ],
        "summary": "See sending statistics",
        "x-summary-pt": "Ver as estatísticas de envio",
        "description": "Needs `sms:read`. Totals and one line per day with messages. Without dates, the last 30 days; at most 366 days. Failed, cancelled and simulated messages do not count in `credits_spent`. Scheduled messages that were not charged yet do not count either.",
        "x-description-pt": "Precisa de `sms:read`. Totais e uma linha por cada dia com mensagens. Sem datas, os últimos 30 dias; no máximo 366 dias. As mensagens falhadas, canceladas e simuladas não contam em `credits_spent`. Também não contam as mensagens agendadas que ainda não foram cobradas.",
        "x-permission": "sms:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "from",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date"
            },
            "description": "First day, `YYYY-MM-DD`.",
            "x-description-pt": "Primeiro dia, `AAAA-MM-DD`."
          },
          {
            "name": "to",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date"
            },
            "description": "Last day, `YYYY-MM-DD`.",
            "x-description-pt": "Último dia, `AAAA-MM-DD`."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "See sending statistics.",
            "x-description-pt": "Ver as estatísticas de envio.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SmsStatsGetResponse"
                },
                "example": {
                  "data": {
                    "from": "2026-10-07",
                    "to": "2026-11-05",
                    "messages": 12,
                    "parts": 14,
                    "credits_spent": 13.0,
                    "by_status": {
                      "scheduled": 0,
                      "queued": 0,
                      "sending": 0,
                      "sent": 11,
                      "simulated": 0,
                      "failed": 1,
                      "cancelled": 0
                    },
                    "by_day": [
                      {
                        "date": "2026-11-05",
                        "messages": 12,
                        "sent": 11,
                        "failed": 1,
                        "credits": 13.0
                      }
                    ]
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/sms/templates": {
      "get": {
        "operationId": "sms.templates.list",
        "tags": [
          "sms"
        ],
        "summary": "List templates",
        "x-summary-pt": "Listar os modelos",
        "description": "Needs `sms:read`. The templates of this account, by name.",
        "x-description-pt": "Precisa de `sms:read`. Os modelos desta conta, por nome.",
        "x-permission": "sms:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "category",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "general",
                "notice",
                "promotion",
                "billing",
                "confirmation"
              ]
            },
            "description": "Only this category.",
            "x-description-pt": "Só esta categoria."
          },
          {
            "name": "language",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "pt",
                "en"
              ]
            },
            "description": "Only this language.",
            "x-description-pt": "Só esta língua."
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "List templates.",
            "x-description-pt": "Listar os modelos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SmsTemplatesListResponse"
                },
                "example": {
                  "data": [
                    {
                      "id": 41,
                      "name": "Aviso de factura",
                      "text": "Olá {$client_first_name}, a sua factura vence hoje.",
                      "category": "notice",
                      "language": "pt",
                      "created_at": "2026-11-05T09:30:00+02:00",
                      "updated_at": "2026-11-05T09:30:00+02:00"
                    }
                  ],
                  "meta": {
                    "page": 1,
                    "per_page": 10,
                    "total": 1,
                    "total_pages": 1
                  }
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      },
      "post": {
        "operationId": "sms.templates.create",
        "tags": [
          "sms"
        ],
        "summary": "Create a template",
        "x-summary-pt": "Criar um modelo",
        "description": "Needs `sms:write`. The name must be unique in the account. The text accepts `{$client_name}`, `{$client_first_name}`, `{$client_last_name}`, `{$client_company_name}`, `{$remetente}` and `{$data}`. Limited to 20 changes per minute.",
        "x-description-pt": "Precisa de `sms:write`. O nome não se pode repetir na conta. O texto aceita `{$client_name}`, `{$client_first_name}`, `{$client_last_name}`, `{$client_company_name}`, `{$remetente}` e `{$data}`. Limite de 20 alterações por minuto.",
        "x-permission": "sms:write",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "201": {
            "description": "Create a template.",
            "x-description-pt": "Criar um modelo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SmsTemplatesCreateResponse"
                },
                "example": {
                  "data": {
                    "id": 41,
                    "name": "Aviso de factura",
                    "text": "Olá {$client_first_name}, a sua factura vence hoje.",
                    "category": "notice",
                    "language": "pt",
                    "created_at": "2026-11-05T09:30:00+02:00",
                    "updated_at": "2026-11-05T09:30:00+02:00",
                    "simulated": true
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "name",
                  "text"
                ],
                "properties": {
                  "name": {
                    "type": "string",
                    "maxLength": 100
                  },
                  "text": {
                    "type": "string",
                    "maxLength": 1600
                  },
                  "category": {
                    "type": "string",
                    "enum": [
                      "general",
                      "notice",
                      "promotion",
                      "billing",
                      "confirmation"
                    ],
                    "default": "general"
                  },
                  "language": {
                    "type": "string",
                    "enum": [
                      "pt",
                      "en"
                    ],
                    "default": "pt"
                  }
                }
              },
              "example": {
                "name": "Aviso de factura",
                "text": "Olá {$client_first_name}, a sua factura vence hoje.",
                "category": "notice",
                "language": "pt"
              }
            }
          }
        }
      }
    },
    "/v1/sms/templates/{id}": {
      "get": {
        "operationId": "sms.templates.get",
        "tags": [
          "sms"
        ],
        "summary": "See a template",
        "x-summary-pt": "Ver um modelo",
        "description": "Needs `sms:read`. A template of this account.",
        "x-description-pt": "Precisa de `sms:read`. Um modelo desta conta.",
        "x-permission": "sms:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the template.",
            "x-description-pt": "O `id` do modelo."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "See a template.",
            "x-description-pt": "Ver um modelo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SmsTemplatesGetResponse"
                },
                "example": {
                  "data": {
                    "id": 41,
                    "name": "Aviso de factura",
                    "text": "Olá {$client_first_name}, a sua factura vence hoje.",
                    "category": "notice",
                    "language": "pt",
                    "created_at": "2026-11-05T09:30:00+02:00",
                    "updated_at": "2026-11-05T09:30:00+02:00"
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      },
      "patch": {
        "operationId": "sms.templates.update",
        "tags": [
          "sms"
        ],
        "summary": "Change a template",
        "x-summary-pt": "Alterar um modelo",
        "description": "Needs `sms:write`. Send only the fields to change. Limited to 20 changes per minute.",
        "x-description-pt": "Precisa de `sms:write`. Envie só os campos a alterar. Limite de 20 alterações por minuto.",
        "x-permission": "sms:write",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the template.",
            "x-description-pt": "O `id` do modelo."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "Change a template.",
            "x-description-pt": "Alterar um modelo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SmsTemplatesUpdateResponse"
                },
                "example": {
                  "data": {
                    "id": 41,
                    "name": "Aviso de factura",
                    "text": "Olá {$client_first_name}, a sua factura vence hoje.",
                    "category": "notice",
                    "language": "pt",
                    "created_at": "2026-11-05T09:30:00+02:00",
                    "updated_at": "2026-11-05T09:30:00+02:00",
                    "simulated": true
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "maxLength": 100
                  },
                  "text": {
                    "type": "string",
                    "maxLength": 1600
                  },
                  "category": {
                    "type": "string",
                    "enum": [
                      "general",
                      "notice",
                      "promotion",
                      "billing",
                      "confirmation"
                    ]
                  },
                  "language": {
                    "type": "string",
                    "enum": [
                      "pt",
                      "en"
                    ]
                  }
                }
              },
              "example": {
                "text": "Olá {$client_first_name}, a sua factura vence amanhã."
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "sms.templates.delete",
        "tags": [
          "sms"
        ],
        "summary": "Delete a template",
        "x-summary-pt": "Apagar um modelo",
        "description": "Needs `sms:write`. Standard templates that are deleted do not come back. Limited to 20 changes per minute.",
        "x-description-pt": "Precisa de `sms:write`. Os modelos padrão que forem apagados não voltam. Limite de 20 alterações por minuto.",
        "x-permission": "sms:write",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the template.",
            "x-description-pt": "O `id` do modelo."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "Delete a template.",
            "x-description-pt": "Apagar um modelo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SmsTemplatesDeleteResponse"
                },
                "example": {
                  "data": {
                    "id": 41,
                    "deleted": false,
                    "simulated": true
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/sms/senders/{sender}": {
      "get": {
        "operationId": "sms.senders.get",
        "tags": [
          "sms"
        ],
        "summary": "See a sender request",
        "x-summary-pt": "Ver um pedido de remetente",
        "description": "Needs `sms:read`. By `id` or by name. `note` is the note from our team. The free sender always answers as `approved`.",
        "x-description-pt": "Precisa de `sms:read`. Pelo `id` ou pelo nome. `note` é a nota da nossa equipa. O remetente grátis responde sempre `approved`.",
        "x-permission": "sms:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "sender",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the request or the name of the sender.",
            "x-description-pt": "O `id` do pedido ou o nome do remetente."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "See a sender request.",
            "x-description-pt": "Ver um pedido de remetente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SmsSendersGetResponse"
                },
                "example": {
                  "data": {
                    "id": 7,
                    "sender": "AMINHAMARCA",
                    "status": "pending",
                    "free": false,
                    "entity": "A Minha Empresa, Lda",
                    "country": "Moçambique",
                    "purpose": "Avisos de encomenda aos nossos clientes.",
                    "sample": "A sua encomenda está pronta.",
                    "note": null,
                    "documents": 0,
                    "documents_url": "https://my.example.com/sms-center.php?view=senders&language=portuguese&currency=5",
                    "created_at": "2026-11-05T09:30:00+02:00",
                    "updated_at": "2026-11-05T09:30:00+02:00"
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/sms/opt-outs": {
      "get": {
        "operationId": "sms.opt_outs.list",
        "tags": [
          "sms"
        ],
        "summary": "List numbers that do not receive",
        "x-summary-pt": "Listar os números que não recebem",
        "description": "Needs `sms:read`. The numbers this account blocked, masked. Use `number` to check one.",
        "x-description-pt": "Precisa de `sms:read`. Os números que esta conta bloqueou, tapados. Use `number` para confirmar um.",
        "x-permission": "sms:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "number",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Only this number, with or without the country code.",
            "x-description-pt": "Só este número, com ou sem indicativo."
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "List numbers that do not receive.",
            "x-description-pt": "Listar os números que não recebem.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SmsOptOutsListResponse"
                },
                "example": {
                  "data": [
                    {
                      "number": "25884****567",
                      "created_at": "2026-11-05T09:30:00+02:00"
                    }
                  ],
                  "meta": {
                    "page": 1,
                    "per_page": 10,
                    "total": 1,
                    "total_pages": 1
                  }
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      },
      "post": {
        "operationId": "sms.opt_outs.create",
        "tags": [
          "sms"
        ],
        "summary": "Stop sending to a number",
        "x-summary-pt": "Deixar de enviar a um número",
        "description": "Needs `sms:write`. From now on, sending to this number answers `422` with `number_opted_out`. To take a number off the list, ask support. Limited to 20 changes per minute.",
        "x-description-pt": "Precisa de `sms:write`. A partir daqui, enviar para este número responde `422` com `number_opted_out`. Para retirar um número da lista, fale com o suporte. Limite de 20 alterações por minuto.",
        "x-permission": "sms:write",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "201": {
            "description": "Stop sending to a number.",
            "x-description-pt": "Deixar de enviar a um número.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SmsOptOutsCreateResponse"
                },
                "example": {
                  "data": {
                    "number": "25884****567",
                    "created_at": "2026-11-05T09:30:00+02:00",
                    "already_listed": false,
                    "simulated": true
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "number"
                ],
                "properties": {
                  "number": {
                    "type": "string"
                  }
                }
              },
              "example": {
                "number": "+258841234567"
              }
            }
          }
        }
      }
    },
    "/v1/extras/catalog": {
      "get": {
        "operationId": "extras.catalog.list",
        "tags": [
          "extras"
        ],
        "summary": "List extras for sale",
        "x-summary-pt": "Listar os extras à venda",
        "description": "Needs `extras:read`. Prices in the currency of the account. `purchasable` says if it can be bought through the API; if not, use `portal_url`. SiteLock has no 3 or 6 month periods. Extra IP and disk of a server are bought in the account portal.",
        "x-description-pt": "Precisa de `extras:read`. Preços na moeda da conta. `purchasable` diz se se pode comprar pela API; se não, use `portal_url`. O SiteLock não tem períodos de 3 nem de 6 meses. O IP e o disco extra de um servidor compram-se no portal da conta.",
        "x-permission": "extras:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "kind",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "ssl",
                "sitelock",
                "website_builder",
                "backup",
                "email_filter",
                "email",
                "seo",
                "monitoring",
                "vpn",
                "social",
                "radio",
                "radio_addon",
                "vps_ip",
                "vps_disk",
                "other"
              ]
            },
            "description": "Only this kind.",
            "x-description-pt": "Só este tipo."
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "List extras for sale.",
            "x-description-pt": "Listar os extras à venda.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExtrasCatalogListResponse"
                },
                "example": {
                  "data": [
                    {
                      "id": 96,
                      "kind": "sitelock",
                      "name": "Fix",
                      "description": "Finds and removes malware from the site.",
                      "currency": "MZN",
                      "billing_cycles": [
                        {
                          "billing_cycle": "annually",
                          "months": 12,
                          "price": 5999.4,
                          "setup_fee": 0.0
                        }
                      ],
                      "purchasable": true,
                      "requires_site": true,
                      "portal_url": "https://my.example.com/onestep/billingcycle?pid=96&language=portuguese&currency=5"
                    }
                  ],
                  "meta": {
                    "page": 1,
                    "per_page": 10,
                    "total": 1,
                    "total_pages": 1
                  }
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/extras": {
      "get": {
        "operationId": "extras.list",
        "tags": [
          "extras"
        ],
        "summary": "List the extras of the account",
        "x-summary-pt": "Listar os extras da conta",
        "description": "Needs `extras:read`. The extras of this account. The `id` starts with `s` for a service, `a` for an add-on and `v` for an extra IP or disk of a server, which also has `quantity` and `invoice_id`. Certificates have `certificate`. Access data never comes here.",
        "x-description-pt": "Precisa de `extras:read`. Os extras desta conta. O `id` começa por `s` num serviço, por `a` num adicional e por `v` num IP ou disco extra de um servidor, que traz também `quantity` e `invoice_id`. Os certificados trazem `certificate`. Os dados de acesso nunca vêm aqui.",
        "x-permission": "extras:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "kind",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "ssl",
                "sitelock",
                "website_builder",
                "backup",
                "email_filter",
                "email",
                "seo",
                "monitoring",
                "vpn",
                "social",
                "radio",
                "radio_addon",
                "vps_ip",
                "vps_disk",
                "other"
              ]
            },
            "description": "Only this kind.",
            "x-description-pt": "Só este tipo."
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "List the extras of the account.",
            "x-description-pt": "Listar os extras da conta.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExtrasListResponse"
                },
                "example": {
                  "data": [
                    {
                      "id": "s812",
                      "kind": "ssl",
                      "name": "RapidSSL",
                      "status": "active",
                      "site": null,
                      "parent_service_id": null,
                      "billing_cycle": "annually",
                      "amount": 1077.0,
                      "currency": "MZN",
                      "next_due_date": "2027-11-05",
                      "registered_at": "2026-11-05",
                      "manage_url": "https://my.example.com/clientarea.php?action=productdetails&id=812&language=portuguese&currency=5",
                      "certificate": {
                        "status": "awaiting_configuration",
                        "expires_at": null
                      }
                    }
                  ],
                  "meta": {
                    "page": 1,
                    "per_page": 10,
                    "total": 1,
                    "total_pages": 1
                  }
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/extras/{id}": {
      "get": {
        "operationId": "extras.get",
        "tags": [
          "extras"
        ],
        "summary": "See an extra",
        "x-summary-pt": "Ver um extra",
        "description": "Needs `extras:read`. One extra of this account, with the `id` from the list.",
        "x-description-pt": "Precisa de `extras:read`. Um extra desta conta, com o `id` da lista.",
        "x-permission": "extras:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` from the list, such as `s812`.",
            "x-description-pt": "O `id` da lista, como `s812`."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "See an extra.",
            "x-description-pt": "Ver um extra.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExtrasGetResponse"
                },
                "example": {
                  "data": {
                    "id": "s812",
                    "kind": "ssl",
                    "name": "RapidSSL",
                    "status": "active",
                    "site": null,
                    "parent_service_id": null,
                    "billing_cycle": "annually",
                    "amount": 1077.0,
                    "currency": "MZN",
                    "next_due_date": "2027-11-05",
                    "registered_at": "2026-11-05",
                    "manage_url": "https://my.example.com/clientarea.php?action=productdetails&id=812&language=portuguese&currency=5",
                    "certificate": {
                      "status": "awaiting_configuration",
                      "expires_at": null
                    }
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/extras/purchase": {
      "post": {
        "operationId": "extras.purchase",
        "tags": [
          "extras"
        ],
        "summary": "Buy an extra",
        "x-summary-pt": "Comprar um extra",
        "description": "Needs `billing:purchase`. Also needs `extras:write` and the `Idempotency-Key` header. Paid with credit only, within the spending limit of the key. Only for products with `purchasable`. SiteLock needs `site`; a certificate does not take it and is configured in the portal after the purchase. Answers `202`: the action ends with the payment, and delivery is followed in `GET /v1/extras/{id}`. Limited to 5 per minute.",
        "x-description-pt": "Precisa de `billing:purchase`. Precisa também de `extras:write` e do cabeçalho `Idempotency-Key`. Paga-se só com saldo, dentro do limite de gastos da chave. Só para produtos com `purchasable` a `true`. O SiteLock precisa de `site`; um certificado não o leva e configura-se no portal depois da compra. Responde `202`: a acção acaba com o pagamento, e a entrega acompanha-se em `GET /v1/extras/{id}`. Limite de 5 por minuto.",
        "x-permission": "billing:purchase",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "202": {
            "description": "Buy an extra.",
            "x-description-pt": "Comprar um extra.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExtrasPurchaseResponse"
                },
                "example": {
                  "data": {
                    "action_id": "6f1d2c3a-8b4e-4f7a-9c21-1d2e3f4a5b6c",
                    "status": "simulated",
                    "simulated": true,
                    "product_id": 96,
                    "name": "Fix",
                    "billing_cycle": "annually",
                    "site": "example.com",
                    "amount": 5999.4,
                    "currency": "MZN",
                    "credit_sufficient": true,
                    "within_spending_limit": true
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/InsufficientCredit"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "product_id",
                  "billing_cycle"
                ],
                "properties": {
                  "product_id": {
                    "type": "integer",
                    "description": "The `id` from the catalog.",
                    "x-description-pt": "O `id` do catálogo."
                  },
                  "billing_cycle": {
                    "type": "string",
                    "enum": [
                      "monthly",
                      "annually",
                      "biennially",
                      "triennially"
                    ]
                  },
                  "site": {
                    "type": "string",
                    "description": "The domain of the site. Only for SiteLock.",
                    "x-description-pt": "O domínio do site. Só para o SiteLock."
                  }
                }
              },
              "example": {
                "product_id": 96,
                "billing_cycle": "annually",
                "site": "example.com"
              }
            }
          }
        }
      }
    },
    "/v1/reseller": {
      "get": {
        "operationId": "reseller.get",
        "tags": [
          "reseller"
        ],
        "summary": "See the reseller programs",
        "x-summary-pt": "Ver os programas de revenda",
        "description": "Needs `reseller:read`. Which reseller programs this account has: domains, SMS and hosting.",
        "x-description-pt": "Precisa de `reseller:read`. Os programas de revenda que esta conta tem: domínios, SMS e hospedagem.",
        "x-permission": "reseller:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "See the reseller programs.",
            "x-description-pt": "Ver os programas de revenda.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResellerGetResponse"
                },
                "example": {
                  "data": {
                    "is_reseller": true,
                    "programs": {
                      "domains": {
                        "active": false
                      },
                      "sms": {
                        "status": "active",
                        "balance": 50.0,
                        "daily_limit": 200
                      },
                      "hosting": {
                        "active": true,
                        "accounts": 1
                      }
                    }
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/reseller/services": {
      "get": {
        "operationId": "reseller.services.list",
        "tags": [
          "reseller"
        ],
        "summary": "List reseller accounts",
        "x-summary-pt": "Listar as contas de revenda",
        "description": "Needs `reseller:read`. The reseller hosting accounts of this account. Access data never comes here.",
        "x-description-pt": "Precisa de `reseller:read`. As contas de revenda de hospedagem desta conta. Os dados de acesso nunca vêm aqui.",
        "x-permission": "reseller:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "List reseller accounts.",
            "x-description-pt": "Listar as contas de revenda.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResellerServicesListResponse"
                },
                "example": {
                  "data": [
                    {
                      "id": 930,
                      "name": "Reseller I",
                      "domain": "example.com",
                      "status": "active",
                      "billing_cycle": "annually",
                      "amount": 12384.0,
                      "currency": "MZN",
                      "next_due_date": "2027-11-05",
                      "registered_at": "2026-11-05",
                      "manage_url": "https://my.example.com/clientarea.php?action=productdetails&id=930&language=portuguese&currency=5"
                    }
                  ],
                  "meta": {
                    "page": 1,
                    "per_page": 10,
                    "total": 1,
                    "total_pages": 1
                  }
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationFailed"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/reseller/services/{id}": {
      "get": {
        "operationId": "reseller.services.get",
        "tags": [
          "reseller"
        ],
        "summary": "See a reseller account",
        "x-summary-pt": "Ver uma conta de revenda",
        "description": "Needs `reseller:read`. One reseller hosting account of this account.",
        "x-description-pt": "Precisa de `reseller:read`. Uma conta de revenda de hospedagem desta conta.",
        "x-permission": "reseller:read",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` of the account.",
            "x-description-pt": "O `id` da conta."
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "See a reseller account.",
            "x-description-pt": "Ver uma conta de revenda.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResellerServicesGetResponse"
                },
                "example": {
                  "data": {
                    "id": 930,
                    "name": "Reseller I",
                    "domain": "example.com",
                    "status": "active",
                    "billing_cycle": "annually",
                    "amount": 12384.0,
                    "currency": "MZN",
                    "next_due_date": "2027-11-05",
                    "registered_at": "2026-11-05",
                    "manage_url": "https://my.example.com/clientarea.php?action=productdetails&id=930&language=portuguese&currency=5"
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/v1/sms/messages/{id}/cancel": {
      "post": {
        "operationId": "sms.messages.cancel",
        "tags": [
          "sms"
        ],
        "summary": "Cancel a scheduled SMS",
        "x-summary-pt": "Cancelar um SMS agendado",
        "description": "Needs `sms:write`. Only messages of this account that are still `scheduled` can be cancelled. If the credits were already charged they go back to the balance, and `credits_returned` says how many; a scheduled message is usually only charged when it goes out, so there is often nothing to return. A message that already went out, is going out, or was already cancelled returns `409` with `details.reason` set to `not_cancellable`. With a Sandbox key, or while the API is in preparation, it checks everything and changes nothing. Send `Idempotency-Key` so a retry gives the same answer.",
        "x-description-pt": "Precisa de `sms:write`. Só se cancelam mensagens desta conta que ainda estejam `scheduled`. Se os créditos já tiverem sido cobrados, voltam ao saldo, e `credits_returned` diz quantos; normalmente uma mensagem agendada só se cobra quando sai, e por isso muitas vezes não há nada a devolver. Uma mensagem que já saiu, que está a sair ou que já foi cancelada responde `409`, com `details.reason` a `not_cancellable`. Com uma chave de Sandbox, ou enquanto a API está em preparação, confere tudo e não muda nada. Envie `Idempotency-Key` para uma repetição dar a mesma resposta.",
        "x-permission": "sms:write",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The `id` returned when sending.",
            "x-description-pt": "O `id` devolvido ao enviar."
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          },
          {
            "$ref": "#/components/parameters/XApiMode"
          }
        ],
        "responses": {
          "200": {
            "description": "Cancel a scheduled SMS.",
            "x-description-pt": "Cancelar um SMS agendado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SmsMessagesCancelResponse"
                },
                "example": {
                  "data": {
                    "id": "412",
                    "status": "cancelled",
                    "simulated": false,
                    "to": "25884****567",
                    "sender": "NETMSG",
                    "parts": 1,
                    "encoding": "GSM",
                    "credits": 1.0,
                    "charged": false,
                    "mode": "production",
                    "error": null,
                    "scheduled_for": "2026-11-20T09:30:00+02:00",
                    "created_at": "2026-11-10T12:00:00+02:00",
                    "sent_at": null,
                    "credits_returned": 0.0
                  },
                  "meta": {}
                }
              }
            },
            "headers": {
              "X-Correlation-ID": {
                "$ref": "#/components/headers/X-Correlation-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-API-Mode": {
                "$ref": "#/components/headers/X-API-Mode"
              },
              "X-API-Simulated": {
                "$ref": "#/components/headers/X-API-Simulated"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/SmsResellerRequired"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "prod_ or sandbox_ followed by 43 characters",
        "description": "Create the key in Meu Interweb, on the API page. It is shown only once. It is never accepted in the query string.",
        "x-description-pt": "Crie a chave no Meu Interweb, na página API. É mostrada uma só vez. Nunca é aceite no endereço."
      }
    },
    "headers": {
      "X-Correlation-ID": {
        "description": "Identifier of this request. Give it to support when you report a problem.",
        "schema": {
          "type": "string",
          "format": "uuid"
        }
      },
      "X-RateLimit-Limit": {
        "description": "Requests allowed per minute.",
        "schema": {
          "type": "integer"
        }
      },
      "X-RateLimit-Remaining": {
        "description": "Requests left in the current minute.",
        "schema": {
          "type": "integer"
        }
      },
      "X-RateLimit-Reset": {
        "description": "When the minute ends, as a Unix timestamp in seconds.",
        "schema": {
          "type": "integer"
        }
      },
      "Retry-After": {
        "description": "Seconds to wait before trying again.",
        "schema": {
          "type": "integer"
        }
      },
      "Idempotent-Replayed": {
        "description": "Present and `true` when this is the saved answer of an earlier request with the same Idempotency-Key.",
        "schema": {
          "type": "string"
        }
      },
      "X-API-Mode": {
        "description": "The mode of the key that made the request: `sandbox` or `production`.",
        "x-description-pt": "O modo da chave que fez o pedido: `sandbox` ou `production`.",
        "schema": {
          "type": "string",
          "enum": [
            "sandbox",
            "production"
          ]
        }
      },
      "X-API-Simulated": {
        "description": "Present and `true` when this write was simulated: nothing changed and nothing was charged.",
        "x-description-pt": "Presente e `true` quando esta escrita foi simulada: nada mudou e nada foi cobrado.",
        "schema": {
          "type": "string",
          "enum": [
            "true"
          ]
        }
      }
    },
    "parameters": {
      "IdempotencyKey": {
        "name": "Idempotency-Key",
        "in": "header",
        "required": false,
        "description": "Any unique value, up to 255 visible characters. Valid for 24 hours per key. Repeating the same request returns the saved answer; a different body, or a first request still in progress, returns 409.",
        "x-description-pt": "Um valor único qualquer, até 255 caracteres visíveis. Vale 24 horas por chave. Repetir o mesmo pedido devolve a resposta guardada; outro corpo, ou um primeiro pedido ainda em curso, devolve 409.",
        "schema": {
          "type": "string",
          "maxLength": 255
        }
      },
      "AcceptLanguage": {
        "name": "Accept-Language",
        "in": "header",
        "required": false,
        "description": "Language of the error messages: pt or en. The default is en.",
        "x-description-pt": "Língua das mensagens de erro: pt ou en. Por omissão, en.",
        "schema": {
          "type": "string",
          "enum": [
            "pt",
            "en"
          ]
        }
      },
      "XApiMode": {
        "name": "X-API-Mode",
        "in": "header",
        "required": false,
        "description": "Optional. If it does not match the mode of the key, the request is refused with `invalid_request` and reason `mode_mismatch`. Use it to make sure a program never runs with the wrong key.",
        "x-description-pt": "Opcional. Se não coincidir com o modo da chave, o pedido é recusado com `invalid_request` e a razão `mode_mismatch`. Serve para garantir que um programa nunca corre com a chave errada.",
        "schema": {
          "type": "string",
          "enum": [
            "sandbox",
            "production"
          ]
        }
      },
      "Page": {
        "name": "page",
        "in": "query",
        "required": false,
        "description": "The page number. The first is 1.",
        "x-description-pt": "O número da página. A primeira é a 1.",
        "schema": {
          "type": "integer",
          "minimum": 1,
          "default": 1
        }
      },
      "PerPage": {
        "name": "per_page",
        "in": "query",
        "required": false,
        "description": "Results per page, from 1 to 100. The default is 10.",
        "x-description-pt": "Resultados por página, de 1 a 100. Por omissão, 10.",
        "schema": {
          "type": "integer",
          "minimum": 1,
          "maximum": 100,
          "default": 10
        }
      },
      "Currency": {
        "name": "currency",
        "in": "query",
        "required": false,
        "description": "Currency code. The default is the currency of the account.",
        "x-description-pt": "Código da moeda. Por omissão, a moeda da conta.",
        "schema": {
          "type": "string"
        },
        "example": "MZN"
      }
    },
    "schemas": {
      "Meta": {
        "type": "object",
        "description": "Extra data. In lists: page, per_page, total and total_pages.",
        "additionalProperties": true
      },
      "ListMeta": {
        "type": "object",
        "required": [
          "page",
          "per_page",
          "total",
          "total_pages"
        ],
        "properties": {
          "page": {
            "type": "integer"
          },
          "per_page": {
            "type": "integer"
          },
          "total": {
            "type": "integer"
          },
          "total_pages": {
            "type": "integer"
          }
        }
      },
      "Error": {
        "type": "object",
        "required": [
          "error"
        ],
        "properties": {
          "error": {
            "type": "object",
            "required": [
              "code",
              "message",
              "correlation_id",
              "details"
            ],
            "properties": {
              "code": {
                "$ref": "#/components/schemas/ErrorCode"
              },
              "message": {
                "type": "string",
                "description": "Text for people, in the language asked for. Do not parse it; use code."
              },
              "correlation_id": {
                "type": "string",
                "description": "Give it to support when you report a problem."
              },
              "details": {
                "type": "object",
                "additionalProperties": true
              }
            }
          }
        }
      },
      "ErrorCode": {
        "type": "string",
        "enum": [
          "invalid_request",
          "unauthorized",
          "forbidden",
          "insufficient_scope",
          "ip_not_allowed",
          "not_found",
          "method_not_allowed",
          "idempotency_conflict",
          "validation_failed",
          "rate_limited",
          "internal_error",
          "disabled",
          "sms_reseller_required",
          "conflict",
          "insufficient_credit",
          "spending_limit_exceeded",
          "upstream_error",
          "account_email_domain"
        ],
        "x-http-status": {
          "invalid_request": 400,
          "unauthorized": 401,
          "forbidden": 403,
          "insufficient_scope": 403,
          "ip_not_allowed": 403,
          "not_found": 404,
          "method_not_allowed": 405,
          "idempotency_conflict": 409,
          "validation_failed": 422,
          "rate_limited": 429,
          "internal_error": 500,
          "disabled": 503,
          "conflict": 409,
          "insufficient_credit": 402,
          "spending_limit_exceeded": 403,
          "upstream_error": 502,
          "account_email_domain": 409
        }
      },
      "RequestLimit": {
        "type": "object",
        "required": [
          "limit",
          "remaining",
          "reset",
          "window_seconds"
        ],
        "properties": {
          "limit": {
            "type": "integer"
          },
          "remaining": {
            "type": "integer"
          },
          "reset": {
            "type": "integer",
            "description": "Unix timestamp in seconds."
          },
          "window_seconds": {
            "type": "integer"
          }
        }
      },
      "Spending": {
        "type": "object",
        "required": [
          "limit",
          "spent",
          "currency",
          "window_days"
        ],
        "properties": {
          "limit": {
            "type": "number",
            "description": "Maximum per 30 days, in the currency of the customer. 0 means the key cannot spend."
          },
          "spent": {
            "type": "number"
          },
          "currency": {
            "type": "string"
          },
          "window_days": {
            "type": "integer"
          }
        }
      },
      "PingResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "required": [
              "status",
              "version",
              "time"
            ],
            "properties": {
              "status": {
                "type": "string",
                "const": "ok"
              },
              "version": {
                "type": "string"
              },
              "time": {
                "type": "string",
                "format": "date-time"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "TokenResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "required": [
              "id",
              "name",
              "type",
              "suffix",
              "permissions",
              "allowed_ips",
              "expires_at",
              "created_at",
              "last_used_at",
              "rate_limit",
              "spending",
              "mode",
              "writes_simulated"
            ],
            "properties": {
              "id": {
                "type": "integer"
              },
              "name": {
                "type": "string"
              },
              "type": {
                "type": "string",
                "enum": [
                  "production",
                  "sandbox"
                ]
              },
              "suffix": {
                "type": "string",
                "description": "Last 4 characters of the key."
              },
              "permissions": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "allowed_ips": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Empty means any IP address."
              },
              "expires_at": {
                "type": [
                  "string",
                  "null"
                ],
                "format": "date-time",
                "description": "null means no expiry."
              },
              "created_at": {
                "type": "string",
                "format": "date-time"
              },
              "last_used_at": {
                "type": [
                  "string",
                  "null"
                ],
                "format": "date-time"
              },
              "rate_limit": {
                "$ref": "#/components/schemas/RequestLimit"
              },
              "spending": {
                "$ref": "#/components/schemas/Spending"
              },
              "mode": {
                "type": "string",
                "enum": [
                  "sandbox",
                  "production"
                ],
                "description": "The mode of this key.",
                "x-description-pt": "O modo desta chave."
              },
              "writes_simulated": {
                "type": "boolean",
                "description": "True when writes with this key are simulated: a Sandbox key, or a Production key while the API is still in preparation.",
                "x-description-pt": "Verdadeiro quando as escritas com esta chave são simuladas: uma chave de Sandbox, ou uma chave de Produção enquanto a API está em preparação."
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "LimitsResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "required": [
              "requests",
              "unauthenticated_requests_per_minute",
              "spending",
              "mode"
            ],
            "properties": {
              "requests": {
                "$ref": "#/components/schemas/RequestLimit"
              },
              "unauthenticated_requests_per_minute": {
                "type": "integer"
              },
              "spending": {
                "$ref": "#/components/schemas/Spending"
              },
              "mode": {
                "type": "string",
                "enum": [
                  "sandbox",
                  "production"
                ],
                "description": "The mode of this key.",
                "x-description-pt": "O modo desta chave."
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "ActionResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "required": [
              "id",
              "type",
              "target",
              "status",
              "result",
              "created_at",
              "updated_at"
            ],
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid"
              },
              "type": {
                "type": "string"
              },
              "target": {
                "type": "string"
              },
              "status": {
                "type": "string",
                "enum": [
                  "queued",
                  "running",
                  "done",
                  "failed"
                ]
              },
              "result": {
                "description": "null until the action ends."
              },
              "created_at": {
                "type": "string",
                "format": "date-time"
              },
              "updated_at": {
                "type": "string",
                "format": "date-time"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "SmsMessage": {
        "type": "object",
        "required": [
          "id",
          "status",
          "simulated",
          "to",
          "sender",
          "parts",
          "encoding",
          "credits",
          "mode",
          "charged"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "A number for messages in the queue, a UUID for simulated ones.",
            "x-description-pt": "Um número nas mensagens que entraram na fila, um UUID nas simuladas."
          },
          "status": {
            "type": "string",
            "enum": [
              "scheduled",
              "queued",
              "sending",
              "sent",
              "simulated",
              "failed",
              "cancelled"
            ],
            "description": "`scheduled`: waiting for the time in `scheduled_for`, and it can still be cancelled. `queued`: waiting its turn to go out.",
            "x-description-pt": "`scheduled`: à espera da hora em `scheduled_for`, e ainda se pode cancelar. `queued`: à espera da vez para sair."
          },
          "simulated": {
            "type": "boolean",
            "description": "True when no real SMS goes out.",
            "x-description-pt": "Verdadeiro quando o SMS é simulado e não sai nenhuma mensagem."
          },
          "to": {
            "type": "string",
            "description": "The number, partly hidden.",
            "x-description-pt": "O número, em parte tapado."
          },
          "sender": {
            "type": "string"
          },
          "parts": {
            "type": "integer"
          },
          "encoding": {
            "type": "string",
            "enum": [
              "GSM",
              "UCS2"
            ]
          },
          "credits": {
            "type": "number",
            "description": "What the message costs in credits. See `charged` to know whether they already left the SMS balance. Always 0 when simulated by the API.",
            "x-description-pt": "Quanto custa a mensagem, em créditos. Veja `charged` para saber se já saíram do saldo de SMS. Sempre 0 quando a API simula."
          },
          "would_cost": {
            "type": "number",
            "description": "Only on simulated messages: what a real send would cost.",
            "x-description-pt": "Só nas simuladas: quanto custaria o envio em Produção."
          },
          "mode": {
            "type": "string",
            "enum": [
              "sandbox",
              "production"
            ]
          },
          "error": {
            "type": [
              "string",
              "null"
            ],
            "description": "`delivery_failed` when it could not be delivered; `insufficient_credits` when a scheduled message did not have enough balance when it was due to go out.",
            "x-description-pt": "`delivery_failed` quando não foi possível entregar; `insufficient_credits` quando uma mensagem agendada não tinha saldo suficiente na hora de sair."
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "sent_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "charged": {
            "type": "boolean",
            "description": "True when the credits have left the SMS balance. A scheduled message is only charged when it goes out; failed, cancelled and simulated messages give the credits back.",
            "x-description-pt": "Verdadeiro quando os créditos saíram do saldo de SMS. Uma mensagem agendada só se cobra quando sai; as falhadas, canceladas e simuladas devolvem os créditos."
          },
          "scheduled_for": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "The time chosen in `send_at`, while the message is scheduled or after it was cancelled; otherwise `null`.",
            "x-description-pt": "A hora escolhida em `send_at`, enquanto a mensagem está agendada ou depois de cancelada; nos outros casos, `null`."
          }
        }
      },
      "SmsMessageResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "$ref": "#/components/schemas/SmsMessage"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "SmsBalanceResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "required": [
              "balance",
              "unit",
              "daily_limit",
              "sent_today",
              "mode",
              "scheduled_credits"
            ],
            "properties": {
              "balance": {
                "type": "number"
              },
              "unit": {
                "type": "string",
                "enum": [
                  "credits"
                ]
              },
              "daily_limit": {
                "type": "integer"
              },
              "sent_today": {
                "type": "integer"
              },
              "mode": {
                "type": "string",
                "enum": [
                  "sandbox",
                  "production"
                ]
              },
              "scheduled_credits": {
                "type": "number",
                "description": "Credits of scheduled messages that were not charged yet. They are still in `balance` and leave it when each message goes out.",
                "x-description-pt": "Créditos das mensagens agendadas que ainda não foram cobradas. Continuam em `balance` e saem quando cada mensagem sair."
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "SmsSendersResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "sender",
                "status",
                "free"
              ],
              "properties": {
                "sender": {
                  "type": "string"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "approved",
                    "pending",
                    "in_review",
                    "rejected"
                  ]
                },
                "free": {
                  "type": "boolean",
                  "description": "The free sender, available to every reseller account.",
                  "x-description-pt": "O remetente grátis, disponível em todas as contas revendedoras."
                }
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "AccountGetResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "integer"
              },
              "first_name": {
                "type": "string"
              },
              "last_name": {
                "type": "string"
              },
              "company": {
                "type": "string"
              },
              "email": {
                "type": "string"
              },
              "phone": {
                "type": "string"
              },
              "tax_id": {
                "type": "string"
              },
              "address": {
                "type": "object",
                "properties": {
                  "line1": {
                    "type": "string"
                  },
                  "line2": {
                    "type": "string"
                  },
                  "city": {
                    "type": "string"
                  },
                  "state": {
                    "type": "string"
                  },
                  "postcode": {
                    "type": "string"
                  },
                  "country": {
                    "type": "string"
                  }
                }
              },
              "currency": {
                "type": "string"
              },
              "language": {
                "type": "string"
              },
              "status": {
                "type": "string"
              },
              "email_verified": {
                "type": "boolean"
              },
              "created_at": {
                "type": "string"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "AccountContactsListResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "integer"
                },
                "first_name": {
                  "type": "string"
                },
                "last_name": {
                  "type": "string"
                },
                "company": {
                  "type": "string"
                },
                "email": {
                  "type": "string"
                },
                "phone": {
                  "type": "string"
                },
                "address": {
                  "type": "object",
                  "properties": {
                    "line1": {
                      "type": "string"
                    },
                    "line2": {
                      "type": "string"
                    },
                    "city": {
                      "type": "string"
                    },
                    "state": {
                      "type": "string"
                    },
                    "postcode": {
                      "type": "string"
                    },
                    "country": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/ListMeta"
          }
        }
      },
      "AccountUsersListResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "integer"
                },
                "first_name": {
                  "type": "string"
                },
                "last_name": {
                  "type": "string"
                },
                "email": {
                  "type": "string"
                },
                "owner": {
                  "type": "boolean"
                },
                "two_factor_enabled": {
                  "type": "boolean"
                },
                "permissions": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "last_login_at": {
                  "type": "string"
                }
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/ListMeta"
          }
        }
      },
      "CatalogProductsListResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "integer"
                },
                "name": {
                  "type": "string"
                },
                "type": {
                  "type": "string"
                },
                "description": {
                  "type": "string"
                },
                "group": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "integer"
                    },
                    "name": {
                      "type": "string"
                    }
                  }
                },
                "free": {
                  "type": "boolean"
                },
                "currency": {
                  "type": "string"
                },
                "prices": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "billing_cycle": {
                        "type": "string"
                      },
                      "price": {
                        "type": "number"
                      },
                      "setup_fee": {
                        "type": "number"
                      }
                    }
                  }
                }
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/ListMeta"
          }
        }
      },
      "CatalogTldsListResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "extension": {
                  "type": "string"
                },
                "currency": {
                  "type": "string"
                },
                "register": {
                  "type": "object",
                  "properties": {
                    "1": {
                      "type": "number"
                    },
                    "2": {
                      "type": "number"
                    }
                  }
                },
                "renew": {
                  "type": "object",
                  "properties": {
                    "1": {
                      "type": "number"
                    }
                  }
                },
                "transfer": {
                  "type": "object",
                  "properties": {
                    "1": {
                      "type": "number"
                    }
                  }
                },
                "features": {
                  "type": "object",
                  "properties": {
                    "dns_management": {
                      "type": "boolean"
                    },
                    "email_forwarding": {
                      "type": "boolean"
                    },
                    "id_protection": {
                      "type": "boolean"
                    },
                    "transfer_code_required": {
                      "type": "boolean"
                    }
                  }
                },
                "label": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/ListMeta"
          }
        }
      },
      "CatalogCurrenciesListResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "code": {
                  "type": "string"
                },
                "prefix": {
                  "type": "string"
                },
                "suffix": {
                  "type": "string"
                },
                "default": {
                  "type": "boolean"
                }
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "CatalogBillingCyclesListResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "billing_cycle": {
                  "type": "string"
                },
                "months": {
                  "type": "integer"
                }
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "DomainsListResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "integer"
                },
                "domain": {
                  "type": "string"
                },
                "status": {
                  "type": "string"
                },
                "type": {
                  "type": "string"
                },
                "registered_at": {
                  "type": "string"
                },
                "expires_at": {
                  "type": "string"
                },
                "next_due_date": {
                  "type": "string"
                },
                "period_years": {
                  "type": "integer"
                },
                "renewal_amount": {
                  "type": "number"
                },
                "currency": {
                  "type": "string"
                },
                "auto_renew": {
                  "type": "boolean"
                },
                "premium": {
                  "type": "boolean"
                },
                "features": {
                  "type": "object",
                  "properties": {
                    "dns_management": {
                      "type": "boolean"
                    },
                    "email_forwarding": {
                      "type": "boolean"
                    },
                    "id_protection": {
                      "type": "boolean"
                    }
                  }
                }
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/ListMeta"
          }
        }
      },
      "DomainsGetResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "integer"
              },
              "domain": {
                "type": "string"
              },
              "status": {
                "type": "string"
              },
              "type": {
                "type": "string"
              },
              "registered_at": {
                "type": "string"
              },
              "expires_at": {
                "type": "string"
              },
              "next_due_date": {
                "type": "string"
              },
              "period_years": {
                "type": "integer"
              },
              "renewal_amount": {
                "type": "number"
              },
              "currency": {
                "type": "string"
              },
              "auto_renew": {
                "type": "boolean"
              },
              "premium": {
                "type": "boolean"
              },
              "features": {
                "type": "object",
                "properties": {
                  "dns_management": {
                    "type": "boolean"
                  },
                  "email_forwarding": {
                    "type": "boolean"
                  },
                  "id_protection": {
                    "type": "boolean"
                  }
                }
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "ServicesListResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "integer"
                },
                "product": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "integer"
                    },
                    "name": {
                      "type": "string"
                    },
                    "group": {
                      "type": "string"
                    },
                    "type": {
                      "type": "string"
                    }
                  }
                },
                "domain": {
                  "type": "string"
                },
                "username": {
                  "type": "string"
                },
                "dedicated_ip": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "status": {
                  "type": "string"
                },
                "suspension_reason": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "billing_cycle": {
                  "type": "string"
                },
                "amount": {
                  "type": "number"
                },
                "currency": {
                  "type": "string"
                },
                "payment_method": {
                  "type": "string"
                },
                "registered_at": {
                  "type": "string"
                },
                "next_due_date": {
                  "type": "string"
                },
                "terminated_at": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/ListMeta"
          }
        }
      },
      "ServicesGetResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "integer"
              },
              "product": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "integer"
                  },
                  "name": {
                    "type": "string"
                  },
                  "group": {
                    "type": "string"
                  },
                  "type": {
                    "type": "string"
                  }
                }
              },
              "domain": {
                "type": "string"
              },
              "username": {
                "type": "string"
              },
              "dedicated_ip": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "status": {
                "type": "string"
              },
              "suspension_reason": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "billing_cycle": {
                "type": "string"
              },
              "amount": {
                "type": "number"
              },
              "currency": {
                "type": "string"
              },
              "payment_method": {
                "type": "string"
              },
              "registered_at": {
                "type": "string"
              },
              "next_due_date": {
                "type": "string"
              },
              "terminated_at": {
                "type": [
                  "string",
                  "null"
                ]
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "InvoicesListResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "integer"
                },
                "number": {
                  "type": "string"
                },
                "status": {
                  "type": "string"
                },
                "date": {
                  "type": "string"
                },
                "due_date": {
                  "type": "string"
                },
                "paid_at": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "subtotal": {
                  "type": "number"
                },
                "tax": {
                  "type": "number"
                },
                "credit_applied": {
                  "type": "number"
                },
                "total": {
                  "type": "number"
                },
                "balance_due": {
                  "type": "number"
                },
                "currency": {
                  "type": "string"
                },
                "payment_method": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                }
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/ListMeta"
          }
        }
      },
      "InvoicesGetResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "integer"
              },
              "number": {
                "type": "string"
              },
              "status": {
                "type": "string"
              },
              "date": {
                "type": "string"
              },
              "due_date": {
                "type": "string"
              },
              "paid_at": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "subtotal": {
                "type": "number"
              },
              "tax": {
                "type": "number"
              },
              "credit_applied": {
                "type": "number"
              },
              "total": {
                "type": "number"
              },
              "balance_due": {
                "type": "number"
              },
              "currency": {
                "type": "string"
              },
              "payment_method": {
                "type": "string"
              },
              "url": {
                "type": "string"
              },
              "items": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "integer"
                    },
                    "type": {
                      "type": "string"
                    },
                    "related_id": {
                      "type": [
                        "integer",
                        "null"
                      ]
                    },
                    "description": {
                      "type": "string"
                    },
                    "amount": {
                      "type": "number"
                    },
                    "taxed": {
                      "type": "boolean"
                    }
                  }
                }
              },
              "notes": {
                "type": "string"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "BillingCreditGetResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "balance": {
                "type": "number"
              },
              "currency": {
                "type": "string"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "BillingTransactionsListResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "integer"
                },
                "date": {
                  "type": "string"
                },
                "description": {
                  "type": "string"
                },
                "amount_in": {
                  "type": "number"
                },
                "amount_out": {
                  "type": "number"
                },
                "currency": {
                  "type": "string"
                },
                "invoice_id": {
                  "type": "integer"
                },
                "payment_method": {
                  "type": "string"
                },
                "transaction_id": {
                  "type": "string"
                }
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/ListMeta"
          }
        }
      },
      "TicketsListResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "subject": {
                  "type": "string"
                },
                "status": {
                  "type": "string"
                },
                "priority": {
                  "type": "string"
                },
                "department": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "integer"
                    },
                    "name": {
                      "type": "string"
                    }
                  }
                },
                "unread": {
                  "type": "boolean"
                },
                "created_at": {
                  "type": "string"
                },
                "last_reply_at": {
                  "type": "string"
                }
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/ListMeta"
          }
        }
      },
      "TicketsGetResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "subject": {
                "type": "string"
              },
              "status": {
                "type": "string"
              },
              "priority": {
                "type": "string"
              },
              "department": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "integer"
                  },
                  "name": {
                    "type": "string"
                  }
                }
              },
              "unread": {
                "type": "boolean"
              },
              "created_at": {
                "type": "string"
              },
              "last_reply_at": {
                "type": "string"
              },
              "messages": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string"
                    },
                    "from": {
                      "type": "string"
                    },
                    "author": {
                      "type": "string"
                    },
                    "message": {
                      "type": "string"
                    },
                    "attachments": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "created_at": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "SupportDepartmentsListResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "integer"
                },
                "name": {
                  "type": "string"
                },
                "description": {
                  "type": "string"
                }
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "DomainsAvailabilityResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "domain": {
                "type": "string"
              },
              "extension": {
                "type": "string"
              },
              "status": {
                "type": "string"
              },
              "available": {
                "type": "boolean"
              },
              "one_year_price": {
                "type": "object",
                "properties": {
                  "register": {
                    "type": "number"
                  },
                  "renew": {
                    "type": "number"
                  },
                  "transfer": {
                    "type": "number"
                  }
                }
              },
              "currency": {
                "type": "string"
              },
              "portal_only": {
                "type": "boolean"
              },
              "portal_reason": {
                "type": [
                  "string",
                  "null"
                ]
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "DomainsRegisterResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "action_id": {
                "type": "string"
              },
              "status": {
                "type": "string"
              },
              "simulated": {
                "type": "boolean"
              },
              "domain": {
                "type": "string"
              },
              "years": {
                "type": "integer"
              },
              "amount": {
                "type": "number"
              },
              "currency": {
                "type": "string"
              },
              "credit_sufficient": {
                "type": "boolean"
              },
              "within_spending_limit": {
                "type": "boolean"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "DomainsTransferResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "action_id": {
                "type": "string"
              },
              "status": {
                "type": "string"
              },
              "simulated": {
                "type": "boolean"
              },
              "domain": {
                "type": "string"
              },
              "years": {
                "type": "integer"
              },
              "amount": {
                "type": "number"
              },
              "currency": {
                "type": "string"
              },
              "credit_sufficient": {
                "type": "boolean"
              },
              "within_spending_limit": {
                "type": "boolean"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "DomainsRenewResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "action_id": {
                "type": "string"
              },
              "status": {
                "type": "string"
              },
              "simulated": {
                "type": "boolean"
              },
              "domain": {
                "type": "string"
              },
              "years": {
                "type": "integer"
              },
              "amount": {
                "type": "number"
              },
              "currency": {
                "type": "string"
              },
              "credit_sufficient": {
                "type": "boolean"
              },
              "within_spending_limit": {
                "type": "boolean"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "DomainsNameserversGetResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "domain": {
                "type": "string"
              },
              "nameservers": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "uses_our_nameservers": {
                "type": "boolean"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "DomainsNameserversUpdateResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "domain": {
                "type": "string"
              },
              "nameservers": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "simulated": {
                "type": "boolean"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "DomainsLockGetResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "domain": {
                "type": "string"
              },
              "locked": {
                "type": "boolean"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "DomainsLockUpdateResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "domain": {
                "type": "string"
              },
              "locked": {
                "type": "boolean"
              },
              "simulated": {
                "type": "boolean"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "DomainsAutoRenewUpdateResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "domain": {
                "type": "string"
              },
              "auto_renew": {
                "type": "boolean"
              },
              "simulated": {
                "type": "boolean"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "DomainsContactsGetResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "domain": {
                "type": "string"
              },
              "contacts": {
                "type": "object",
                "properties": {
                  "Registrant": {
                    "type": "object",
                    "properties": {
                      "Full Name": {
                        "type": "string"
                      },
                      "Email": {
                        "type": "string"
                      }
                    }
                  }
                }
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "DomainsTransferCodeRequestResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "domain": {
                "type": "string"
              },
              "status": {
                "type": "string"
              },
              "simulated": {
                "type": "boolean"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "DnsRecordsListResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "type": {
                  "type": "string"
                },
                "value": {
                  "type": "string"
                },
                "ttl": {
                  "type": "integer"
                },
                "priority": {
                  "type": "integer"
                },
                "read_only": {
                  "type": "boolean"
                }
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "DnsRecordsCreateResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "type": {
                "type": "string"
              },
              "value": {
                "type": "string"
              },
              "ttl": {
                "type": "integer"
              },
              "priority": {
                "type": "integer"
              },
              "read_only": {
                "type": "boolean"
              },
              "simulated": {
                "type": "boolean"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "DnsRecordsValidateResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "valid": {
                "type": "boolean"
              },
              "record": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string"
                  },
                  "type": {
                    "type": "string"
                  },
                  "value": {
                    "type": "string"
                  },
                  "ttl": {
                    "type": "integer"
                  },
                  "priority": {
                    "type": "integer"
                  }
                }
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "DnsRecordsUpdateResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "type": {
                "type": "string"
              },
              "value": {
                "type": "string"
              },
              "ttl": {
                "type": "integer"
              },
              "priority": {
                "type": "integer"
              },
              "read_only": {
                "type": "boolean"
              },
              "simulated": {
                "type": "boolean"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "DnsRecordsDeleteResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "deleted": {
                "type": "boolean"
              },
              "simulated": {
                "type": "boolean"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "DnsZoneResetResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "domain": {
                "type": "string"
              },
              "reset": {
                "type": "boolean"
              },
              "simulated": {
                "type": "boolean"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "DnsBackupsListResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "integer"
                },
                "reason": {
                  "type": "string"
                },
                "records": {
                  "type": "integer"
                },
                "created_at": {
                  "type": "string"
                }
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "DnsBackupsRestoreResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "domain": {
                "type": "string"
              },
              "removed": {
                "type": "integer"
              },
              "added": {
                "type": "integer"
              },
              "simulated": {
                "type": "boolean"
              },
              "complete": {
                "type": "boolean"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "InvoicesPdfResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "pdf_available": {
                "type": "boolean"
              },
              "filename": {
                "type": "string"
              },
              "content_type": {
                "type": "string"
              },
              "encoding": {
                "type": "string"
              },
              "size_bytes": {
                "type": "integer"
              },
              "content": {
                "type": "string"
              },
              "invoice_id": {
                "type": "integer"
              },
              "number": {
                "type": "string"
              },
              "url": {
                "type": "string"
              },
              "reason": {
                "type": [
                  "string",
                  "null"
                ]
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "InvoicesPayResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "status": {
                "type": "string"
              },
              "amount_charged": {
                "type": "number"
              },
              "balance_due": {
                "type": "number"
              },
              "credit_balance": {
                "type": "number"
              },
              "simulated": {
                "type": "boolean"
              },
              "invoice_id": {
                "type": "integer"
              },
              "invoice_total": {
                "type": "number"
              },
              "currency": {
                "type": "string"
              },
              "url": {
                "type": "string"
              },
              "credit_sufficient": {
                "type": "boolean",
                "description": "Sandbox only: the credit would be enough.",
                "x-description-pt": "Só em Sandbox: o saldo chegaria."
              },
              "within_spending_limit": {
                "type": "boolean",
                "description": "Sandbox only: the payment would fit the spending limit of the key.",
                "x-description-pt": "Só em Sandbox: o pagamento caberia no limite de gastos da chave."
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "OrdersListResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "integer"
                },
                "number": {
                  "type": "string"
                },
                "status": {
                  "type": "string"
                },
                "date": {
                  "type": "string"
                },
                "amount": {
                  "type": "number"
                },
                "currency": {
                  "type": "string"
                },
                "payment_method": {
                  "type": "string"
                },
                "invoice_id": {
                  "type": "integer"
                },
                "promo_code": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/ListMeta"
          }
        }
      },
      "OrdersGetResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "integer"
              },
              "number": {
                "type": "string"
              },
              "status": {
                "type": "string"
              },
              "date": {
                "type": "string"
              },
              "amount": {
                "type": "number"
              },
              "currency": {
                "type": "string"
              },
              "payment_method": {
                "type": "string"
              },
              "invoice_id": {
                "type": "integer"
              },
              "promo_code": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "items": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string"
                    },
                    "id": {
                      "type": "integer"
                    },
                    "name": {
                      "type": "string"
                    },
                    "domain": {
                      "type": "string"
                    },
                    "status": {
                      "type": "string"
                    },
                    "billing_cycle": {
                      "type": "string"
                    },
                    "first_payment": {
                      "type": "number"
                    },
                    "recurring_amount": {
                      "type": "number"
                    }
                  }
                }
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "QuotesListResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "integer"
                },
                "subject": {
                  "type": "string"
                },
                "status": {
                  "type": "string"
                },
                "created_at": {
                  "type": "string"
                },
                "sent_at": {
                  "type": "string"
                },
                "valid_until": {
                  "type": "string"
                },
                "accepted_at": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "subtotal": {
                  "type": "number"
                },
                "tax": {
                  "type": "number"
                },
                "total": {
                  "type": "number"
                },
                "currency": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                }
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/ListMeta"
          }
        }
      },
      "QuotesGetResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "integer"
              },
              "subject": {
                "type": "string"
              },
              "status": {
                "type": "string"
              },
              "created_at": {
                "type": "string"
              },
              "sent_at": {
                "type": "string"
              },
              "valid_until": {
                "type": "string"
              },
              "accepted_at": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "subtotal": {
                "type": "number"
              },
              "tax": {
                "type": "number"
              },
              "total": {
                "type": "number"
              },
              "currency": {
                "type": "string"
              },
              "url": {
                "type": "string"
              },
              "proposal": {
                "type": "string"
              },
              "notes": {
                "type": "string"
              },
              "items": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "integer"
                    },
                    "description": {
                      "type": "string"
                    },
                    "quantity": {
                      "type": "number"
                    },
                    "unit_price": {
                      "type": "number"
                    },
                    "discount_percent": {
                      "type": "number"
                    },
                    "taxed": {
                      "type": "boolean"
                    }
                  }
                }
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "ServicesBillingCyclesListResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "service_id": {
                "type": "integer"
              },
              "current_cycle": {
                "type": "string"
              },
              "current_amount": {
                "type": "number"
              },
              "currency": {
                "type": "string"
              },
              "next_due_date": {
                "type": "string"
              },
              "can_change": {
                "type": "boolean"
              },
              "blocked_reason": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "invoice_id": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "cycles": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "cycle": {
                      "type": "string"
                    },
                    "amount": {
                      "type": "number"
                    },
                    "current": {
                      "type": "boolean"
                    }
                  }
                }
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "ServicesBillingCycleUpdateResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "service_id": {
                "type": "integer"
              },
              "previous_cycle": {
                "type": "string"
              },
              "cycle": {
                "type": "string"
              },
              "amount": {
                "type": "number"
              },
              "currency": {
                "type": "string"
              },
              "applies_from": {
                "type": "string"
              },
              "simulated": {
                "type": "boolean"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "ServicesUpgradeLinkGetResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "service_id": {
                "type": "integer"
              },
              "url": {
                "type": "string"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "ServicesCancellationCreateResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "status": {
                "type": "string"
              },
              "service_id": {
                "type": "integer"
              },
              "type": {
                "type": "string"
              },
              "service_ends_at": {
                "type": "string"
              },
              "simulated": {
                "type": "boolean"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "TicketsCreateResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "subject": {
                "type": "string"
              },
              "status": {
                "type": "string"
              },
              "priority": {
                "type": "string"
              },
              "department": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "integer"
                  },
                  "name": {
                    "type": "string"
                  }
                }
              },
              "unread": {
                "type": "boolean"
              },
              "created_at": {
                "type": "string"
              },
              "last_reply_at": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "simulated": {
                "type": "boolean"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "TicketsRepliesCreateResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "ticket_id": {
                "type": "string"
              },
              "reply_id": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "status": {
                "type": "string"
              },
              "reopened": {
                "type": "boolean"
              },
              "simulated": {
                "type": "boolean"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "TicketsCloseResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "ticket_id": {
                "type": "string"
              },
              "status": {
                "type": "string"
              },
              "simulated": {
                "type": "boolean"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "KbCategoriesListResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "integer"
                },
                "name": {
                  "type": "string"
                },
                "description": {
                  "type": "string"
                },
                "articles": {
                  "type": "integer"
                }
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "KbArticlesListResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "integer"
                },
                "title": {
                  "type": "string"
                },
                "categories": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "integer"
                      },
                      "name": {
                        "type": "string"
                      }
                    }
                  }
                },
                "views": {
                  "type": "integer"
                },
                "translated": {
                  "type": "boolean"
                },
                "url": {
                  "type": "string"
                },
                "excerpt": {
                  "type": "string"
                }
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/ListMeta"
          }
        }
      },
      "KbArticlesGetResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "integer"
              },
              "title": {
                "type": "string"
              },
              "categories": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "integer"
                    },
                    "name": {
                      "type": "string"
                    }
                  }
                }
              },
              "views": {
                "type": "integer"
              },
              "translated": {
                "type": "boolean"
              },
              "url": {
                "type": "string"
              },
              "body_html": {
                "type": "string"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "AnnouncementsListResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "integer"
                },
                "title": {
                  "type": "string"
                },
                "published_at": {
                  "type": "string"
                },
                "translated": {
                  "type": "boolean"
                },
                "url": {
                  "type": "string"
                }
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/ListMeta"
          }
        }
      },
      "AnnouncementsGetResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "integer"
              },
              "title": {
                "type": "string"
              },
              "published_at": {
                "type": "string"
              },
              "translated": {
                "type": "boolean"
              },
              "url": {
                "type": "string"
              },
              "body_html": {
                "type": "string"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "ServersListResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "integer"
                },
                "name": {
                  "type": "string"
                },
                "status": {
                  "type": "string"
                },
                "product": {
                  "type": "string"
                },
                "ip": {
                  "type": "string"
                },
                "power_state": {
                  "type": "string"
                },
                "state_checked_at": {
                  "type": "string"
                },
                "next_due_date": {
                  "type": "string"
                }
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/ListMeta"
          }
        }
      },
      "ServersGetResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "integer"
              },
              "name": {
                "type": "string"
              },
              "status": {
                "type": "string"
              },
              "product": {
                "type": "string"
              },
              "ip": {
                "type": "string"
              },
              "power_state": {
                "type": "string"
              },
              "state_checked_at": {
                "type": "string"
              },
              "next_due_date": {
                "type": "string"
              },
              "additional_ips": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "operating_system": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string"
                  },
                  "version": {
                    "type": "string"
                  }
                }
              },
              "location": {
                "type": "string"
              },
              "resources": {
                "type": "object",
                "properties": {
                  "vcpu": {
                    "type": "integer"
                  },
                  "ram_gb": {
                    "type": "integer"
                  },
                  "disk_gb": {
                    "type": "integer"
                  },
                  "traffic_gb": {
                    "type": "integer"
                  }
                }
              },
              "billing_cycle": {
                "type": "string"
              },
              "state_stale": {
                "type": "boolean"
              },
              "portal_url": {
                "type": "string"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "ServersTrafficGetResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "server_id": {
                "type": "integer"
              },
              "month": {
                "type": "string"
              },
              "total_gb": {
                "type": "number"
              },
              "in_gb": {
                "type": "number"
              },
              "out_gb": {
                "type": "number"
              },
              "limit_gb": {
                "type": "integer"
              },
              "days": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "date": {
                      "type": "string"
                    },
                    "total_gb": {
                      "type": "number"
                    }
                  }
                }
              },
              "checked_at": {
                "type": "string"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "ServersOperatingSystemsListResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "version": {
                  "type": "string"
                }
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "ServersBackupsListResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "title": {
                  "type": "string"
                },
                "kind": {
                  "type": "string"
                },
                "created_at": {
                  "type": "string"
                },
                "size_gb": {
                  "type": "number"
                }
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "ServersBackupsCreateResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "action_id": {
                "type": "string"
              },
              "status": {
                "type": "string"
              },
              "simulated": {
                "type": "boolean"
              },
              "server_id": {
                "type": "integer"
              },
              "server": {
                "type": "string"
              },
              "name": {
                "type": "string"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "ServersStartResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "action_id": {
                "type": "string"
              },
              "status": {
                "type": "string"
              },
              "simulated": {
                "type": "boolean"
              },
              "server_id": {
                "type": "integer"
              },
              "server": {
                "type": "string"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "ServersStopResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "action_id": {
                "type": "string"
              },
              "status": {
                "type": "string"
              },
              "simulated": {
                "type": "boolean"
              },
              "server_id": {
                "type": "integer"
              },
              "server": {
                "type": "string"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "ServersRestartResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "action_id": {
                "type": "string"
              },
              "status": {
                "type": "string"
              },
              "simulated": {
                "type": "boolean"
              },
              "server_id": {
                "type": "integer"
              },
              "server": {
                "type": "string"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "ServersPasswordChangeResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "action_id": {
                "type": "string"
              },
              "status": {
                "type": "string"
              },
              "simulated": {
                "type": "boolean"
              },
              "server_id": {
                "type": "integer"
              },
              "server": {
                "type": "string"
              },
              "password": {
                "type": "string"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "ServersReverseDnsGetResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "server_id": {
                "type": "integer"
              },
              "records": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "ip": {
                      "type": "string"
                    },
                    "hostname": {
                      "type": "string"
                    }
                  }
                }
              },
              "checked_at": {
                "type": "string"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "ServersReverseDnsUpdateResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "server_id": {
                "type": "integer"
              },
              "server": {
                "type": "string"
              },
              "changed": {
                "type": "integer"
              },
              "simulated": {
                "type": "boolean"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "ServersTimezoneGetResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "server_id": {
                "type": "integer"
              },
              "timezone": {
                "type": "string"
              },
              "available": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "ServersTimezoneUpdateResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "action_id": {
                "type": "string"
              },
              "status": {
                "type": "string"
              },
              "simulated": {
                "type": "boolean"
              },
              "server_id": {
                "type": "integer"
              },
              "server": {
                "type": "string"
              },
              "timezone": {
                "type": "string"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "ServersReinstallResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "action_id": {
                "type": "string"
              },
              "status": {
                "type": "string"
              },
              "simulated": {
                "type": "boolean"
              },
              "server_id": {
                "type": "integer"
              },
              "server": {
                "type": "string"
              },
              "operating_system": {
                "type": "string"
              },
              "backup_first": {
                "type": "boolean"
              },
              "password": {
                "type": "string"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "ServersRestoreResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "action_id": {
                "type": "string"
              },
              "status": {
                "type": "string"
              },
              "simulated": {
                "type": "boolean"
              },
              "server_id": {
                "type": "integer"
              },
              "server": {
                "type": "string"
              },
              "backup": {
                "type": "string"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "HostingUsageGetResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "disk": {
                "type": "object",
                "properties": {
                  "used_bytes": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "limit_bytes": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  }
                }
              },
              "bandwidth": {
                "type": "object",
                "properties": {
                  "used_bytes": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "limit_bytes": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  }
                }
              },
              "resources": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string"
                    },
                    "used": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "limit": {
                      "type": [
                        "number",
                        "null"
                      ]
                    }
                  }
                }
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "HostingLoginCreateResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "url": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "single_use": {
                "type": "boolean"
              },
              "simulated": {
                "type": "boolean"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "HostingSubdomainsListResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "domain": {
                  "type": "string"
                },
                "root_domain": {
                  "type": "string"
                },
                "directory": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/ListMeta"
          }
        }
      },
      "HostingSubdomainsCreateResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "domain": {
                "type": "string"
              },
              "root_domain": {
                "type": "string"
              },
              "directory": {
                "type": "string"
              },
              "simulated": {
                "type": "boolean"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "HostingSubdomainsDeleteResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "domain": {
                "type": "string"
              },
              "deleted": {
                "type": "boolean"
              },
              "simulated": {
                "type": "boolean"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "HostingAddonDomainsListResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "domain": {
                  "type": "string"
                },
                "directory": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/ListMeta"
          }
        }
      },
      "HostingAddonDomainsCreateResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "domain": {
                "type": "string"
              },
              "directory": {
                "type": "string"
              },
              "simulated": {
                "type": "boolean"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "HostingAddonDomainsDeleteResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "domain": {
                "type": "string"
              },
              "deleted": {
                "type": "boolean"
              },
              "simulated": {
                "type": "boolean"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "HostingRedirectsListResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "domain": {
                  "type": "string"
                },
                "source": {
                  "type": "string"
                },
                "destination": {
                  "type": "string"
                },
                "type": {
                  "type": "string"
                },
                "wildcard": {
                  "type": "boolean"
                }
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/ListMeta"
          }
        }
      },
      "HostingRedirectsCreateResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "domain": {
                "type": "string"
              },
              "source": {
                "type": "string"
              },
              "destination": {
                "type": "string"
              },
              "type": {
                "type": "string"
              },
              "wildcard": {
                "type": "boolean"
              },
              "simulated": {
                "type": "boolean"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "HostingRedirectsDeleteResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "deleted": {
                "type": "boolean"
              },
              "simulated": {
                "type": "boolean"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "HostingDatabasesListResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string"
                },
                "disk_usage_bytes": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "users": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/ListMeta"
          }
        }
      },
      "HostingDatabasesCreateResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string"
              },
              "simulated": {
                "type": "boolean"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "HostingDatabasesDeleteResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string"
              },
              "deleted": {
                "type": "boolean"
              },
              "simulated": {
                "type": "boolean"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "HostingDatabaseUsersListResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string"
                },
                "databases": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/ListMeta"
          }
        }
      },
      "HostingDatabaseUsersCreateResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string"
              },
              "simulated": {
                "type": "boolean"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "HostingDatabaseUsersPasswordResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string"
              },
              "password_changed": {
                "type": "boolean"
              },
              "simulated": {
                "type": "boolean"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "HostingDatabaseUsersDeleteResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string"
              },
              "deleted": {
                "type": "boolean"
              },
              "simulated": {
                "type": "boolean"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "HostingDatabasesGrantResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "database": {
                "type": "string"
              },
              "user": {
                "type": "string"
              },
              "privileges": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "simulated": {
                "type": "boolean"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "HostingDatabasesRevokeResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "database": {
                "type": "string"
              },
              "user": {
                "type": "string"
              },
              "revoked": {
                "type": "boolean"
              },
              "simulated": {
                "type": "boolean"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "HostingCronListResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "schedule": {
                  "type": "string"
                },
                "command": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "Only with `hosting:code`; otherwise `null`.",
                  "x-description-pt": "Só com `hosting:code`; sem ela, `null`."
                },
                "command_hidden": {
                  "type": "boolean",
                  "description": "`true` when `command` is hidden because the key does not have `hosting:code`.",
                  "x-description-pt": "`true` quando `command` está oculto, porque a chave não tem `hosting:code`."
                }
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/ListMeta"
          }
        }
      },
      "HostingCronCreateResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "schedule": {
                "type": "string"
              },
              "command": {
                "type": "string"
              },
              "simulated": {
                "type": "boolean"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "HostingCronDeleteResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "deleted": {
                "type": "boolean"
              },
              "simulated": {
                "type": "boolean"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "HostingSslGetResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "domain": {
                  "type": "string"
                },
                "domains": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "expires_at": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "self_signed": {
                  "type": "boolean"
                },
                "validation_type": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              }
            }
          },
          "meta": {
            "type": "object",
            "required": [
              "page",
              "per_page",
              "total",
              "total_pages"
            ],
            "properties": {
              "page": {
                "type": "integer"
              },
              "per_page": {
                "type": "integer"
              },
              "total": {
                "type": "integer"
              },
              "total_pages": {
                "type": "integer"
              },
              "autossl_running": {
                "type": "boolean"
              }
            }
          }
        }
      },
      "HostingSslAutosslResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "requested": {
                "type": "boolean"
              },
              "action_id": {
                "type": "string"
              },
              "simulated": {
                "type": "boolean"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "HostingPhpGetResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "domain": {
                  "type": "string"
                },
                "version": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              }
            }
          },
          "meta": {
            "type": "object",
            "required": [
              "page",
              "per_page",
              "total",
              "total_pages"
            ],
            "properties": {
              "page": {
                "type": "integer"
              },
              "per_page": {
                "type": "integer"
              },
              "total": {
                "type": "integer"
              },
              "total_pages": {
                "type": "integer"
              },
              "available_versions": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "HostingPhpOptionsResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "domain": {
                "type": "string"
              },
              "options": {
                "type": "object",
                "properties": {
                  "memory_limit": {
                    "type": "string"
                  },
                  "post_max_size": {
                    "type": "string"
                  },
                  "upload_max_filesize": {
                    "type": "string"
                  },
                  "max_execution_time": {
                    "type": "string"
                  },
                  "max_input_time": {
                    "type": "string"
                  },
                  "max_input_vars": {
                    "type": "string"
                  },
                  "session.gc_maxlifetime": {
                    "type": "string"
                  },
                  "display_errors": {
                    "type": "string"
                  },
                  "zlib.output_compression": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "HostingPhpOptionsUpdateResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "domain": {
                "type": "string"
              },
              "options": {
                "type": "object",
                "properties": {
                  "memory_limit": {
                    "type": "string"
                  },
                  "post_max_size": {
                    "type": "string"
                  },
                  "upload_max_filesize": {
                    "type": "string"
                  },
                  "max_execution_time": {
                    "type": "string"
                  },
                  "max_input_time": {
                    "type": "string"
                  },
                  "max_input_vars": {
                    "type": "string"
                  },
                  "session.gc_maxlifetime": {
                    "type": "string"
                  },
                  "display_errors": {
                    "type": "string"
                  },
                  "zlib.output_compression": {
                    "type": "string"
                  }
                }
              },
              "simulated": {
                "type": "boolean"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "HostingBackupsListResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "date": {
                  "type": "string"
                }
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/ListMeta"
          }
        }
      },
      "HostingBackupsCreateResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "requested": {
                "type": "boolean"
              },
              "action_id": {
                "type": "string"
              },
              "simulated": {
                "type": "boolean"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "HostingFtpListResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "login": {
                  "type": "string"
                },
                "type": {
                  "type": "string"
                },
                "directory": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "used_mb": {
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "quota_mb": {
                  "type": [
                    "number",
                    "null"
                  ]
                }
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/ListMeta"
          }
        }
      },
      "HostingFtpCreateResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "login": {
                "type": "string"
              },
              "directory": {
                "type": "string"
              },
              "quota_mb": {
                "type": "integer"
              },
              "simulated": {
                "type": "boolean"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "HostingFtpPasswordResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "login": {
                "type": "string"
              },
              "password_changed": {
                "type": "boolean"
              },
              "simulated": {
                "type": "boolean"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "HostingFtpDeleteResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "login": {
                "type": "string"
              },
              "deleted": {
                "type": "boolean"
              },
              "simulated": {
                "type": "boolean"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "EmailMailboxesListResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "address": {
                  "type": "string"
                },
                "used_mb": {
                  "type": "number"
                },
                "quota_mb": {
                  "type": [
                    "integer",
                    "null"
                  ]
                }
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/ListMeta"
          }
        }
      },
      "EmailMailboxesCreateResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "address": {
                "type": "string"
              },
              "quota_mb": {
                "type": "integer"
              },
              "simulated": {
                "type": "boolean"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "EmailMailboxesDeleteResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "address": {
                "type": "string"
              },
              "deleted": {
                "type": "boolean"
              },
              "simulated": {
                "type": "boolean"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "EmailMailboxesPasswordResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "address": {
                "type": "string"
              },
              "password_changed": {
                "type": "boolean"
              },
              "simulated": {
                "type": "boolean"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "EmailMailboxesQuotaResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "address": {
                "type": "string"
              },
              "quota_mb": {
                "type": "integer"
              },
              "simulated": {
                "type": "boolean"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "EmailForwardersListResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "address": {
                  "type": "string"
                },
                "forward_to": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/ListMeta"
          }
        }
      },
      "EmailForwardersCreateResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "address": {
                "type": "string"
              },
              "forward_to": {
                "type": "string"
              },
              "simulated": {
                "type": "boolean"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "EmailForwardersDeleteResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "address": {
                "type": "string"
              },
              "forward_to": {
                "type": "string"
              },
              "deleted": {
                "type": "boolean"
              },
              "simulated": {
                "type": "boolean"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "EmailAutorespondersListResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "address": {
                  "type": "string"
                },
                "subject": {
                  "type": "string"
                }
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/ListMeta"
          }
        }
      },
      "EmailAutorespondersGetResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "address": {
                "type": "string"
              },
              "from": {
                "type": "string"
              },
              "subject": {
                "type": "string"
              },
              "body": {
                "type": "string"
              },
              "html": {
                "type": "boolean"
              },
              "interval_hours": {
                "type": "integer"
              },
              "start_at": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "stop_at": {
                "type": [
                  "string",
                  "null"
                ]
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "EmailAutorespondersPutResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "address": {
                "type": "string"
              },
              "subject": {
                "type": "string"
              },
              "simulated": {
                "type": "boolean"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "EmailAutorespondersDeleteResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "address": {
                "type": "string"
              },
              "deleted": {
                "type": "boolean"
              },
              "simulated": {
                "type": "boolean"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "EmailDefaultAddressGetResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "domain": {
                "type": "string"
              },
              "action": {
                "type": "string"
              },
              "forward_to": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "message": {
                "type": [
                  "string",
                  "null"
                ]
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "EmailDefaultAddressPutResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "domain": {
                "type": "string"
              },
              "action": {
                "type": "string"
              },
              "forward_to": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "message": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "simulated": {
                "type": "boolean"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "EmailAuthenticationGetResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "domain": {
                "type": "string"
              },
              "spf": {
                "type": "object",
                "properties": {
                  "state": {
                    "type": "string"
                  }
                }
              },
              "dkim": {
                "type": "object",
                "properties": {
                  "state": {
                    "type": "string"
                  }
                }
              },
              "dmarc": {
                "type": "object",
                "properties": {
                  "state": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "SmsMessagesListResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "scheduled",
                    "queued",
                    "sending",
                    "sent",
                    "simulated",
                    "failed",
                    "cancelled"
                  ]
                },
                "simulated": {
                  "type": "boolean"
                },
                "to": {
                  "type": "string"
                },
                "sender": {
                  "type": "string"
                },
                "text": {
                  "type": "string"
                },
                "parts": {
                  "type": "integer"
                },
                "encoding": {
                  "type": "string"
                },
                "credits": {
                  "type": "number"
                },
                "campaign_id": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "error": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "scheduled_for": {
                  "type": "string"
                },
                "created_at": {
                  "type": "string"
                },
                "sent_at": {
                  "type": "string"
                },
                "charged": {
                  "type": "boolean"
                }
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/ListMeta"
          }
        }
      },
      "SmsStatsGetResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "from": {
                "type": "string"
              },
              "to": {
                "type": "string"
              },
              "messages": {
                "type": "integer"
              },
              "parts": {
                "type": "integer"
              },
              "credits_spent": {
                "type": "number"
              },
              "by_status": {
                "type": "object",
                "properties": {
                  "scheduled": {
                    "type": "integer"
                  },
                  "queued": {
                    "type": "integer"
                  },
                  "sending": {
                    "type": "integer"
                  },
                  "sent": {
                    "type": "integer"
                  },
                  "simulated": {
                    "type": "integer"
                  },
                  "failed": {
                    "type": "integer"
                  },
                  "cancelled": {
                    "type": "integer"
                  }
                }
              },
              "by_day": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "date": {
                      "type": "string"
                    },
                    "messages": {
                      "type": "integer"
                    },
                    "sent": {
                      "type": "integer"
                    },
                    "failed": {
                      "type": "integer"
                    },
                    "credits": {
                      "type": "number"
                    }
                  }
                }
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "SmsTemplatesListResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "integer"
                },
                "name": {
                  "type": "string"
                },
                "text": {
                  "type": "string"
                },
                "category": {
                  "type": "string"
                },
                "language": {
                  "type": "string"
                },
                "created_at": {
                  "type": "string"
                },
                "updated_at": {
                  "type": "string"
                }
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/ListMeta"
          }
        }
      },
      "SmsTemplatesCreateResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "integer"
              },
              "name": {
                "type": "string"
              },
              "text": {
                "type": "string"
              },
              "category": {
                "type": "string"
              },
              "language": {
                "type": "string"
              },
              "created_at": {
                "type": "string"
              },
              "updated_at": {
                "type": "string"
              },
              "simulated": {
                "type": "boolean"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "SmsTemplatesGetResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "integer"
              },
              "name": {
                "type": "string"
              },
              "text": {
                "type": "string"
              },
              "category": {
                "type": "string"
              },
              "language": {
                "type": "string"
              },
              "created_at": {
                "type": "string"
              },
              "updated_at": {
                "type": "string"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "SmsTemplatesUpdateResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "integer"
              },
              "name": {
                "type": "string"
              },
              "text": {
                "type": "string"
              },
              "category": {
                "type": "string"
              },
              "language": {
                "type": "string"
              },
              "created_at": {
                "type": "string"
              },
              "updated_at": {
                "type": "string"
              },
              "simulated": {
                "type": "boolean"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "SmsTemplatesDeleteResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "integer"
              },
              "deleted": {
                "type": "boolean"
              },
              "simulated": {
                "type": "boolean"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "SmsSendersCreateResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "integer"
              },
              "sender": {
                "type": "string"
              },
              "status": {
                "type": "string"
              },
              "free": {
                "type": "boolean"
              },
              "entity": {
                "type": "string"
              },
              "country": {
                "type": "string"
              },
              "purpose": {
                "type": "string"
              },
              "sample": {
                "type": "string"
              },
              "note": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "documents": {
                "type": "integer"
              },
              "documents_url": {
                "type": "string"
              },
              "created_at": {
                "type": "string"
              },
              "updated_at": {
                "type": "string"
              },
              "simulated": {
                "type": "boolean"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "SmsSendersGetResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "integer"
              },
              "sender": {
                "type": "string"
              },
              "status": {
                "type": "string"
              },
              "free": {
                "type": "boolean"
              },
              "entity": {
                "type": "string"
              },
              "country": {
                "type": "string"
              },
              "purpose": {
                "type": "string"
              },
              "sample": {
                "type": "string"
              },
              "note": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "documents": {
                "type": "integer"
              },
              "documents_url": {
                "type": "string"
              },
              "created_at": {
                "type": "string"
              },
              "updated_at": {
                "type": "string"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "SmsOptOutsListResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "number": {
                  "type": "string"
                },
                "created_at": {
                  "type": "string"
                }
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/ListMeta"
          }
        }
      },
      "SmsOptOutsCreateResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "number": {
                "type": "string"
              },
              "created_at": {
                "type": "string"
              },
              "already_listed": {
                "type": "boolean"
              },
              "simulated": {
                "type": "boolean"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "ExtrasCatalogListResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "integer"
                },
                "kind": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "description": {
                  "type": "string"
                },
                "currency": {
                  "type": "string"
                },
                "billing_cycles": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "billing_cycle": {
                        "type": "string"
                      },
                      "months": {
                        "type": "integer"
                      },
                      "price": {
                        "type": "number"
                      },
                      "setup_fee": {
                        "type": "number"
                      }
                    }
                  }
                },
                "purchasable": {
                  "type": "boolean"
                },
                "requires_site": {
                  "type": "boolean"
                },
                "portal_url": {
                  "type": "string"
                }
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/ListMeta"
          }
        }
      },
      "ExtrasListResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "kind": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "status": {
                  "type": "string"
                },
                "site": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "parent_service_id": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "billing_cycle": {
                  "type": "string"
                },
                "amount": {
                  "type": "number"
                },
                "currency": {
                  "type": "string"
                },
                "next_due_date": {
                  "type": "string"
                },
                "registered_at": {
                  "type": "string"
                },
                "manage_url": {
                  "type": "string"
                },
                "certificate": {
                  "type": "object",
                  "properties": {
                    "status": {
                      "type": "string"
                    },
                    "expires_at": {
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  }
                }
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/ListMeta"
          }
        }
      },
      "ExtrasGetResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "kind": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "status": {
                "type": "string"
              },
              "site": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "parent_service_id": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "billing_cycle": {
                "type": "string"
              },
              "amount": {
                "type": "number"
              },
              "currency": {
                "type": "string"
              },
              "next_due_date": {
                "type": "string"
              },
              "registered_at": {
                "type": "string"
              },
              "manage_url": {
                "type": "string"
              },
              "certificate": {
                "type": "object",
                "properties": {
                  "status": {
                    "type": "string"
                  },
                  "expires_at": {
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                }
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "ExtrasPurchaseResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "action_id": {
                "type": "string"
              },
              "status": {
                "type": "string"
              },
              "simulated": {
                "type": "boolean"
              },
              "product_id": {
                "type": "integer"
              },
              "name": {
                "type": "string"
              },
              "billing_cycle": {
                "type": "string"
              },
              "site": {
                "type": "string"
              },
              "amount": {
                "type": "number"
              },
              "currency": {
                "type": "string"
              },
              "credit_sufficient": {
                "type": "boolean"
              },
              "within_spending_limit": {
                "type": "boolean"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "ResellerGetResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "is_reseller": {
                "type": "boolean"
              },
              "programs": {
                "type": "object",
                "properties": {
                  "domains": {
                    "type": "object",
                    "properties": {
                      "active": {
                        "type": "boolean"
                      }
                    }
                  },
                  "sms": {
                    "type": "object",
                    "properties": {
                      "status": {
                        "type": "string"
                      },
                      "balance": {
                        "type": "number"
                      },
                      "daily_limit": {
                        "type": "integer"
                      }
                    }
                  },
                  "hosting": {
                    "type": "object",
                    "properties": {
                      "active": {
                        "type": "boolean"
                      },
                      "accounts": {
                        "type": "integer"
                      }
                    }
                  }
                }
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "ResellerServicesListResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "integer"
                },
                "name": {
                  "type": "string"
                },
                "domain": {
                  "type": "string"
                },
                "status": {
                  "type": "string"
                },
                "billing_cycle": {
                  "type": "string"
                },
                "amount": {
                  "type": "number"
                },
                "currency": {
                  "type": "string"
                },
                "next_due_date": {
                  "type": "string"
                },
                "registered_at": {
                  "type": "string"
                },
                "manage_url": {
                  "type": "string"
                }
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/ListMeta"
          }
        }
      },
      "ResellerServicesGetResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "integer"
              },
              "name": {
                "type": "string"
              },
              "domain": {
                "type": "string"
              },
              "status": {
                "type": "string"
              },
              "billing_cycle": {
                "type": "string"
              },
              "amount": {
                "type": "number"
              },
              "currency": {
                "type": "string"
              },
              "next_due_date": {
                "type": "string"
              },
              "registered_at": {
                "type": "string"
              },
              "manage_url": {
                "type": "string"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "SmsMessagesCancelResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "allOf": [
              {
                "$ref": "#/components/schemas/SmsMessage"
              },
              {
                "type": "object",
                "required": [
                  "credits_returned"
                ],
                "properties": {
                  "credits_returned": {
                    "type": "number",
                    "description": "Credits that went back to the SMS balance with this cancellation.",
                    "x-description-pt": "Créditos que voltaram ao saldo de SMS com este cancelamento."
                  }
                }
              }
            ]
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      }
    },
    "responses": {
      "InvalidRequest": {
        "description": "The request is not valid, for example the body is not JSON or the connection is not HTTPS.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "example": {
              "error": {
                "code": "invalid_request",
                "message": "The request is not valid.",
                "correlation_id": "0f8fad5b-d9cb-469f-a165-70867728950e",
                "details": {}
              }
            }
          }
        }
      },
      "Unauthorized": {
        "description": "The key is missing, invalid, revoked or expired, or the user who created it no longer has access to the account.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "example": {
              "error": {
                "code": "unauthorized",
                "message": "Missing or invalid API key.",
                "correlation_id": "0f8fad5b-d9cb-469f-a165-70867728950e",
                "details": {}
              }
            }
          }
        }
      },
      "Forbidden": {
        "description": "The account cannot use the API (`forbidden`), the key lacks the permission (`insufficient_scope`), or the IP address is not on the list of the key (`ip_not_allowed`).",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "example": {
              "error": {
                "code": "insufficient_scope",
                "message": "This key does not have the required permission.",
                "correlation_id": "0f8fad5b-d9cb-469f-a165-70867728950e",
                "details": {
                  "required": "dns:read"
                }
              }
            }
          }
        }
      },
      "NotFound": {
        "description": "Not found.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "example": {
              "error": {
                "code": "not_found",
                "message": "Not found.",
                "correlation_id": "0f8fad5b-d9cb-469f-a165-70867728950e",
                "details": {}
              }
            }
          }
        }
      },
      "MethodNotAllowed": {
        "description": "This method is not allowed on this path. See the Allow header.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "example": {
              "error": {
                "code": "method_not_allowed",
                "message": "This method is not allowed on this path.",
                "correlation_id": "0f8fad5b-d9cb-469f-a165-70867728950e",
                "details": {}
              }
            }
          }
        }
      },
      "IdempotencyConflict": {
        "description": "The Idempotency-Key was used with a different request, or the first request is still in progress.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "example": {
              "error": {
                "code": "idempotency_conflict",
                "message": "This Idempotency-Key was already used with a different request, or the first request is still in progress.",
                "correlation_id": "0f8fad5b-d9cb-469f-a165-70867728950e",
                "details": {
                  "reason": "different_request"
                }
              }
            }
          }
        }
      },
      "ValidationFailed": {
        "description": "Some of the data is not valid.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "example": {
              "error": {
                "code": "validation_failed",
                "message": "Some of the data is not valid.",
                "correlation_id": "0f8fad5b-d9cb-469f-a165-70867728950e",
                "details": {}
              }
            }
          }
        }
      },
      "RateLimited": {
        "description": "Too many requests. Wait for the time in Retry-After.",
        "headers": {
          "Retry-After": {
            "$ref": "#/components/headers/Retry-After"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "example": {
              "error": {
                "code": "rate_limited",
                "message": "Too many requests. Please try again shortly.",
                "correlation_id": "0f8fad5b-d9cb-469f-a165-70867728950e",
                "details": {
                  "retry_after": 42
                }
              }
            }
          }
        }
      },
      "InternalError": {
        "description": "An internal error occurred. Give the correlation_id to support.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "example": {
              "error": {
                "code": "internal_error",
                "message": "An internal error occurred. Please give the correlation_id to support.",
                "correlation_id": "0f8fad5b-d9cb-469f-a165-70867728950e",
                "details": {}
              }
            }
          }
        }
      },
      "Disabled": {
        "description": "The API is turned off.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "example": {
              "error": {
                "code": "disabled",
                "message": "The API is currently turned off.",
                "correlation_id": "0f8fad5b-d9cb-469f-a165-70867728950e",
                "details": {}
              }
            }
          }
        }
      },
      "SmsResellerRequired": {
        "description": "This account does not have an active SMS reseller plan (`sms_reseller_required`), the key lacks the permission (`insufficient_scope`), or the account cannot use the API (`forbidden`).",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "example": {
              "error": {
                "code": "insufficient_scope",
                "message": "This key does not have the required permission.",
                "correlation_id": "0f8fad5b-d9cb-469f-a165-70867728950e",
                "details": {
                  "required": "dns:read"
                }
              }
            }
          }
        },
        "x-description-pt": "Esta conta não tem revenda de SMS activa (`sms_reseller_required`), a chave não tem a permissão (`insufficient_scope`), ou a conta não pode usar a API (`forbidden`)."
      },
      "Conflict": {
        "description": "The operation cannot be done in the current state. See `details.reason`.",
        "x-description-pt": "A operação não se pode fazer no estado actual. Veja `details.reason`.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "example": {
              "error": {
                "code": "conflict",
                "message": "This operation only works on an active domain.",
                "correlation_id": "0f8fad5b-d9cb-469f-a165-70867728950e",
                "details": {
                  "reason": "domain_not_active"
                }
              }
            }
          }
        }
      },
      "InsufficientCredit": {
        "description": "Not enough credit. Nothing was charged.",
        "x-description-pt": "Saldo insuficiente. Nada foi cobrado.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "example": {
              "error": {
                "code": "insufficient_credit",
                "message": "The account does not have enough credit. Nothing was charged.",
                "correlation_id": "0f8fad5b-d9cb-469f-a165-70867728950e",
                "details": {
                  "amount": 1900.0,
                  "currency": "MZN"
                }
              }
            }
          }
        }
      },
      "UpstreamError": {
        "description": "The service behind the API did not respond as expected.",
        "x-description-pt": "O serviço por trás da API não respondeu como esperado.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "example": {
              "error": {
                "code": "upstream_error",
                "message": "The service did not respond as expected. Please try again later.",
                "correlation_id": "0f8fad5b-d9cb-469f-a165-70867728950e",
                "details": {}
              }
            }
          }
        }
      }
    }
  }
}
