openapi: "3.0.3"
info:
  title: IONOS Cloud - API Gateway
  description: |
    <b>Please note: API Gateway is scheduled for deprecation and will reach its End-of-Life on 31.12.2025, after which it will no longer be available.</b>
    API Gateway is an application that acts as a "front door" for backend services and APIs, handling client requests and routing them to the appropriate backend.
  version: 0.0.1
servers:
- url: https://apigateway.de-txl.ionos.com
  description: Production de-txl
- url: https://apigateway.gb-lhr.ionos.com
  description: Production gb-lhr
- url: https://apigateway.fr-par.ionos.com
  description: Production fr-par
- url: https://apigateway.es-vit.ionos.com
  description: Production es-vit
tags:
- name: APIGateways
  description: |
    An API gateway consists of the generic rules and configurations of an API Gateway.
    
    This tag groups all operations for apigateways.
- name: Routes
  description: |
    A route is a rule that maps an incoming request to a specific backend service.
    
    This tag groups all operations for routes.
paths:
  /gateways:
    get:
      operationId: apigatewaysGet
      summary: Retrieve all APIGateways
      security:
      - tokenAuth: []
      description: |
        This endpoint enables retrieving all APIGateways using
        pagination and optional filters.
      parameters:
        - $ref: "#/components/parameters/paginationOffset"
        - $ref: "#/components/parameters/paginationLimit"
        - name: orderBy
          in: query
          description: The field to order the results by. If not provided, the results will be ordered by the default field.
          schema:
            type: string
            default: -createdDate
            enum:
              - -createdDate
              - -lastModifiedDate
              - -name
              - name
              - createdDate
              - lastModifiedDate
      tags:
        - APIGateways
      responses:
        "200":
          description: |
            Returned all requested APIGateways successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GatewayReadList"
        "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: apigatewaysPost
      summary: Create Gateway
      security:
      - tokenAuth: []
      tags:
        - APIGateways
      description: |
        Creates a new Gateway.
        
        The full Gateway needs to be provided to create the object.
        Optional data will be filled with defaults or left empty.
      requestBody:
        description: Gateway to create.
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/GatewayCreate"
      responses:
        "201":
          description: Gateway successfully created.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GatewayRead"
        "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'
  /gateways/{apigatewayId}:
    get:
      operationId: apigatewaysFindById
      summary: Retrieve Gateway
      security:
      - tokenAuth: []
      tags:
        - APIGateways
      description: Returns the Gateway by ID.
      parameters:
        - name: apigatewayId
          in: path
          schema:
            type: string
            format: uuid
          example: "0620c174-dd3c-5eb4-87c8-e2b516553a00"
          required: true
          description: The ID (UUID) of the Gateway.
      responses:
        "200":
          description: Getting Gateway was successful.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GatewayRead"
        "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: apigatewaysPut
      summary: Ensure Gateway
      security:
      - tokenAuth: []
      tags:
        - APIGateways
      description: |
        Ensures that the Gateway with the provided ID is created or modified.
        The full Gateway needs to be provided to ensure
        (either update or create) the Gateway. Non present data will
        only be filled with defaults or left empty, but not take
        previous values into consideration.
      parameters:
        - name: apigatewayId
          in: path
          schema:
            type: string
            format: uuid
          example: "0620c174-dd3c-5eb4-87c8-e2b516553a00"
          required: true
          description: The ID (UUID) of the Gateway.
      requestBody:
        description: update Gateway
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/GatewayEnsure"
      responses:
        "200":
          description: Gateway successfully updated.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GatewayRead"
        "201":
          description: Gateway successfully ensured.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GatewayRead"
        "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: apigatewaysDelete
      summary: Delete Gateway
      security:
      - tokenAuth: []
      tags:
        - APIGateways
      description: Deletes the specified Gateway.
      parameters:
        - name: apigatewayId
          in: path
          schema:
            type: string
            format: uuid
          example: "0620c174-dd3c-5eb4-87c8-e2b516553a00"
          required: true
          description: The ID (UUID) of the Gateway.
      responses:
        "202":
          description: Deleting Gateway 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'
  /gateways/{apigatewayId}/routes:
    get:
      operationId: apigatewaysRoutesGet
      summary: Retrieve all Routes
      security:
      - tokenAuth: []
      description: |
        This endpoint enables retrieving all Routes using
        pagination and optional filters.
      parameters:
        - name: apigatewayId
          in: path
          schema:
            type: string
            format: uuid
          example: "0620c174-dd3c-5eb4-87c8-e2b516553a00"
          required: true
          description: The ID (UUID) of the Gateway.
        - $ref: "#/components/parameters/paginationOffset"
        - $ref: "#/components/parameters/paginationLimit"
        - name: orderBy
          in: query
          description: The field to order the results by. If not provided, the results will be ordered by the default field.
          schema:
            type: string
            default: -createdDate
            enum:
              - -createdDate
              - -lastModifiedDate
              - -name
              - name
              - createdDate
              - lastModifiedDate
      tags:
        - Routes
      responses:
        "200":
          description: |
            Returned all requested Routes successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/RouteReadList"
        "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: apigatewaysRoutesPost
      summary: Create Route
      security:
      - tokenAuth: []
      tags:
        - Routes
      description: |
        Creates a new Route.
        
        The full Route needs to be provided to create the object.
        Optional data will be filled with defaults or left empty.
      parameters:
        - name: apigatewayId
          in: path
          schema:
            type: string
            format: uuid
          example: "0620c174-dd3c-5eb4-87c8-e2b516553a00"
          required: true
          description: The ID (UUID) of the Gateway.
      requestBody:
        description: Route to create.
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/RouteCreate"
      responses:
        "201":
          description: Route successfully created.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/RouteRead"
        "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'
  /gateways/{apigatewayId}/routes/{routeId}:
    get:
      operationId: apigatewaysRoutesFindById
      summary: Retrieve Route
      security:
      - tokenAuth: []
      tags:
        - Routes
      description: Returns the Route by ID.
      parameters:
        - name: apigatewayId
          in: path
          schema:
            type: string
            format: uuid
          example: "0620c174-dd3c-5eb4-87c8-e2b516553a00"
          required: true
          description: The ID (UUID) of the Gateway.
        - name: routeId
          in: path
          schema:
            type: string
            format: uuid
          example: "50982018-bb17-5cb9-bcd4-97f8bbc7dc23"
          required: true
          description: The ID (UUID) of the Route.
      responses:
        "200":
          description: Getting Route was successful.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/RouteRead"
        "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: apigatewaysRoutesPut
      summary: Ensure Route
      security:
      - tokenAuth: []
      tags:
        - Routes
      description: |
        Ensures that the Route with the provided ID is created or modified.
        The full Route needs to be provided to ensure
        (either update or create) the Route. Non present data will
        only be filled with defaults or left empty, but not take
        previous values into consideration.
      parameters:
        - name: apigatewayId
          in: path
          schema:
            type: string
            format: uuid
          example: "0620c174-dd3c-5eb4-87c8-e2b516553a00"
          required: true
          description: The ID (UUID) of the Gateway.
        - name: routeId
          in: path
          schema:
            type: string
            format: uuid
          example: "50982018-bb17-5cb9-bcd4-97f8bbc7dc23"
          required: true
          description: The ID (UUID) of the Route.
      requestBody:
        description: update Route
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/RouteEnsure"
      responses:
        "200":
          description: Route successfully updated.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/RouteRead"
        "201":
          description: Route successfully ensured.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/RouteRead"
        "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: apigatewaysRoutesDelete
      summary: Delete Route
      security:
      - tokenAuth: []
      tags:
        - Routes
      description: Deletes the specified Route.
      parameters:
        - name: apigatewayId
          in: path
          schema:
            type: string
            format: uuid
          example: "0620c174-dd3c-5eb4-87c8-e2b516553a00"
          required: true
          description: The ID (UUID) of the Gateway.
        - name: routeId
          in: path
          schema:
            type: string
            format: uuid
          example: "50982018-bb17-5cb9-bcd4-97f8bbc7dc23"
          required: true
          description: The ID (UUID) of the Route.
      responses:
        "202":
          description: Deleting Route 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 this parameter together with the 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 this parameter together with the offset for pagination.
      required: false
      schema:
        type: integer
        format: int32
        default: 100
        minimum: 1
        maximum: 1000
      example: 100
  schemas:
    GatewayReadList:
      allOf:
      - type: object
        required:
        - id
        - type
        - href
        properties:
          id:
            description: ID of the list of Gateway resources.
            type: string
            format: uuid
            example: 274004e3-6f41-5468-862f-64a7b3445c18
          type:
            description: The type of the resource.
            type: string
            enum:
            - collection
          href:
            description: The URL of the list of Gateway resources.
            type: string
            example: /gateways
          items:
            description: The list of Gateway resources.
            type: array
            items:
              $ref: '#/components/schemas/GatewayRead'
      - $ref: '#/components/schemas/Pagination'
    GatewayRead:
      type: object
      required:
      - id
      - type
      - href
      - metadata
      - properties
      properties:
        id:
          type: string
          description: The ID (UUID) of the Gateway.
          format: uuid
          example: "0620c174-dd3c-5eb4-87c8-e2b516553a00"
        type:
          description: The type of the resource.
          type: string
          enum:
          - gateway
        href:
          description: The URL of the Gateway.
          type: string
          example: /gateways/0620c174-dd3c-5eb4-87c8-e2b516553a00
        metadata:
          $ref: '#/components/schemas/MetadataWithEndpoint'
        properties:
          $ref: '#/components/schemas/Gateway'
    GatewayEnsure:
      type: object
      required:
      - id
      - properties
      properties:
        id:
          type: string
          description: The ID (UUID) of the Gateway.
          format: uuid
          example: "0620c174-dd3c-5eb4-87c8-e2b516553a00"
        metadata:
          description: Metadata
          additionalProperties: true
          example: {}
        properties:
          $ref: '#/components/schemas/Gateway'
    GatewayCreate:
      type: object
      required:
      - properties
      properties:
        metadata:
          description: Metadata
          additionalProperties: true
          example: {}
        properties:
          $ref: '#/components/schemas/Gateway'
    RouteReadList:
      allOf:
      - type: object
        required:
        - id
        - type
        - href
        properties:
          id:
            description: ID of the list of Route resources.
            type: string
            format: uuid
            example: 38ec142f-7b7b-5707-83ba-4db7f8286cfb
          type:
            description: The type of the resource.
            type: string
            enum:
            - collection
          href:
            description: The URL of the list of Route resources.
            type: string
            example: /gateways/{apigatewayId}/routes
          items:
            description: The list of Route resources.
            type: array
            items:
              $ref: '#/components/schemas/RouteRead'
      - $ref: '#/components/schemas/Pagination'
    RouteRead:
      type: object
      required:
      - id
      - type
      - href
      - metadata
      - properties
      properties:
        id:
          type: string
          description: The ID (UUID) of the Route.
          format: uuid
          example: "50982018-bb17-5cb9-bcd4-97f8bbc7dc23"
        type:
          description: The type of the resource.
          type: string
          enum:
          - route
        href:
          description: The URL of the Route.
          type: string
          example: /gateways/{apigatewayId}/routes/50982018-bb17-5cb9-bcd4-97f8bbc7dc23
        metadata:
          $ref: '#/components/schemas/MetadataWithEndpoint'
        properties:
          $ref: '#/components/schemas/Route'
    RouteEnsure:
      type: object
      required:
      - id
      - properties
      properties:
        id:
          type: string
          description: The ID (UUID) of the Route.
          format: uuid
          example: "50982018-bb17-5cb9-bcd4-97f8bbc7dc23"
        metadata:
          description: Metadata
          additionalProperties: true
          example: {}
        properties:
          $ref: '#/components/schemas/Route'
    RouteCreate:
      type: object
      required:
      - properties
      properties:
        metadata:
          description: Metadata
          additionalProperties: true
          example: {}
        properties:
          $ref: '#/components/schemas/Route'
    Cache:
        type: object
        description: |
          The cache configuration for the API Gateway instance. The TTL is 60 seconds.
        properties:
            enable:
                type: boolean
                default: false
                description: To enable caching.
                example: true
            httpMethods:
                type: array
                items:
                    type: string
                    enum:
                      - GET
                      - POST
                      - HEAD
                description: |
                    The HTTP methods that the cache should match.
                example:
                    - GET
            httpCodes:
                type: array
                items:
                    type: integer
                    minimum: 200
                    maximum: 599
                description: |
                    The HTTP status codes that the cache should match.
                example:
                    - 200
    Gateway:
      type: object
      description: |
        An API gateway consists of the generic rules and configurations of an API Gateway.
      required:
        - name
      properties:
        name:
          type: string
          example: "APIGateway-1"
          minLength: 1
          maxLength: 25
          pattern: "^[a-zA-Z0-9 _-]+$"
        logs:
          type: boolean
          default: false
          description: This field enables or disables the collection and reporting of logs for observability of this instance.
        metrics:
          type: boolean
          default: false
          description: This field enables or disables the collection and reporting of metrics for observability of this instance.
        customDomains:
          type: array
          maxItems: 5
          items:
              type: object
              description: |
                The custom domain that the API Gateway instance should listen on.
              properties:
                name:
                  type: string
                  description: The domain name of the distribution. Field is validated as FQDN [according to RFC1123](https://pkg.go.dev/github.com/go-playground/validator/v10#hdr-Hostname_RFC_1123).
                  example: "api.example.com"
                  format: fqdn
                certificateId:
                  type: string
                  format: uuid
                  description: The ID of the certificate to use for the distribution.
                  example: "5a029f4a-72e5-11ec-90d6-0242ac120003"
        cache:
            allOf:
                - $ref: '#/components/schemas/Cache'
                - type: object
                  properties:
                    override:
                        type: boolean
                        default: false
                        description: To enable users to override the cache settings for the routes with the this configuration.
    Route:
      type: object
      description: |
        A route is a rule that maps an incoming request to a specific backend service.
      required:
        - name
        - type
        - paths
        - methods
        - upstreams
      properties:
        name:
          type: string
          minLength: 1
          maxLength: 25
          pattern: "^[a-zA-Z0-9 _-]+$"
          description: The name of the route.
        type:
          type: string
          description: This field specifies the protocol used by the ingress to route traffic to the backend service.
          default: http
          x-extensible-enum:
            - http
        paths:
          type: array
          minItems: 1
          items:
            type: string
            format: path
          description: |
            The paths that the route should match.
        methods:
            type: array
            items:
                type: string
                enum:
                  - GET
                  - POST
                  - PUT
                  - DELETE
                  - PATCH
                  - OPTIONS
                  - HEAD
                  - CONNECT
                  - TRACE
            description: |
                The HTTP methods that the route should match.
        websocket:
            type: boolean
            default: false
            description: To enable websocket support.
        upstreams:
            type: array
            minItems: 1
            items:
              required:
                - scheme
                - loadbalancer
                - host
                - port
              type: object
              properties:
                scheme:
                  type: string
                  description: The target URL of the upstream.
                  enum:
                    - http
                    - https
                    - grpc
                    - grpcs
                  default: http
                loadbalancer:
                  type: string
                  description: The load balancer algorithm.
                  x-extensible-enum:
                    - roundrobin
                    - least_connections
                  default: roundrobin
                host:
                    type: string
                    description: The host of the upstream. Field is validated as hostname [according to RFC1123](https://pkg.go.dev/github.com/go-playground/validator/v10#hdr-Hostname_RFC_1123).
                    format: host
                port:
                  type: integer
                  description: The port of the upstream.
                  default: 80
                  minimum: 1
                  maximum: 65535
                weight:
                  type: integer
                  description: Weight with which to split traffic to the upstream.
                  default: 100
        cache:
            $ref: '#/components/schemas/Cache'
      example:
        name: example-route
        type: http
        paths:
            - /foo/*
            - /bar
        methods:
            - GET
            - POST
        websocket: false
        upstreams:
            - scheme: http
              loadbalancer: roundrobin
              host: "www.example.com"
              port: 80
              weight: 100
        cache:
            enable: true
            httpMethods:
                - GET
            httpCodes:
                - 200
    MetadataWithStatus:
      allOf:
        - $ref: '#/components/schemas/Metadata'
        - type: object
          required:
            - status
          properties:
            status:
              type: string
              description: |
                The status of the object. 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 `failureMessage`.
              enum:
                - PROVISIONING
                - DESTROYING
                - AVAILABLE
                - FAILED
              example: "AVAILABLE"
              readOnly: true
            statusMessage:
              type: string
              description: |
                The message of the failure if the status is `FAILED`.
              example: null
              readOnly: true
    MetadataWithEndpoint:
      allOf:
        - $ref: '#/components/schemas/MetadataWithStatus'
        - type: object
          required:
          - publicEndpoint
          properties:
            publicEndpoint:
              type: string
              description: |
                The public endpoint of the API Gateway instance.
              example: "jf8u4tgr73sd-ag.87uhr654gq90.apigateway.de-txl.ionos.com"
              readOnly: true
    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'
    ConflictDependencies:
      description: |
        ### ConflictDependencies
        The resource has dependencies and cannot be deleted. Follow the guidelines to delete the dependencies first.
      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'
