openapi: 3.0.3
info:
  title: IONOS Cloud VPN Gateway API
  description: The Managed VPN Gateway service provides secure and scalable connectivity, enabling encrypted communication between your IONOS cloud resources in a VDC and remote networks (on-premises, multi-cloud, private LANs in other VDCs etc).
  version: '1.0.0'
  contact:
    name: IONOS Cloud Support
    url: https://docs.ionos.com/support/general-information/contact-information
    email: support@cloud.ionos.com
externalDocs:
  url: https://api.ionos.com/docs/cloud/
  description: IONOS Cloud - API documentation
servers:
- url: https://vpn.de-fra.ionos.com
  description: Production de-fra
- url: https://vpn.de-txl.ionos.com
  description: Production de-txl
- url: https://vpn.es-vit.ionos.com
  description: Production es-vit
- url: https://vpn.gb-bhx.ionos.com
  description: Production gb-bhx
- url: https://vpn.gb-lhr.ionos.com
  description: Production gb-lhr
- url: https://vpn.us-ewr.ionos.com
  description: Production us-ewr
- url: https://vpn.us-las.ionos.com
  description: Production us-las
- url: https://vpn.us-mci.ionos.com
  description: Production us-mci
- url: https://vpn.fr-par.ionos.com
  description: Production fr-par
tags:
- name: WireguardGateways
  description: |
    Operations to create and manage WireGuard VPN Gateways.
    
    This tag groups all operations for wireguardgateways.
- name: WireguardPeers
  description: |
    Operations to create and manage WireGuard VPN Gateway peers.
    
    This tag groups all operations for wireguardpeers.
- name: IPSecGateways
  description: |
    Operations to create and manage IPSec VPN Gateways.
    
    This tag groups all operations for ipsecgateways.
- name: IPSecTunnels
  description: |
    Operations to create and manage IPSec VPN Gateway Tunnels.
    
    This tag groups all operations for ipsectunnels.
paths:
  /wireguardgateways:
    get:
      operationId: wireguardgatewaysGet
      summary: Retrieve all WireguardGateways
      security:
      - tokenAuth: []
      description: |
        This endpoint enables retrieving all WireguardGateways using
        pagination and optional filters.
      parameters:
        - $ref: "#/components/parameters/paginationOffset"
        - $ref: "#/components/parameters/paginationLimit"
      tags:
        - WireguardGateways
      responses:
        "200":
          description: |
            Returned all requested WireguardGateways successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/WireguardGatewayReadList"
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/NotAllowed'
        "429":
          $ref: '#/components/responses/TooManyRequests'
        "500":
          $ref: '#/components/responses/InternalError'
        "503":
          $ref: '#/components/responses/ServiceUnavailable'
        default:
          $ref: '#/components/responses/UnexpectedError'
    post:
      operationId: wireguardgatewaysPost
      summary: Create WireguardGateway
      security:
      - tokenAuth: []
      tags:
        - WireguardGateways
      description: |
        Creates a new WireguardGateway.
        
        The full WireguardGateway needs to be provided to create the object.
        Optional data will be filled with defaults or left empty.
      requestBody:
        description: WireguardGateway to create.
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/WireguardGatewayCreate"
      responses:
        "201":
          description: WireguardGateway successfully created.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/WireguardGatewayRead"
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/NotAllowed'
        "415":
          $ref: '#/components/responses/UnsupportedMediaType'
        "422":
          $ref: '#/components/responses/UnprocessableEntity'
        "429":
          $ref: '#/components/responses/TooManyRequests'
        "500":
          $ref: '#/components/responses/InternalError'
        "503":
          $ref: '#/components/responses/ServiceUnavailable'
        default:
          $ref: '#/components/responses/UnexpectedError'
  /wireguardgateways/{gatewayId}:
    get:
      operationId: wireguardgatewaysFindById
      summary: Retrieve WireguardGateway
      security:
      - tokenAuth: []
      tags:
        - WireguardGateways
      description: Returns the WireguardGateway by ID.
      parameters:
        - name: gatewayId
          in: path
          schema:
            type: string
            format: uuid
          example: "85c79b4b-5b40-570a-b788-58dd46ea71e2"
          required: true
          description: The ID (UUID) of the WireguardGateway.
      responses:
        "200":
          description: Getting WireguardGateway was successful.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/WireguardGatewayRead"
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/NotAllowed'
        "404":
          $ref: '#/components/responses/NotFound'
        "429":
          $ref: '#/components/responses/TooManyRequests'
        "500":
          $ref: '#/components/responses/InternalError'
        "503":
          $ref: '#/components/responses/ServiceUnavailable'
        default:
          $ref: '#/components/responses/UnexpectedError'
    put:
      operationId: wireguardgatewaysPut
      summary: Ensure WireguardGateway
      security:
      - tokenAuth: []
      tags:
        - WireguardGateways
      description: |
        Ensures that the WireguardGateway with the provided ID is created or modified.
        The full WireguardGateway needs to be provided to ensure
        (either update or create) the WireguardGateway. Non present data will
        only be filled with defaults or left empty, but not take
        previous values into consideration.
      parameters:
        - name: gatewayId
          in: path
          schema:
            type: string
            format: uuid
          example: "85c79b4b-5b40-570a-b788-58dd46ea71e2"
          required: true
          description: The ID (UUID) of the WireguardGateway.
      requestBody:
        description: update WireguardGateway
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/WireguardGatewayEnsure"
      responses:
        "200":
          description: WireguardGateway successfully updated.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/WireguardGatewayRead"
        "201":
          description: WireguardGateway successfully ensured.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/WireguardGatewayRead"
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/NotAllowed'
        "409":
          $ref: '#/components/responses/Conflict'
        "404":
          $ref: '#/components/responses/NotFound'
        "415":
          $ref: '#/components/responses/UnsupportedMediaType'
        "422":
          $ref: '#/components/responses/UnprocessableEntity'
        "429":
          $ref: '#/components/responses/TooManyRequests'
        "500":
          $ref: '#/components/responses/InternalError'
        "503":
          $ref: '#/components/responses/ServiceUnavailable'
        default:
          $ref: '#/components/responses/UnexpectedError'
    delete:
      operationId: wireguardgatewaysDelete
      summary: Delete WireguardGateway
      security:
      - tokenAuth: []
      tags:
        - WireguardGateways
      description: Deletes the specified WireguardGateway.
      parameters:
        - name: gatewayId
          in: path
          schema:
            type: string
            format: uuid
          example: "85c79b4b-5b40-570a-b788-58dd46ea71e2"
          required: true
          description: The ID (UUID) of the WireguardGateway.
      responses:
        "202":
          description: Deleting WireguardGateway was successful.
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/NotAllowed'
        "404":
          $ref: '#/components/responses/NotFound'
        "429":
          $ref: '#/components/responses/TooManyRequests'
        "500":
          $ref: '#/components/responses/InternalError'
        "503":
          $ref: '#/components/responses/ServiceUnavailable'
        default:
          $ref: '#/components/responses/UnexpectedError'
  /wireguardgateways/{gatewayId}/peers:
    get:
      operationId: wireguardgatewaysPeersGet
      summary: Retrieve all WireguardPeers
      security:
      - tokenAuth: []
      description: |
        This endpoint enables retrieving all WireguardPeers using
        pagination and optional filters.
      parameters:
        - name: gatewayId
          in: path
          schema:
            type: string
            format: uuid
          example: "85c79b4b-5b40-570a-b788-58dd46ea71e2"
          required: true
          description: The ID (UUID) of the WireguardGateway.
        - $ref: "#/components/parameters/paginationOffset"
        - $ref: "#/components/parameters/paginationLimit"
      tags:
        - WireguardPeers
      responses:
        "200":
          description: |
            Returned all requested WireguardPeers successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/WireguardPeerReadList"
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/NotAllowed'
        "429":
          $ref: '#/components/responses/TooManyRequests'
        "500":
          $ref: '#/components/responses/InternalError'
        "503":
          $ref: '#/components/responses/ServiceUnavailable'
        default:
          $ref: '#/components/responses/UnexpectedError'
    post:
      operationId: wireguardgatewaysPeersPost
      summary: Create WireguardPeer
      security:
      - tokenAuth: []
      tags:
        - WireguardPeers
      description: |
        Creates a new WireguardPeer.
        
        The full WireguardPeer needs to be provided to create the object.
        Optional data will be filled with defaults or left empty.
      parameters:
        - name: gatewayId
          in: path
          schema:
            type: string
            format: uuid
          example: "85c79b4b-5b40-570a-b788-58dd46ea71e2"
          required: true
          description: The ID (UUID) of the WireguardGateway.
      requestBody:
        description: WireguardPeer to create.
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/WireguardPeerCreate"
      responses:
        "201":
          description: WireguardPeer successfully created.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/WireguardPeerRead"
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/NotAllowed'
        "415":
          $ref: '#/components/responses/UnsupportedMediaType'
        "422":
          $ref: '#/components/responses/UnprocessableEntity'
        "429":
          $ref: '#/components/responses/TooManyRequests'
        "500":
          $ref: '#/components/responses/InternalError'
        "503":
          $ref: '#/components/responses/ServiceUnavailable'
        default:
          $ref: '#/components/responses/UnexpectedError'
  /wireguardgateways/{gatewayId}/peers/{peerId}:
    get:
      operationId: wireguardgatewaysPeersFindById
      summary: Retrieve WireguardPeer
      security:
      - tokenAuth: []
      tags:
        - WireguardPeers
      description: Returns the WireguardPeer by ID.
      parameters:
        - name: gatewayId
          in: path
          schema:
            type: string
            format: uuid
          example: "85c79b4b-5b40-570a-b788-58dd46ea71e2"
          required: true
          description: The ID (UUID) of the WireguardGateway.
        - name: peerId
          in: path
          schema:
            type: string
            format: uuid
          example: "b62b3a40-adee-5b6c-b98d-be20bfcbdd91"
          required: true
          description: The ID (UUID) of the WireguardPeer.
      responses:
        "200":
          description: Getting WireguardPeer was successful.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/WireguardPeerRead"
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/NotAllowed'
        "404":
          $ref: '#/components/responses/NotFound'
        "429":
          $ref: '#/components/responses/TooManyRequests'
        "500":
          $ref: '#/components/responses/InternalError'
        "503":
          $ref: '#/components/responses/ServiceUnavailable'
        default:
          $ref: '#/components/responses/UnexpectedError'
    put:
      operationId: wireguardgatewaysPeersPut
      summary: Ensure WireguardPeer
      security:
      - tokenAuth: []
      tags:
        - WireguardPeers
      description: |
        Ensures that the WireguardPeer with the provided ID is created or modified.
        The full WireguardPeer needs to be provided to ensure
        (either update or create) the WireguardPeer. Non present data will
        only be filled with defaults or left empty, but not take
        previous values into consideration.
      parameters:
        - name: gatewayId
          in: path
          schema:
            type: string
            format: uuid
          example: "85c79b4b-5b40-570a-b788-58dd46ea71e2"
          required: true
          description: The ID (UUID) of the WireguardGateway.
        - name: peerId
          in: path
          schema:
            type: string
            format: uuid
          example: "b62b3a40-adee-5b6c-b98d-be20bfcbdd91"
          required: true
          description: The ID (UUID) of the WireguardPeer.
      requestBody:
        description: update WireguardPeer
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/WireguardPeerEnsure"
      responses:
        "200":
          description: WireguardPeer successfully updated.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/WireguardPeerRead"
        "201":
          description: WireguardPeer successfully ensured.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/WireguardPeerRead"
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/NotAllowed'
        "409":
          $ref: '#/components/responses/Conflict'
        "404":
          $ref: '#/components/responses/NotFound'
        "415":
          $ref: '#/components/responses/UnsupportedMediaType'
        "422":
          $ref: '#/components/responses/UnprocessableEntity'
        "429":
          $ref: '#/components/responses/TooManyRequests'
        "500":
          $ref: '#/components/responses/InternalError'
        "503":
          $ref: '#/components/responses/ServiceUnavailable'
        default:
          $ref: '#/components/responses/UnexpectedError'
    delete:
      operationId: wireguardgatewaysPeersDelete
      summary: Delete WireguardPeer
      security:
      - tokenAuth: []
      tags:
        - WireguardPeers
      description: Deletes the specified WireguardPeer.
      parameters:
        - name: gatewayId
          in: path
          schema:
            type: string
            format: uuid
          example: "85c79b4b-5b40-570a-b788-58dd46ea71e2"
          required: true
          description: The ID (UUID) of the WireguardGateway.
        - name: peerId
          in: path
          schema:
            type: string
            format: uuid
          example: "b62b3a40-adee-5b6c-b98d-be20bfcbdd91"
          required: true
          description: The ID (UUID) of the WireguardPeer.
      responses:
        "202":
          description: Deleting WireguardPeer was successful.
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/NotAllowed'
        "404":
          $ref: '#/components/responses/NotFound'
        "429":
          $ref: '#/components/responses/TooManyRequests'
        "500":
          $ref: '#/components/responses/InternalError'
        "503":
          $ref: '#/components/responses/ServiceUnavailable'
        default:
          $ref: '#/components/responses/UnexpectedError'
  /ipsecgateways:
    get:
      operationId: ipsecgatewaysGet
      summary: Retrieve all IPSecGateways
      security:
      - tokenAuth: []
      description: |
        This endpoint enables retrieving all IPSecGateways using
        pagination and optional filters.
      parameters:
        - $ref: "#/components/parameters/paginationOffset"
        - $ref: "#/components/parameters/paginationLimit"
      tags:
        - IPSecGateways
      responses:
        "200":
          description: |
            Returned all requested IPSecGateways successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/IPSecGatewayReadList"
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/NotAllowed'
        "429":
          $ref: '#/components/responses/TooManyRequests'
        "500":
          $ref: '#/components/responses/InternalError'
        "503":
          $ref: '#/components/responses/ServiceUnavailable'
        default:
          $ref: '#/components/responses/UnexpectedError'
    post:
      operationId: ipsecgatewaysPost
      summary: Create IPSecGateway
      security:
      - tokenAuth: []
      tags:
        - IPSecGateways
      description: |
        Creates a new IPSecGateway.
        
        The full IPSecGateway needs to be provided to create the object.
        Optional data will be filled with defaults or left empty.
      requestBody:
        description: IPSecGateway to create.
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/IPSecGatewayCreate"
      responses:
        "201":
          description: IPSecGateway successfully created.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/IPSecGatewayRead"
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/NotAllowed'
        "415":
          $ref: '#/components/responses/UnsupportedMediaType'
        "422":
          $ref: '#/components/responses/UnprocessableEntity'
        "429":
          $ref: '#/components/responses/TooManyRequests'
        "500":
          $ref: '#/components/responses/InternalError'
        "503":
          $ref: '#/components/responses/ServiceUnavailable'
        default:
          $ref: '#/components/responses/UnexpectedError'
  /ipsecgateways/{gatewayId}:
    get:
      operationId: ipsecgatewaysFindById
      summary: Retrieve IPSecGateway
      security:
      - tokenAuth: []
      tags:
        - IPSecGateways
      description: Returns the IPSecGateway by ID.
      parameters:
        - name: gatewayId
          in: path
          schema:
            type: string
            format: uuid
          example: "66a114c7-2ddd-5119-9ddf-5a789f5a5a44"
          required: true
          description: The ID (UUID) of the IPSecGateway.
      responses:
        "200":
          description: Getting IPSecGateway was successful.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/IPSecGatewayRead"
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/NotAllowed'
        "404":
          $ref: '#/components/responses/NotFound'
        "429":
          $ref: '#/components/responses/TooManyRequests'
        "500":
          $ref: '#/components/responses/InternalError'
        "503":
          $ref: '#/components/responses/ServiceUnavailable'
        default:
          $ref: '#/components/responses/UnexpectedError'
    put:
      operationId: ipsecgatewaysPut
      summary: Ensure IPSecGateway
      security:
      - tokenAuth: []
      tags:
        - IPSecGateways
      description: |
        Ensures that the IPSecGateway with the provided ID is created or modified.
        The full IPSecGateway needs to be provided to ensure
        (either update or create) the IPSecGateway. Non present data will
        only be filled with defaults or left empty, but not take
        previous values into consideration.
      parameters:
        - name: gatewayId
          in: path
          schema:
            type: string
            format: uuid
          example: "66a114c7-2ddd-5119-9ddf-5a789f5a5a44"
          required: true
          description: The ID (UUID) of the IPSecGateway.
      requestBody:
        description: update IPSecGateway
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/IPSecGatewayEnsure"
      responses:
        "200":
          description: IPSecGateway successfully updated.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/IPSecGatewayRead"
        "201":
          description: IPSecGateway successfully ensured.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/IPSecGatewayRead"
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/NotAllowed'
        "409":
          $ref: '#/components/responses/Conflict'
        "404":
          $ref: '#/components/responses/NotFound'
        "415":
          $ref: '#/components/responses/UnsupportedMediaType'
        "422":
          $ref: '#/components/responses/UnprocessableEntity'
        "429":
          $ref: '#/components/responses/TooManyRequests'
        "500":
          $ref: '#/components/responses/InternalError'
        "503":
          $ref: '#/components/responses/ServiceUnavailable'
        default:
          $ref: '#/components/responses/UnexpectedError'
    delete:
      operationId: ipsecgatewaysDelete
      summary: Delete IPSecGateway
      security:
      - tokenAuth: []
      tags:
        - IPSecGateways
      description: Deletes the specified IPSecGateway.
      parameters:
        - name: gatewayId
          in: path
          schema:
            type: string
            format: uuid
          example: "66a114c7-2ddd-5119-9ddf-5a789f5a5a44"
          required: true
          description: The ID (UUID) of the IPSecGateway.
      responses:
        "202":
          description: Deleting IPSecGateway was successful.
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/NotAllowed'
        "404":
          $ref: '#/components/responses/NotFound'
        "429":
          $ref: '#/components/responses/TooManyRequests'
        "500":
          $ref: '#/components/responses/InternalError'
        "503":
          $ref: '#/components/responses/ServiceUnavailable'
        default:
          $ref: '#/components/responses/UnexpectedError'
  /ipsecgateways/{gatewayId}/tunnels:
    get:
      operationId: ipsecgatewaysTunnelsGet
      summary: Retrieve all IPSecTunnels
      security:
      - tokenAuth: []
      description: |
        This endpoint enables retrieving all IPSecTunnels using
        pagination and optional filters.
      parameters:
        - name: gatewayId
          in: path
          schema:
            type: string
            format: uuid
          example: "66a114c7-2ddd-5119-9ddf-5a789f5a5a44"
          required: true
          description: The ID (UUID) of the IPSecGateway.
        - $ref: "#/components/parameters/paginationOffset"
        - $ref: "#/components/parameters/paginationLimit"
      tags:
        - IPSecTunnels
      responses:
        "200":
          description: |
            Returned all requested IPSecTunnels successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/IPSecTunnelReadList"
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/NotAllowed'
        "429":
          $ref: '#/components/responses/TooManyRequests'
        "500":
          $ref: '#/components/responses/InternalError'
        "503":
          $ref: '#/components/responses/ServiceUnavailable'
        default:
          $ref: '#/components/responses/UnexpectedError'
    post:
      operationId: ipsecgatewaysTunnelsPost
      summary: Create IPSecTunnel
      security:
      - tokenAuth: []
      tags:
        - IPSecTunnels
      description: |
        Creates a new IPSecTunnel.
        
        The full IPSecTunnel needs to be provided to create the object.
        Optional data will be filled with defaults or left empty.
      parameters:
        - name: gatewayId
          in: path
          schema:
            type: string
            format: uuid
          example: "66a114c7-2ddd-5119-9ddf-5a789f5a5a44"
          required: true
          description: The ID (UUID) of the IPSecGateway.
      requestBody:
        description: IPSecTunnel to create.
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/IPSecTunnelCreate"
      responses:
        "201":
          description: IPSecTunnel successfully created.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/IPSecTunnelRead"
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/NotAllowed'
        "415":
          $ref: '#/components/responses/UnsupportedMediaType'
        "422":
          $ref: '#/components/responses/UnprocessableEntity'
        "429":
          $ref: '#/components/responses/TooManyRequests'
        "500":
          $ref: '#/components/responses/InternalError'
        "503":
          $ref: '#/components/responses/ServiceUnavailable'
        default:
          $ref: '#/components/responses/UnexpectedError'
  /ipsecgateways/{gatewayId}/tunnels/{tunnelId}:
    get:
      operationId: ipsecgatewaysTunnelsFindById
      summary: Retrieve IPSecTunnel
      security:
      - tokenAuth: []
      tags:
        - IPSecTunnels
      description: Returns the IPSecTunnel by ID.
      parameters:
        - name: gatewayId
          in: path
          schema:
            type: string
            format: uuid
          example: "66a114c7-2ddd-5119-9ddf-5a789f5a5a44"
          required: true
          description: The ID (UUID) of the IPSecGateway.
        - name: tunnelId
          in: path
          schema:
            type: string
            format: uuid
          example: "c28b2d3e-7b15-53ca-ae88-6ae9378d6efe"
          required: true
          description: The ID (UUID) of the IPSecTunnel.
      responses:
        "200":
          description: Getting IPSecTunnel was successful.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/IPSecTunnelRead"
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/NotAllowed'
        "404":
          $ref: '#/components/responses/NotFound'
        "429":
          $ref: '#/components/responses/TooManyRequests'
        "500":
          $ref: '#/components/responses/InternalError'
        "503":
          $ref: '#/components/responses/ServiceUnavailable'
        default:
          $ref: '#/components/responses/UnexpectedError'
    put:
      operationId: ipsecgatewaysTunnelsPut
      summary: Ensure IPSecTunnel
      security:
      - tokenAuth: []
      tags:
        - IPSecTunnels
      description: |
        Ensures that the IPSecTunnel with the provided ID is created or modified.
        The full IPSecTunnel needs to be provided to ensure
        (either update or create) the IPSecTunnel. Non present data will
        only be filled with defaults or left empty, but not take
        previous values into consideration.
      parameters:
        - name: gatewayId
          in: path
          schema:
            type: string
            format: uuid
          example: "66a114c7-2ddd-5119-9ddf-5a789f5a5a44"
          required: true
          description: The ID (UUID) of the IPSecGateway.
        - name: tunnelId
          in: path
          schema:
            type: string
            format: uuid
          example: "c28b2d3e-7b15-53ca-ae88-6ae9378d6efe"
          required: true
          description: The ID (UUID) of the IPSecTunnel.
      requestBody:
        description: update IPSecTunnel
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/IPSecTunnelEnsure"
      responses:
        "200":
          description: IPSecTunnel successfully updated.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/IPSecTunnelRead"
        "201":
          description: IPSecTunnel successfully ensured.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/IPSecTunnelRead"
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/NotAllowed'
        "409":
          $ref: '#/components/responses/Conflict'
        "404":
          $ref: '#/components/responses/NotFound'
        "415":
          $ref: '#/components/responses/UnsupportedMediaType'
        "422":
          $ref: '#/components/responses/UnprocessableEntity'
        "429":
          $ref: '#/components/responses/TooManyRequests'
        "500":
          $ref: '#/components/responses/InternalError'
        "503":
          $ref: '#/components/responses/ServiceUnavailable'
        default:
          $ref: '#/components/responses/UnexpectedError'
    delete:
      operationId: ipsecgatewaysTunnelsDelete
      summary: Delete IPSecTunnel
      security:
      - tokenAuth: []
      tags:
        - IPSecTunnels
      description: Deletes the specified IPSecTunnel.
      parameters:
        - name: gatewayId
          in: path
          schema:
            type: string
            format: uuid
          example: "66a114c7-2ddd-5119-9ddf-5a789f5a5a44"
          required: true
          description: The ID (UUID) of the IPSecGateway.
        - name: tunnelId
          in: path
          schema:
            type: string
            format: uuid
          example: "c28b2d3e-7b15-53ca-ae88-6ae9378d6efe"
          required: true
          description: The ID (UUID) of the IPSecTunnel.
      responses:
        "202":
          description: Deleting IPSecTunnel was successful.
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/NotAllowed'
        "404":
          $ref: '#/components/responses/NotFound'
        "429":
          $ref: '#/components/responses/TooManyRequests'
        "500":
          $ref: '#/components/responses/InternalError'
        "503":
          $ref: '#/components/responses/ServiceUnavailable'
        default:
          $ref: '#/components/responses/UnexpectedError'
components:
  parameters:
    paginationOffset:
      name: offset
      in: query
      description: The first element (of the total list of elements) to include in the response. Use together with limit for pagination.
      required: false
      schema:
        type: integer
        format: int32
        default: 0
        minimum: 0
      example: 0
    paginationLimit:
      name: limit
      in: query
      description: The maximum number of elements to return. Use together with offset for pagination.
      required: false
      schema:
        type: integer
        format: int32
        default: 100
        minimum: 1
        maximum: 1000
      example: 100
  schemas:
    Connection:
      description: Details about the network connection for your VPN Gateway.
      required:
        - datacenterId
        - lanId
        - ipv4CIDR
      type: object
      properties:
        datacenterId:
          description: |
            The datacenter to connect your VPN Gateway to.
          type: string
          example: '5a029f4a-72e5-11ec-90d6-0242ac120003'
        lanId:
          description: The numeric LAN ID to connect your VPN Gateway to.
          type: string
          example: '2'
        ipv4CIDR:
          description: |
            A LAN IPv4 address in CIDR notation that will be assigned to the VPN Gateway.
            This will be the private gateway address for LAN clients to route traffic over the VPN Gateway.
            __Note__: this should be within the subnet already assigned to the LAN
          allOf:
            - $ref: '#/components/schemas/IPV4CIDR'
        ipv6CIDR:
          description: |
            A LAN IPv6 address in CIDR notation that will be assigned to the VPN Gateway.
            This will be the private gateway address for LAN clients to route traffic over the VPN Gateway.
            __Note__: this should be within the subnet already assigned to the LAN
          allOf:
            - $ref: '#/components/schemas/IPV6CIDR'
  
    CIDR:
      type: string
      anyOf:
        - $ref: '#/components/schemas/IPV4CIDR'
        - $ref: '#/components/schemas/IPV6CIDR'
    IPV6CIDR:
      type: string
      pattern: "^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))\\/([0-9]|[0-9][0-9]|1[0-1][0-9]|12[0-8])$"
      example: fd28:5f8d:d9fe:08bd::/64
      description: |
        Describes a range of IP V6 addresses in CIDR notation.
    IPV4CIDR:
      type: string
      pattern: "^((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))\\/([0-9]|[1-2][0-9]|3[0-2])$"
      example: 192.168.1.100/24
      description: |
        Describes a range of IP V4 addresses in CIDR notation.
    GatewayIP:
      type: string
      anyOf:
        - format: ipv4
      example: 81.173.1.2
      description: |
        Public IP address to be assigned to the gateway.
        __Note__: This must be an IP address in the same datacenter as the connections.
    IPPort:
      type: integer
      description: IP port number
      example: 51820
      minimum: 0
      maximum: 65535
    DiffieHellmanGroup:
      type: string
      description: |
        The Diffie-Hellman Group to use for IPSec Encryption.\
        Options:
          - 15-MODP3072
          - 16-MODP4096
          - 19-ECP256
          - 20-ECP384
          - 21-ECP521
          - 28-ECP256BP
          - 29-ECP384BP
          - 30-ECP512BP
      x-extensible-enum:
      - 15-MODP3072
      - 16-MODP4096
      - 19-ECP256
      - 20-ECP384
      - 21-ECP521
      - 28-ECP256BP
      - 29-ECP384BP
      - 30-ECP512BP
      default: 16-MODP4096
    EncryptionAlgorithm:
      type: string
      description: |
        The encryption algorithm to use for IPSec Encryption.\
        Options:
        - AES128-CTR
        - AES256-CTR
        - AES128-GCM-16
        - AES256-GCM-16
        - AES128-GCM-12
        - AES256-GCM-12
        - AES128-CCM-12
        - AES256-CCM-12
        - AES128
        - AES256
      x-extensible-enum:
      - AES128-CTR
      - AES256-CTR
      - AES128-GCM-16
      - AES256-GCM-16
      - AES128-GCM-12
      - AES256-GCM-12
      - AES128-CCM-12
      - AES256-CCM-12
      - AES128
      - AES256
      default: AES256
    IntegrityAlgorithm:
      type: string
      description: |
        The integrity algorithm to use for IPSec Encryption.\
        Options:
        - SHA256
        - SHA384
        - SHA512
        - AES-XCBC
      x-extensible-enum:
      - SHA256
      - SHA384
      - SHA512
      - AES-XCBC
      default: SHA256
    IKEEncryption:
      type: object
      description: Settings for the initial security exchange phase.
      properties:
        diffieHellmanGroup:
          allOf:
            - $ref: '#/components/schemas/DiffieHellmanGroup'
        encryptionAlgorithm:
          allOf:
            - $ref: '#/components/schemas/EncryptionAlgorithm'
        integrityAlgorithm:
          allOf:
            - $ref: '#/components/schemas/IntegrityAlgorithm'
        lifetime:
          type: integer
          description: The phase lifetime in seconds.
          default: 86400
          example: 86400
          minimum: 3600
          maximum: 86400
    ESPEncryption:
      type: object
      description: Settings for the IPSec SA (ESP) phase.
      properties:
        diffieHellmanGroup:
          allOf:
            - $ref: '#/components/schemas/DiffieHellmanGroup'
        encryptionAlgorithm:
          allOf:
            - $ref: '#/components/schemas/EncryptionAlgorithm'
        integrityAlgorithm:
          allOf:
            - $ref: '#/components/schemas/IntegrityAlgorithm'
        lifetime:
          type: integer
          description: The phase lifetime in seconds.
          default: 3600
          example: 3600
          minimum: 600
          maximum: 14400
    Tier:
      type: string
      description: |
        Gateway performance options.  See product documentation for full details.\
        Options:
        - STANDARD
        - STANDARD_HA
        - ENHANCED
        - ENHANCED_HA
        - PREMIUM
        - PREMIUM_HA
      x-extensible-enum:
        - STANDARD
        - STANTARD_HA
        - ENHANCED
        - ENHANCED_HA
        - PREMIUM
        - PREMIUM_HA
      default: STANDARD
    WireguardGatewayReadList:
      allOf:
      - type: object
        required:
        - id
        - type
        - href
        properties:
          id:
            description: ID of the list of WireguardGateway resources.
            type: string
            format: uuid
            example: 55871672-381f-589c-8809-4ffbecd8b27c
          type:
            description: The type of the resource.
            type: string
            enum:
            - collection
          href:
            description: The URL of the list of WireguardGateway resources.
            type: string
            example: /wireguardgateways
          items:
            description: The list of WireguardGateway resources.
            type: array
            items:
              $ref: '#/components/schemas/WireguardGatewayRead'
      - $ref: '#/components/schemas/Pagination'
    WireguardGatewayRead:
      type: object
      required:
      - id
      - type
      - href
      - metadata
      - properties
      properties:
        id:
          type: string
          description: The ID (UUID) of the WireguardGateway.
          format: uuid
          example: "85c79b4b-5b40-570a-b788-58dd46ea71e2"
        type:
          description: The type of the resource.
          type: string
          enum:
          - wireguardgateway
        href:
          description: The URL of the WireguardGateway.
          type: string
          example: /wireguardgateways/85c79b4b-5b40-570a-b788-58dd46ea71e2
        metadata:
          $ref: '#/components/schemas/WireguardGatewayMetadata'
        properties:
          $ref: '#/components/schemas/WireguardGateway'
    WireguardGatewayEnsure:
      type: object
      required:
      - id
      - properties
      properties:
        id:
          type: string
          description: The ID (UUID) of the WireguardGateway.
          format: uuid
          example: "85c79b4b-5b40-570a-b788-58dd46ea71e2"
        metadata:
          description: Metadata
          additionalProperties: true
          example: {}
        properties:
          $ref: '#/components/schemas/WireguardGateway'
    WireguardGatewayCreate:
      type: object
      required:
      - properties
      properties:
        metadata:
          description: Metadata
          additionalProperties: true
          example: {}
        properties:
          $ref: '#/components/schemas/WireguardGateway'
    WireguardEndpoint:
      description: |
        Properties with all data needed to create a new WireGuard Gateway endpoint.
      required:
        - host
      type: object
      properties:
        host:
          type: string
          anyOf:
            - format: ipv4
            - format: hostname
          example: 1.2.3.4
          description: Hostname or IPV4 address that the WireGuard Server will connect to.
        port:
          description: Port that the WireGuard Server will connect to.
          default: 51820
          allOf:
          - $ref: '#/components/schemas/IPPort'
    WireguardGateway:
      description: |
        Properties with all data needed to create a new WireGuard Gateway.
      required:
        - name
        - gatewayIP
        - connections
        - privateKey
      type: object
      properties:
        name:
          type: string
          description: The human readable name of your WireguardGateway.
          example: My Company Gateway
          maxLength: 255
        description:
          type: string
          description: Human readable description of the WireguardGateway.
          example: This gateway allows connections to Datacenter LAN X.
          maxLength: 1024
        gatewayIP:
          $ref: '#/components/schemas/GatewayIP'
        interfaceIPv4CIDR:
          description: |
            The IPV4 address (with CIDR mask) to be assigned to the WireGuard interface.
            __Note__: either interfaceIPv4CIDR or interfaceIPv6CIDR is __required__.
          example: 172.16.0.1/30
          allOf:
            - $ref: '#/components/schemas/IPV4CIDR'
        interfaceIPv6CIDR:
          description: |
            The IPV6 address (with CIDR mask) to be assigned to the WireGuard interface.
            __Note__: either interfaceIPv6CIDR or interfaceIPv4CIDR is __required__.
          example: fd00::2/128
          allOf:
            - $ref: '#/components/schemas/IPV6CIDR'
        connections:
          type: array
          minItems: 1
          description: |
            The network connection for your gateway.
            __Note__: all connections must belong to the same datacenterId. There is a limit to the total number of connections. Please refer to product documentation.
          items:
            $ref: '#/components/schemas/Connection'
        privateKey:
          type: string
          writeOnly: true
          description: |
            PrivateKey used for WireGuard Server
          example: 0HpE4BNwGHabeaC4aY/GFxB6fBSc0d49Db0qAzRVSVc=
        listenPort:
          description: Port that WireGuard Server will listen on
          default: 51820
          allOf:
          - $ref: '#/components/schemas/IPPort'
        tier:
          $ref: "#/components/schemas/Tier"
        maintenanceWindow:
          $ref: "#/components/schemas/MaintenanceWindow"
    WireguardPeerReadList:
      allOf:
      - type: object
        required:
        - id
        - type
        - href
        properties:
          id:
            description: ID of the list of WireguardPeer resources.
            type: string
            format: uuid
            example: 7c33f158-b93c-5fe7-83c6-84dde2357a33
          type:
            description: The type of the resource.
            type: string
            enum:
            - collection
          href:
            description: The URL of the list of WireguardPeer resources.
            type: string
            example: /wireguardgateways/{gatewayId}/peers
          items:
            description: The list of WireguardPeer resources.
            type: array
            items:
              $ref: '#/components/schemas/WireguardPeerRead'
      - $ref: '#/components/schemas/Pagination'
    WireguardPeerRead:
      type: object
      required:
      - id
      - type
      - href
      - metadata
      - properties
      properties:
        id:
          type: string
          description: The ID (UUID) of the WireguardPeer.
          format: uuid
          example: "b62b3a40-adee-5b6c-b98d-be20bfcbdd91"
        type:
          description: The type of the resource.
          type: string
          enum:
          - wireguardpeer
        href:
          description: The URL of the WireguardPeer.
          type: string
          example: /wireguardgateways/{gatewayId}/peers/b62b3a40-adee-5b6c-b98d-be20bfcbdd91
        metadata:
          $ref: '#/components/schemas/WireguardPeerMetadata'
        properties:
          $ref: '#/components/schemas/WireguardPeer'
    WireguardPeerEnsure:
      type: object
      required:
      - id
      - properties
      properties:
        id:
          type: string
          description: The ID (UUID) of the WireguardPeer.
          format: uuid
          example: "b62b3a40-adee-5b6c-b98d-be20bfcbdd91"
        metadata:
          description: Metadata
          additionalProperties: true
          example: {}
        properties:
          $ref: '#/components/schemas/WireguardPeer'
    WireguardPeerCreate:
      type: object
      required:
      - properties
      properties:
        metadata:
          description: Metadata
          additionalProperties: true
          example: {}
        properties:
          $ref: '#/components/schemas/WireguardPeer'
    WireguardPeer:
      description: |
        Properties with all data needed to create a new WireGuard Gateway Peer.\
        __Note__: there is a limit to the total number of peers.  Please refer to product documentation.
      required:
        - name
        - allowedIPs
        - publicKey
      type: object
      properties:
        name:
          type: string
          description: The human readable name of your WireguardGateway Peer.
          example: My Company Gateway Peer
          maxLength: 255
        description:
          type: string
          description: Human readable description of the WireguardGateway Peer.
          example: Allows local machine A to connect to Datacenter LAN Y.
          maxLength: 1024
        endpoint:
          $ref: '#/components/schemas/WireguardEndpoint'
        allowedIPs:
          type: array
          description: |
            The subnet CIDRs that are allowed to connect to the WireGuard Gateway.  Specify "a.b.c.d/32" for an individual IP address.  Specify "0.0.0.0/0" or "::/0" for all addresses.
          items:
            $ref: '#/components/schemas/CIDR'
          minItems: 1
          maxItems: 20
          example:
            - 1.2.3.4/32
        publicKey:
          type: string
          description: WireGuard public key of the connecting peer
          example: no8iaSEoqfbI6PVYsdEiUU5efYdtKX8VAhKity19MWI=
    IPSecGatewayReadList:
      allOf:
      - type: object
        required:
        - id
        - type
        - href
        properties:
          id:
            description: ID of the list of IPSecGateway resources.
            type: string
            format: uuid
            example: 26a73a96-96e9-51d2-98d2-90043b958618
          type:
            description: The type of the resource.
            type: string
            enum:
            - collection
          href:
            description: The URL of the list of IPSecGateway resources.
            type: string
            example: /ipsecgateways
          items:
            description: The list of IPSecGateway resources.
            type: array
            items:
              $ref: '#/components/schemas/IPSecGatewayRead'
      - $ref: '#/components/schemas/Pagination'
    IPSecGatewayRead:
      type: object
      required:
      - id
      - type
      - href
      - metadata
      - properties
      properties:
        id:
          type: string
          description: The ID (UUID) of the IPSecGateway.
          format: uuid
          example: "66a114c7-2ddd-5119-9ddf-5a789f5a5a44"
        type:
          description: The type of the resource.
          type: string
          enum:
          - ipsecgateway
        href:
          description: The URL of the IPSecGateway.
          type: string
          example: /ipsecgateways/66a114c7-2ddd-5119-9ddf-5a789f5a5a44
        metadata:
          $ref: '#/components/schemas/IPSecGatewayMetadata'
        properties:
          $ref: '#/components/schemas/IPSecGateway'
    IPSecGatewayEnsure:
      type: object
      required:
      - id
      - properties
      properties:
        id:
          type: string
          description: The ID (UUID) of the IPSecGateway.
          format: uuid
          example: "66a114c7-2ddd-5119-9ddf-5a789f5a5a44"
        metadata:
          description: Metadata
          additionalProperties: true
          example: {}
        properties:
          $ref: '#/components/schemas/IPSecGateway'
    IPSecGatewayCreate:
      type: object
      required:
      - properties
      properties:
        metadata:
          description: Metadata
          additionalProperties: true
          example: {}
        properties:
          $ref: '#/components/schemas/IPSecGateway'
    IPSecGateway:
      description: |
        Properties with all data needed to create a new IPSec Gateway.
      required:
        - name
        - gatewayIP
        - connections
      type: object
      properties:
        name:
          type: string
          description: The human readable name of your IPSecGateway.
          example: My Company Gateway
          maxLength: 255
        description:
          type: string
          description: Human readable description of the IPSecGateway.
          example: This gateway connects site A to VDC X.
          maxLength: 1024
        gatewayIP:
          $ref: '#/components/schemas/GatewayIP'
        connections:
          type: array
          minItems: 1
          description: |
            The network connection for your gateway.
            __Note__: all connections must belong to the same datacenterId. There is a limit to the total number of connections. Please refer to product documentation.
          items:
            $ref: '#/components/schemas/Connection'
        version:
          type: string
          description: |
            The IKE version that is permitted for the VPN tunnels.\
            Options:
             - IKEv2
          x-extensible-enum:
          - IKEv2
          default: IKEv2
        tier:
          $ref: "#/components/schemas/Tier"
        maintenanceWindow:
          $ref: "#/components/schemas/MaintenanceWindow"
    IPSecTunnelReadList:
      allOf:
      - type: object
        required:
        - id
        - type
        - href
        properties:
          id:
            description: ID of the list of IPSecTunnel resources.
            type: string
            format: uuid
            example: 0ef10f6b-8742-5e74-98ff-3e89354b1082
          type:
            description: The type of the resource.
            type: string
            enum:
            - collection
          href:
            description: The URL of the list of IPSecTunnel resources.
            type: string
            example: /ipsecgateways/{gatewayId}/tunnels
          items:
            description: The list of IPSecTunnel resources.
            type: array
            items:
              $ref: '#/components/schemas/IPSecTunnelRead'
      - $ref: '#/components/schemas/Pagination'
    IPSecTunnelRead:
      type: object
      required:
      - id
      - type
      - href
      - metadata
      - properties
      properties:
        id:
          type: string
          description: The ID (UUID) of the IPSecTunnel.
          format: uuid
          example: "c28b2d3e-7b15-53ca-ae88-6ae9378d6efe"
        type:
          description: The type of the resource.
          type: string
          enum:
          - ipsectunnel
        href:
          description: The URL of the IPSecTunnel.
          type: string
          example: /ipsecgateways/{gatewayId}/tunnels/c28b2d3e-7b15-53ca-ae88-6ae9378d6efe
        metadata:
          $ref: '#/components/schemas/IPSecTunnelMetadata'
        properties:
          $ref: '#/components/schemas/IPSecTunnel'
    IPSecTunnelEnsure:
      type: object
      required:
      - id
      - properties
      properties:
        id:
          type: string
          description: The ID (UUID) of the IPSecTunnel.
          format: uuid
          example: "c28b2d3e-7b15-53ca-ae88-6ae9378d6efe"
        metadata:
          description: Metadata
          additionalProperties: true
          example: {}
        properties:
          $ref: '#/components/schemas/IPSecTunnel'
    IPSecTunnelCreate:
      type: object
      required:
      - properties
      properties:
        metadata:
          description: Metadata
          additionalProperties: true
          example: {}
        properties:
          $ref: '#/components/schemas/IPSecTunnel'
    IPSecPSK:
      description: |
        Properties with all data needed to define IPSec Authentication PSK. This is required if the method is PSK.
      required:
        - key
      type: object
      properties:
        key:
          type: string
          writeOnly: true
          description: The Pre-Shared Key used for IPSec Authentication.
          example: X2wosbaw74M8hQGbK3jCCaEusR6CCFRa
    IPSecTunnelAuth:
      description: |
        Properties with all data needed to define IPSec Authentication.
      required:
        - method
      type: object
      properties:
        method:
          type: string
          description: |
            The Authentication Method to use for IPSec Authentication.\
            Options:
              - PSK
          x-extensible-enum:
          - PSK
          default: PSK
        psk:
          $ref: '#/components/schemas/IPSecPSK'
    IPSecTunnel:
      description: |
        Properties with all data needed to create a new IPSec Gateway Tunnel.\
        __Note__: there is a limit to the total number of tunnels.  Please refer to product documentation.
      required:
        - name
        - remoteHost
        - auth
        - cloudNetworkCIDRs
        - peerNetworkCIDRs
        - ike
        - esp
      type: object
      properties:
        name:
          type: string
          description: The human readable name of your IPSec Gateway Tunnel.
          example: My Company Gateway Tunnel
          maxLength: 255
        description:
          type: string
          description: Human readable description of the IPSec Gateway Tunnel.
          example: Allows local subnet X to connect to virtual network Y.
          maxLength: 1024
        remoteHost:
          type: string
          description: |
            The remote peer host fully qualified domain name or IPV4 IP to connect to.
            * __Note__: This should be the public IP of the remote peer.
            * Tunnels only support IPV4 or hostname (fully qualified DNS name).
          anyOf:
            - format: ipv4
            - format: hostname
          example: vpn.mycompany.com
        auth: 
          $ref: '#/components/schemas/IPSecTunnelAuth'
        ike:
          $ref: '#/components/schemas/IKEEncryption'
        esp:
          $ref: '#/components/schemas/ESPEncryption'
        cloudNetworkCIDRs:
          type: array
          minItems: 1
          maxItems: 20
          description: |
            The network CIDRs on the "Left" side that are allowed to connect to the IPSec tunnel,
            i.e the CIDRs within your IONOS Cloud LAN.  Specify "0.0.0.0/0" or "::/0" for all addresses.
          items:
            $ref: '#/components/schemas/CIDR'
        peerNetworkCIDRs:
          type: array
          minItems: 1
          maxItems: 20
          description: The network CIDRs on the "Right" side that are allowed to connect to the IPSec tunnel.  Specify "0.0.0.0/0" or "::/0" for all addresses.
          items:
            $ref: '#/components/schemas/CIDR'
          example:
            - 1.2.3.4/32
    
    Status:
      type: string
      description: |
        The current status of the resource. The status can be:
        
        * `AVAILABLE` - resource exists and is healthy.
        * `PROVISIONING` - resource is being created or updated.
        * `DESTROYING` - delete command was issued, the resource is being deleted.
        * `FAILED`: - resource failed, details in `statusMessage`.
      x-extensible-enum:
        - AVAILABLE
        - PROVISIONING
        - DESTROYING
        - FAILED
      example: AVAILABLE
      readOnly: true
    
    StatusMessage:
      type: string
      description: |
        The message of the failure if the status is `FAILED`.
      example: null
      readOnly: true
    
    ResourceStatus:
      type: object
      description: The current status of the resource.
      required:
        - status
      properties:
        status:
          $ref: '#/components/schemas/Status'
        statusMessage:
          $ref: '#/components/schemas/StatusMessage'
    WireguardGatewayMetadata:
      description: WireGuard Gateway Metadata
      readOnly: true
      allOf:
        - $ref: '#/components/schemas/Metadata'
        - $ref: '#/components/schemas/ResourceStatus'
        - type: object
          required:
          - publicKey
          properties:
            publicKey:
              type: string
              description: |
                Public key correspondng to the WireGuard Server private key.
              example: |
                -----BEGIN PUBLIC KEY-----
                MCowBQYDK2VuAyEApNLcmIfCLRwyGYN16teusuGPkdGo2C8OxiqaJLgOig4=
                -----END PUBLIC KEY-----
    
    WireguardPeerMetadata:
      description: WireGuard Peer Metadata
      readOnly: true
      allOf:
        - $ref: '#/components/schemas/Metadata'
        - $ref: '#/components/schemas/ResourceStatus'
    
    IPSecGatewayMetadata:
      description: IPSec Gateway Metadata
      readOnly: true
      allOf:
        - $ref: '#/components/schemas/Metadata'
        - $ref: '#/components/schemas/ResourceStatus'
    
    IPSecTunnelMetadata:
      description: IPSec Tunnel Metadata
      readOnly: true
      allOf:
        - $ref: '#/components/schemas/Metadata'
        - $ref: '#/components/schemas/ResourceStatus'
    MaintenanceWindow:
      description: |
        A weekly 4 hour-long window, during which maintenance might occur.
      properties:
        time:
          type: string
          description: Start of the maintenance window in UTC time.
          example: '16:30:59'
        dayOfTheWeek:
          $ref: '#/components/schemas/DayOfTheWeek'
      required:
        - time
        - dayOfTheWeek
      type: object
    DayOfTheWeek:
      description: The name of the week day.
      type: string
      enum:
        - Sunday
        - Monday
        - Tuesday
        - Wednesday
        - Thursday
        - Friday
        - Saturday
      example: Monday
    Error:
      description: |
        The Error object is used to represent an error response from the API.
      type: object
      properties:
        httpStatus:
          type: integer
          description: The HTTP status code of the operation.
          example: 400
        messages:
          type: array
          description: |
            A list of error messages.
          items:
            type: object
            properties:
              errorCode:
                type: string
                description: |
                  Application internal error code
                example: "err-1234"
              message:
                type: string
                description: |
                  A human readable explanation specific to this occurrence of the
                  problem.
                example: "Error message example"
    Metadata:
      type: object
      description: Metadata of the resource.
      properties:
        createdDate:
          type: string
          format: date-time
          description: The ISO 8601 creation timestamp.
          example: "2020-12-10T13:37:50+01:00"
          readOnly: true
        createdBy:
          type: string
          description: Unique name of the identity that created the resource.
          example: "ionos:identity:::users/87f9a82e-b28d-49ed-9d04-fba2c0459cd3"
          readOnly: true
        createdByUserId:
          type: string
          description: Unique id of the identity that created the resource.
          example: 87f9a82e-b28d-49ed-9d04-fba2c0459cd3
          readOnly: true
        lastModifiedDate:
          type: string
          format: date-time
          description: The ISO 8601 modified timestamp.
          example: "2020-12-11T13:37:50+01:00"
          readOnly: true
        lastModifiedBy:
          type: string
          description: Unique name of the identity that last modified the resource.
          example: "ionos:identity:::users/87f9a82e-b28d-49ed-9d04-fba2c0459cd3"
          readOnly: true
        lastModifiedByUserId:
          type: string
          description: Unique id of the identity that last modified the resource.
          example: 87f9a82e-b28d-49ed-9d04-fba2c0459cd3
          readOnly: true
        resourceURN:
          type: string
          description: Unique name of the resource.
          example: "ionos:<product>:<location>:<contract>:<resource-path>"
          readOnly: true
    Pagination:
      required:
      - offset
      - limit
      - _links
      description: |
        Pagination information. The offset and limit parameters are used to
        navigate the list of elements. The _links object contains URLs to
        navigate the different pages.
      type: object
      properties:
        offset:
          $ref: '#/components/schemas/Offset'
        limit:
          $ref: '#/components/schemas/Limit'
        _links:
          $ref: '#/components/schemas/Links'
    
    Offset:
      description: |
        The offset specified in the request (if none was specified, the default
        offset is 0).
      type: integer
      example: 0
      minimum: 0
      readOnly: true
    Limit:
      description: |
        The limit specified in the request (if none was specified, use the
        endpoint's default pagination limit).
      type: integer
      example: 42
      minimum: 0
      readOnly: true
    Links:
      description: |
        URLs to navigate the different pages. As of now we always only return a
        single page.
      type: object
      properties:
        prev:
          description: |
            URL (with offset and limit parameters) of the previous page; only
            present if offset is greater than 0.
          type: string
          format: uri
          example: http://PREVIOUS-PAGE-URI
          readOnly: true
        self:
          description: |
            URL (with offset and limit parameters) of the current page.
          type: string
          format: uri
          example: http://THIS-PAGE-URI
          readOnly: true
        next:
          description: |
            URL (with offset and limit parameters) of the next page; only
            present if offset + limit is less than the total number of elements.
          type: string
          format: uri
          example: http://NEXT-PAGE-URI
          readOnly: true
  securitySchemes:
    tokenAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: |
        The token can be generated using the 
        [Authentication API](https://api.ionos.com/docs/authentication/v1/#tag/tokens/operation/tokensGenerate).
  responses:
    BadRequest:
      description: |
        ### Bad Request
        The request send to the API was malformed.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Unauthorized:
      description: |
        ### Unauthorized
        The request is missing authorization information or the authorization information provided are expired.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotAllowed:
      description: |
        ### Not Allowed
        The user issuing the request does not have the needed permissions.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Conflict:
      description: |
        ### Conflict
        The UUID is already taken by another party, follow the guides to generate UUIDs uniquely.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFound:
      description: |
        ### Not Found
        The resource that was requested could not be found.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    UnexpectedError:
      description: |
        ### Unexpected Internal Server Error
        An unexpected internal error occurred. We apologize for the inconvenience!
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    UnprocessableEntity:
      description: |
        ### Unprocessable Entity
        The request was well-formed but was unable to be followed due to semantic errors.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    TooManyRequests:
      description: |
        ### Too Many Requests
        The user has sent too many requests in a given amount of time.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    UnsupportedMediaType:
      description: |
        ### Unsupported Media Type
        The request has an unsupported media type.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    InternalError:
      description: |
        ### Internal Server Error
        An internal error occurred. We apologize for the inconvenience!
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    ServiceUnavailable:
      description: |
        ### Service Unavailable
        The server is currently unable to handle the request due to a temporary overloading or maintenance of the server.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
